Merge pull request #4324 from FernetMenta/wasapi
[vuplus_xbmc] / lib / DllLibFlac.h
1 #pragma once
2 /*
3  *      Copyright (C) 2005-2013 Team XBMC
4  *      http://xbmc.org
5  *
6  *  This Program is free software; you can redistribute it and/or modify
7  *  it under the terms of the GNU General Public License as published by
8  *  the Free Software Foundation; either version 2, or (at your option)
9  *  any later version.
10  *
11  *  This Program is distributed in the hope that it will be useful,
12  *  but WITHOUT ANY WARRANTY; without even the implied warranty of
13  *  MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
14  *  GNU General Public License for more details.
15  *
16  *  You should have received a copy of the GNU General Public License
17  *  along with XBMC; see the file COPYING.  If not, see
18  *  <http://www.gnu.org/licenses/>.
19  *
20  */
21
22 #if (defined HAVE_CONFIG_H) && (!defined WIN32)
23   #include "config.h"
24 #endif
25 #include <FLAC/stream_decoder.h>
26 #include "DynamicDll.h"
27 #include "utils/log.h"
28
29 class DllLibFlacInterface
30 {
31 public:
32     virtual ~DllLibFlacInterface() {}
33     virtual FLAC__StreamDecoder *FLAC__stream_decoder_new()=0;
34     virtual void   FLAC__stream_decoder_delete(FLAC__StreamDecoder *decoder)=0;
35     virtual FLAC__StreamDecoderInitStatus FLAC__stream_decoder_init_stream(
36         FLAC__StreamDecoder *decoder,
37         FLAC__StreamDecoderReadCallback read_callback,
38         FLAC__StreamDecoderSeekCallback seek_callback,
39         FLAC__StreamDecoderTellCallback tell_callback,
40         FLAC__StreamDecoderLengthCallback length_callback,
41         FLAC__StreamDecoderEofCallback eof_callback,
42         FLAC__StreamDecoderWriteCallback write_callback,
43         FLAC__StreamDecoderMetadataCallback metadata_callback,
44         FLAC__StreamDecoderErrorCallback error_callback,
45         void *client_data
46       )=0;
47     virtual FLAC__bool FLAC__stream_decoder_set_md5_checking(FLAC__StreamDecoder *decoder, FLAC__bool value)=0;
48     virtual FLAC__bool FLAC__stream_decoder_set_metadata_respond(FLAC__StreamDecoder *decoder, FLAC__MetadataType type)=0;
49     virtual FLAC__bool FLAC__stream_decoder_set_metadata_respond_application(FLAC__StreamDecoder *decoder, const FLAC__byte id[4])=0;
50     virtual FLAC__bool FLAC__stream_decoder_set_metadata_respond_all(FLAC__StreamDecoder *decoder)=0;
51     virtual FLAC__bool FLAC__stream_decoder_set_metadata_ignore(FLAC__StreamDecoder *decoder, FLAC__MetadataType type)=0;
52     virtual FLAC__bool FLAC__stream_decoder_set_metadata_ignore_application(FLAC__StreamDecoder *decoder, const FLAC__byte id[4])=0;
53     virtual FLAC__bool FLAC__stream_decoder_set_metadata_ignore_all(FLAC__StreamDecoder *decoder)=0;
54     virtual FLAC__StreamDecoderState FLAC__stream_decoder_get_state(const FLAC__StreamDecoder *decoder)=0;
55     virtual const char *FLAC__stream_decoder_get_resolved_state_string(const FLAC__StreamDecoder *decoder)=0;
56     virtual FLAC__bool FLAC__stream_decoder_get_md5_checking(const FLAC__StreamDecoder *decoder)=0;
57     virtual FLAC__uint64 FLAC__stream_decoder_get_total_samples(const FLAC__StreamDecoder *decoder)=0;
58     virtual unsigned FLAC__stream_decoder_get_channels(const FLAC__StreamDecoder *decoder)=0;
59     virtual FLAC__ChannelAssignment FLAC__stream_decoder_get_channel_assignment(const FLAC__StreamDecoder *decoder)=0;
60     virtual unsigned FLAC__stream_decoder_get_bits_per_sample(const FLAC__StreamDecoder *decoder)=0;
61     virtual unsigned FLAC__stream_decoder_get_sample_rate(const FLAC__StreamDecoder *decoder)=0;
62     virtual unsigned FLAC__stream_decoder_get_blocksize(const FLAC__StreamDecoder *decoder)=0;
63     virtual FLAC__bool FLAC__stream_decoder_get_decode_position(const FLAC__StreamDecoder *decoder, FLAC__uint64 *position)=0;
64     virtual FLAC__bool FLAC__stream_decoder_finish(FLAC__StreamDecoder *decoder)=0;
65     virtual FLAC__bool FLAC__stream_decoder_flush(FLAC__StreamDecoder *decoder)=0;
66     virtual FLAC__bool FLAC__stream_decoder_reset(FLAC__StreamDecoder *decoder)=0;
67     virtual FLAC_API FLAC__bool FLAC__stream_decoder_process_single(FLAC__StreamDecoder *decoder)=0;
68     virtual FLAC__bool FLAC__stream_decoder_process_until_end_of_metadata(FLAC__StreamDecoder *decoder)=0;
69     virtual FLAC__bool FLAC__stream_decoder_process_until_end_of_stream(FLAC__StreamDecoder *decoder)=0;
70     virtual FLAC__bool FLAC__stream_decoder_skip_single_frame(FLAC__StreamDecoder *decoder)=0;
71     virtual FLAC__bool FLAC__stream_decoder_seek_absolute(FLAC__StreamDecoder *decoder, FLAC__uint64 sample)=0;
72 };
73
74 class DllLibFlac : public DllDynamic, DllLibFlacInterface
75 {
76   DECLARE_DLL_WRAPPER(DllLibFlac, DLL_PATH_FLAC_CODEC)
77   DEFINE_METHOD0(FLAC__StreamDecoder*, FLAC__stream_decoder_new)
78   DEFINE_METHOD1(void, FLAC__stream_decoder_delete, (FLAC__StreamDecoder *p1))
79   DEFINE_METHOD10(FLAC__StreamDecoderInitStatus, FLAC__stream_decoder_init_stream,
80                  (FLAC__StreamDecoder *p1,
81                   FLAC__StreamDecoderReadCallback p2,
82                   FLAC__StreamDecoderSeekCallback p3,
83                   FLAC__StreamDecoderTellCallback p4,
84                   FLAC__StreamDecoderLengthCallback p5,
85                   FLAC__StreamDecoderEofCallback p6,
86                   FLAC__StreamDecoderWriteCallback p7,
87                   FLAC__StreamDecoderMetadataCallback p8,
88                   FLAC__StreamDecoderErrorCallback p9,
89                   void *p10))
90   DEFINE_METHOD2(FLAC__bool, FLAC__stream_decoder_set_md5_checking, (FLAC__StreamDecoder *p1, FLAC__bool p2))
91   DEFINE_METHOD2(FLAC__bool, FLAC__stream_decoder_set_metadata_respond, (FLAC__StreamDecoder *p1, FLAC__MetadataType p2))
92   DEFINE_METHOD2(FLAC__bool, FLAC__stream_decoder_set_metadata_respond_application, (FLAC__StreamDecoder *p1, const FLAC__byte p2[4]))
93   DEFINE_METHOD1(FLAC__bool, FLAC__stream_decoder_set_metadata_respond_all, (FLAC__StreamDecoder *p1))
94   DEFINE_METHOD2(FLAC__bool, FLAC__stream_decoder_set_metadata_ignore, (FLAC__StreamDecoder *p1, FLAC__MetadataType p2))
95   DEFINE_METHOD2(FLAC__bool, FLAC__stream_decoder_set_metadata_ignore_application, (FLAC__StreamDecoder *p1, const FLAC__byte p2[4]))
96   DEFINE_METHOD1(FLAC__bool, FLAC__stream_decoder_set_metadata_ignore_all, (FLAC__StreamDecoder *p1))
97   DEFINE_METHOD1(FLAC__StreamDecoderState, FLAC__stream_decoder_get_state, (const FLAC__StreamDecoder *p1))
98   DEFINE_METHOD1(const char *, FLAC__stream_decoder_get_resolved_state_string, (const FLAC__StreamDecoder *p1))
99   DEFINE_METHOD1(FLAC__bool, FLAC__stream_decoder_get_md5_checking, (const FLAC__StreamDecoder *p1))
100   DEFINE_METHOD1(FLAC__uint64, FLAC__stream_decoder_get_total_samples, (const FLAC__StreamDecoder *p1))
101   DEFINE_METHOD1(unsigned, FLAC__stream_decoder_get_channels, (const FLAC__StreamDecoder *p1))
102   DEFINE_METHOD1(FLAC__ChannelAssignment, FLAC__stream_decoder_get_channel_assignment, (const FLAC__StreamDecoder *p1))
103   DEFINE_METHOD1(unsigned, FLAC__stream_decoder_get_bits_per_sample, (const FLAC__StreamDecoder *p1))
104   DEFINE_METHOD1(unsigned, FLAC__stream_decoder_get_sample_rate, (const FLAC__StreamDecoder *p1))
105   DEFINE_METHOD1(unsigned, FLAC__stream_decoder_get_blocksize, (const FLAC__StreamDecoder *p1))
106   DEFINE_METHOD2(FLAC__bool, FLAC__stream_decoder_get_decode_position, (const FLAC__StreamDecoder *p1, FLAC__uint64 *p2))
107   DEFINE_METHOD1(FLAC__bool, FLAC__stream_decoder_finish, (FLAC__StreamDecoder *p1))
108   DEFINE_METHOD1(FLAC__bool, FLAC__stream_decoder_flush, (FLAC__StreamDecoder *p1))
109   DEFINE_METHOD1(FLAC__bool, FLAC__stream_decoder_reset, (FLAC__StreamDecoder *p1))
110   DEFINE_METHOD1(FLAC__bool, FLAC__stream_decoder_process_single, (FLAC__StreamDecoder *p1))
111   DEFINE_METHOD1(FLAC__bool, FLAC__stream_decoder_process_until_end_of_metadata, (FLAC__StreamDecoder *p1))
112   DEFINE_METHOD1(FLAC__bool, FLAC__stream_decoder_process_until_end_of_stream, (FLAC__StreamDecoder *p1))
113   DEFINE_METHOD1(FLAC__bool, FLAC__stream_decoder_skip_single_frame, (FLAC__StreamDecoder *p1))
114   DEFINE_METHOD2(FLAC__bool, FLAC__stream_decoder_seek_absolute, (FLAC__StreamDecoder *p1, FLAC__uint64 p2))
115
116   BEGIN_METHOD_RESOLVE()
117     RESOLVE_METHOD(FLAC__stream_decoder_new)
118     RESOLVE_METHOD(FLAC__stream_decoder_delete)
119     RESOLVE_METHOD(FLAC__stream_decoder_init_stream)
120     RESOLVE_METHOD(FLAC__stream_decoder_set_md5_checking)
121     RESOLVE_METHOD(FLAC__stream_decoder_set_metadata_respond)
122     RESOLVE_METHOD(FLAC__stream_decoder_set_metadata_respond_application)
123     RESOLVE_METHOD(FLAC__stream_decoder_set_metadata_respond_all)
124     RESOLVE_METHOD(FLAC__stream_decoder_set_metadata_ignore)
125     RESOLVE_METHOD(FLAC__stream_decoder_set_metadata_ignore_application)
126     RESOLVE_METHOD(FLAC__stream_decoder_set_metadata_ignore_all)
127     RESOLVE_METHOD(FLAC__stream_decoder_get_state)
128     RESOLVE_METHOD(FLAC__stream_decoder_get_resolved_state_string)
129     RESOLVE_METHOD(FLAC__stream_decoder_get_md5_checking)
130     RESOLVE_METHOD(FLAC__stream_decoder_get_total_samples)
131     RESOLVE_METHOD(FLAC__stream_decoder_get_channels)
132     RESOLVE_METHOD(FLAC__stream_decoder_get_channel_assignment)
133     RESOLVE_METHOD(FLAC__stream_decoder_get_bits_per_sample)
134     RESOLVE_METHOD(FLAC__stream_decoder_get_sample_rate)
135     RESOLVE_METHOD(FLAC__stream_decoder_get_blocksize)
136     RESOLVE_METHOD(FLAC__stream_decoder_get_decode_position)
137     RESOLVE_METHOD(FLAC__stream_decoder_finish)
138     RESOLVE_METHOD(FLAC__stream_decoder_flush)
139     RESOLVE_METHOD(FLAC__stream_decoder_reset)
140     RESOLVE_METHOD(FLAC__stream_decoder_process_single)
141     RESOLVE_METHOD(FLAC__stream_decoder_process_until_end_of_metadata)
142     RESOLVE_METHOD(FLAC__stream_decoder_process_until_end_of_stream)
143     RESOLVE_METHOD(FLAC__stream_decoder_skip_single_frame)
144     RESOLVE_METHOD(FLAC__stream_decoder_seek_absolute)
145   END_METHOD_RESOLVE()
146 };
147