• Home
  • Line#
  • Scopes#
  • Navigate#
  • Raw
  • Download
1 /*
2  *  LAME MP3 encoder for DirectShow
3  *  Interface definition
4  *
5  *  Copyright (c) 2000-2005 Marie Orlova, Peter Gubanov, Vitaly Ivanov, Elecard Ltd.
6  *
7  * This library is free software; you can redistribute it and/or
8  * modify it under the terms of the GNU Library General Public
9  * License as published by the Free Software Foundation; either
10  * version 2 of the License, or (at your option) any later version.
11  *
12  * This library is distributed in the hope that it will be useful,
13  * but WITHOUT ANY WARRANTY; without even the implied warranty of
14  * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
15  * Library General Public License for more details.
16  *
17  * You should have received a copy of the GNU Library General Public
18  * License along with this library; if not, write to the
19  * Free Software Foundation, Inc., 59 Temple Place - Suite 330,
20  * Boston, MA 02111-1307, USA.
21  */
22 
23 // A custom interface to allow the user to modify audio
24 // encoder properties
25 #ifndef __IAUDIOPROPERTIES__
26 #define __IAUDIOPROPERTIES__
27 #ifdef __cplusplus
28 extern "C" {
29 #endif
30     // {ca7e9ef0-1cbe-11d3-8d29-00a0c94bbfee}
31     DEFINE_GUID(IID_IAudioEncoderProperties,
32     0xca7e9ef0, 0x1cbe, 0x11d3, 0x8d, 0x29, 0x00, 0xa0, 0xc9, 0x4b, 0xbf, 0xee);
33     //
34     // Configuring MPEG audio encoder parameters with unspecified
35     // input stream type may lead to misbehaviour and confusing
36     // results. In most cases the specified parameters will be
37     // overridden by defaults for the input media type.
38     // To archive proper results use this interface on the
39     // audio encoder filter with input pin connected to the valid
40     // source.
41     //
DECLARE_INTERFACE_(IAudioEncoderProperties,IUnknown)42     DECLARE_INTERFACE_(IAudioEncoderProperties, IUnknown)
43     {
44         // Is PES output enabled? Return TRUE or FALSE
45         STDMETHOD(get_PESOutputEnabled) (THIS_
46             DWORD *dwEnabled
47         ) PURE;
48         // Enable/disable PES output
49         STDMETHOD(set_PESOutputEnabled) (THIS_
50             DWORD dwEnabled
51         ) PURE;
52         // Get target compression bitrate in Kbits/s
53         STDMETHOD(get_Bitrate) (THIS_
54             DWORD *dwBitrate
55         ) PURE;
56         // Set target compression bitrate in Kbits/s
57         // Not all numbers available! See spec for details!
58         STDMETHOD(set_Bitrate) (THIS_
59             DWORD dwBitrate
60         ) PURE;
61         // Get variable bitrate flag
62         STDMETHOD(get_Variable) (THIS_
63             DWORD *dwVariable
64         ) PURE;
65         // Set variable bitrate flag
66         STDMETHOD(set_Variable) (THIS_
67             DWORD dwVariable
68         ) PURE;
69         // Get variable bitrate in Kbits/s
70         STDMETHOD(get_VariableMin) (THIS_
71             DWORD *dwmin
72         ) PURE;
73         // Set variable bitrate in Kbits/s
74         // Not all numbers available! See spec for details!
75         STDMETHOD(set_VariableMin) (THIS_
76             DWORD dwmin
77         ) PURE;
78         // Get variable bitrate in Kbits/s
79         STDMETHOD(get_VariableMax) (THIS_
80             DWORD *dwmax
81         ) PURE;
82         // Set variable bitrate in Kbits/s
83         // Not all numbers available! See spec for details!
84         STDMETHOD(set_VariableMax) (THIS_
85             DWORD dwmax
86         ) PURE;
87         // Get compression quality
88         STDMETHOD(get_Quality) (THIS_
89             DWORD *dwQuality
90         ) PURE;
91         // Set compression quality
92         // Not all numbers available! See spec for details!
93         STDMETHOD(set_Quality) (THIS_
94             DWORD dwQuality
95         ) PURE;
96         // Get VBR quality
97         STDMETHOD(get_VariableQ) (THIS_
98             DWORD *dwVBRq
99         ) PURE;
100         // Set VBR quality
101         // Not all numbers available! See spec for details!
102         STDMETHOD(set_VariableQ) (THIS_
103             DWORD dwVBRq
104         ) PURE;
105         // Get source sample rate. Return E_FAIL if input pin
106         // in not connected.
107         STDMETHOD(get_SourceSampleRate) (THIS_
108             DWORD *dwSampleRate
109         ) PURE;
110         // Get source number of channels. Return E_FAIL if
111         // input pin is not connected.
112         STDMETHOD(get_SourceChannels) (THIS_
113             DWORD *dwChannels
114         ) PURE;
115         // Get sample rate for compressed audio bitstream
116         STDMETHOD(get_SampleRate) (THIS_
117             DWORD *dwSampleRate
118         ) PURE;
119         // Set sample rate. See genaudio spec for details
120         STDMETHOD(set_SampleRate) (THIS_
121             DWORD dwSampleRate
122         ) PURE;
123         // Get channel mode. See genaudio.h for details
124         STDMETHOD(get_ChannelMode) (THIS_
125             DWORD *dwChannelMode
126         ) PURE;
127         // Set channel mode
128         STDMETHOD(set_ChannelMode) (THIS_
129             DWORD dwChannelMode
130         ) PURE;
131         // Is CRC enabled?
132         STDMETHOD(get_CRCFlag) (THIS_
133             DWORD *dwFlag
134         ) PURE;
135         // Enable/disable CRC
136         STDMETHOD(set_CRCFlag) (THIS_
137             DWORD dwFlag
138         ) PURE;
139         // Force mono
140         STDMETHOD(get_ForceMono) (THIS_
141             DWORD *dwFlag
142         ) PURE;
143         // Force mono
144         STDMETHOD(set_ForceMono) (THIS_
145             DWORD dwFlag
146         ) PURE;
147         // Set duration
148         STDMETHOD(get_SetDuration) (THIS_
149             DWORD *dwFlag
150         ) PURE;
151         // Set duration
152         STDMETHOD(set_SetDuration) (THIS_
153             DWORD dwFlag
154         ) PURE;
155         // Control 'original' flag
156         STDMETHOD(get_OriginalFlag) (THIS_
157             DWORD *dwFlag
158         ) PURE;
159         STDMETHOD(set_OriginalFlag) (THIS_
160             DWORD dwFlag
161             ) PURE;
162         // Control 'copyright' flag
163         STDMETHOD(get_CopyrightFlag) (THIS_
164             DWORD *dwFlag
165         ) PURE;
166         STDMETHOD(set_CopyrightFlag) (THIS_
167             DWORD dwFlag
168         ) PURE;
169         // Control 'Enforce VBR Minimum bitrate' flag
170         STDMETHOD(get_EnforceVBRmin) (THIS_
171             DWORD *dwFlag
172         ) PURE;
173         STDMETHOD(set_EnforceVBRmin) (THIS_
174             DWORD dwFlag
175         ) PURE;
176         // Control 'Voice' flag
177         STDMETHOD(get_VoiceMode) (THIS_
178             DWORD *dwFlag
179         ) PURE;
180         STDMETHOD(set_VoiceMode) (THIS_
181             DWORD dwFlag
182         ) PURE;
183         // Control 'Keep All Frequencies' flag
184         STDMETHOD(get_KeepAllFreq) (THIS_
185             DWORD *dwFlag
186         ) PURE;
187         STDMETHOD(set_KeepAllFreq) (THIS_
188             DWORD dwFlag
189         ) PURE;
190         // Control 'Strict ISO complience' flag
191         STDMETHOD(get_StrictISO) (THIS_
192             DWORD *dwFlag
193         ) PURE;
194         STDMETHOD(set_StrictISO) (THIS_
195             DWORD dwFlag
196         ) PURE;
197         // Control 'Disable short block' flag
198         STDMETHOD(get_NoShortBlock) (THIS_
199             DWORD *dwDisable
200         ) PURE;
201         STDMETHOD(set_NoShortBlock) (THIS_
202             DWORD dwDisable
203         ) PURE;
204         // Control 'Xing VBR Tag' flag
205         STDMETHOD(get_XingTag) (THIS_
206             DWORD *dwXingTag
207         ) PURE;
208         STDMETHOD(set_XingTag) (THIS_
209             DWORD dwXingTag
210         ) PURE;
211         // Control 'Forced mid/ side stereo' flag
212         STDMETHOD(get_ForceMS) (THIS_
213             DWORD *dwFlag
214         ) PURE;
215         STDMETHOD(set_ForceMS) (THIS_
216             DWORD dwFlag
217         ) PURE;
218         // Control 'ModeFixed' flag
219         STDMETHOD(get_ModeFixed) (THIS_
220             DWORD *dwFlag
221         ) PURE;
222         STDMETHOD(set_ModeFixed) (THIS_
223             DWORD dwFlag
224         ) PURE;
225 
226         //Receive the block of encoder
227         //configuration parametres
228         STDMETHOD(get_ParameterBlockSize) (THIS_
229             BYTE *pcBlock, DWORD *pdwSize
230         ) PURE;
231         // Set encoder configuration parametres
232         STDMETHOD(set_ParameterBlockSize) (THIS_
233             BYTE *pcBlock, DWORD dwSize
234         ) PURE;
235         // Set default audio encoder parameters depending
236         // on current input stream type
237         STDMETHOD(DefaultAudioEncoderProperties) (THIS_
238         ) PURE;
239         // By default the modified properties are not saved to
240         // the registry immediately, so the filter needs to be
241         // forced to do this. Omitting this step may lead to
242         // misbehavior and confusing results.
243         STDMETHOD(LoadAudioEncoderPropertiesFromRegistry) (THIS_
244         ) PURE;
245         STDMETHOD(SaveAudioEncoderPropertiesToRegistry) (THIS_
246         ) PURE;
247         // Determine whether the filter can be configured. If this
248         // function returns E_FAIL then input format hasn't been
249         // specified and filter behavior is unpredictable. If S_OK,
250         // the filter could be configured with correct values.
251         STDMETHOD(InputTypeDefined) (THIS_
252         ) PURE;
253         // Reconnects output pin (crucial for Fraunhofer MPEG Layer-3 Decoder)
254         STDMETHOD(ApplyChanges) (THIS_
255         ) PURE;
256 
257         // Allow output sample overlap in terms of DirectShow
258         // timestamps (i.e. when sample's start time is less
259         // than previous sample's end time). Avi Mux doesn't like this
260         STDMETHOD(set_SampleOverlap) (THIS_
261             DWORD dwFlag
262         ) PURE;
263         STDMETHOD(get_SampleOverlap) (THIS_
264             DWORD *dwFlag
265         ) PURE;
266     };
267 #ifdef __cplusplus
268 }
269 #endif
270 #endif // __IAUDIOPROPERTIES__
271 
272 
273 
274