/* * LAME MP3 encoder for DirectShow * Interface definition * * Copyright (c) 2000-2005 Marie Orlova, Peter Gubanov, Vitaly Ivanov, Elecard Ltd. * * This library is free software; you can redistribute it and/or * modify it under the terms of the GNU Library General Public * License as published by the Free Software Foundation; either * version 2 of the License, or (at your option) any later version. * * This library is distributed in the hope that it will be useful, * but WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU * Library General Public License for more details. * * You should have received a copy of the GNU Library General Public * License along with this library; if not, write to the * Free Software Foundation, Inc., 59 Temple Place - Suite 330, * Boston, MA 02111-1307, USA. */ // A custom interface to allow the user to modify audio // encoder properties #ifndef __IAUDIOPROPERTIES__ #define __IAUDIOPROPERTIES__ #ifdef __cplusplus extern "C" { #endif // {ca7e9ef0-1cbe-11d3-8d29-00a0c94bbfee} DEFINE_GUID(IID_IAudioEncoderProperties, 0xca7e9ef0, 0x1cbe, 0x11d3, 0x8d, 0x29, 0x00, 0xa0, 0xc9, 0x4b, 0xbf, 0xee); // // Configuring MPEG audio encoder parameters with unspecified // input stream type may lead to misbehaviour and confusing // results. In most cases the specified parameters will be // overridden by defaults for the input media type. // To archive proper results use this interface on the // audio encoder filter with input pin connected to the valid // source. // DECLARE_INTERFACE_(IAudioEncoderProperties, IUnknown) { // Is PES output enabled? Return TRUE or FALSE STDMETHOD(get_PESOutputEnabled) (THIS_ DWORD *dwEnabled ) PURE; // Enable/disable PES output STDMETHOD(set_PESOutputEnabled) (THIS_ DWORD dwEnabled ) PURE; // Get target compression bitrate in Kbits/s STDMETHOD(get_Bitrate) (THIS_ DWORD *dwBitrate ) PURE; // Set target compression bitrate in Kbits/s // Not all numbers available! See spec for details! STDMETHOD(set_Bitrate) (THIS_ DWORD dwBitrate ) PURE; // Get variable bitrate flag STDMETHOD(get_Variable) (THIS_ DWORD *dwVariable ) PURE; // Set variable bitrate flag STDMETHOD(set_Variable) (THIS_ DWORD dwVariable ) PURE; // Get variable bitrate in Kbits/s STDMETHOD(get_VariableMin) (THIS_ DWORD *dwmin ) PURE; // Set variable bitrate in Kbits/s // Not all numbers available! See spec for details! STDMETHOD(set_VariableMin) (THIS_ DWORD dwmin ) PURE; // Get variable bitrate in Kbits/s STDMETHOD(get_VariableMax) (THIS_ DWORD *dwmax ) PURE; // Set variable bitrate in Kbits/s // Not all numbers available! See spec for details! STDMETHOD(set_VariableMax) (THIS_ DWORD dwmax ) PURE; // Get compression quality STDMETHOD(get_Quality) (THIS_ DWORD *dwQuality ) PURE; // Set compression quality // Not all numbers available! See spec for details! STDMETHOD(set_Quality) (THIS_ DWORD dwQuality ) PURE; // Get VBR quality STDMETHOD(get_VariableQ) (THIS_ DWORD *dwVBRq ) PURE; // Set VBR quality // Not all numbers available! See spec for details! STDMETHOD(set_VariableQ) (THIS_ DWORD dwVBRq ) PURE; // Get source sample rate. Return E_FAIL if input pin // in not connected. STDMETHOD(get_SourceSampleRate) (THIS_ DWORD *dwSampleRate ) PURE; // Get source number of channels. Return E_FAIL if // input pin is not connected. STDMETHOD(get_SourceChannels) (THIS_ DWORD *dwChannels ) PURE; // Get sample rate for compressed audio bitstream STDMETHOD(get_SampleRate) (THIS_ DWORD *dwSampleRate ) PURE; // Set sample rate. See genaudio spec for details STDMETHOD(set_SampleRate) (THIS_ DWORD dwSampleRate ) PURE; // Get channel mode. See genaudio.h for details STDMETHOD(get_ChannelMode) (THIS_ DWORD *dwChannelMode ) PURE; // Set channel mode STDMETHOD(set_ChannelMode) (THIS_ DWORD dwChannelMode ) PURE; // Is CRC enabled? STDMETHOD(get_CRCFlag) (THIS_ DWORD *dwFlag ) PURE; // Enable/disable CRC STDMETHOD(set_CRCFlag) (THIS_ DWORD dwFlag ) PURE; // Force mono STDMETHOD(get_ForceMono) (THIS_ DWORD *dwFlag ) PURE; // Force mono STDMETHOD(set_ForceMono) (THIS_ DWORD dwFlag ) PURE; // Set duration STDMETHOD(get_SetDuration) (THIS_ DWORD *dwFlag ) PURE; // Set duration STDMETHOD(set_SetDuration) (THIS_ DWORD dwFlag ) PURE; // Control 'original' flag STDMETHOD(get_OriginalFlag) (THIS_ DWORD *dwFlag ) PURE; STDMETHOD(set_OriginalFlag) (THIS_ DWORD dwFlag ) PURE; // Control 'copyright' flag STDMETHOD(get_CopyrightFlag) (THIS_ DWORD *dwFlag ) PURE; STDMETHOD(set_CopyrightFlag) (THIS_ DWORD dwFlag ) PURE; // Control 'Enforce VBR Minimum bitrate' flag STDMETHOD(get_EnforceVBRmin) (THIS_ DWORD *dwFlag ) PURE; STDMETHOD(set_EnforceVBRmin) (THIS_ DWORD dwFlag ) PURE; // Control 'Voice' flag STDMETHOD(get_VoiceMode) (THIS_ DWORD *dwFlag ) PURE; STDMETHOD(set_VoiceMode) (THIS_ DWORD dwFlag ) PURE; // Control 'Keep All Frequencies' flag STDMETHOD(get_KeepAllFreq) (THIS_ DWORD *dwFlag ) PURE; STDMETHOD(set_KeepAllFreq) (THIS_ DWORD dwFlag ) PURE; // Control 'Strict ISO complience' flag STDMETHOD(get_StrictISO) (THIS_ DWORD *dwFlag ) PURE; STDMETHOD(set_StrictISO) (THIS_ DWORD dwFlag ) PURE; // Control 'Disable short block' flag STDMETHOD(get_NoShortBlock) (THIS_ DWORD *dwDisable ) PURE; STDMETHOD(set_NoShortBlock) (THIS_ DWORD dwDisable ) PURE; // Control 'Xing VBR Tag' flag STDMETHOD(get_XingTag) (THIS_ DWORD *dwXingTag ) PURE; STDMETHOD(set_XingTag) (THIS_ DWORD dwXingTag ) PURE; // Control 'Forced mid/ side stereo' flag STDMETHOD(get_ForceMS) (THIS_ DWORD *dwFlag ) PURE; STDMETHOD(set_ForceMS) (THIS_ DWORD dwFlag ) PURE; // Control 'ModeFixed' flag STDMETHOD(get_ModeFixed) (THIS_ DWORD *dwFlag ) PURE; STDMETHOD(set_ModeFixed) (THIS_ DWORD dwFlag ) PURE; //Receive the block of encoder //configuration parametres STDMETHOD(get_ParameterBlockSize) (THIS_ BYTE *pcBlock, DWORD *pdwSize ) PURE; // Set encoder configuration parametres STDMETHOD(set_ParameterBlockSize) (THIS_ BYTE *pcBlock, DWORD dwSize ) PURE; // Set default audio encoder parameters depending // on current input stream type STDMETHOD(DefaultAudioEncoderProperties) (THIS_ ) PURE; // By default the modified properties are not saved to // the registry immediately, so the filter needs to be // forced to do this. Omitting this step may lead to // misbehavior and confusing results. STDMETHOD(LoadAudioEncoderPropertiesFromRegistry) (THIS_ ) PURE; STDMETHOD(SaveAudioEncoderPropertiesToRegistry) (THIS_ ) PURE; // Determine whether the filter can be configured. If this // function returns E_FAIL then input format hasn't been // specified and filter behavior is unpredictable. If S_OK, // the filter could be configured with correct values. STDMETHOD(InputTypeDefined) (THIS_ ) PURE; // Reconnects output pin (crucial for Fraunhofer MPEG Layer-3 Decoder) STDMETHOD(ApplyChanges) (THIS_ ) PURE; // Allow output sample overlap in terms of DirectShow // timestamps (i.e. when sample's start time is less // than previous sample's end time). Avi Mux doesn't like this STDMETHOD(set_SampleOverlap) (THIS_ DWORD dwFlag ) PURE; STDMETHOD(get_SampleOverlap) (THIS_ DWORD *dwFlag ) PURE; }; #ifdef __cplusplus } #endif #endif // __IAUDIOPROPERTIES__