Blame dshow/iaudioprops.h

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