#pragma option push -b -a8 -pc -A- -w-pun /*P_O_Push*/


/* this ALWAYS GENERATED file contains the definitions for the interfaces */


 /* File created by MIDL compiler version 8.00.0611 */
/* @@MIDL_FILE_HEADING(  ) */



/* verify that the <rpcndr.h> version is high enough to compile this file*/
#ifndef __REQUIRED_RPCNDR_H_VERSION__
#define __REQUIRED_RPCNDR_H_VERSION__ 500
#endif

/* verify that the <rpcsal.h> version is high enough to compile this file*/
#ifndef __REQUIRED_RPCSAL_H_VERSION__
#define __REQUIRED_RPCSAL_H_VERSION__ 100
#endif

#include "rpc.h"
#include "rpcndr.h"

#ifndef __RPCNDR_H_VERSION__
#error this stub requires an updated version of <rpcndr.h>
#endif /* __RPCNDR_H_VERSION__ */

#ifndef COM_NO_WINDOWS_H
#include "windows.h"
#include "ole2.h"
#endif /*COM_NO_WINDOWS_H*/

#ifndef __audioenginebaseapo_h__
#define __audioenginebaseapo_h__

#if defined(_MSC_VER) && (_MSC_VER >= 1020)
#pragma once
#endif

/* Forward Declarations */ 

#ifndef __IAudioProcessingObjectRT_FWD_DEFINED__
#define __IAudioProcessingObjectRT_FWD_DEFINED__
typedef interface IAudioProcessingObjectRT IAudioProcessingObjectRT;

#endif 	/* __IAudioProcessingObjectRT_FWD_DEFINED__ */


#ifndef __IAudioProcessingObjectVBR_FWD_DEFINED__
#define __IAudioProcessingObjectVBR_FWD_DEFINED__
typedef interface IAudioProcessingObjectVBR IAudioProcessingObjectVBR;

#endif 	/* __IAudioProcessingObjectVBR_FWD_DEFINED__ */


#ifndef __IAudioProcessingObjectConfiguration_FWD_DEFINED__
#define __IAudioProcessingObjectConfiguration_FWD_DEFINED__
typedef interface IAudioProcessingObjectConfiguration IAudioProcessingObjectConfiguration;

#endif 	/* __IAudioProcessingObjectConfiguration_FWD_DEFINED__ */


#ifndef __IAudioProcessingObject_FWD_DEFINED__
#define __IAudioProcessingObject_FWD_DEFINED__
typedef interface IAudioProcessingObject IAudioProcessingObject;

#endif 	/* __IAudioProcessingObject_FWD_DEFINED__ */


#ifndef __IAudioSystemEffects_FWD_DEFINED__
#define __IAudioSystemEffects_FWD_DEFINED__
typedef interface IAudioSystemEffects IAudioSystemEffects;

#endif 	/* __IAudioSystemEffects_FWD_DEFINED__ */


#ifndef __IAudioSystemEffects2_FWD_DEFINED__
#define __IAudioSystemEffects2_FWD_DEFINED__
typedef interface IAudioSystemEffects2 IAudioSystemEffects2;

#endif 	/* __IAudioSystemEffects2_FWD_DEFINED__ */


#ifndef __IAudioSystemEffectsCustomFormats_FWD_DEFINED__
#define __IAudioSystemEffectsCustomFormats_FWD_DEFINED__
typedef interface IAudioSystemEffectsCustomFormats IAudioSystemEffectsCustomFormats;

#endif 	/* __IAudioSystemEffectsCustomFormats_FWD_DEFINED__ */


/* header files for imported files */
#include "oaidl.h"
#include "ocidl.h"
#include "mmdeviceapi.h"
#include "audiomediatype.h"
#include "AudioAPOTypes.h"

#ifdef __cplusplus
extern "C"{
#endif 


/* interface __MIDL_itf_audioenginebaseapo_0000_0000 */
/* [local] */ 

#include <winapifamily.h>
#pragma region Desktop Family
#if WINAPI_FAMILY_PARTITION(WINAPI_PARTITION_DESKTOP)
//
// Error Codes for APO
// The facility code for APOs is 0x87D.
//
// The object has already been initialized.
#define APOERR_ALREADY_INITIALIZED               _HRESULT_TYPEDEF_(0x887D0001)
// Object/structure is not initialized.
#define APOERR_NOT_INITIALIZED                   _HRESULT_TYPEDEF_(0x887D0002)
// a pin supporting the format cannot be found.
#define APOERR_FORMAT_NOT_SUPPORTED              _HRESULT_TYPEDEF_(0x887D0003)
// Invalid CLSID in an APO Initialization structure
#define APOERR_INVALID_APO_CLSID                 _HRESULT_TYPEDEF_(0x887D0004)
// Buffers overlap on an APO that does not accept in-place buffers.
#define APOERR_BUFFERS_OVERLAP                   _HRESULT_TYPEDEF_(0x887D0005)
// APO is already in an unlocked state
#define APOERR_ALREADY_UNLOCKED                  _HRESULT_TYPEDEF_(0x887D0006)
// number of input or output connections not valid on this APO
#define APOERR_NUM_CONNECTIONS_INVALID           _HRESULT_TYPEDEF_(0x887D0007)
// Output maxFrameCount not large enough.
#define APOERR_INVALID_OUTPUT_MAXFRAMECOUNT      _HRESULT_TYPEDEF_(0x887D0008)
// Invalid connection format for this operation
#define APOERR_INVALID_CONNECTION_FORMAT         _HRESULT_TYPEDEF_(0x887D0009)
// APO is locked ready to process and can not be changed
#define APOERR_APO_LOCKED                        _HRESULT_TYPEDEF_(0x887D000A)
// Invalid coefficient count
#define APOERR_INVALID_COEFFCOUNT                _HRESULT_TYPEDEF_(0x887D000B)
// Invalid coefficient
#define APOERR_INVALID_COEFFICIENT               _HRESULT_TYPEDEF_(0x887D000C)
// an invalid curve parameter was specified
#define APOERR_INVALID_CURVE_PARAM               _HRESULT_TYPEDEF_(0x887D000D)
//
// Signatures for data structures.
//
#define APO_CONNECTION_DESCRIPTOR_SIGNATURE     'ACDS'
#define APO_CONNECTION_PROPERTY_SIGNATURE       'ACPS'

// Min and max framerates for the engine
#define AUDIO_MIN_FRAMERATE                    10.0     // Minimum frame rate for APOs
#define AUDIO_MAX_FRAMERATE                     384000.0 // Maximum frame rate for APOs

// Min and max # of channels (samples per frame) for the APOs
#define AUDIO_MIN_CHANNELS                      1    // Current minimum number of channels for APOs
#define AUDIO_MAX_CHANNELS                      4096 // Current maximum number of channels for APOs

//-----------------------------------------------------------------------------

typedef 
enum APO_CONNECTION_BUFFER_TYPE
    {
        APO_CONNECTION_BUFFER_TYPE_ALLOCATED	= 0,
        APO_CONNECTION_BUFFER_TYPE_EXTERNAL	= 1,
        APO_CONNECTION_BUFFER_TYPE_DEPENDANT	= 2
    } 	APO_CONNECTION_BUFFER_TYPE;

typedef struct APO_CONNECTION_DESCRIPTOR
    {
    APO_CONNECTION_BUFFER_TYPE Type;
    UINT_PTR pBuffer;
    UINT32 u32MaxFrameCount;
    IAudioMediaType *pFormat;
    UINT32 u32Signature;
    } 	APO_CONNECTION_DESCRIPTOR;

typedef 
enum APO_FLAG
    {
        APO_FLAG_NONE	= 0,
        APO_FLAG_INPLACE	= 0x1,
        APO_FLAG_SAMPLESPERFRAME_MUST_MATCH	= 0x2,
        APO_FLAG_FRAMESPERSECOND_MUST_MATCH	= 0x4,
        APO_FLAG_BITSPERSAMPLE_MUST_MATCH	= 0x8,
        APO_FLAG_MIXER	= 0x10,
        APO_FLAG_DEFAULT	= ( ( APO_FLAG_SAMPLESPERFRAME_MUST_MATCH | APO_FLAG_FRAMESPERSECOND_MUST_MATCH )  | APO_FLAG_BITSPERSAMPLE_MUST_MATCH ) 
    } 	APO_FLAG;

typedef struct APO_REG_PROPERTIES
    {
    CLSID clsid;
    APO_FLAG Flags;
    WCHAR szFriendlyName[ 256 ];
    WCHAR szCopyrightInfo[ 256 ];
    UINT32 u32MajorVersion;
    UINT32 u32MinorVersion;
    UINT32 u32MinInputConnections;
    UINT32 u32MaxInputConnections;
    UINT32 u32MinOutputConnections;
    UINT32 u32MaxOutputConnections;
    UINT32 u32MaxInstances;
    UINT32 u32NumAPOInterfaces;
    /* [size_is] */ IID iidAPOInterfaceList[ 1 ];
    } 	APO_REG_PROPERTIES;

typedef struct APO_REG_PROPERTIES *PAPO_REG_PROPERTIES;

typedef struct APOInitBaseStruct
    {
    UINT32 cbSize;
    CLSID clsid;
    } 	APOInitBaseStruct;

typedef 
enum AUDIO_FLOW_TYPE
    {
        AUDIO_FLOW_PULL	= 0,
        AUDIO_FLOW_PUSH	= ( AUDIO_FLOW_PULL + 1 ) 
    } 	AUDIO_FLOW_TYPE;

typedef 
enum EAudioConstriction
    {
        eAudioConstrictionOff	= 0,
        eAudioConstriction48_16	= ( eAudioConstrictionOff + 1 ) ,
        eAudioConstriction44_16	= ( eAudioConstriction48_16 + 1 ) ,
        eAudioConstriction14_14	= ( eAudioConstriction44_16 + 1 ) ,
        eAudioConstrictionMute	= ( eAudioConstriction14_14 + 1 ) 
    } 	EAudioConstriction;



extern RPC_IF_HANDLE __MIDL_itf_audioenginebaseapo_0000_0000_v0_0_c_ifspec;
extern RPC_IF_HANDLE __MIDL_itf_audioenginebaseapo_0000_0000_v0_0_s_ifspec;

#ifndef __IAudioProcessingObjectRT_INTERFACE_DEFINED__
#define __IAudioProcessingObjectRT_INTERFACE_DEFINED__

/* interface IAudioProcessingObjectRT */
/* [local][unique][uuid][object] */ 


EXTERN_C const IID IID_IAudioProcessingObjectRT;

#if defined(__cplusplus) && !defined(CINTERFACE)
    
    MIDL_INTERFACE("9E1D6A6D-DDBC-4E95-A4C7-AD64BA37846C")
    IAudioProcessingObjectRT : public IUnknown
    {
    public:
        virtual void STDMETHODCALLTYPE APOProcess( 
            /* [annotation][in] */ 
            _In_  UINT32 u32NumInputConnections,
            /* [annotation][in] */ 
            _In_  APO_CONNECTION_PROPERTY **ppInputConnections,
            /* [annotation][in] */ 
            _In_  UINT32 u32NumOutputConnections,
            /* [annotation][out][in] */ 
            _Inout_  APO_CONNECTION_PROPERTY **ppOutputConnections) = 0;
        
        virtual UINT32 STDMETHODCALLTYPE CalcInputFrames( 
            /* [in] */ UINT32 u32OutputFrameCount) = 0;
        
        virtual UINT32 STDMETHODCALLTYPE CalcOutputFrames( 
            /* [annotation][in] */ 
            _In_  UINT32 u32InputFrameCount) = 0;
        
    };
    
    
#else 	/* C style interface */

    typedef struct IAudioProcessingObjectRTVtbl
    {
        BEGIN_INTERFACE
        
        HRESULT ( STDMETHODCALLTYPE *QueryInterface )( 
            IAudioProcessingObjectRT * This,
            /* [in] */ REFIID riid,
            /* [annotation][iid_is][out] */ 
            _COM_Outptr_  void **ppvObject);
        
        ULONG ( STDMETHODCALLTYPE *AddRef )( 
            IAudioProcessingObjectRT * This);
        
        ULONG ( STDMETHODCALLTYPE *Release )( 
            IAudioProcessingObjectRT * This);
        
        void ( STDMETHODCALLTYPE *APOProcess )( 
            IAudioProcessingObjectRT * This,
            /* [annotation][in] */ 
            _In_  UINT32 u32NumInputConnections,
            /* [annotation][in] */ 
            _In_  APO_CONNECTION_PROPERTY **ppInputConnections,
            /* [annotation][in] */ 
            _In_  UINT32 u32NumOutputConnections,
            /* [annotation][out][in] */ 
            _Inout_  APO_CONNECTION_PROPERTY **ppOutputConnections);
        
        UINT32 ( STDMETHODCALLTYPE *CalcInputFrames )( 
            IAudioProcessingObjectRT * This,
            /* [in] */ UINT32 u32OutputFrameCount);
        
        UINT32 ( STDMETHODCALLTYPE *CalcOutputFrames )( 
            IAudioProcessingObjectRT * This,
            /* [annotation][in] */ 
            _In_  UINT32 u32InputFrameCount);
        
        END_INTERFACE
    } IAudioProcessingObjectRTVtbl;

    interface IAudioProcessingObjectRT
    {
        CONST_VTBL struct IAudioProcessingObjectRTVtbl *lpVtbl;
    };

    

#ifdef COBJMACROS


#define IAudioProcessingObjectRT_QueryInterface(This,riid,ppvObject)	\
    ( (This)->lpVtbl -> QueryInterface(This,riid,ppvObject) ) 

#define IAudioProcessingObjectRT_AddRef(This)	\
    ( (This)->lpVtbl -> AddRef(This) ) 

#define IAudioProcessingObjectRT_Release(This)	\
    ( (This)->lpVtbl -> Release(This) ) 


#define IAudioProcessingObjectRT_APOProcess(This,u32NumInputConnections,ppInputConnections,u32NumOutputConnections,ppOutputConnections)	\
    ( (This)->lpVtbl -> APOProcess(This,u32NumInputConnections,ppInputConnections,u32NumOutputConnections,ppOutputConnections) ) 

#define IAudioProcessingObjectRT_CalcInputFrames(This,u32OutputFrameCount)	\
    ( (This)->lpVtbl -> CalcInputFrames(This,u32OutputFrameCount) ) 

#define IAudioProcessingObjectRT_CalcOutputFrames(This,u32InputFrameCount)	\
    ( (This)->lpVtbl -> CalcOutputFrames(This,u32InputFrameCount) ) 

#endif /* COBJMACROS */


#endif 	/* C style interface */




#endif 	/* __IAudioProcessingObjectRT_INTERFACE_DEFINED__ */


#ifndef __IAudioProcessingObjectVBR_INTERFACE_DEFINED__
#define __IAudioProcessingObjectVBR_INTERFACE_DEFINED__

/* interface IAudioProcessingObjectVBR */
/* [unique][uuid][object] */ 


EXTERN_C const IID IID_IAudioProcessingObjectVBR;

#if defined(__cplusplus) && !defined(CINTERFACE)
    
    MIDL_INTERFACE("7ba1db8f-78ad-49cd-9591-f79d80a17c81")
    IAudioProcessingObjectVBR : public IUnknown
    {
    public:
        virtual HRESULT STDMETHODCALLTYPE CalcMaxInputFrames( 
            /* [in] */ UINT32 u32MaxOutputFrameCount,
            /* [out] */ __RPC__out UINT32 *pu32InputFrameCount) = 0;
        
        virtual HRESULT STDMETHODCALLTYPE CalcMaxOutputFrames( 
            /* [in] */ UINT32 u32MaxInputFrameCount,
            /* [out] */ __RPC__out UINT32 *pu32OutputFrameCount) = 0;
        
    };
    
    
#else 	/* C style interface */

    typedef struct IAudioProcessingObjectVBRVtbl
    {
        BEGIN_INTERFACE
        
        HRESULT ( STDMETHODCALLTYPE *QueryInterface )( 
            __RPC__in IAudioProcessingObjectVBR * This,
            /* [in] */ __RPC__in REFIID riid,
            /* [annotation][iid_is][out] */ 
            _COM_Outptr_  void **ppvObject);
        
        ULONG ( STDMETHODCALLTYPE *AddRef )( 
            __RPC__in IAudioProcessingObjectVBR * This);
        
        ULONG ( STDMETHODCALLTYPE *Release )( 
            __RPC__in IAudioProcessingObjectVBR * This);
        
        HRESULT ( STDMETHODCALLTYPE *CalcMaxInputFrames )( 
            __RPC__in IAudioProcessingObjectVBR * This,
            /* [in] */ UINT32 u32MaxOutputFrameCount,
            /* [out] */ __RPC__out UINT32 *pu32InputFrameCount);
        
        HRESULT ( STDMETHODCALLTYPE *CalcMaxOutputFrames )( 
            __RPC__in IAudioProcessingObjectVBR * This,
            /* [in] */ UINT32 u32MaxInputFrameCount,
            /* [out] */ __RPC__out UINT32 *pu32OutputFrameCount);
        
        END_INTERFACE
    } IAudioProcessingObjectVBRVtbl;

    interface IAudioProcessingObjectVBR
    {
        CONST_VTBL struct IAudioProcessingObjectVBRVtbl *lpVtbl;
    };

    

#ifdef COBJMACROS


#define IAudioProcessingObjectVBR_QueryInterface(This,riid,ppvObject)	\
    ( (This)->lpVtbl -> QueryInterface(This,riid,ppvObject) ) 

#define IAudioProcessingObjectVBR_AddRef(This)	\
    ( (This)->lpVtbl -> AddRef(This) ) 

#define IAudioProcessingObjectVBR_Release(This)	\
    ( (This)->lpVtbl -> Release(This) ) 


#define IAudioProcessingObjectVBR_CalcMaxInputFrames(This,u32MaxOutputFrameCount,pu32InputFrameCount)	\
    ( (This)->lpVtbl -> CalcMaxInputFrames(This,u32MaxOutputFrameCount,pu32InputFrameCount) ) 

#define IAudioProcessingObjectVBR_CalcMaxOutputFrames(This,u32MaxInputFrameCount,pu32OutputFrameCount)	\
    ( (This)->lpVtbl -> CalcMaxOutputFrames(This,u32MaxInputFrameCount,pu32OutputFrameCount) ) 

#endif /* COBJMACROS */


#endif 	/* C style interface */




#endif 	/* __IAudioProcessingObjectVBR_INTERFACE_DEFINED__ */


#ifndef __IAudioProcessingObjectConfiguration_INTERFACE_DEFINED__
#define __IAudioProcessingObjectConfiguration_INTERFACE_DEFINED__

/* interface IAudioProcessingObjectConfiguration */
/* [local][unique][uuid][object] */ 


EXTERN_C const IID IID_IAudioProcessingObjectConfiguration;

#if defined(__cplusplus) && !defined(CINTERFACE)
    
    MIDL_INTERFACE("0E5ED805-ABA6-49c3-8F9A-2B8C889C4FA8")
    IAudioProcessingObjectConfiguration : public IUnknown
    {
    public:
        virtual HRESULT STDMETHODCALLTYPE LockForProcess( 
            /* [annotation][in] */ 
            _In_  UINT32 u32NumInputConnections,
            /* [annotation][in] */ 
            _In_  APO_CONNECTION_DESCRIPTOR **ppInputConnections,
            /* [annotation][in] */ 
            _In_  UINT32 u32NumOutputConnections,
            /* [annotation][in] */ 
            _In_  APO_CONNECTION_DESCRIPTOR **ppOutputConnections) = 0;
        
        virtual HRESULT STDMETHODCALLTYPE UnlockForProcess( void) = 0;
        
    };
    
    
#else 	/* C style interface */

    typedef struct IAudioProcessingObjectConfigurationVtbl
    {
        BEGIN_INTERFACE
        
        HRESULT ( STDMETHODCALLTYPE *QueryInterface )( 
            IAudioProcessingObjectConfiguration * This,
            /* [in] */ REFIID riid,
            /* [annotation][iid_is][out] */ 
            _COM_Outptr_  void **ppvObject);
        
        ULONG ( STDMETHODCALLTYPE *AddRef )( 
            IAudioProcessingObjectConfiguration * This);
        
        ULONG ( STDMETHODCALLTYPE *Release )( 
            IAudioProcessingObjectConfiguration * This);
        
        HRESULT ( STDMETHODCALLTYPE *LockForProcess )( 
            IAudioProcessingObjectConfiguration * This,
            /* [annotation][in] */ 
            _In_  UINT32 u32NumInputConnections,
            /* [annotation][in] */ 
            _In_  APO_CONNECTION_DESCRIPTOR **ppInputConnections,
            /* [annotation][in] */ 
            _In_  UINT32 u32NumOutputConnections,
            /* [annotation][in] */ 
            _In_  APO_CONNECTION_DESCRIPTOR **ppOutputConnections);
        
        HRESULT ( STDMETHODCALLTYPE *UnlockForProcess )( 
            IAudioProcessingObjectConfiguration * This);
        
        END_INTERFACE
    } IAudioProcessingObjectConfigurationVtbl;

    interface IAudioProcessingObjectConfiguration
    {
        CONST_VTBL struct IAudioProcessingObjectConfigurationVtbl *lpVtbl;
    };

    

#ifdef COBJMACROS


#define IAudioProcessingObjectConfiguration_QueryInterface(This,riid,ppvObject)	\
    ( (This)->lpVtbl -> QueryInterface(This,riid,ppvObject) ) 

#define IAudioProcessingObjectConfiguration_AddRef(This)	\
    ( (This)->lpVtbl -> AddRef(This) ) 

#define IAudioProcessingObjectConfiguration_Release(This)	\
    ( (This)->lpVtbl -> Release(This) ) 


#define IAudioProcessingObjectConfiguration_LockForProcess(This,u32NumInputConnections,ppInputConnections,u32NumOutputConnections,ppOutputConnections)	\
    ( (This)->lpVtbl -> LockForProcess(This,u32NumInputConnections,ppInputConnections,u32NumOutputConnections,ppOutputConnections) ) 

#define IAudioProcessingObjectConfiguration_UnlockForProcess(This)	\
    ( (This)->lpVtbl -> UnlockForProcess(This) ) 

#endif /* COBJMACROS */


#endif 	/* C style interface */




#endif 	/* __IAudioProcessingObjectConfiguration_INTERFACE_DEFINED__ */


#ifndef __IAudioProcessingObject_INTERFACE_DEFINED__
#define __IAudioProcessingObject_INTERFACE_DEFINED__

/* interface IAudioProcessingObject */
/* [unique][uuid][object] */ 


EXTERN_C const IID IID_IAudioProcessingObject;

#if defined(__cplusplus) && !defined(CINTERFACE)
    
    MIDL_INTERFACE("FD7F2B29-24D0-4b5c-B177-592C39F9CA10")
    IAudioProcessingObject : public IUnknown
    {
    public:
        virtual HRESULT STDMETHODCALLTYPE Reset( void) = 0;
        
        virtual HRESULT STDMETHODCALLTYPE GetLatency( 
            /* [out] */ __RPC__out HNSTIME *pTime) = 0;
        
        virtual HRESULT STDMETHODCALLTYPE GetRegistrationProperties( 
            /* [out] */ __RPC__deref_out_opt APO_REG_PROPERTIES **ppRegProps) = 0;
        
        virtual HRESULT STDMETHODCALLTYPE Initialize( 
            /* [in] */ UINT32 cbDataSize,
            /* [size_is][in] */ __RPC__in_ecount_full(cbDataSize) BYTE *pbyData) = 0;
        
        virtual HRESULT STDMETHODCALLTYPE IsInputFormatSupported( 
            /* [unique][in] */ __RPC__in_opt IAudioMediaType *pOppositeFormat,
            /* [in] */ __RPC__in_opt IAudioMediaType *pRequestedInputFormat,
            /* [out] */ __RPC__deref_out_opt IAudioMediaType **ppSupportedInputFormat) = 0;
        
        virtual HRESULT STDMETHODCALLTYPE IsOutputFormatSupported( 
            /* [unique][in] */ __RPC__in_opt IAudioMediaType *pOppositeFormat,
            /* [in] */ __RPC__in_opt IAudioMediaType *pRequestedOutputFormat,
            /* [out] */ __RPC__deref_out_opt IAudioMediaType **ppSupportedOutputFormat) = 0;
        
        virtual HRESULT STDMETHODCALLTYPE GetInputChannelCount( 
            /* [out] */ __RPC__out UINT32 *pu32ChannelCount) = 0;
        
    };
    
    
#else 	/* C style interface */

    typedef struct IAudioProcessingObjectVtbl
    {
        BEGIN_INTERFACE
        
        HRESULT ( STDMETHODCALLTYPE *QueryInterface )( 
            __RPC__in IAudioProcessingObject * This,
            /* [in] */ __RPC__in REFIID riid,
            /* [annotation][iid_is][out] */ 
            _COM_Outptr_  void **ppvObject);
        
        ULONG ( STDMETHODCALLTYPE *AddRef )( 
            __RPC__in IAudioProcessingObject * This);
        
        ULONG ( STDMETHODCALLTYPE *Release )( 
            __RPC__in IAudioProcessingObject * This);
        
        HRESULT ( STDMETHODCALLTYPE *Reset )( 
            __RPC__in IAudioProcessingObject * This);
        
        HRESULT ( STDMETHODCALLTYPE *GetLatency )( 
            __RPC__in IAudioProcessingObject * This,
            /* [out] */ __RPC__out HNSTIME *pTime);
        
        HRESULT ( STDMETHODCALLTYPE *GetRegistrationProperties )( 
            __RPC__in IAudioProcessingObject * This,
            /* [out] */ __RPC__deref_out_opt APO_REG_PROPERTIES **ppRegProps);
        
        HRESULT ( STDMETHODCALLTYPE *Initialize )( 
            __RPC__in IAudioProcessingObject * This,
            /* [in] */ UINT32 cbDataSize,
            /* [size_is][in] */ __RPC__in_ecount_full(cbDataSize) BYTE *pbyData);
        
        HRESULT ( STDMETHODCALLTYPE *IsInputFormatSupported )( 
            __RPC__in IAudioProcessingObject * This,
            /* [unique][in] */ __RPC__in_opt IAudioMediaType *pOppositeFormat,
            /* [in] */ __RPC__in_opt IAudioMediaType *pRequestedInputFormat,
            /* [out] */ __RPC__deref_out_opt IAudioMediaType **ppSupportedInputFormat);
        
        HRESULT ( STDMETHODCALLTYPE *IsOutputFormatSupported )( 
            __RPC__in IAudioProcessingObject * This,
            /* [unique][in] */ __RPC__in_opt IAudioMediaType *pOppositeFormat,
            /* [in] */ __RPC__in_opt IAudioMediaType *pRequestedOutputFormat,
            /* [out] */ __RPC__deref_out_opt IAudioMediaType **ppSupportedOutputFormat);
        
        HRESULT ( STDMETHODCALLTYPE *GetInputChannelCount )( 
            __RPC__in IAudioProcessingObject * This,
            /* [out] */ __RPC__out UINT32 *pu32ChannelCount);
        
        END_INTERFACE
    } IAudioProcessingObjectVtbl;

    interface IAudioProcessingObject
    {
        CONST_VTBL struct IAudioProcessingObjectVtbl *lpVtbl;
    };

    

#ifdef COBJMACROS


#define IAudioProcessingObject_QueryInterface(This,riid,ppvObject)	\
    ( (This)->lpVtbl -> QueryInterface(This,riid,ppvObject) ) 

#define IAudioProcessingObject_AddRef(This)	\
    ( (This)->lpVtbl -> AddRef(This) ) 

#define IAudioProcessingObject_Release(This)	\
    ( (This)->lpVtbl -> Release(This) ) 


#define IAudioProcessingObject_Reset(This)	\
    ( (This)->lpVtbl -> Reset(This) ) 

#define IAudioProcessingObject_GetLatency(This,pTime)	\
    ( (This)->lpVtbl -> GetLatency(This,pTime) ) 

#define IAudioProcessingObject_GetRegistrationProperties(This,ppRegProps)	\
    ( (This)->lpVtbl -> GetRegistrationProperties(This,ppRegProps) ) 

#define IAudioProcessingObject_Initialize(This,cbDataSize,pbyData)	\
    ( (This)->lpVtbl -> Initialize(This,cbDataSize,pbyData) ) 

#define IAudioProcessingObject_IsInputFormatSupported(This,pOppositeFormat,pRequestedInputFormat,ppSupportedInputFormat)	\
    ( (This)->lpVtbl -> IsInputFormatSupported(This,pOppositeFormat,pRequestedInputFormat,ppSupportedInputFormat) ) 

#define IAudioProcessingObject_IsOutputFormatSupported(This,pOppositeFormat,pRequestedOutputFormat,ppSupportedOutputFormat)	\
    ( (This)->lpVtbl -> IsOutputFormatSupported(This,pOppositeFormat,pRequestedOutputFormat,ppSupportedOutputFormat) ) 

#define IAudioProcessingObject_GetInputChannelCount(This,pu32ChannelCount)	\
    ( (This)->lpVtbl -> GetInputChannelCount(This,pu32ChannelCount) ) 

#endif /* COBJMACROS */


#endif 	/* C style interface */




#endif 	/* __IAudioProcessingObject_INTERFACE_DEFINED__ */


/* interface __MIDL_itf_audioenginebaseapo_0000_0004 */
/* [local] */ 

//
// APO registration functions
//
typedef HRESULT (WINAPI FNAPONOTIFICATIONCALLBACK)(APO_REG_PROPERTIES* pProperties, VOID* pvRefData);
extern HRESULT WINAPI RegisterAPO(APO_REG_PROPERTIES const* pProperties);
extern HRESULT WINAPI UnregisterAPO(REFCLSID clsid);
extern HRESULT WINAPI RegisterAPONotification(HANDLE hEvent);
extern HRESULT WINAPI UnregisterAPONotification(HANDLE hEvent);
extern HRESULT WINAPI EnumerateAPOs(FNAPONOTIFICATIONCALLBACK pfnCallback, PVOID pvRefData);
extern HRESULT WINAPI GetAPOProperties(REFCLSID clsid, APO_REG_PROPERTIES* pProperties);


extern RPC_IF_HANDLE __MIDL_itf_audioenginebaseapo_0000_0004_v0_0_c_ifspec;
extern RPC_IF_HANDLE __MIDL_itf_audioenginebaseapo_0000_0004_v0_0_s_ifspec;

#ifndef __IAudioSystemEffects_INTERFACE_DEFINED__
#define __IAudioSystemEffects_INTERFACE_DEFINED__

/* interface IAudioSystemEffects */
/* [object][uuid] */ 


EXTERN_C const IID IID_IAudioSystemEffects;

#if defined(__cplusplus) && !defined(CINTERFACE)
    
    MIDL_INTERFACE("5FA00F27-ADD6-499a-8A9D-6B98521FA75B")
    IAudioSystemEffects : public IUnknown
    {
    public:
    };
    
    
#else 	/* C style interface */

    typedef struct IAudioSystemEffectsVtbl
    {
        BEGIN_INTERFACE
        
        HRESULT ( STDMETHODCALLTYPE *QueryInterface )( 
            __RPC__in IAudioSystemEffects * This,
            /* [in] */ __RPC__in REFIID riid,
            /* [annotation][iid_is][out] */ 
            _COM_Outptr_  void **ppvObject);
        
        ULONG ( STDMETHODCALLTYPE *AddRef )( 
            __RPC__in IAudioSystemEffects * This);
        
        ULONG ( STDMETHODCALLTYPE *Release )( 
            __RPC__in IAudioSystemEffects * This);
        
        END_INTERFACE
    } IAudioSystemEffectsVtbl;

    interface IAudioSystemEffects
    {
        CONST_VTBL struct IAudioSystemEffectsVtbl *lpVtbl;
    };

    

#ifdef COBJMACROS


#define IAudioSystemEffects_QueryInterface(This,riid,ppvObject)	\
    ( (This)->lpVtbl -> QueryInterface(This,riid,ppvObject) ) 

#define IAudioSystemEffects_AddRef(This)	\
    ( (This)->lpVtbl -> AddRef(This) ) 

#define IAudioSystemEffects_Release(This)	\
    ( (This)->lpVtbl -> Release(This) ) 


#endif /* COBJMACROS */


#endif 	/* C style interface */




#endif 	/* __IAudioSystemEffects_INTERFACE_DEFINED__ */


#ifndef __IAudioSystemEffects2_INTERFACE_DEFINED__
#define __IAudioSystemEffects2_INTERFACE_DEFINED__

/* interface IAudioSystemEffects2 */
/* [object][uuid][local] */ 


EXTERN_C const IID IID_IAudioSystemEffects2;

#if defined(__cplusplus) && !defined(CINTERFACE)
    
    MIDL_INTERFACE("BAFE99D2-7436-44CE-9E0E-4D89AFBFFF56")
    IAudioSystemEffects2 : public IAudioSystemEffects
    {
    public:
        virtual HRESULT STDMETHODCALLTYPE GetEffectsList( 
            /* [annotation][out] */ 
            _Outptr_result_buffer_maybenull_(*pcEffects)  LPGUID *ppEffectsIds,
            /* [annotation][out] */ 
            _Out_  UINT *pcEffects,
            /* [annotation][in] */ 
            _In_  HANDLE Event) = 0;
        
    };
    
    
#else 	/* C style interface */

    typedef struct IAudioSystemEffects2Vtbl
    {
        BEGIN_INTERFACE
        
        HRESULT ( STDMETHODCALLTYPE *QueryInterface )( 
            IAudioSystemEffects2 * This,
            /* [in] */ REFIID riid,
            /* [annotation][iid_is][out] */ 
            _COM_Outptr_  void **ppvObject);
        
        ULONG ( STDMETHODCALLTYPE *AddRef )( 
            IAudioSystemEffects2 * This);
        
        ULONG ( STDMETHODCALLTYPE *Release )( 
            IAudioSystemEffects2 * This);
        
        HRESULT ( STDMETHODCALLTYPE *GetEffectsList )( 
            IAudioSystemEffects2 * This,
            /* [annotation][out] */ 
            _Outptr_result_buffer_maybenull_(*pcEffects)  LPGUID *ppEffectsIds,
            /* [annotation][out] */ 
            _Out_  UINT *pcEffects,
            /* [annotation][in] */ 
            _In_  HANDLE Event);
        
        END_INTERFACE
    } IAudioSystemEffects2Vtbl;

    interface IAudioSystemEffects2
    {
        CONST_VTBL struct IAudioSystemEffects2Vtbl *lpVtbl;
    };

    

#ifdef COBJMACROS


#define IAudioSystemEffects2_QueryInterface(This,riid,ppvObject)	\
    ( (This)->lpVtbl -> QueryInterface(This,riid,ppvObject) ) 

#define IAudioSystemEffects2_AddRef(This)	\
    ( (This)->lpVtbl -> AddRef(This) ) 

#define IAudioSystemEffects2_Release(This)	\
    ( (This)->lpVtbl -> Release(This) ) 



#define IAudioSystemEffects2_GetEffectsList(This,ppEffectsIds,pcEffects,Event)	\
    ( (This)->lpVtbl -> GetEffectsList(This,ppEffectsIds,pcEffects,Event) ) 

#endif /* COBJMACROS */


#endif 	/* C style interface */




#endif 	/* __IAudioSystemEffects2_INTERFACE_DEFINED__ */


#ifndef __IAudioSystemEffectsCustomFormats_INTERFACE_DEFINED__
#define __IAudioSystemEffectsCustomFormats_INTERFACE_DEFINED__

/* interface IAudioSystemEffectsCustomFormats */
/* [object][uuid] */ 


EXTERN_C const IID IID_IAudioSystemEffectsCustomFormats;

#if defined(__cplusplus) && !defined(CINTERFACE)
    
    MIDL_INTERFACE("B1176E34-BB7F-4f05-BEBD-1B18A534E097")
    IAudioSystemEffectsCustomFormats : public IUnknown
    {
    public:
        virtual HRESULT STDMETHODCALLTYPE GetFormatCount( 
            /* [out] */ __RPC__out UINT *pcFormats) = 0;
        
        virtual HRESULT STDMETHODCALLTYPE GetFormat( 
            /* [in] */ UINT nFormat,
            /* [out] */ __RPC__deref_out_opt IAudioMediaType **ppFormat) = 0;
        
        virtual HRESULT STDMETHODCALLTYPE GetFormatRepresentation( 
            /* [in] */ UINT nFormat,
            /* [out] */ __RPC__deref_out_opt LPWSTR *ppwstrFormatRep) = 0;
        
    };
    
    
#else 	/* C style interface */

    typedef struct IAudioSystemEffectsCustomFormatsVtbl
    {
        BEGIN_INTERFACE
        
        HRESULT ( STDMETHODCALLTYPE *QueryInterface )( 
            __RPC__in IAudioSystemEffectsCustomFormats * This,
            /* [in] */ __RPC__in REFIID riid,
            /* [annotation][iid_is][out] */ 
            _COM_Outptr_  void **ppvObject);
        
        ULONG ( STDMETHODCALLTYPE *AddRef )( 
            __RPC__in IAudioSystemEffectsCustomFormats * This);
        
        ULONG ( STDMETHODCALLTYPE *Release )( 
            __RPC__in IAudioSystemEffectsCustomFormats * This);
        
        HRESULT ( STDMETHODCALLTYPE *GetFormatCount )( 
            __RPC__in IAudioSystemEffectsCustomFormats * This,
            /* [out] */ __RPC__out UINT *pcFormats);
        
        HRESULT ( STDMETHODCALLTYPE *GetFormat )( 
            __RPC__in IAudioSystemEffectsCustomFormats * This,
            /* [in] */ UINT nFormat,
            /* [out] */ __RPC__deref_out_opt IAudioMediaType **ppFormat);
        
        HRESULT ( STDMETHODCALLTYPE *GetFormatRepresentation )( 
            __RPC__in IAudioSystemEffectsCustomFormats * This,
            /* [in] */ UINT nFormat,
            /* [out] */ __RPC__deref_out_opt LPWSTR *ppwstrFormatRep);
        
        END_INTERFACE
    } IAudioSystemEffectsCustomFormatsVtbl;

    interface IAudioSystemEffectsCustomFormats
    {
        CONST_VTBL struct IAudioSystemEffectsCustomFormatsVtbl *lpVtbl;
    };

    

#ifdef COBJMACROS


#define IAudioSystemEffectsCustomFormats_QueryInterface(This,riid,ppvObject)	\
    ( (This)->lpVtbl -> QueryInterface(This,riid,ppvObject) ) 

#define IAudioSystemEffectsCustomFormats_AddRef(This)	\
    ( (This)->lpVtbl -> AddRef(This) ) 

#define IAudioSystemEffectsCustomFormats_Release(This)	\
    ( (This)->lpVtbl -> Release(This) ) 


#define IAudioSystemEffectsCustomFormats_GetFormatCount(This,pcFormats)	\
    ( (This)->lpVtbl -> GetFormatCount(This,pcFormats) ) 

#define IAudioSystemEffectsCustomFormats_GetFormat(This,nFormat,ppFormat)	\
    ( (This)->lpVtbl -> GetFormat(This,nFormat,ppFormat) ) 

#define IAudioSystemEffectsCustomFormats_GetFormatRepresentation(This,nFormat,ppwstrFormatRep)	\
    ( (This)->lpVtbl -> GetFormatRepresentation(This,nFormat,ppwstrFormatRep) ) 

#endif /* COBJMACROS */


#endif 	/* C style interface */




#endif 	/* __IAudioSystemEffectsCustomFormats_INTERFACE_DEFINED__ */


/* interface __MIDL_itf_audioenginebaseapo_0000_0007 */
/* [local] */ 

typedef struct APOInitSystemEffects
    {
    APOInitBaseStruct APOInit;
    IPropertyStore *pAPOEndpointProperties;
    IPropertyStore *pAPOSystemEffectsProperties;
    void *pReserved;
    IMMDeviceCollection *pDeviceCollection;
    } 	APOInitSystemEffects;

typedef struct APOInitSystemEffects2
    {
    APOInitBaseStruct APOInit;
    IPropertyStore *pAPOEndpointProperties;
    IPropertyStore *pAPOSystemEffectsProperties;
    void *pReserved;
    IMMDeviceCollection *pDeviceCollection;
    UINT nSoftwareIoDeviceInCollection;
    UINT nSoftwareIoConnectorIndex;
    GUID AudioProcessingMode;
    BOOL InitializeForDiscoveryOnly;
    } 	APOInitSystemEffects2;

typedef /* [public] */ struct __MIDL___MIDL_itf_audioenginebaseapo_0000_0007_0001
    {
    LPARAM AddPageParam;
    LPWSTR pwstrEndpointID;
    IPropertyStore *pFxProperties;
    } 	AudioFXExtensionParams;

DEFINE_PROPERTYKEY(PKEY_FX_Association, 0xD04E05A6, 0x594B, 0x4fb6, 0xA8, 0x0D, 0x01, 0xAF, 0x5E, 0xED, 0x7D, 0x1D, 0);
DEFINE_PROPERTYKEY(PKEY_FX_PreMixEffectClsid, 0xD04E05A6, 0x594B, 0x4fb6, 0xA8, 0x0D, 0x01, 0xAF, 0x5E, 0xED, 0x7D, 0x1D, 1);
DEFINE_PROPERTYKEY(PKEY_FX_PostMixEffectClsid, 0xD04E05A6, 0x594B, 0x4fb6, 0xA8, 0x0D, 0x01, 0xAF, 0x5E, 0xED, 0x7D, 0x1D, 2);
DEFINE_PROPERTYKEY(PKEY_FX_UserInterfaceClsid, 0xD04E05A6, 0x594B, 0x4fb6, 0xA8, 0x0D, 0x01, 0xAF, 0x5E, 0xED, 0x7D, 0x1D, 3);
DEFINE_PROPERTYKEY(PKEY_FX_FriendlyName, 0xD04E05A6, 0x594B, 0x4fb6, 0xA8, 0x0D, 0x01, 0xAF, 0x5E, 0xED, 0x7D, 0x1D, 4);
DEFINE_PROPERTYKEY(PKEY_FX_StreamEffectClsid, 0xD04E05A6, 0x594B, 0x4fb6, 0xA8, 0x0D, 0x01, 0xAF, 0x5E, 0xED, 0x7D, 0x1D, 5);
DEFINE_PROPERTYKEY(PKEY_FX_ModeEffectClsid, 0xD04E05A6, 0x594B, 0x4fb6, 0xA8, 0x0D, 0x01, 0xAF, 0x5E, 0xED, 0x7D, 0x1D, 6);
DEFINE_PROPERTYKEY(PKEY_FX_EndpointEffectClsid, 0xD04E05A6, 0x594B, 0x4fb6, 0xA8, 0x0D, 0x01, 0xAF, 0x5E, 0xED, 0x7D, 0x1D, 7);
DEFINE_PROPERTYKEY(PKEY_SFX_ProcessingModes_Supported_For_Streaming, 0xd3993a3f, 0x99c2, 0x4402, 0xb5, 0xec, 0xa9, 0x2a, 0x3, 0x67, 0x66, 0x4b, 5);
DEFINE_PROPERTYKEY(PKEY_MFX_ProcessingModes_Supported_For_Streaming, 0xd3993a3f, 0x99c2, 0x4402, 0xb5, 0xec, 0xa9, 0x2a, 0x3, 0x67, 0x66, 0x4b, 6);
DEFINE_PROPERTYKEY(PKEY_EFX_ProcessingModes_Supported_For_Streaming, 0xd3993a3f, 0x99c2, 0x4402, 0xb5, 0xec, 0xa9, 0x2a, 0x3, 0x67, 0x66, 0x4b, 7);
#endif /* WINAPI_FAMILY_PARTITION(WINAPI_PARTITION_DESKTOP) */
#pragma endregion


extern RPC_IF_HANDLE __MIDL_itf_audioenginebaseapo_0000_0007_v0_0_c_ifspec;
extern RPC_IF_HANDLE __MIDL_itf_audioenginebaseapo_0000_0007_v0_0_s_ifspec;

/* Additional Prototypes for ALL interfaces */

/* end of Additional Prototypes */

#ifdef __cplusplus
}
#endif

#endif


#pragma option pop /*P_O_Pop*/
