blob: 481f5e05e08656e9f15d528d92c295e24d616e6c [file] [log] [blame]
/*
* 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__