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