/*** Autogenerated by WIDL 0.1 from strmif.idl - Do not edit ***/
#include <rpc.h>
#include <rpcndr.h>

#ifndef __WIDL_STRMIF_H
#define __WIDL_STRMIF_H
#ifdef __cplusplus
extern "C" {
#endif
#include <objidl.h>
#include <oaidl.h>
#define CDEF_CLASS_DEFAULT 0x0001
#define CDEF_BYPASS_CLASS_MANAGER 0x0002
#define CDEF_CLASS_LEGACY  0x0004
#define CDEF_MERIT_ABOVE_DO_NOT_USE 0x0008
#ifndef __ICreateDevEnum_FWD_DEFINED__
#define __ICreateDevEnum_FWD_DEFINED__
typedef struct ICreateDevEnum ICreateDevEnum;
#endif

/*****************************************************************************
 * ICreateDevEnum interface
 */
#ifndef __ICreateDevEnum_INTERFACE_DEFINED__
#define __ICreateDevEnum_INTERFACE_DEFINED__

DEFINE_GUID(IID_ICreateDevEnum, 0x29840822, 0x5b84, 0x11d0, 0xbd,0x3b, 0x00,0xa0,0xc9,0x11,0xce,0x86);
#if defined(__cplusplus) && !defined(CINTERFACE)
struct ICreateDevEnum : public IUnknown
{
    virtual HRESULT STDMETHODCALLTYPE CreateClassEnumerator(
        REFCLSID clsidDeviceClass,
        IEnumMoniker** ppEnumMoniker,
        DWORD dwFlags) = 0;

};
#else
typedef struct ICreateDevEnumVtbl ICreateDevEnumVtbl;
struct ICreateDevEnum {
    const ICreateDevEnumVtbl* lpVtbl;
};
struct ICreateDevEnumVtbl {
    ICOM_MSVTABLE_COMPAT_FIELDS

    /*** IUnknown methods ***/
    HRESULT (STDMETHODCALLTYPE *QueryInterface)(
        ICreateDevEnum* This,
        REFIID riid,
        void** ppvObject);

    ULONG (STDMETHODCALLTYPE *AddRef)(
        ICreateDevEnum* This);

    ULONG (STDMETHODCALLTYPE *Release)(
        ICreateDevEnum* This);

    /*** ICreateDevEnum methods ***/
    HRESULT (STDMETHODCALLTYPE *CreateClassEnumerator)(
        ICreateDevEnum* This,
        REFCLSID clsidDeviceClass,
        IEnumMoniker** ppEnumMoniker,
        DWORD dwFlags);

};

/*** IUnknown methods ***/
#define ICreateDevEnum_QueryInterface(p,a,b) (p)->lpVtbl->QueryInterface(p,a,b)
#define ICreateDevEnum_AddRef(p) (p)->lpVtbl->AddRef(p)
#define ICreateDevEnum_Release(p) (p)->lpVtbl->Release(p)
/*** ICreateDevEnum methods ***/
#define ICreateDevEnum_CreateClassEnumerator(p,a,b,c) (p)->lpVtbl->CreateClassEnumerator(p,a,b,c)

#endif

#define ICreateDevEnum_METHODS \
    ICOM_MSVTABLE_COMPAT_FIELDS \
    /*** IUnknown methods ***/ \
    STDMETHOD_(HRESULT,QueryInterface)(THIS_ REFIID riid, void** ppvObject) PURE; \
    STDMETHOD_(ULONG,AddRef)(THIS) PURE; \
    STDMETHOD_(ULONG,Release)(THIS) PURE; \
    /*** ICreateDevEnum methods ***/ \
    STDMETHOD_(HRESULT,CreateClassEnumerator)(THIS_ REFCLSID clsidDeviceClass, IEnumMoniker** ppEnumMoniker, DWORD dwFlags) PURE;

HRESULT CALLBACK ICreateDevEnum_CreateClassEnumerator_Proxy(
    ICreateDevEnum* This,
    REFCLSID clsidDeviceClass,
    IEnumMoniker** ppEnumMoniker,
    DWORD dwFlags);
void __RPC_STUB ICreateDevEnum_CreateClassEnumerator_Stub(
    struct IRpcStubBuffer* This,
    struct IRpcChannelBuffer* pRpcChannelBuffer,
    PRPC_MESSAGE pRpcMessage,
    DWORD* pdwStubPhase);

#endif  /* __ICreateDevEnum_INTERFACE_DEFINED__ */

#define CHARS_IN_GUID 39
#undef GetTimeFormat
typedef struct _AMMediaType {
    GUID majortype;
    GUID subtype;
    BOOL bFixedSizeSamples;
    BOOL bTemporalCompression;
    ULONG lSampleSize;
    GUID formattype;
    IUnknown *pUnk;
    ULONG cbFormat;
    BYTE *pbFormat;
} AM_MEDIA_TYPE;

typedef enum _PinDirection {
    PINDIR_INPUT,
    PINDIR_OUTPUT
} PIN_DIRECTION;

#define MAX_PIN_NAME    128
#define MAX_FILTER_NAME 128
typedef LONGLONG REFERENCE_TIME;

typedef DOUBLE REFTIME;

typedef DWORD_PTR HSEMAPHORE;

typedef DWORD_PTR HEVENT;

typedef struct _AllocatorProperties {
    long cBuffers;
    long cbBuffer;
    long cbAlign;
    long cbPrefix;
} ALLOCATOR_PROPERTIES;

#ifndef __IAMovieSetup_FWD_DEFINED__
#define __IAMovieSetup_FWD_DEFINED__
typedef struct IAMovieSetup IAMovieSetup;
#endif

#ifndef __IEnumFilters_FWD_DEFINED__
#define __IEnumFilters_FWD_DEFINED__
typedef struct IEnumFilters IEnumFilters;
#endif

#ifndef __IEnumMediaTypes_FWD_DEFINED__
#define __IEnumMediaTypes_FWD_DEFINED__
typedef struct IEnumMediaTypes IEnumMediaTypes;
#endif

#ifndef __IEnumPins_FWD_DEFINED__
#define __IEnumPins_FWD_DEFINED__
typedef struct IEnumPins IEnumPins;
#endif

#ifndef __IBaseFilter_FWD_DEFINED__
#define __IBaseFilter_FWD_DEFINED__
typedef struct IBaseFilter IBaseFilter;
#endif

#ifndef __IFilterGraph_FWD_DEFINED__
#define __IFilterGraph_FWD_DEFINED__
typedef struct IFilterGraph IFilterGraph;
#endif

#ifndef __IMediaFilter_FWD_DEFINED__
#define __IMediaFilter_FWD_DEFINED__
typedef struct IMediaFilter IMediaFilter;
#endif

#ifndef __IMediaSample_FWD_DEFINED__
#define __IMediaSample_FWD_DEFINED__
typedef struct IMediaSample IMediaSample;
#endif

#ifndef __IMemAllocator_FWD_DEFINED__
#define __IMemAllocator_FWD_DEFINED__
typedef struct IMemAllocator IMemAllocator;
#endif

#ifndef __IMemAllocatorCallbackTemp_FWD_DEFINED__
#define __IMemAllocatorCallbackTemp_FWD_DEFINED__
typedef struct IMemAllocatorCallbackTemp IMemAllocatorCallbackTemp;
#endif

#ifndef __IMemAllocatorNotifyCallbackTemp_FWD_DEFINED__
#define __IMemAllocatorNotifyCallbackTemp_FWD_DEFINED__
typedef struct IMemAllocatorNotifyCallbackTemp IMemAllocatorNotifyCallbackTemp;
#endif

#ifndef __IMemInputPin_FWD_DEFINED__
#define __IMemInputPin_FWD_DEFINED__
typedef struct IMemInputPin IMemInputPin;
#endif

#ifndef __IPin_FWD_DEFINED__
#define __IPin_FWD_DEFINED__
typedef struct IPin IPin;
#endif

#ifndef __IReferenceClock_FWD_DEFINED__
#define __IReferenceClock_FWD_DEFINED__
typedef struct IReferenceClock IReferenceClock;
#endif

typedef struct _PinInfo {
    IBaseFilter *pFilter;
    PIN_DIRECTION dir;
    WCHAR achName[128];
} PIN_INFO;

/*****************************************************************************
 * IPin interface
 */
#ifndef __IPin_INTERFACE_DEFINED__
#define __IPin_INTERFACE_DEFINED__

DEFINE_GUID(IID_IPin, 0x56a86891, 0x0ad4, 0x11ce, 0xb0,0x3a, 0x00,0x20,0xaf,0x0b,0xa7,0x70);
#if defined(__cplusplus) && !defined(CINTERFACE)
struct IPin : public IUnknown
{
    virtual HRESULT STDMETHODCALLTYPE Connect(
        IPin* pReceivePin,
        const AM_MEDIA_TYPE* pmt) = 0;

    virtual HRESULT STDMETHODCALLTYPE ReceiveConnection(
        IPin* pConnector,
        const AM_MEDIA_TYPE* pmt) = 0;

    virtual HRESULT STDMETHODCALLTYPE Disconnect(
        ) = 0;

    virtual HRESULT STDMETHODCALLTYPE ConnectedTo(
        IPin** pPin) = 0;

    virtual HRESULT STDMETHODCALLTYPE ConnectionMediaType(
        AM_MEDIA_TYPE* pmt) = 0;

    virtual HRESULT STDMETHODCALLTYPE QueryPinInfo(
        PIN_INFO* pInfo) = 0;

    virtual HRESULT STDMETHODCALLTYPE QueryDirection(
        PIN_DIRECTION* pPinDir) = 0;

    virtual HRESULT STDMETHODCALLTYPE QueryId(
        LPWSTR* Id) = 0;

    virtual HRESULT STDMETHODCALLTYPE QueryAccept(
        const AM_MEDIA_TYPE* pmt) = 0;

    virtual HRESULT STDMETHODCALLTYPE EnumMediaTypes(
        IEnumMediaTypes** ppEnum) = 0;

    virtual HRESULT STDMETHODCALLTYPE QueryInternalConnections(
        IPin** apPin,
        ULONG* nPin) = 0;

    virtual HRESULT STDMETHODCALLTYPE EndOfStream(
        ) = 0;

    virtual HRESULT STDMETHODCALLTYPE BeginFlush(
        ) = 0;

    virtual HRESULT STDMETHODCALLTYPE EndFlush(
        ) = 0;

    virtual HRESULT STDMETHODCALLTYPE NewSegment(
        REFERENCE_TIME tStart,
        REFERENCE_TIME tStop,
        double dRate) = 0;

};
#else
typedef struct IPinVtbl IPinVtbl;
struct IPin {
    const IPinVtbl* lpVtbl;
};
struct IPinVtbl {
    ICOM_MSVTABLE_COMPAT_FIELDS

    /*** IUnknown methods ***/
    HRESULT (STDMETHODCALLTYPE *QueryInterface)(
        IPin* This,
        REFIID riid,
        void** ppvObject);

    ULONG (STDMETHODCALLTYPE *AddRef)(
        IPin* This);

    ULONG (STDMETHODCALLTYPE *Release)(
        IPin* This);

    /*** IPin methods ***/
    HRESULT (STDMETHODCALLTYPE *Connect)(
        IPin* This,
        IPin* pReceivePin,
        const AM_MEDIA_TYPE* pmt);

    HRESULT (STDMETHODCALLTYPE *ReceiveConnection)(
        IPin* This,
        IPin* pConnector,
        const AM_MEDIA_TYPE* pmt);

    HRESULT (STDMETHODCALLTYPE *Disconnect)(
        IPin* This);

    HRESULT (STDMETHODCALLTYPE *ConnectedTo)(
        IPin* This,
        IPin** pPin);

    HRESULT (STDMETHODCALLTYPE *ConnectionMediaType)(
        IPin* This,
        AM_MEDIA_TYPE* pmt);

    HRESULT (STDMETHODCALLTYPE *QueryPinInfo)(
        IPin* This,
        PIN_INFO* pInfo);

    HRESULT (STDMETHODCALLTYPE *QueryDirection)(
        IPin* This,
        PIN_DIRECTION* pPinDir);

    HRESULT (STDMETHODCALLTYPE *QueryId)(
        IPin* This,
        LPWSTR* Id);

    HRESULT (STDMETHODCALLTYPE *QueryAccept)(
        IPin* This,
        const AM_MEDIA_TYPE* pmt);

    HRESULT (STDMETHODCALLTYPE *EnumMediaTypes)(
        IPin* This,
        IEnumMediaTypes** ppEnum);

    HRESULT (STDMETHODCALLTYPE *QueryInternalConnections)(
        IPin* This,
        IPin** apPin,
        ULONG* nPin);

    HRESULT (STDMETHODCALLTYPE *EndOfStream)(
        IPin* This);

    HRESULT (STDMETHODCALLTYPE *BeginFlush)(
        IPin* This);

    HRESULT (STDMETHODCALLTYPE *EndFlush)(
        IPin* This);

    HRESULT (STDMETHODCALLTYPE *NewSegment)(
        IPin* This,
        REFERENCE_TIME tStart,
        REFERENCE_TIME tStop,
        double dRate);

};

/*** IUnknown methods ***/
#define IPin_QueryInterface(p,a,b) (p)->lpVtbl->QueryInterface(p,a,b)
#define IPin_AddRef(p) (p)->lpVtbl->AddRef(p)
#define IPin_Release(p) (p)->lpVtbl->Release(p)
/*** IPin methods ***/
#define IPin_Connect(p,a,b) (p)->lpVtbl->Connect(p,a,b)
#define IPin_ReceiveConnection(p,a,b) (p)->lpVtbl->ReceiveConnection(p,a,b)
#define IPin_Disconnect(p) (p)->lpVtbl->Disconnect(p)
#define IPin_ConnectedTo(p,a) (p)->lpVtbl->ConnectedTo(p,a)
#define IPin_ConnectionMediaType(p,a) (p)->lpVtbl->ConnectionMediaType(p,a)
#define IPin_QueryPinInfo(p,a) (p)->lpVtbl->QueryPinInfo(p,a)
#define IPin_QueryDirection(p,a) (p)->lpVtbl->QueryDirection(p,a)
#define IPin_QueryId(p,a) (p)->lpVtbl->QueryId(p,a)
#define IPin_QueryAccept(p,a) (p)->lpVtbl->QueryAccept(p,a)
#define IPin_EnumMediaTypes(p,a) (p)->lpVtbl->EnumMediaTypes(p,a)
#define IPin_QueryInternalConnections(p,a,b) (p)->lpVtbl->QueryInternalConnections(p,a,b)
#define IPin_EndOfStream(p) (p)->lpVtbl->EndOfStream(p)
#define IPin_BeginFlush(p) (p)->lpVtbl->BeginFlush(p)
#define IPin_EndFlush(p) (p)->lpVtbl->EndFlush(p)
#define IPin_NewSegment(p,a,b,c) (p)->lpVtbl->NewSegment(p,a,b,c)

#endif

#define IPin_METHODS \
    ICOM_MSVTABLE_COMPAT_FIELDS \
    /*** IUnknown methods ***/ \
    STDMETHOD_(HRESULT,QueryInterface)(THIS_ REFIID riid, void** ppvObject) PURE; \
    STDMETHOD_(ULONG,AddRef)(THIS) PURE; \
    STDMETHOD_(ULONG,Release)(THIS) PURE; \
    /*** IPin methods ***/ \
    STDMETHOD_(HRESULT,Connect)(THIS_ IPin* pReceivePin, const AM_MEDIA_TYPE* pmt) PURE; \
    STDMETHOD_(HRESULT,ReceiveConnection)(THIS_ IPin* pConnector, const AM_MEDIA_TYPE* pmt) PURE; \
    STDMETHOD_(HRESULT,Disconnect)(THIS) PURE; \
    STDMETHOD_(HRESULT,ConnectedTo)(THIS_ IPin** pPin) PURE; \
    STDMETHOD_(HRESULT,ConnectionMediaType)(THIS_ AM_MEDIA_TYPE* pmt) PURE; \
    STDMETHOD_(HRESULT,QueryPinInfo)(THIS_ PIN_INFO* pInfo) PURE; \
    STDMETHOD_(HRESULT,QueryDirection)(THIS_ PIN_DIRECTION* pPinDir) PURE; \
    STDMETHOD_(HRESULT,QueryId)(THIS_ LPWSTR* Id) PURE; \
    STDMETHOD_(HRESULT,QueryAccept)(THIS_ const AM_MEDIA_TYPE* pmt) PURE; \
    STDMETHOD_(HRESULT,EnumMediaTypes)(THIS_ IEnumMediaTypes** ppEnum) PURE; \
    STDMETHOD_(HRESULT,QueryInternalConnections)(THIS_ IPin** apPin, ULONG* nPin) PURE; \
    STDMETHOD_(HRESULT,EndOfStream)(THIS) PURE; \
    STDMETHOD_(HRESULT,BeginFlush)(THIS) PURE; \
    STDMETHOD_(HRESULT,EndFlush)(THIS) PURE; \
    STDMETHOD_(HRESULT,NewSegment)(THIS_ REFERENCE_TIME tStart, REFERENCE_TIME tStop, double dRate) PURE;

HRESULT CALLBACK IPin_Connect_Proxy(
    IPin* This,
    IPin* pReceivePin,
    const AM_MEDIA_TYPE* pmt);
void __RPC_STUB IPin_Connect_Stub(
    struct IRpcStubBuffer* This,
    struct IRpcChannelBuffer* pRpcChannelBuffer,
    PRPC_MESSAGE pRpcMessage,
    DWORD* pdwStubPhase);
HRESULT CALLBACK IPin_ReceiveConnection_Proxy(
    IPin* This,
    IPin* pConnector,
    const AM_MEDIA_TYPE* pmt);
void __RPC_STUB IPin_ReceiveConnection_Stub(
    struct IRpcStubBuffer* This,
    struct IRpcChannelBuffer* pRpcChannelBuffer,
    PRPC_MESSAGE pRpcMessage,
    DWORD* pdwStubPhase);
HRESULT CALLBACK IPin_Disconnect_Proxy(
    IPin* This);
void __RPC_STUB IPin_Disconnect_Stub(
    struct IRpcStubBuffer* This,
    struct IRpcChannelBuffer* pRpcChannelBuffer,
    PRPC_MESSAGE pRpcMessage,
    DWORD* pdwStubPhase);
HRESULT CALLBACK IPin_ConnectedTo_Proxy(
    IPin* This,
    IPin** pPin);
void __RPC_STUB IPin_ConnectedTo_Stub(
    struct IRpcStubBuffer* This,
    struct IRpcChannelBuffer* pRpcChannelBuffer,
    PRPC_MESSAGE pRpcMessage,
    DWORD* pdwStubPhase);
HRESULT CALLBACK IPin_ConnectionMediaType_Proxy(
    IPin* This,
    AM_MEDIA_TYPE* pmt);
void __RPC_STUB IPin_ConnectionMediaType_Stub(
    struct IRpcStubBuffer* This,
    struct IRpcChannelBuffer* pRpcChannelBuffer,
    PRPC_MESSAGE pRpcMessage,
    DWORD* pdwStubPhase);
HRESULT CALLBACK IPin_QueryPinInfo_Proxy(
    IPin* This,
    PIN_INFO* pInfo);
void __RPC_STUB IPin_QueryPinInfo_Stub(
    struct IRpcStubBuffer* This,
    struct IRpcChannelBuffer* pRpcChannelBuffer,
    PRPC_MESSAGE pRpcMessage,
    DWORD* pdwStubPhase);
HRESULT CALLBACK IPin_QueryDirection_Proxy(
    IPin* This,
    PIN_DIRECTION* pPinDir);
void __RPC_STUB IPin_QueryDirection_Stub(
    struct IRpcStubBuffer* This,
    struct IRpcChannelBuffer* pRpcChannelBuffer,
    PRPC_MESSAGE pRpcMessage,
    DWORD* pdwStubPhase);
HRESULT CALLBACK IPin_QueryId_Proxy(
    IPin* This,
    LPWSTR* Id);
void __RPC_STUB IPin_QueryId_Stub(
    struct IRpcStubBuffer* This,
    struct IRpcChannelBuffer* pRpcChannelBuffer,
    PRPC_MESSAGE pRpcMessage,
    DWORD* pdwStubPhase);
HRESULT CALLBACK IPin_QueryAccept_Proxy(
    IPin* This,
    const AM_MEDIA_TYPE* pmt);
void __RPC_STUB IPin_QueryAccept_Stub(
    struct IRpcStubBuffer* This,
    struct IRpcChannelBuffer* pRpcChannelBuffer,
    PRPC_MESSAGE pRpcMessage,
    DWORD* pdwStubPhase);
HRESULT CALLBACK IPin_EnumMediaTypes_Proxy(
    IPin* This,
    IEnumMediaTypes** ppEnum);
void __RPC_STUB IPin_EnumMediaTypes_Stub(
    struct IRpcStubBuffer* This,
    struct IRpcChannelBuffer* pRpcChannelBuffer,
    PRPC_MESSAGE pRpcMessage,
    DWORD* pdwStubPhase);
HRESULT CALLBACK IPin_QueryInternalConnections_Proxy(
    IPin* This,
    IPin** apPin,
    ULONG* nPin);
void __RPC_STUB IPin_QueryInternalConnections_Stub(
    struct IRpcStubBuffer* This,
    struct IRpcChannelBuffer* pRpcChannelBuffer,
    PRPC_MESSAGE pRpcMessage,
    DWORD* pdwStubPhase);
HRESULT CALLBACK IPin_EndOfStream_Proxy(
    IPin* This);
void __RPC_STUB IPin_EndOfStream_Stub(
    struct IRpcStubBuffer* This,
    struct IRpcChannelBuffer* pRpcChannelBuffer,
    PRPC_MESSAGE pRpcMessage,
    DWORD* pdwStubPhase);
HRESULT CALLBACK IPin_BeginFlush_Proxy(
    IPin* This);
void __RPC_STUB IPin_BeginFlush_Stub(
    struct IRpcStubBuffer* This,
    struct IRpcChannelBuffer* pRpcChannelBuffer,
    PRPC_MESSAGE pRpcMessage,
    DWORD* pdwStubPhase);
HRESULT CALLBACK IPin_EndFlush_Proxy(
    IPin* This);
void __RPC_STUB IPin_EndFlush_Stub(
    struct IRpcStubBuffer* This,
    struct IRpcChannelBuffer* pRpcChannelBuffer,
    PRPC_MESSAGE pRpcMessage,
    DWORD* pdwStubPhase);
HRESULT CALLBACK IPin_NewSegment_Proxy(
    IPin* This,
    REFERENCE_TIME tStart,
    REFERENCE_TIME tStop,
    double dRate);
void __RPC_STUB IPin_NewSegment_Stub(
    struct IRpcStubBuffer* This,
    struct IRpcChannelBuffer* pRpcChannelBuffer,
    PRPC_MESSAGE pRpcMessage,
    DWORD* pdwStubPhase);

#endif  /* __IPin_INTERFACE_DEFINED__ */

typedef IPin *PPIN;

/*****************************************************************************
 * IEnumPins interface
 */
#ifndef __IEnumPins_INTERFACE_DEFINED__
#define __IEnumPins_INTERFACE_DEFINED__

DEFINE_GUID(IID_IEnumPins, 0x56a86892, 0x0ad4, 0x11ce, 0xb0,0x3a, 0x00,0x20,0xaf,0x0b,0xa7,0x70);
#if defined(__cplusplus) && !defined(CINTERFACE)
struct IEnumPins : public IUnknown
{
    virtual HRESULT STDMETHODCALLTYPE Next(
        ULONG cPins,
        IPin** ppPins,
        ULONG* pcFetched) = 0;

    virtual HRESULT STDMETHODCALLTYPE Skip(
        ULONG cPins) = 0;

    virtual HRESULT STDMETHODCALLTYPE Reset(
        ) = 0;

    virtual HRESULT STDMETHODCALLTYPE Clone(
        IEnumPins** ppEnum) = 0;

};
#else
typedef struct IEnumPinsVtbl IEnumPinsVtbl;
struct IEnumPins {
    const IEnumPinsVtbl* lpVtbl;
};
struct IEnumPinsVtbl {
    ICOM_MSVTABLE_COMPAT_FIELDS

    /*** IUnknown methods ***/
    HRESULT (STDMETHODCALLTYPE *QueryInterface)(
        IEnumPins* This,
        REFIID riid,
        void** ppvObject);

    ULONG (STDMETHODCALLTYPE *AddRef)(
        IEnumPins* This);

    ULONG (STDMETHODCALLTYPE *Release)(
        IEnumPins* This);

    /*** IEnumPins methods ***/
    HRESULT (STDMETHODCALLTYPE *Next)(
        IEnumPins* This,
        ULONG cPins,
        IPin** ppPins,
        ULONG* pcFetched);

    HRESULT (STDMETHODCALLTYPE *Skip)(
        IEnumPins* This,
        ULONG cPins);

    HRESULT (STDMETHODCALLTYPE *Reset)(
        IEnumPins* This);

    HRESULT (STDMETHODCALLTYPE *Clone)(
        IEnumPins* This,
        IEnumPins** ppEnum);

};

/*** IUnknown methods ***/
#define IEnumPins_QueryInterface(p,a,b) (p)->lpVtbl->QueryInterface(p,a,b)
#define IEnumPins_AddRef(p) (p)->lpVtbl->AddRef(p)
#define IEnumPins_Release(p) (p)->lpVtbl->Release(p)
/*** IEnumPins methods ***/
#define IEnumPins_Next(p,a,b,c) (p)->lpVtbl->Next(p,a,b,c)
#define IEnumPins_Skip(p,a) (p)->lpVtbl->Skip(p,a)
#define IEnumPins_Reset(p) (p)->lpVtbl->Reset(p)
#define IEnumPins_Clone(p,a) (p)->lpVtbl->Clone(p,a)

#endif

#define IEnumPins_METHODS \
    ICOM_MSVTABLE_COMPAT_FIELDS \
    /*** IUnknown methods ***/ \
    STDMETHOD_(HRESULT,QueryInterface)(THIS_ REFIID riid, void** ppvObject) PURE; \
    STDMETHOD_(ULONG,AddRef)(THIS) PURE; \
    STDMETHOD_(ULONG,Release)(THIS) PURE; \
    /*** IEnumPins methods ***/ \
    STDMETHOD_(HRESULT,Next)(THIS_ ULONG cPins, IPin** ppPins, ULONG* pcFetched) PURE; \
    STDMETHOD_(HRESULT,Skip)(THIS_ ULONG cPins) PURE; \
    STDMETHOD_(HRESULT,Reset)(THIS) PURE; \
    STDMETHOD_(HRESULT,Clone)(THIS_ IEnumPins** ppEnum) PURE;

HRESULT CALLBACK IEnumPins_Next_Proxy(
    IEnumPins* This,
    ULONG cPins,
    IPin** ppPins,
    ULONG* pcFetched);
void __RPC_STUB IEnumPins_Next_Stub(
    struct IRpcStubBuffer* This,
    struct IRpcChannelBuffer* pRpcChannelBuffer,
    PRPC_MESSAGE pRpcMessage,
    DWORD* pdwStubPhase);
HRESULT CALLBACK IEnumPins_Skip_Proxy(
    IEnumPins* This,
    ULONG cPins);
void __RPC_STUB IEnumPins_Skip_Stub(
    struct IRpcStubBuffer* This,
    struct IRpcChannelBuffer* pRpcChannelBuffer,
    PRPC_MESSAGE pRpcMessage,
    DWORD* pdwStubPhase);
HRESULT CALLBACK IEnumPins_Reset_Proxy(
    IEnumPins* This);
void __RPC_STUB IEnumPins_Reset_Stub(
    struct IRpcStubBuffer* This,
    struct IRpcChannelBuffer* pRpcChannelBuffer,
    PRPC_MESSAGE pRpcMessage,
    DWORD* pdwStubPhase);
HRESULT CALLBACK IEnumPins_Clone_Proxy(
    IEnumPins* This,
    IEnumPins** ppEnum);
void __RPC_STUB IEnumPins_Clone_Stub(
    struct IRpcStubBuffer* This,
    struct IRpcChannelBuffer* pRpcChannelBuffer,
    PRPC_MESSAGE pRpcMessage,
    DWORD* pdwStubPhase);

#endif  /* __IEnumPins_INTERFACE_DEFINED__ */

typedef IEnumPins *PENUMPINS;

/*****************************************************************************
 * IEnumMediaTypes interface
 */
#ifndef __IEnumMediaTypes_INTERFACE_DEFINED__
#define __IEnumMediaTypes_INTERFACE_DEFINED__

DEFINE_GUID(IID_IEnumMediaTypes, 0x89c31040, 0x846b, 0x11ce, 0x97,0xd3, 0x00,0xaa,0x00,0x55,0x59,0x5a);
#if defined(__cplusplus) && !defined(CINTERFACE)
struct IEnumMediaTypes : public IUnknown
{
    virtual HRESULT STDMETHODCALLTYPE Next(
        ULONG cMediaTypes,
        AM_MEDIA_TYPE** ppMediaTypes,
        ULONG* pcFetched) = 0;

    virtual HRESULT STDMETHODCALLTYPE Skip(
        ULONG cMediaTypes) = 0;

    virtual HRESULT STDMETHODCALLTYPE Reset(
        ) = 0;

    virtual HRESULT STDMETHODCALLTYPE Clone(
        IEnumMediaTypes** ppEnum) = 0;

};
#else
typedef struct IEnumMediaTypesVtbl IEnumMediaTypesVtbl;
struct IEnumMediaTypes {
    const IEnumMediaTypesVtbl* lpVtbl;
};
struct IEnumMediaTypesVtbl {
    ICOM_MSVTABLE_COMPAT_FIELDS

    /*** IUnknown methods ***/
    HRESULT (STDMETHODCALLTYPE *QueryInterface)(
        IEnumMediaTypes* This,
        REFIID riid,
        void** ppvObject);

    ULONG (STDMETHODCALLTYPE *AddRef)(
        IEnumMediaTypes* This);

    ULONG (STDMETHODCALLTYPE *Release)(
        IEnumMediaTypes* This);

    /*** IEnumMediaTypes methods ***/
    HRESULT (STDMETHODCALLTYPE *Next)(
        IEnumMediaTypes* This,
        ULONG cMediaTypes,
        AM_MEDIA_TYPE** ppMediaTypes,
        ULONG* pcFetched);

    HRESULT (STDMETHODCALLTYPE *Skip)(
        IEnumMediaTypes* This,
        ULONG cMediaTypes);

    HRESULT (STDMETHODCALLTYPE *Reset)(
        IEnumMediaTypes* This);

    HRESULT (STDMETHODCALLTYPE *Clone)(
        IEnumMediaTypes* This,
        IEnumMediaTypes** ppEnum);

};

/*** IUnknown methods ***/
#define IEnumMediaTypes_QueryInterface(p,a,b) (p)->lpVtbl->QueryInterface(p,a,b)
#define IEnumMediaTypes_AddRef(p) (p)->lpVtbl->AddRef(p)
#define IEnumMediaTypes_Release(p) (p)->lpVtbl->Release(p)
/*** IEnumMediaTypes methods ***/
#define IEnumMediaTypes_Next(p,a,b,c) (p)->lpVtbl->Next(p,a,b,c)
#define IEnumMediaTypes_Skip(p,a) (p)->lpVtbl->Skip(p,a)
#define IEnumMediaTypes_Reset(p) (p)->lpVtbl->Reset(p)
#define IEnumMediaTypes_Clone(p,a) (p)->lpVtbl->Clone(p,a)

#endif

#define IEnumMediaTypes_METHODS \
    ICOM_MSVTABLE_COMPAT_FIELDS \
    /*** IUnknown methods ***/ \
    STDMETHOD_(HRESULT,QueryInterface)(THIS_ REFIID riid, void** ppvObject) PURE; \
    STDMETHOD_(ULONG,AddRef)(THIS) PURE; \
    STDMETHOD_(ULONG,Release)(THIS) PURE; \
    /*** IEnumMediaTypes methods ***/ \
    STDMETHOD_(HRESULT,Next)(THIS_ ULONG cMediaTypes, AM_MEDIA_TYPE** ppMediaTypes, ULONG* pcFetched) PURE; \
    STDMETHOD_(HRESULT,Skip)(THIS_ ULONG cMediaTypes) PURE; \
    STDMETHOD_(HRESULT,Reset)(THIS) PURE; \
    STDMETHOD_(HRESULT,Clone)(THIS_ IEnumMediaTypes** ppEnum) PURE;

HRESULT CALLBACK IEnumMediaTypes_Next_Proxy(
    IEnumMediaTypes* This,
    ULONG cMediaTypes,
    AM_MEDIA_TYPE** ppMediaTypes,
    ULONG* pcFetched);
void __RPC_STUB IEnumMediaTypes_Next_Stub(
    struct IRpcStubBuffer* This,
    struct IRpcChannelBuffer* pRpcChannelBuffer,
    PRPC_MESSAGE pRpcMessage,
    DWORD* pdwStubPhase);
HRESULT CALLBACK IEnumMediaTypes_Skip_Proxy(
    IEnumMediaTypes* This,
    ULONG cMediaTypes);
void __RPC_STUB IEnumMediaTypes_Skip_Stub(
    struct IRpcStubBuffer* This,
    struct IRpcChannelBuffer* pRpcChannelBuffer,
    PRPC_MESSAGE pRpcMessage,
    DWORD* pdwStubPhase);
HRESULT CALLBACK IEnumMediaTypes_Reset_Proxy(
    IEnumMediaTypes* This);
void __RPC_STUB IEnumMediaTypes_Reset_Stub(
    struct IRpcStubBuffer* This,
    struct IRpcChannelBuffer* pRpcChannelBuffer,
    PRPC_MESSAGE pRpcMessage,
    DWORD* pdwStubPhase);
HRESULT CALLBACK IEnumMediaTypes_Clone_Proxy(
    IEnumMediaTypes* This,
    IEnumMediaTypes** ppEnum);
void __RPC_STUB IEnumMediaTypes_Clone_Stub(
    struct IRpcStubBuffer* This,
    struct IRpcChannelBuffer* pRpcChannelBuffer,
    PRPC_MESSAGE pRpcMessage,
    DWORD* pdwStubPhase);

#endif  /* __IEnumMediaTypes_INTERFACE_DEFINED__ */

typedef IEnumMediaTypes *PENUMMEDIATYPES;

/*****************************************************************************
 * IFilterGraph interface
 */
#ifndef __IFilterGraph_INTERFACE_DEFINED__
#define __IFilterGraph_INTERFACE_DEFINED__

DEFINE_GUID(IID_IFilterGraph, 0x56a8689f, 0x0ad4, 0x11ce, 0xb0,0x3a, 0x00,0x20,0xaf,0x0b,0xa7,0x70);
#if defined(__cplusplus) && !defined(CINTERFACE)
struct IFilterGraph : public IUnknown
{
    virtual HRESULT STDMETHODCALLTYPE AddFilter(
        IBaseFilter* pFilter,
        LPCWSTR pName) = 0;

    virtual HRESULT STDMETHODCALLTYPE RemoveFilter(
        IBaseFilter* pFilter) = 0;

    virtual HRESULT STDMETHODCALLTYPE EnumFilters(
        IEnumFilters** ppEnum) = 0;

    virtual HRESULT STDMETHODCALLTYPE FindFilterByName(
        LPCWSTR pName,
        IBaseFilter** ppFilter) = 0;

    virtual HRESULT STDMETHODCALLTYPE ConnectDirect(
        IPin* ppinOut,
        IPin* ppinIn,
        const AM_MEDIA_TYPE* pmt) = 0;

    virtual HRESULT STDMETHODCALLTYPE Reconnect(
        IPin* ppin) = 0;

    virtual HRESULT STDMETHODCALLTYPE Disconnect(
        IPin* ppin) = 0;

    virtual HRESULT STDMETHODCALLTYPE SetDefaultSyncSource(
        ) = 0;

};
#else
typedef struct IFilterGraphVtbl IFilterGraphVtbl;
struct IFilterGraph {
    const IFilterGraphVtbl* lpVtbl;
};
struct IFilterGraphVtbl {
    ICOM_MSVTABLE_COMPAT_FIELDS

    /*** IUnknown methods ***/
    HRESULT (STDMETHODCALLTYPE *QueryInterface)(
        IFilterGraph* This,
        REFIID riid,
        void** ppvObject);

    ULONG (STDMETHODCALLTYPE *AddRef)(
        IFilterGraph* This);

    ULONG (STDMETHODCALLTYPE *Release)(
        IFilterGraph* This);

    /*** IFilterGraph methods ***/
    HRESULT (STDMETHODCALLTYPE *AddFilter)(
        IFilterGraph* This,
        IBaseFilter* pFilter,
        LPCWSTR pName);

    HRESULT (STDMETHODCALLTYPE *RemoveFilter)(
        IFilterGraph* This,
        IBaseFilter* pFilter);

    HRESULT (STDMETHODCALLTYPE *EnumFilters)(
        IFilterGraph* This,
        IEnumFilters** ppEnum);

    HRESULT (STDMETHODCALLTYPE *FindFilterByName)(
        IFilterGraph* This,
        LPCWSTR pName,
        IBaseFilter** ppFilter);

    HRESULT (STDMETHODCALLTYPE *ConnectDirect)(
        IFilterGraph* This,
        IPin* ppinOut,
        IPin* ppinIn,
        const AM_MEDIA_TYPE* pmt);

    HRESULT (STDMETHODCALLTYPE *Reconnect)(
        IFilterGraph* This,
        IPin* ppin);

    HRESULT (STDMETHODCALLTYPE *Disconnect)(
        IFilterGraph* This,
        IPin* ppin);

    HRESULT (STDMETHODCALLTYPE *SetDefaultSyncSource)(
        IFilterGraph* This);

};

/*** IUnknown methods ***/
#define IFilterGraph_QueryInterface(p,a,b) (p)->lpVtbl->QueryInterface(p,a,b)
#define IFilterGraph_AddRef(p) (p)->lpVtbl->AddRef(p)
#define IFilterGraph_Release(p) (p)->lpVtbl->Release(p)
/*** IFilterGraph methods ***/
#define IFilterGraph_AddFilter(p,a,b) (p)->lpVtbl->AddFilter(p,a,b)
#define IFilterGraph_RemoveFilter(p,a) (p)->lpVtbl->RemoveFilter(p,a)
#define IFilterGraph_EnumFilters(p,a) (p)->lpVtbl->EnumFilters(p,a)
#define IFilterGraph_FindFilterByName(p,a,b) (p)->lpVtbl->FindFilterByName(p,a,b)
#define IFilterGraph_ConnectDirect(p,a,b,c) (p)->lpVtbl->ConnectDirect(p,a,b,c)
#define IFilterGraph_Reconnect(p,a) (p)->lpVtbl->Reconnect(p,a)
#define IFilterGraph_Disconnect(p,a) (p)->lpVtbl->Disconnect(p,a)
#define IFilterGraph_SetDefaultSyncSource(p) (p)->lpVtbl->SetDefaultSyncSource(p)

#endif

#define IFilterGraph_METHODS \
    ICOM_MSVTABLE_COMPAT_FIELDS \
    /*** IUnknown methods ***/ \
    STDMETHOD_(HRESULT,QueryInterface)(THIS_ REFIID riid, void** ppvObject) PURE; \
    STDMETHOD_(ULONG,AddRef)(THIS) PURE; \
    STDMETHOD_(ULONG,Release)(THIS) PURE; \
    /*** IFilterGraph methods ***/ \
    STDMETHOD_(HRESULT,AddFilter)(THIS_ IBaseFilter* pFilter, LPCWSTR pName) PURE; \
    STDMETHOD_(HRESULT,RemoveFilter)(THIS_ IBaseFilter* pFilter) PURE; \
    STDMETHOD_(HRESULT,EnumFilters)(THIS_ IEnumFilters** ppEnum) PURE; \
    STDMETHOD_(HRESULT,FindFilterByName)(THIS_ LPCWSTR pName, IBaseFilter** ppFilter) PURE; \
    STDMETHOD_(HRESULT,ConnectDirect)(THIS_ IPin* ppinOut, IPin* ppinIn, const AM_MEDIA_TYPE* pmt) PURE; \
    STDMETHOD_(HRESULT,Reconnect)(THIS_ IPin* ppin) PURE; \
    STDMETHOD_(HRESULT,Disconnect)(THIS_ IPin* ppin) PURE; \
    STDMETHOD_(HRESULT,SetDefaultSyncSource)(THIS) PURE;

HRESULT CALLBACK IFilterGraph_AddFilter_Proxy(
    IFilterGraph* This,
    IBaseFilter* pFilter,
    LPCWSTR pName);
void __RPC_STUB IFilterGraph_AddFilter_Stub(
    struct IRpcStubBuffer* This,
    struct IRpcChannelBuffer* pRpcChannelBuffer,
    PRPC_MESSAGE pRpcMessage,
    DWORD* pdwStubPhase);
HRESULT CALLBACK IFilterGraph_RemoveFilter_Proxy(
    IFilterGraph* This,
    IBaseFilter* pFilter);
void __RPC_STUB IFilterGraph_RemoveFilter_Stub(
    struct IRpcStubBuffer* This,
    struct IRpcChannelBuffer* pRpcChannelBuffer,
    PRPC_MESSAGE pRpcMessage,
    DWORD* pdwStubPhase);
HRESULT CALLBACK IFilterGraph_EnumFilters_Proxy(
    IFilterGraph* This,
    IEnumFilters** ppEnum);
void __RPC_STUB IFilterGraph_EnumFilters_Stub(
    struct IRpcStubBuffer* This,
    struct IRpcChannelBuffer* pRpcChannelBuffer,
    PRPC_MESSAGE pRpcMessage,
    DWORD* pdwStubPhase);
HRESULT CALLBACK IFilterGraph_FindFilterByName_Proxy(
    IFilterGraph* This,
    LPCWSTR pName,
    IBaseFilter** ppFilter);
void __RPC_STUB IFilterGraph_FindFilterByName_Stub(
    struct IRpcStubBuffer* This,
    struct IRpcChannelBuffer* pRpcChannelBuffer,
    PRPC_MESSAGE pRpcMessage,
    DWORD* pdwStubPhase);
HRESULT CALLBACK IFilterGraph_ConnectDirect_Proxy(
    IFilterGraph* This,
    IPin* ppinOut,
    IPin* ppinIn,
    const AM_MEDIA_TYPE* pmt);
void __RPC_STUB IFilterGraph_ConnectDirect_Stub(
    struct IRpcStubBuffer* This,
    struct IRpcChannelBuffer* pRpcChannelBuffer,
    PRPC_MESSAGE pRpcMessage,
    DWORD* pdwStubPhase);
HRESULT CALLBACK IFilterGraph_Reconnect_Proxy(
    IFilterGraph* This,
    IPin* ppin);
void __RPC_STUB IFilterGraph_Reconnect_Stub(
    struct IRpcStubBuffer* This,
    struct IRpcChannelBuffer* pRpcChannelBuffer,
    PRPC_MESSAGE pRpcMessage,
    DWORD* pdwStubPhase);
HRESULT CALLBACK IFilterGraph_Disconnect_Proxy(
    IFilterGraph* This,
    IPin* ppin);
void __RPC_STUB IFilterGraph_Disconnect_Stub(
    struct IRpcStubBuffer* This,
    struct IRpcChannelBuffer* pRpcChannelBuffer,
    PRPC_MESSAGE pRpcMessage,
    DWORD* pdwStubPhase);
HRESULT CALLBACK IFilterGraph_SetDefaultSyncSource_Proxy(
    IFilterGraph* This);
void __RPC_STUB IFilterGraph_SetDefaultSyncSource_Stub(
    struct IRpcStubBuffer* This,
    struct IRpcChannelBuffer* pRpcChannelBuffer,
    PRPC_MESSAGE pRpcMessage,
    DWORD* pdwStubPhase);

#endif  /* __IFilterGraph_INTERFACE_DEFINED__ */

typedef IFilterGraph *PFILTERGRAPH;

/*****************************************************************************
 * IEnumFilters interface
 */
#ifndef __IEnumFilters_INTERFACE_DEFINED__
#define __IEnumFilters_INTERFACE_DEFINED__

DEFINE_GUID(IID_IEnumFilters, 0x56a86893, 0x0ad4, 0x11ce, 0xb0,0x3a, 0x00,0x20,0xaf,0x0b,0xa7,0x70);
#if defined(__cplusplus) && !defined(CINTERFACE)
struct IEnumFilters : public IUnknown
{
    virtual HRESULT STDMETHODCALLTYPE Next(
        ULONG cFilters,
        IBaseFilter** ppFilter,
        ULONG* pcFetched) = 0;

    virtual HRESULT STDMETHODCALLTYPE Skip(
        ULONG cFilters) = 0;

    virtual HRESULT STDMETHODCALLTYPE Reset(
        ) = 0;

    virtual HRESULT STDMETHODCALLTYPE Clone(
        IEnumFilters** ppEnum) = 0;

};
#else
typedef struct IEnumFiltersVtbl IEnumFiltersVtbl;
struct IEnumFilters {
    const IEnumFiltersVtbl* lpVtbl;
};
struct IEnumFiltersVtbl {
    ICOM_MSVTABLE_COMPAT_FIELDS

    /*** IUnknown methods ***/
    HRESULT (STDMETHODCALLTYPE *QueryInterface)(
        IEnumFilters* This,
        REFIID riid,
        void** ppvObject);

    ULONG (STDMETHODCALLTYPE *AddRef)(
        IEnumFilters* This);

    ULONG (STDMETHODCALLTYPE *Release)(
        IEnumFilters* This);

    /*** IEnumFilters methods ***/
    HRESULT (STDMETHODCALLTYPE *Next)(
        IEnumFilters* This,
        ULONG cFilters,
        IBaseFilter** ppFilter,
        ULONG* pcFetched);

    HRESULT (STDMETHODCALLTYPE *Skip)(
        IEnumFilters* This,
        ULONG cFilters);

    HRESULT (STDMETHODCALLTYPE *Reset)(
        IEnumFilters* This);

    HRESULT (STDMETHODCALLTYPE *Clone)(
        IEnumFilters* This,
        IEnumFilters** ppEnum);

};

/*** IUnknown methods ***/
#define IEnumFilters_QueryInterface(p,a,b) (p)->lpVtbl->QueryInterface(p,a,b)
#define IEnumFilters_AddRef(p) (p)->lpVtbl->AddRef(p)
#define IEnumFilters_Release(p) (p)->lpVtbl->Release(p)
/*** IEnumFilters methods ***/
#define IEnumFilters_Next(p,a,b,c) (p)->lpVtbl->Next(p,a,b,c)
#define IEnumFilters_Skip(p,a) (p)->lpVtbl->Skip(p,a)
#define IEnumFilters_Reset(p) (p)->lpVtbl->Reset(p)
#define IEnumFilters_Clone(p,a) (p)->lpVtbl->Clone(p,a)

#endif

#define IEnumFilters_METHODS \
    ICOM_MSVTABLE_COMPAT_FIELDS \
    /*** IUnknown methods ***/ \
    STDMETHOD_(HRESULT,QueryInterface)(THIS_ REFIID riid, void** ppvObject) PURE; \
    STDMETHOD_(ULONG,AddRef)(THIS) PURE; \
    STDMETHOD_(ULONG,Release)(THIS) PURE; \
    /*** IEnumFilters methods ***/ \
    STDMETHOD_(HRESULT,Next)(THIS_ ULONG cFilters, IBaseFilter** ppFilter, ULONG* pcFetched) PURE; \
    STDMETHOD_(HRESULT,Skip)(THIS_ ULONG cFilters) PURE; \
    STDMETHOD_(HRESULT,Reset)(THIS) PURE; \
    STDMETHOD_(HRESULT,Clone)(THIS_ IEnumFilters** ppEnum) PURE;

HRESULT CALLBACK IEnumFilters_Next_Proxy(
    IEnumFilters* This,
    ULONG cFilters,
    IBaseFilter** ppFilter,
    ULONG* pcFetched);
void __RPC_STUB IEnumFilters_Next_Stub(
    struct IRpcStubBuffer* This,
    struct IRpcChannelBuffer* pRpcChannelBuffer,
    PRPC_MESSAGE pRpcMessage,
    DWORD* pdwStubPhase);
HRESULT CALLBACK IEnumFilters_Skip_Proxy(
    IEnumFilters* This,
    ULONG cFilters);
void __RPC_STUB IEnumFilters_Skip_Stub(
    struct IRpcStubBuffer* This,
    struct IRpcChannelBuffer* pRpcChannelBuffer,
    PRPC_MESSAGE pRpcMessage,
    DWORD* pdwStubPhase);
HRESULT CALLBACK IEnumFilters_Reset_Proxy(
    IEnumFilters* This);
void __RPC_STUB IEnumFilters_Reset_Stub(
    struct IRpcStubBuffer* This,
    struct IRpcChannelBuffer* pRpcChannelBuffer,
    PRPC_MESSAGE pRpcMessage,
    DWORD* pdwStubPhase);
HRESULT CALLBACK IEnumFilters_Clone_Proxy(
    IEnumFilters* This,
    IEnumFilters** ppEnum);
void __RPC_STUB IEnumFilters_Clone_Stub(
    struct IRpcStubBuffer* This,
    struct IRpcChannelBuffer* pRpcChannelBuffer,
    PRPC_MESSAGE pRpcMessage,
    DWORD* pdwStubPhase);

#endif  /* __IEnumFilters_INTERFACE_DEFINED__ */

typedef IEnumFilters *PENUMFILTERS;

typedef enum _FilterState {
    State_Stopped,
    State_Paused,
    State_Running
} FILTER_STATE;

/*****************************************************************************
 * IMediaFilter interface
 */
#ifndef __IMediaFilter_INTERFACE_DEFINED__
#define __IMediaFilter_INTERFACE_DEFINED__

DEFINE_GUID(IID_IMediaFilter, 0x56a86899, 0x0ad4, 0x11ce, 0xb0,0x3a, 0x00,0x20,0xaf,0x0b,0xa7,0x70);
#if defined(__cplusplus) && !defined(CINTERFACE)
struct IMediaFilter : public IPersist
{
    virtual HRESULT STDMETHODCALLTYPE Stop(
        ) = 0;

    virtual HRESULT STDMETHODCALLTYPE Pause(
        ) = 0;

    virtual HRESULT STDMETHODCALLTYPE Run(
        REFERENCE_TIME tStart) = 0;

    virtual HRESULT STDMETHODCALLTYPE GetState(
        DWORD dwMilliSecsTimeout,
        FILTER_STATE* State) = 0;

    virtual HRESULT STDMETHODCALLTYPE SetSyncSource(
        IReferenceClock* pClock) = 0;

    virtual HRESULT STDMETHODCALLTYPE GetSyncSource(
        IReferenceClock** pClock) = 0;

};
#else
typedef struct IMediaFilterVtbl IMediaFilterVtbl;
struct IMediaFilter {
    const IMediaFilterVtbl* lpVtbl;
};
struct IMediaFilterVtbl {
    ICOM_MSVTABLE_COMPAT_FIELDS

    /*** IUnknown methods ***/
    HRESULT (STDMETHODCALLTYPE *QueryInterface)(
        IMediaFilter* This,
        REFIID riid,
        void** ppvObject);

    ULONG (STDMETHODCALLTYPE *AddRef)(
        IMediaFilter* This);

    ULONG (STDMETHODCALLTYPE *Release)(
        IMediaFilter* This);

    /*** IPersist methods ***/
    HRESULT (STDMETHODCALLTYPE *GetClassID)(
        IMediaFilter* This,
        CLSID* pClassID);

    /*** IMediaFilter methods ***/
    HRESULT (STDMETHODCALLTYPE *Stop)(
        IMediaFilter* This);

    HRESULT (STDMETHODCALLTYPE *Pause)(
        IMediaFilter* This);

    HRESULT (STDMETHODCALLTYPE *Run)(
        IMediaFilter* This,
        REFERENCE_TIME tStart);

    HRESULT (STDMETHODCALLTYPE *GetState)(
        IMediaFilter* This,
        DWORD dwMilliSecsTimeout,
        FILTER_STATE* State);

    HRESULT (STDMETHODCALLTYPE *SetSyncSource)(
        IMediaFilter* This,
        IReferenceClock* pClock);

    HRESULT (STDMETHODCALLTYPE *GetSyncSource)(
        IMediaFilter* This,
        IReferenceClock** pClock);

};

/*** IUnknown methods ***/
#define IMediaFilter_QueryInterface(p,a,b) (p)->lpVtbl->QueryInterface(p,a,b)
#define IMediaFilter_AddRef(p) (p)->lpVtbl->AddRef(p)
#define IMediaFilter_Release(p) (p)->lpVtbl->Release(p)
/*** IPersist methods ***/
#define IMediaFilter_GetClassID(p,a) (p)->lpVtbl->GetClassID(p,a)
/*** IMediaFilter methods ***/
#define IMediaFilter_Stop(p) (p)->lpVtbl->Stop(p)
#define IMediaFilter_Pause(p) (p)->lpVtbl->Pause(p)
#define IMediaFilter_Run(p,a) (p)->lpVtbl->Run(p,a)
#define IMediaFilter_GetState(p,a,b) (p)->lpVtbl->GetState(p,a,b)
#define IMediaFilter_SetSyncSource(p,a) (p)->lpVtbl->SetSyncSource(p,a)
#define IMediaFilter_GetSyncSource(p,a) (p)->lpVtbl->GetSyncSource(p,a)

#endif

#define IMediaFilter_METHODS \
    ICOM_MSVTABLE_COMPAT_FIELDS \
    /*** IUnknown methods ***/ \
    STDMETHOD_(HRESULT,QueryInterface)(THIS_ REFIID riid, void** ppvObject) PURE; \
    STDMETHOD_(ULONG,AddRef)(THIS) PURE; \
    STDMETHOD_(ULONG,Release)(THIS) PURE; \
    /*** IPersist methods ***/ \
    STDMETHOD_(HRESULT,GetClassID)(THIS_ CLSID* pClassID) PURE; \
    /*** IMediaFilter methods ***/ \
    STDMETHOD_(HRESULT,Stop)(THIS) PURE; \
    STDMETHOD_(HRESULT,Pause)(THIS) PURE; \
    STDMETHOD_(HRESULT,Run)(THIS_ REFERENCE_TIME tStart) PURE; \
    STDMETHOD_(HRESULT,GetState)(THIS_ DWORD dwMilliSecsTimeout, FILTER_STATE* State) PURE; \
    STDMETHOD_(HRESULT,SetSyncSource)(THIS_ IReferenceClock* pClock) PURE; \
    STDMETHOD_(HRESULT,GetSyncSource)(THIS_ IReferenceClock** pClock) PURE;

HRESULT CALLBACK IMediaFilter_Stop_Proxy(
    IMediaFilter* This);
void __RPC_STUB IMediaFilter_Stop_Stub(
    struct IRpcStubBuffer* This,
    struct IRpcChannelBuffer* pRpcChannelBuffer,
    PRPC_MESSAGE pRpcMessage,
    DWORD* pdwStubPhase);
HRESULT CALLBACK IMediaFilter_Pause_Proxy(
    IMediaFilter* This);
void __RPC_STUB IMediaFilter_Pause_Stub(
    struct IRpcStubBuffer* This,
    struct IRpcChannelBuffer* pRpcChannelBuffer,
    PRPC_MESSAGE pRpcMessage,
    DWORD* pdwStubPhase);
HRESULT CALLBACK IMediaFilter_Run_Proxy(
    IMediaFilter* This,
    REFERENCE_TIME tStart);
void __RPC_STUB IMediaFilter_Run_Stub(
    struct IRpcStubBuffer* This,
    struct IRpcChannelBuffer* pRpcChannelBuffer,
    PRPC_MESSAGE pRpcMessage,
    DWORD* pdwStubPhase);
HRESULT CALLBACK IMediaFilter_GetState_Proxy(
    IMediaFilter* This,
    DWORD dwMilliSecsTimeout,
    FILTER_STATE* State);
void __RPC_STUB IMediaFilter_GetState_Stub(
    struct IRpcStubBuffer* This,
    struct IRpcChannelBuffer* pRpcChannelBuffer,
    PRPC_MESSAGE pRpcMessage,
    DWORD* pdwStubPhase);
HRESULT CALLBACK IMediaFilter_SetSyncSource_Proxy(
    IMediaFilter* This,
    IReferenceClock* pClock);
void __RPC_STUB IMediaFilter_SetSyncSource_Stub(
    struct IRpcStubBuffer* This,
    struct IRpcChannelBuffer* pRpcChannelBuffer,
    PRPC_MESSAGE pRpcMessage,
    DWORD* pdwStubPhase);
HRESULT CALLBACK IMediaFilter_GetSyncSource_Proxy(
    IMediaFilter* This,
    IReferenceClock** pClock);
void __RPC_STUB IMediaFilter_GetSyncSource_Stub(
    struct IRpcStubBuffer* This,
    struct IRpcChannelBuffer* pRpcChannelBuffer,
    PRPC_MESSAGE pRpcMessage,
    DWORD* pdwStubPhase);

#endif  /* __IMediaFilter_INTERFACE_DEFINED__ */

typedef IMediaFilter *PMEDIAFILTER;

typedef struct _FilterInfo {
    WCHAR achName[128];
    IFilterGraph *pGraph;
} FILTER_INFO;

/*****************************************************************************
 * IBaseFilter interface
 */
#ifndef __IBaseFilter_INTERFACE_DEFINED__
#define __IBaseFilter_INTERFACE_DEFINED__

DEFINE_GUID(IID_IBaseFilter, 0x56a86895, 0x0ad4, 0x11ce, 0xb0,0x3a, 0x00,0x20,0xaf,0x0b,0xa7,0x70);
#if defined(__cplusplus) && !defined(CINTERFACE)
struct IBaseFilter : public IMediaFilter
{
    virtual HRESULT STDMETHODCALLTYPE EnumPins(
        IEnumPins** ppEnum) = 0;

    virtual HRESULT STDMETHODCALLTYPE FindPin(
        LPCWSTR Id,
        IPin** ppPin) = 0;

    virtual HRESULT STDMETHODCALLTYPE QueryFilterInfo(
        FILTER_INFO* pInfo) = 0;

    virtual HRESULT STDMETHODCALLTYPE JoinFilterGraph(
        IFilterGraph* pGraph,
        LPCWSTR pName) = 0;

    virtual HRESULT STDMETHODCALLTYPE QueryVendorInfo(
        LPWSTR* pVendorInfo) = 0;

};
#else
typedef struct IBaseFilterVtbl IBaseFilterVtbl;
struct IBaseFilter {
    const IBaseFilterVtbl* lpVtbl;
};
struct IBaseFilterVtbl {
    ICOM_MSVTABLE_COMPAT_FIELDS

    /*** IUnknown methods ***/
    HRESULT (STDMETHODCALLTYPE *QueryInterface)(
        IBaseFilter* This,
        REFIID riid,
        void** ppvObject);

    ULONG (STDMETHODCALLTYPE *AddRef)(
        IBaseFilter* This);

    ULONG (STDMETHODCALLTYPE *Release)(
        IBaseFilter* This);

    /*** IPersist methods ***/
    HRESULT (STDMETHODCALLTYPE *GetClassID)(
        IBaseFilter* This,
        CLSID* pClassID);

    /*** IMediaFilter methods ***/
    HRESULT (STDMETHODCALLTYPE *Stop)(
        IBaseFilter* This);

    HRESULT (STDMETHODCALLTYPE *Pause)(
        IBaseFilter* This);

    HRESULT (STDMETHODCALLTYPE *Run)(
        IBaseFilter* This,
        REFERENCE_TIME tStart);

    HRESULT (STDMETHODCALLTYPE *GetState)(
        IBaseFilter* This,
        DWORD dwMilliSecsTimeout,
        FILTER_STATE* State);

    HRESULT (STDMETHODCALLTYPE *SetSyncSource)(
        IBaseFilter* This,
        IReferenceClock* pClock);

    HRESULT (STDMETHODCALLTYPE *GetSyncSource)(
        IBaseFilter* This,
        IReferenceClock** pClock);

    /*** IBaseFilter methods ***/
    HRESULT (STDMETHODCALLTYPE *EnumPins)(
        IBaseFilter* This,
        IEnumPins** ppEnum);

    HRESULT (STDMETHODCALLTYPE *FindPin)(
        IBaseFilter* This,
        LPCWSTR Id,
        IPin** ppPin);

    HRESULT (STDMETHODCALLTYPE *QueryFilterInfo)(
        IBaseFilter* This,
        FILTER_INFO* pInfo);

    HRESULT (STDMETHODCALLTYPE *JoinFilterGraph)(
        IBaseFilter* This,
        IFilterGraph* pGraph,
        LPCWSTR pName);

    HRESULT (STDMETHODCALLTYPE *QueryVendorInfo)(
        IBaseFilter* This,
        LPWSTR* pVendorInfo);

};

/*** IUnknown methods ***/
#define IBaseFilter_QueryInterface(p,a,b) (p)->lpVtbl->QueryInterface(p,a,b)
#define IBaseFilter_AddRef(p) (p)->lpVtbl->AddRef(p)
#define IBaseFilter_Release(p) (p)->lpVtbl->Release(p)
/*** IPersist methods ***/
#define IBaseFilter_GetClassID(p,a) (p)->lpVtbl->GetClassID(p,a)
/*** IMediaFilter methods ***/
#define IBaseFilter_Stop(p) (p)->lpVtbl->Stop(p)
#define IBaseFilter_Pause(p) (p)->lpVtbl->Pause(p)
#define IBaseFilter_Run(p,a) (p)->lpVtbl->Run(p,a)
#define IBaseFilter_GetState(p,a,b) (p)->lpVtbl->GetState(p,a,b)
#define IBaseFilter_SetSyncSource(p,a) (p)->lpVtbl->SetSyncSource(p,a)
#define IBaseFilter_GetSyncSource(p,a) (p)->lpVtbl->GetSyncSource(p,a)
/*** IBaseFilter methods ***/
#define IBaseFilter_EnumPins(p,a) (p)->lpVtbl->EnumPins(p,a)
#define IBaseFilter_FindPin(p,a,b) (p)->lpVtbl->FindPin(p,a,b)
#define IBaseFilter_QueryFilterInfo(p,a) (p)->lpVtbl->QueryFilterInfo(p,a)
#define IBaseFilter_JoinFilterGraph(p,a,b) (p)->lpVtbl->JoinFilterGraph(p,a,b)
#define IBaseFilter_QueryVendorInfo(p,a) (p)->lpVtbl->QueryVendorInfo(p,a)

#endif

#define IBaseFilter_METHODS \
    ICOM_MSVTABLE_COMPAT_FIELDS \
    /*** IUnknown methods ***/ \
    STDMETHOD_(HRESULT,QueryInterface)(THIS_ REFIID riid, void** ppvObject) PURE; \
    STDMETHOD_(ULONG,AddRef)(THIS) PURE; \
    STDMETHOD_(ULONG,Release)(THIS) PURE; \
    /*** IPersist methods ***/ \
    STDMETHOD_(HRESULT,GetClassID)(THIS_ CLSID* pClassID) PURE; \
    /*** IMediaFilter methods ***/ \
    STDMETHOD_(HRESULT,Stop)(THIS) PURE; \
    STDMETHOD_(HRESULT,Pause)(THIS) PURE; \
    STDMETHOD_(HRESULT,Run)(THIS_ REFERENCE_TIME tStart) PURE; \
    STDMETHOD_(HRESULT,GetState)(THIS_ DWORD dwMilliSecsTimeout, FILTER_STATE* State) PURE; \
    STDMETHOD_(HRESULT,SetSyncSource)(THIS_ IReferenceClock* pClock) PURE; \
    STDMETHOD_(HRESULT,GetSyncSource)(THIS_ IReferenceClock** pClock) PURE; \
    /*** IBaseFilter methods ***/ \
    STDMETHOD_(HRESULT,EnumPins)(THIS_ IEnumPins** ppEnum) PURE; \
    STDMETHOD_(HRESULT,FindPin)(THIS_ LPCWSTR Id, IPin** ppPin) PURE; \
    STDMETHOD_(HRESULT,QueryFilterInfo)(THIS_ FILTER_INFO* pInfo) PURE; \
    STDMETHOD_(HRESULT,JoinFilterGraph)(THIS_ IFilterGraph* pGraph, LPCWSTR pName) PURE; \
    STDMETHOD_(HRESULT,QueryVendorInfo)(THIS_ LPWSTR* pVendorInfo) PURE;

HRESULT CALLBACK IBaseFilter_EnumPins_Proxy(
    IBaseFilter* This,
    IEnumPins** ppEnum);
void __RPC_STUB IBaseFilter_EnumPins_Stub(
    struct IRpcStubBuffer* This,
    struct IRpcChannelBuffer* pRpcChannelBuffer,
    PRPC_MESSAGE pRpcMessage,
    DWORD* pdwStubPhase);
HRESULT CALLBACK IBaseFilter_FindPin_Proxy(
    IBaseFilter* This,
    LPCWSTR Id,
    IPin** ppPin);
void __RPC_STUB IBaseFilter_FindPin_Stub(
    struct IRpcStubBuffer* This,
    struct IRpcChannelBuffer* pRpcChannelBuffer,
    PRPC_MESSAGE pRpcMessage,
    DWORD* pdwStubPhase);
HRESULT CALLBACK IBaseFilter_QueryFilterInfo_Proxy(
    IBaseFilter* This,
    FILTER_INFO* pInfo);
void __RPC_STUB IBaseFilter_QueryFilterInfo_Stub(
    struct IRpcStubBuffer* This,
    struct IRpcChannelBuffer* pRpcChannelBuffer,
    PRPC_MESSAGE pRpcMessage,
    DWORD* pdwStubPhase);
HRESULT CALLBACK IBaseFilter_JoinFilterGraph_Proxy(
    IBaseFilter* This,
    IFilterGraph* pGraph,
    LPCWSTR pName);
void __RPC_STUB IBaseFilter_JoinFilterGraph_Stub(
    struct IRpcStubBuffer* This,
    struct IRpcChannelBuffer* pRpcChannelBuffer,
    PRPC_MESSAGE pRpcMessage,
    DWORD* pdwStubPhase);
HRESULT CALLBACK IBaseFilter_QueryVendorInfo_Proxy(
    IBaseFilter* This,
    LPWSTR* pVendorInfo);
void __RPC_STUB IBaseFilter_QueryVendorInfo_Stub(
    struct IRpcStubBuffer* This,
    struct IRpcChannelBuffer* pRpcChannelBuffer,
    PRPC_MESSAGE pRpcMessage,
    DWORD* pdwStubPhase);

#endif  /* __IBaseFilter_INTERFACE_DEFINED__ */

typedef IBaseFilter *PFILTER;

/*****************************************************************************
 * IReferenceClock interface
 */
#ifndef __IReferenceClock_INTERFACE_DEFINED__
#define __IReferenceClock_INTERFACE_DEFINED__

DEFINE_GUID(IID_IReferenceClock, 0x56a86897, 0x0ad4, 0x11ce, 0xb0,0x3a, 0x00,0x20,0xaf,0x0b,0xa7,0x70);
#if defined(__cplusplus) && !defined(CINTERFACE)
struct IReferenceClock : public IUnknown
{
    virtual HRESULT STDMETHODCALLTYPE GetTime(
        REFERENCE_TIME* pTime) = 0;

    virtual HRESULT STDMETHODCALLTYPE AdviseTime(
        REFERENCE_TIME baseTime,
        REFERENCE_TIME streamTime,
        HEVENT hEvent,
        DWORD_PTR* pdwAdviseCookie) = 0;

    virtual HRESULT STDMETHODCALLTYPE AdvisePeriodic(
        REFERENCE_TIME startTime,
        REFERENCE_TIME periodTime,
        HSEMAPHORE hSemaphore,
        DWORD_PTR* pdwAdviseCookie) = 0;

    virtual HRESULT STDMETHODCALLTYPE Unadvise(
        DWORD_PTR dwAdviseCookie) = 0;

};
#else
typedef struct IReferenceClockVtbl IReferenceClockVtbl;
struct IReferenceClock {
    const IReferenceClockVtbl* lpVtbl;
};
struct IReferenceClockVtbl {
    ICOM_MSVTABLE_COMPAT_FIELDS

    /*** IUnknown methods ***/
    HRESULT (STDMETHODCALLTYPE *QueryInterface)(
        IReferenceClock* This,
        REFIID riid,
        void** ppvObject);

    ULONG (STDMETHODCALLTYPE *AddRef)(
        IReferenceClock* This);

    ULONG (STDMETHODCALLTYPE *Release)(
        IReferenceClock* This);

    /*** IReferenceClock methods ***/
    HRESULT (STDMETHODCALLTYPE *GetTime)(
        IReferenceClock* This,
        REFERENCE_TIME* pTime);

    HRESULT (STDMETHODCALLTYPE *AdviseTime)(
        IReferenceClock* This,
        REFERENCE_TIME baseTime,
        REFERENCE_TIME streamTime,
        HEVENT hEvent,
        DWORD_PTR* pdwAdviseCookie);

    HRESULT (STDMETHODCALLTYPE *AdvisePeriodic)(
        IReferenceClock* This,
        REFERENCE_TIME startTime,
        REFERENCE_TIME periodTime,
        HSEMAPHORE hSemaphore,
        DWORD_PTR* pdwAdviseCookie);

    HRESULT (STDMETHODCALLTYPE *Unadvise)(
        IReferenceClock* This,
        DWORD_PTR dwAdviseCookie);

};

/*** IUnknown methods ***/
#define IReferenceClock_QueryInterface(p,a,b) (p)->lpVtbl->QueryInterface(p,a,b)
#define IReferenceClock_AddRef(p) (p)->lpVtbl->AddRef(p)
#define IReferenceClock_Release(p) (p)->lpVtbl->Release(p)
/*** IReferenceClock methods ***/
#define IReferenceClock_GetTime(p,a) (p)->lpVtbl->GetTime(p,a)
#define IReferenceClock_AdviseTime(p,a,b,c,d) (p)->lpVtbl->AdviseTime(p,a,b,c,d)
#define IReferenceClock_AdvisePeriodic(p,a,b,c,d) (p)->lpVtbl->AdvisePeriodic(p,a,b,c,d)
#define IReferenceClock_Unadvise(p,a) (p)->lpVtbl->Unadvise(p,a)

#endif

#define IReferenceClock_METHODS \
    ICOM_MSVTABLE_COMPAT_FIELDS \
    /*** IUnknown methods ***/ \
    STDMETHOD_(HRESULT,QueryInterface)(THIS_ REFIID riid, void** ppvObject) PURE; \
    STDMETHOD_(ULONG,AddRef)(THIS) PURE; \
    STDMETHOD_(ULONG,Release)(THIS) PURE; \
    /*** IReferenceClock methods ***/ \
    STDMETHOD_(HRESULT,GetTime)(THIS_ REFERENCE_TIME* pTime) PURE; \
    STDMETHOD_(HRESULT,AdviseTime)(THIS_ REFERENCE_TIME baseTime, REFERENCE_TIME streamTime, HEVENT hEvent, DWORD_PTR* pdwAdviseCookie) PURE; \
    STDMETHOD_(HRESULT,AdvisePeriodic)(THIS_ REFERENCE_TIME startTime, REFERENCE_TIME periodTime, HSEMAPHORE hSemaphore, DWORD_PTR* pdwAdviseCookie) PURE; \
    STDMETHOD_(HRESULT,Unadvise)(THIS_ DWORD_PTR dwAdviseCookie) PURE;

HRESULT CALLBACK IReferenceClock_GetTime_Proxy(
    IReferenceClock* This,
    REFERENCE_TIME* pTime);
void __RPC_STUB IReferenceClock_GetTime_Stub(
    struct IRpcStubBuffer* This,
    struct IRpcChannelBuffer* pRpcChannelBuffer,
    PRPC_MESSAGE pRpcMessage,
    DWORD* pdwStubPhase);
HRESULT CALLBACK IReferenceClock_AdviseTime_Proxy(
    IReferenceClock* This,
    REFERENCE_TIME baseTime,
    REFERENCE_TIME streamTime,
    HEVENT hEvent,
    DWORD_PTR* pdwAdviseCookie);
void __RPC_STUB IReferenceClock_AdviseTime_Stub(
    struct IRpcStubBuffer* This,
    struct IRpcChannelBuffer* pRpcChannelBuffer,
    PRPC_MESSAGE pRpcMessage,
    DWORD* pdwStubPhase);
HRESULT CALLBACK IReferenceClock_AdvisePeriodic_Proxy(
    IReferenceClock* This,
    REFERENCE_TIME startTime,
    REFERENCE_TIME periodTime,
    HSEMAPHORE hSemaphore,
    DWORD_PTR* pdwAdviseCookie);
void __RPC_STUB IReferenceClock_AdvisePeriodic_Stub(
    struct IRpcStubBuffer* This,
    struct IRpcChannelBuffer* pRpcChannelBuffer,
    PRPC_MESSAGE pRpcMessage,
    DWORD* pdwStubPhase);
HRESULT CALLBACK IReferenceClock_Unadvise_Proxy(
    IReferenceClock* This,
    DWORD_PTR dwAdviseCookie);
void __RPC_STUB IReferenceClock_Unadvise_Stub(
    struct IRpcStubBuffer* This,
    struct IRpcChannelBuffer* pRpcChannelBuffer,
    PRPC_MESSAGE pRpcMessage,
    DWORD* pdwStubPhase);

#endif  /* __IReferenceClock_INTERFACE_DEFINED__ */

typedef IReferenceClock *PREFERENCECLOCK;

/*****************************************************************************
 * IMediaSample interface
 */
#ifndef __IMediaSample_INTERFACE_DEFINED__
#define __IMediaSample_INTERFACE_DEFINED__

DEFINE_GUID(IID_IMediaSample, 0x56a8689a, 0x0ad4, 0x11ce, 0xb0,0x3a, 0x00,0x20,0xaf,0x0b,0xa7,0x70);
#if defined(__cplusplus) && !defined(CINTERFACE)
struct IMediaSample : public IUnknown
{
    virtual HRESULT STDMETHODCALLTYPE GetPointer(
        BYTE** ppBuffer) = 0;

    virtual long STDMETHODCALLTYPE GetSize(
        ) = 0;

    virtual HRESULT STDMETHODCALLTYPE GetTime(
        REFERENCE_TIME* pTimeStart,
        REFERENCE_TIME* pTimeEnd) = 0;

    virtual HRESULT STDMETHODCALLTYPE SetTime(
        REFERENCE_TIME* pTimeStart,
        REFERENCE_TIME* pTimeEnd) = 0;

    virtual HRESULT STDMETHODCALLTYPE IsSyncPoint(
        ) = 0;

    virtual HRESULT STDMETHODCALLTYPE SetSyncPoint(
        BOOL bIsSyncPoint) = 0;

    virtual HRESULT STDMETHODCALLTYPE IsPreroll(
        ) = 0;

    virtual HRESULT STDMETHODCALLTYPE SetPreroll(
        BOOL bIsPreroll) = 0;

    virtual long STDMETHODCALLTYPE GetActualDataLength(
        ) = 0;

    virtual HRESULT STDMETHODCALLTYPE SetActualDataLength(
        long length) = 0;

    virtual HRESULT STDMETHODCALLTYPE GetMediaType(
        AM_MEDIA_TYPE** ppMediaType) = 0;

    virtual HRESULT STDMETHODCALLTYPE SetMediaType(
        AM_MEDIA_TYPE* pMediaType) = 0;

    virtual HRESULT STDMETHODCALLTYPE IsDiscontinuity(
        ) = 0;

    virtual HRESULT STDMETHODCALLTYPE SetDiscontinuity(
        BOOL bDiscontinuity) = 0;

    virtual HRESULT STDMETHODCALLTYPE GetMediaTime(
        LONGLONG* pTimeStart,
        LONGLONG* pTimeEnd) = 0;

    virtual HRESULT STDMETHODCALLTYPE SetMediaTime(
        LONGLONG* pTimeStart,
        LONGLONG* pTimeEnd) = 0;

};
#else
typedef struct IMediaSampleVtbl IMediaSampleVtbl;
struct IMediaSample {
    const IMediaSampleVtbl* lpVtbl;
};
struct IMediaSampleVtbl {
    ICOM_MSVTABLE_COMPAT_FIELDS

    /*** IUnknown methods ***/
    HRESULT (STDMETHODCALLTYPE *QueryInterface)(
        IMediaSample* This,
        REFIID riid,
        void** ppvObject);

    ULONG (STDMETHODCALLTYPE *AddRef)(
        IMediaSample* This);

    ULONG (STDMETHODCALLTYPE *Release)(
        IMediaSample* This);

    /*** IMediaSample methods ***/
    HRESULT (STDMETHODCALLTYPE *GetPointer)(
        IMediaSample* This,
        BYTE** ppBuffer);

    long (STDMETHODCALLTYPE *GetSize)(
        IMediaSample* This);

    HRESULT (STDMETHODCALLTYPE *GetTime)(
        IMediaSample* This,
        REFERENCE_TIME* pTimeStart,
        REFERENCE_TIME* pTimeEnd);

    HRESULT (STDMETHODCALLTYPE *SetTime)(
        IMediaSample* This,
        REFERENCE_TIME* pTimeStart,
        REFERENCE_TIME* pTimeEnd);

    HRESULT (STDMETHODCALLTYPE *IsSyncPoint)(
        IMediaSample* This);

    HRESULT (STDMETHODCALLTYPE *SetSyncPoint)(
        IMediaSample* This,
        BOOL bIsSyncPoint);

    HRESULT (STDMETHODCALLTYPE *IsPreroll)(
        IMediaSample* This);

    HRESULT (STDMETHODCALLTYPE *SetPreroll)(
        IMediaSample* This,
        BOOL bIsPreroll);

    long (STDMETHODCALLTYPE *GetActualDataLength)(
        IMediaSample* This);

    HRESULT (STDMETHODCALLTYPE *SetActualDataLength)(
        IMediaSample* This,
        long length);

    HRESULT (STDMETHODCALLTYPE *GetMediaType)(
        IMediaSample* This,
        AM_MEDIA_TYPE** ppMediaType);

    HRESULT (STDMETHODCALLTYPE *SetMediaType)(
        IMediaSample* This,
        AM_MEDIA_TYPE* pMediaType);

    HRESULT (STDMETHODCALLTYPE *IsDiscontinuity)(
        IMediaSample* This);

    HRESULT (STDMETHODCALLTYPE *SetDiscontinuity)(
        IMediaSample* This,
        BOOL bDiscontinuity);

    HRESULT (STDMETHODCALLTYPE *GetMediaTime)(
        IMediaSample* This,
        LONGLONG* pTimeStart,
        LONGLONG* pTimeEnd);

    HRESULT (STDMETHODCALLTYPE *SetMediaTime)(
        IMediaSample* This,
        LONGLONG* pTimeStart,
        LONGLONG* pTimeEnd);

};

/*** IUnknown methods ***/
#define IMediaSample_QueryInterface(p,a,b) (p)->lpVtbl->QueryInterface(p,a,b)
#define IMediaSample_AddRef(p) (p)->lpVtbl->AddRef(p)
#define IMediaSample_Release(p) (p)->lpVtbl->Release(p)
/*** IMediaSample methods ***/
#define IMediaSample_GetPointer(p,a) (p)->lpVtbl->GetPointer(p,a)
#define IMediaSample_GetSize(p) (p)->lpVtbl->GetSize(p)
#define IMediaSample_GetTime(p,a,b) (p)->lpVtbl->GetTime(p,a,b)
#define IMediaSample_SetTime(p,a,b) (p)->lpVtbl->SetTime(p,a,b)
#define IMediaSample_IsSyncPoint(p) (p)->lpVtbl->IsSyncPoint(p)
#define IMediaSample_SetSyncPoint(p,a) (p)->lpVtbl->SetSyncPoint(p,a)
#define IMediaSample_IsPreroll(p) (p)->lpVtbl->IsPreroll(p)
#define IMediaSample_SetPreroll(p,a) (p)->lpVtbl->SetPreroll(p,a)
#define IMediaSample_GetActualDataLength(p) (p)->lpVtbl->GetActualDataLength(p)
#define IMediaSample_SetActualDataLength(p,a) (p)->lpVtbl->SetActualDataLength(p,a)
#define IMediaSample_GetMediaType(p,a) (p)->lpVtbl->GetMediaType(p,a)
#define IMediaSample_SetMediaType(p,a) (p)->lpVtbl->SetMediaType(p,a)
#define IMediaSample_IsDiscontinuity(p) (p)->lpVtbl->IsDiscontinuity(p)
#define IMediaSample_SetDiscontinuity(p,a) (p)->lpVtbl->SetDiscontinuity(p,a)
#define IMediaSample_GetMediaTime(p,a,b) (p)->lpVtbl->GetMediaTime(p,a,b)
#define IMediaSample_SetMediaTime(p,a,b) (p)->lpVtbl->SetMediaTime(p,a,b)

#endif

#define IMediaSample_METHODS \
    ICOM_MSVTABLE_COMPAT_FIELDS \
    /*** IUnknown methods ***/ \
    STDMETHOD_(HRESULT,QueryInterface)(THIS_ REFIID riid, void** ppvObject) PURE; \
    STDMETHOD_(ULONG,AddRef)(THIS) PURE; \
    STDMETHOD_(ULONG,Release)(THIS) PURE; \
    /*** IMediaSample methods ***/ \
    STDMETHOD_(HRESULT,GetPointer)(THIS_ BYTE** ppBuffer) PURE; \
    STDMETHOD_(long,GetSize)(THIS) PURE; \
    STDMETHOD_(HRESULT,GetTime)(THIS_ REFERENCE_TIME* pTimeStart, REFERENCE_TIME* pTimeEnd) PURE; \
    STDMETHOD_(HRESULT,SetTime)(THIS_ REFERENCE_TIME* pTimeStart, REFERENCE_TIME* pTimeEnd) PURE; \
    STDMETHOD_(HRESULT,IsSyncPoint)(THIS) PURE; \
    STDMETHOD_(HRESULT,SetSyncPoint)(THIS_ BOOL bIsSyncPoint) PURE; \
    STDMETHOD_(HRESULT,IsPreroll)(THIS) PURE; \
    STDMETHOD_(HRESULT,SetPreroll)(THIS_ BOOL bIsPreroll) PURE; \
    STDMETHOD_(long,GetActualDataLength)(THIS) PURE; \
    STDMETHOD_(HRESULT,SetActualDataLength)(THIS_ long length) PURE; \
    STDMETHOD_(HRESULT,GetMediaType)(THIS_ AM_MEDIA_TYPE** ppMediaType) PURE; \
    STDMETHOD_(HRESULT,SetMediaType)(THIS_ AM_MEDIA_TYPE* pMediaType) PURE; \
    STDMETHOD_(HRESULT,IsDiscontinuity)(THIS) PURE; \
    STDMETHOD_(HRESULT,SetDiscontinuity)(THIS_ BOOL bDiscontinuity) PURE; \
    STDMETHOD_(HRESULT,GetMediaTime)(THIS_ LONGLONG* pTimeStart, LONGLONG* pTimeEnd) PURE; \
    STDMETHOD_(HRESULT,SetMediaTime)(THIS_ LONGLONG* pTimeStart, LONGLONG* pTimeEnd) PURE;

HRESULT CALLBACK IMediaSample_GetPointer_Proxy(
    IMediaSample* This,
    BYTE** ppBuffer);
void __RPC_STUB IMediaSample_GetPointer_Stub(
    struct IRpcStubBuffer* This,
    struct IRpcChannelBuffer* pRpcChannelBuffer,
    PRPC_MESSAGE pRpcMessage,
    DWORD* pdwStubPhase);
long CALLBACK IMediaSample_GetSize_Proxy(
    IMediaSample* This);
void __RPC_STUB IMediaSample_GetSize_Stub(
    struct IRpcStubBuffer* This,
    struct IRpcChannelBuffer* pRpcChannelBuffer,
    PRPC_MESSAGE pRpcMessage,
    DWORD* pdwStubPhase);
HRESULT CALLBACK IMediaSample_GetTime_Proxy(
    IMediaSample* This,
    REFERENCE_TIME* pTimeStart,
    REFERENCE_TIME* pTimeEnd);
void __RPC_STUB IMediaSample_GetTime_Stub(
    struct IRpcStubBuffer* This,
    struct IRpcChannelBuffer* pRpcChannelBuffer,
    PRPC_MESSAGE pRpcMessage,
    DWORD* pdwStubPhase);
HRESULT CALLBACK IMediaSample_SetTime_Proxy(
    IMediaSample* This,
    REFERENCE_TIME* pTimeStart,
    REFERENCE_TIME* pTimeEnd);
void __RPC_STUB IMediaSample_SetTime_Stub(
    struct IRpcStubBuffer* This,
    struct IRpcChannelBuffer* pRpcChannelBuffer,
    PRPC_MESSAGE pRpcMessage,
    DWORD* pdwStubPhase);
HRESULT CALLBACK IMediaSample_IsSyncPoint_Proxy(
    IMediaSample* This);
void __RPC_STUB IMediaSample_IsSyncPoint_Stub(
    struct IRpcStubBuffer* This,
    struct IRpcChannelBuffer* pRpcChannelBuffer,
    PRPC_MESSAGE pRpcMessage,
    DWORD* pdwStubPhase);
HRESULT CALLBACK IMediaSample_SetSyncPoint_Proxy(
    IMediaSample* This,
    BOOL bIsSyncPoint);
void __RPC_STUB IMediaSample_SetSyncPoint_Stub(
    struct IRpcStubBuffer* This,
    struct IRpcChannelBuffer* pRpcChannelBuffer,
    PRPC_MESSAGE pRpcMessage,
    DWORD* pdwStubPhase);
HRESULT CALLBACK IMediaSample_IsPreroll_Proxy(
    IMediaSample* This);
void __RPC_STUB IMediaSample_IsPreroll_Stub(
    struct IRpcStubBuffer* This,
    struct IRpcChannelBuffer* pRpcChannelBuffer,
    PRPC_MESSAGE pRpcMessage,
    DWORD* pdwStubPhase);
HRESULT CALLBACK IMediaSample_SetPreroll_Proxy(
    IMediaSample* This,
    BOOL bIsPreroll);
void __RPC_STUB IMediaSample_SetPreroll_Stub(
    struct IRpcStubBuffer* This,
    struct IRpcChannelBuffer* pRpcChannelBuffer,
    PRPC_MESSAGE pRpcMessage,
    DWORD* pdwStubPhase);
long CALLBACK IMediaSample_GetActualDataLength_Proxy(
    IMediaSample* This);
void __RPC_STUB IMediaSample_GetActualDataLength_Stub(
    struct IRpcStubBuffer* This,
    struct IRpcChannelBuffer* pRpcChannelBuffer,
    PRPC_MESSAGE pRpcMessage,
    DWORD* pdwStubPhase);
HRESULT CALLBACK IMediaSample_SetActualDataLength_Proxy(
    IMediaSample* This,
    long length);
void __RPC_STUB IMediaSample_SetActualDataLength_Stub(
    struct IRpcStubBuffer* This,
    struct IRpcChannelBuffer* pRpcChannelBuffer,
    PRPC_MESSAGE pRpcMessage,
    DWORD* pdwStubPhase);
HRESULT CALLBACK IMediaSample_GetMediaType_Proxy(
    IMediaSample* This,
    AM_MEDIA_TYPE** ppMediaType);
void __RPC_STUB IMediaSample_GetMediaType_Stub(
    struct IRpcStubBuffer* This,
    struct IRpcChannelBuffer* pRpcChannelBuffer,
    PRPC_MESSAGE pRpcMessage,
    DWORD* pdwStubPhase);
HRESULT CALLBACK IMediaSample_SetMediaType_Proxy(
    IMediaSample* This,
    AM_MEDIA_TYPE* pMediaType);
void __RPC_STUB IMediaSample_SetMediaType_Stub(
    struct IRpcStubBuffer* This,
    struct IRpcChannelBuffer* pRpcChannelBuffer,
    PRPC_MESSAGE pRpcMessage,
    DWORD* pdwStubPhase);
HRESULT CALLBACK IMediaSample_IsDiscontinuity_Proxy(
    IMediaSample* This);
void __RPC_STUB IMediaSample_IsDiscontinuity_Stub(
    struct IRpcStubBuffer* This,
    struct IRpcChannelBuffer* pRpcChannelBuffer,
    PRPC_MESSAGE pRpcMessage,
    DWORD* pdwStubPhase);
HRESULT CALLBACK IMediaSample_SetDiscontinuity_Proxy(
    IMediaSample* This,
    BOOL bDiscontinuity);
void __RPC_STUB IMediaSample_SetDiscontinuity_Stub(
    struct IRpcStubBuffer* This,
    struct IRpcChannelBuffer* pRpcChannelBuffer,
    PRPC_MESSAGE pRpcMessage,
    DWORD* pdwStubPhase);
HRESULT CALLBACK IMediaSample_GetMediaTime_Proxy(
    IMediaSample* This,
    LONGLONG* pTimeStart,
    LONGLONG* pTimeEnd);
void __RPC_STUB IMediaSample_GetMediaTime_Stub(
    struct IRpcStubBuffer* This,
    struct IRpcChannelBuffer* pRpcChannelBuffer,
    PRPC_MESSAGE pRpcMessage,
    DWORD* pdwStubPhase);
HRESULT CALLBACK IMediaSample_SetMediaTime_Proxy(
    IMediaSample* This,
    LONGLONG* pTimeStart,
    LONGLONG* pTimeEnd);
void __RPC_STUB IMediaSample_SetMediaTime_Stub(
    struct IRpcStubBuffer* This,
    struct IRpcChannelBuffer* pRpcChannelBuffer,
    PRPC_MESSAGE pRpcMessage,
    DWORD* pdwStubPhase);

#endif  /* __IMediaSample_INTERFACE_DEFINED__ */

typedef IMediaSample *PMEDIASAMPLE;

enum tagAM_SAMPLE_PROPERTY_FLAGS {
    AM_SAMPLE_SPLICEPOINT = 0x1,
    AM_SAMPLE_PREROLL = 0x2,
    AM_SAMPLE_DATADISCONTINUITY = 0x4,
    AM_SAMPLE_TYPECHANGED = 0x8,
    AM_SAMPLE_TIMEVALID = 0x10,
    AM_SAMPLE_TIMEDISCONTINUITY = 0x40,
    AM_SAMPLE_FLUSH_ON_PAUSE = 0x80,
    AM_SAMPLE_STOPVALID = 0x100,
    AM_SAMPLE_ENDOFSTREAM = 0x200,
    AM_STREAM_MEDIA = 0,
    AM_STREAM_CONTROL = 1
};

typedef struct tagAM_SAMPLE2_PROPERTIES {
    DWORD cbData;
    DWORD dwTypeSpecificFlags;
    DWORD dwSampleFlags;
    LONG lActual;
    REFERENCE_TIME tStart;
    REFERENCE_TIME tStop;
    DWORD dwStreamId;
    AM_MEDIA_TYPE *pMediaType;
    BYTE *pbBuffer;
    LONG cbBuffer;
} AM_SAMPLE2_PROPERTIES;

#ifndef __IMediaSample2_FWD_DEFINED__
#define __IMediaSample2_FWD_DEFINED__
typedef struct IMediaSample2 IMediaSample2;
#endif

/*****************************************************************************
 * IMediaSample2 interface
 */
#ifndef __IMediaSample2_INTERFACE_DEFINED__
#define __IMediaSample2_INTERFACE_DEFINED__

DEFINE_GUID(IID_IMediaSample2, 0x36b73884, 0xc2c8, 0x11cf, 0x8b,0x46, 0x00,0x80,0x5f,0x6c,0xef,0x60);
#if defined(__cplusplus) && !defined(CINTERFACE)
struct IMediaSample2 : public IMediaSample
{
    virtual HRESULT STDMETHODCALLTYPE GetProperties(
        DWORD cbProperties,
        BYTE* pbProperties) = 0;

    virtual HRESULT STDMETHODCALLTYPE SetProperties(
        DWORD cbProperties,
        const BYTE* pbProperties) = 0;

};
#else
typedef struct IMediaSample2Vtbl IMediaSample2Vtbl;
struct IMediaSample2 {
    const IMediaSample2Vtbl* lpVtbl;
};
struct IMediaSample2Vtbl {
    ICOM_MSVTABLE_COMPAT_FIELDS

    /*** IUnknown methods ***/
    HRESULT (STDMETHODCALLTYPE *QueryInterface)(
        IMediaSample2* This,
        REFIID riid,
        void** ppvObject);

    ULONG (STDMETHODCALLTYPE *AddRef)(
        IMediaSample2* This);

    ULONG (STDMETHODCALLTYPE *Release)(
        IMediaSample2* This);

    /*** IMediaSample methods ***/
    HRESULT (STDMETHODCALLTYPE *GetPointer)(
        IMediaSample2* This,
        BYTE** ppBuffer);

    long (STDMETHODCALLTYPE *GetSize)(
        IMediaSample2* This);

    HRESULT (STDMETHODCALLTYPE *GetTime)(
        IMediaSample2* This,
        REFERENCE_TIME* pTimeStart,
        REFERENCE_TIME* pTimeEnd);

    HRESULT (STDMETHODCALLTYPE *SetTime)(
        IMediaSample2* This,
        REFERENCE_TIME* pTimeStart,
        REFERENCE_TIME* pTimeEnd);

    HRESULT (STDMETHODCALLTYPE *IsSyncPoint)(
        IMediaSample2* This);

    HRESULT (STDMETHODCALLTYPE *SetSyncPoint)(
        IMediaSample2* This,
        BOOL bIsSyncPoint);

    HRESULT (STDMETHODCALLTYPE *IsPreroll)(
        IMediaSample2* This);

    HRESULT (STDMETHODCALLTYPE *SetPreroll)(
        IMediaSample2* This,
        BOOL bIsPreroll);

    long (STDMETHODCALLTYPE *GetActualDataLength)(
        IMediaSample2* This);

    HRESULT (STDMETHODCALLTYPE *SetActualDataLength)(
        IMediaSample2* This,
        long length);

    HRESULT (STDMETHODCALLTYPE *GetMediaType)(
        IMediaSample2* This,
        AM_MEDIA_TYPE** ppMediaType);

    HRESULT (STDMETHODCALLTYPE *SetMediaType)(
        IMediaSample2* This,
        AM_MEDIA_TYPE* pMediaType);

    HRESULT (STDMETHODCALLTYPE *IsDiscontinuity)(
        IMediaSample2* This);

    HRESULT (STDMETHODCALLTYPE *SetDiscontinuity)(
        IMediaSample2* This,
        BOOL bDiscontinuity);

    HRESULT (STDMETHODCALLTYPE *GetMediaTime)(
        IMediaSample2* This,
        LONGLONG* pTimeStart,
        LONGLONG* pTimeEnd);

    HRESULT (STDMETHODCALLTYPE *SetMediaTime)(
        IMediaSample2* This,
        LONGLONG* pTimeStart,
        LONGLONG* pTimeEnd);

    /*** IMediaSample2 methods ***/
    HRESULT (STDMETHODCALLTYPE *GetProperties)(
        IMediaSample2* This,
        DWORD cbProperties,
        BYTE* pbProperties);

    HRESULT (STDMETHODCALLTYPE *SetProperties)(
        IMediaSample2* This,
        DWORD cbProperties,
        const BYTE* pbProperties);

};

/*** IUnknown methods ***/
#define IMediaSample2_QueryInterface(p,a,b) (p)->lpVtbl->QueryInterface(p,a,b)
#define IMediaSample2_AddRef(p) (p)->lpVtbl->AddRef(p)
#define IMediaSample2_Release(p) (p)->lpVtbl->Release(p)
/*** IMediaSample methods ***/
#define IMediaSample2_GetPointer(p,a) (p)->lpVtbl->GetPointer(p,a)
#define IMediaSample2_GetSize(p) (p)->lpVtbl->GetSize(p)
#define IMediaSample2_GetTime(p,a,b) (p)->lpVtbl->GetTime(p,a,b)
#define IMediaSample2_SetTime(p,a,b) (p)->lpVtbl->SetTime(p,a,b)
#define IMediaSample2_IsSyncPoint(p) (p)->lpVtbl->IsSyncPoint(p)
#define IMediaSample2_SetSyncPoint(p,a) (p)->lpVtbl->SetSyncPoint(p,a)
#define IMediaSample2_IsPreroll(p) (p)->lpVtbl->IsPreroll(p)
#define IMediaSample2_SetPreroll(p,a) (p)->lpVtbl->SetPreroll(p,a)
#define IMediaSample2_GetActualDataLength(p) (p)->lpVtbl->GetActualDataLength(p)
#define IMediaSample2_SetActualDataLength(p,a) (p)->lpVtbl->SetActualDataLength(p,a)
#define IMediaSample2_GetMediaType(p,a) (p)->lpVtbl->GetMediaType(p,a)
#define IMediaSample2_SetMediaType(p,a) (p)->lpVtbl->SetMediaType(p,a)
#define IMediaSample2_IsDiscontinuity(p) (p)->lpVtbl->IsDiscontinuity(p)
#define IMediaSample2_SetDiscontinuity(p,a) (p)->lpVtbl->SetDiscontinuity(p,a)
#define IMediaSample2_GetMediaTime(p,a,b) (p)->lpVtbl->GetMediaTime(p,a,b)
#define IMediaSample2_SetMediaTime(p,a,b) (p)->lpVtbl->SetMediaTime(p,a,b)
/*** IMediaSample2 methods ***/
#define IMediaSample2_GetProperties(p,a,b) (p)->lpVtbl->GetProperties(p,a,b)
#define IMediaSample2_SetProperties(p,a,b) (p)->lpVtbl->SetProperties(p,a,b)

#endif

#define IMediaSample2_METHODS \
    ICOM_MSVTABLE_COMPAT_FIELDS \
    /*** IUnknown methods ***/ \
    STDMETHOD_(HRESULT,QueryInterface)(THIS_ REFIID riid, void** ppvObject) PURE; \
    STDMETHOD_(ULONG,AddRef)(THIS) PURE; \
    STDMETHOD_(ULONG,Release)(THIS) PURE; \
    /*** IMediaSample methods ***/ \
    STDMETHOD_(HRESULT,GetPointer)(THIS_ BYTE** ppBuffer) PURE; \
    STDMETHOD_(long,GetSize)(THIS) PURE; \
    STDMETHOD_(HRESULT,GetTime)(THIS_ REFERENCE_TIME* pTimeStart, REFERENCE_TIME* pTimeEnd) PURE; \
    STDMETHOD_(HRESULT,SetTime)(THIS_ REFERENCE_TIME* pTimeStart, REFERENCE_TIME* pTimeEnd) PURE; \
    STDMETHOD_(HRESULT,IsSyncPoint)(THIS) PURE; \
    STDMETHOD_(HRESULT,SetSyncPoint)(THIS_ BOOL bIsSyncPoint) PURE; \
    STDMETHOD_(HRESULT,IsPreroll)(THIS) PURE; \
    STDMETHOD_(HRESULT,SetPreroll)(THIS_ BOOL bIsPreroll) PURE; \
    STDMETHOD_(long,GetActualDataLength)(THIS) PURE; \
    STDMETHOD_(HRESULT,SetActualDataLength)(THIS_ long length) PURE; \
    STDMETHOD_(HRESULT,GetMediaType)(THIS_ AM_MEDIA_TYPE** ppMediaType) PURE; \
    STDMETHOD_(HRESULT,SetMediaType)(THIS_ AM_MEDIA_TYPE* pMediaType) PURE; \
    STDMETHOD_(HRESULT,IsDiscontinuity)(THIS) PURE; \
    STDMETHOD_(HRESULT,SetDiscontinuity)(THIS_ BOOL bDiscontinuity) PURE; \
    STDMETHOD_(HRESULT,GetMediaTime)(THIS_ LONGLONG* pTimeStart, LONGLONG* pTimeEnd) PURE; \
    STDMETHOD_(HRESULT,SetMediaTime)(THIS_ LONGLONG* pTimeStart, LONGLONG* pTimeEnd) PURE; \
    /*** IMediaSample2 methods ***/ \
    STDMETHOD_(HRESULT,GetProperties)(THIS_ DWORD cbProperties, BYTE* pbProperties) PURE; \
    STDMETHOD_(HRESULT,SetProperties)(THIS_ DWORD cbProperties, const BYTE* pbProperties) PURE;

HRESULT CALLBACK IMediaSample2_GetProperties_Proxy(
    IMediaSample2* This,
    DWORD cbProperties,
    BYTE* pbProperties);
void __RPC_STUB IMediaSample2_GetProperties_Stub(
    struct IRpcStubBuffer* This,
    struct IRpcChannelBuffer* pRpcChannelBuffer,
    PRPC_MESSAGE pRpcMessage,
    DWORD* pdwStubPhase);
HRESULT CALLBACK IMediaSample2_SetProperties_Proxy(
    IMediaSample2* This,
    DWORD cbProperties,
    const BYTE* pbProperties);
void __RPC_STUB IMediaSample2_SetProperties_Stub(
    struct IRpcStubBuffer* This,
    struct IRpcChannelBuffer* pRpcChannelBuffer,
    PRPC_MESSAGE pRpcMessage,
    DWORD* pdwStubPhase);

#endif  /* __IMediaSample2_INTERFACE_DEFINED__ */

typedef IMediaSample2 *PMEDIASAMPLE2;

#define AM_GBF_PREVFRAMESKIPPED 1
#define AM_GBF_NOTASYNCPOINT 2
#define AM_GBF_NOWAIT 4
/*****************************************************************************
 * IMemAllocator interface
 */
#ifndef __IMemAllocator_INTERFACE_DEFINED__
#define __IMemAllocator_INTERFACE_DEFINED__

DEFINE_GUID(IID_IMemAllocator, 0x56a8689c, 0x0ad4, 0x11ce, 0xb0,0x3a, 0x00,0x20,0xaf,0x0b,0xa7,0x70);
#if defined(__cplusplus) && !defined(CINTERFACE)
struct IMemAllocator : public IUnknown
{
    virtual HRESULT STDMETHODCALLTYPE SetProperties(
        ALLOCATOR_PROPERTIES* pRequest,
        ALLOCATOR_PROPERTIES* pActual) = 0;

    virtual HRESULT STDMETHODCALLTYPE GetProperties(
        ALLOCATOR_PROPERTIES* pProps) = 0;

    virtual HRESULT STDMETHODCALLTYPE Commit(
        ) = 0;

    virtual HRESULT STDMETHODCALLTYPE Decommit(
        ) = 0;

    virtual HRESULT STDMETHODCALLTYPE GetBuffer(
        IMediaSample** ppBuffer,
        REFERENCE_TIME* pStartTime,
        REFERENCE_TIME* pEndTime,
        DWORD dwFlags) = 0;

    virtual HRESULT STDMETHODCALLTYPE ReleaseBuffer(
        IMediaSample* pBuffer) = 0;

};
#else
typedef struct IMemAllocatorVtbl IMemAllocatorVtbl;
struct IMemAllocator {
    const IMemAllocatorVtbl* lpVtbl;
};
struct IMemAllocatorVtbl {
    ICOM_MSVTABLE_COMPAT_FIELDS

    /*** IUnknown methods ***/
    HRESULT (STDMETHODCALLTYPE *QueryInterface)(
        IMemAllocator* This,
        REFIID riid,
        void** ppvObject);

    ULONG (STDMETHODCALLTYPE *AddRef)(
        IMemAllocator* This);

    ULONG (STDMETHODCALLTYPE *Release)(
        IMemAllocator* This);

    /*** IMemAllocator methods ***/
    HRESULT (STDMETHODCALLTYPE *SetProperties)(
        IMemAllocator* This,
        ALLOCATOR_PROPERTIES* pRequest,
        ALLOCATOR_PROPERTIES* pActual);

    HRESULT (STDMETHODCALLTYPE *GetProperties)(
        IMemAllocator* This,
        ALLOCATOR_PROPERTIES* pProps);

    HRESULT (STDMETHODCALLTYPE *Commit)(
        IMemAllocator* This);

    HRESULT (STDMETHODCALLTYPE *Decommit)(
        IMemAllocator* This);

    HRESULT (STDMETHODCALLTYPE *GetBuffer)(
        IMemAllocator* This,
        IMediaSample** ppBuffer,
        REFERENCE_TIME* pStartTime,
        REFERENCE_TIME* pEndTime,
        DWORD dwFlags);

    HRESULT (STDMETHODCALLTYPE *ReleaseBuffer)(
        IMemAllocator* This,
        IMediaSample* pBuffer);

};

/*** IUnknown methods ***/
#define IMemAllocator_QueryInterface(p,a,b) (p)->lpVtbl->QueryInterface(p,a,b)
#define IMemAllocator_AddRef(p) (p)->lpVtbl->AddRef(p)
#define IMemAllocator_Release(p) (p)->lpVtbl->Release(p)
/*** IMemAllocator methods ***/
#define IMemAllocator_SetProperties(p,a,b) (p)->lpVtbl->SetProperties(p,a,b)
#define IMemAllocator_GetProperties(p,a) (p)->lpVtbl->GetProperties(p,a)
#define IMemAllocator_Commit(p) (p)->lpVtbl->Commit(p)
#define IMemAllocator_Decommit(p) (p)->lpVtbl->Decommit(p)
#define IMemAllocator_GetBuffer(p,a,b,c,d) (p)->lpVtbl->GetBuffer(p,a,b,c,d)
#define IMemAllocator_ReleaseBuffer(p,a) (p)->lpVtbl->ReleaseBuffer(p,a)

#endif

#define IMemAllocator_METHODS \
    ICOM_MSVTABLE_COMPAT_FIELDS \
    /*** IUnknown methods ***/ \
    STDMETHOD_(HRESULT,QueryInterface)(THIS_ REFIID riid, void** ppvObject) PURE; \
    STDMETHOD_(ULONG,AddRef)(THIS) PURE; \
    STDMETHOD_(ULONG,Release)(THIS) PURE; \
    /*** IMemAllocator methods ***/ \
    STDMETHOD_(HRESULT,SetProperties)(THIS_ ALLOCATOR_PROPERTIES* pRequest, ALLOCATOR_PROPERTIES* pActual) PURE; \
    STDMETHOD_(HRESULT,GetProperties)(THIS_ ALLOCATOR_PROPERTIES* pProps) PURE; \
    STDMETHOD_(HRESULT,Commit)(THIS) PURE; \
    STDMETHOD_(HRESULT,Decommit)(THIS) PURE; \
    STDMETHOD_(HRESULT,GetBuffer)(THIS_ IMediaSample** ppBuffer, REFERENCE_TIME* pStartTime, REFERENCE_TIME* pEndTime, DWORD dwFlags) PURE; \
    STDMETHOD_(HRESULT,ReleaseBuffer)(THIS_ IMediaSample* pBuffer) PURE;

HRESULT CALLBACK IMemAllocator_SetProperties_Proxy(
    IMemAllocator* This,
    ALLOCATOR_PROPERTIES* pRequest,
    ALLOCATOR_PROPERTIES* pActual);
void __RPC_STUB IMemAllocator_SetProperties_Stub(
    struct IRpcStubBuffer* This,
    struct IRpcChannelBuffer* pRpcChannelBuffer,
    PRPC_MESSAGE pRpcMessage,
    DWORD* pdwStubPhase);
HRESULT CALLBACK IMemAllocator_GetProperties_Proxy(
    IMemAllocator* This,
    ALLOCATOR_PROPERTIES* pProps);
void __RPC_STUB IMemAllocator_GetProperties_Stub(
    struct IRpcStubBuffer* This,
    struct IRpcChannelBuffer* pRpcChannelBuffer,
    PRPC_MESSAGE pRpcMessage,
    DWORD* pdwStubPhase);
HRESULT CALLBACK IMemAllocator_Commit_Proxy(
    IMemAllocator* This);
void __RPC_STUB IMemAllocator_Commit_Stub(
    struct IRpcStubBuffer* This,
    struct IRpcChannelBuffer* pRpcChannelBuffer,
    PRPC_MESSAGE pRpcMessage,
    DWORD* pdwStubPhase);
HRESULT CALLBACK IMemAllocator_Decommit_Proxy(
    IMemAllocator* This);
void __RPC_STUB IMemAllocator_Decommit_Stub(
    struct IRpcStubBuffer* This,
    struct IRpcChannelBuffer* pRpcChannelBuffer,
    PRPC_MESSAGE pRpcMessage,
    DWORD* pdwStubPhase);
HRESULT CALLBACK IMemAllocator_GetBuffer_Proxy(
    IMemAllocator* This,
    IMediaSample** ppBuffer,
    REFERENCE_TIME* pStartTime,
    REFERENCE_TIME* pEndTime,
    DWORD dwFlags);
void __RPC_STUB IMemAllocator_GetBuffer_Stub(
    struct IRpcStubBuffer* This,
    struct IRpcChannelBuffer* pRpcChannelBuffer,
    PRPC_MESSAGE pRpcMessage,
    DWORD* pdwStubPhase);
HRESULT CALLBACK IMemAllocator_ReleaseBuffer_Proxy(
    IMemAllocator* This,
    IMediaSample* pBuffer);
void __RPC_STUB IMemAllocator_ReleaseBuffer_Stub(
    struct IRpcStubBuffer* This,
    struct IRpcChannelBuffer* pRpcChannelBuffer,
    PRPC_MESSAGE pRpcMessage,
    DWORD* pdwStubPhase);

#endif  /* __IMemAllocator_INTERFACE_DEFINED__ */

typedef IMemAllocator *PMEMALLOCATOR;

/*****************************************************************************
 * IMemAllocatorCallbackTemp interface
 */
#ifndef __IMemAllocatorCallbackTemp_INTERFACE_DEFINED__
#define __IMemAllocatorCallbackTemp_INTERFACE_DEFINED__

DEFINE_GUID(IID_IMemAllocatorCallbackTemp, 0x379a0cf0, 0xc1de, 0x11d2, 0xab,0xf5, 0x00,0xa0,0xc9,0x05,0xf3,0x75);
#if defined(__cplusplus) && !defined(CINTERFACE)
struct IMemAllocatorCallbackTemp : public IMemAllocator
{
    virtual HRESULT STDMETHODCALLTYPE SetNotify(
        IMemAllocatorNotifyCallbackTemp* pNotify) = 0;

    virtual HRESULT STDMETHODCALLTYPE GetFreeCount(
        LONG* plBuffersFree) = 0;

};
#else
typedef struct IMemAllocatorCallbackTempVtbl IMemAllocatorCallbackTempVtbl;
struct IMemAllocatorCallbackTemp {
    const IMemAllocatorCallbackTempVtbl* lpVtbl;
};
struct IMemAllocatorCallbackTempVtbl {
    ICOM_MSVTABLE_COMPAT_FIELDS

    /*** IUnknown methods ***/
    HRESULT (STDMETHODCALLTYPE *QueryInterface)(
        IMemAllocatorCallbackTemp* This,
        REFIID riid,
        void** ppvObject);

    ULONG (STDMETHODCALLTYPE *AddRef)(
        IMemAllocatorCallbackTemp* This);

    ULONG (STDMETHODCALLTYPE *Release)(
        IMemAllocatorCallbackTemp* This);

    /*** IMemAllocator methods ***/
    HRESULT (STDMETHODCALLTYPE *SetProperties)(
        IMemAllocatorCallbackTemp* This,
        ALLOCATOR_PROPERTIES* pRequest,
        ALLOCATOR_PROPERTIES* pActual);

    HRESULT (STDMETHODCALLTYPE *GetProperties)(
        IMemAllocatorCallbackTemp* This,
        ALLOCATOR_PROPERTIES* pProps);

    HRESULT (STDMETHODCALLTYPE *Commit)(
        IMemAllocatorCallbackTemp* This);

    HRESULT (STDMETHODCALLTYPE *Decommit)(
        IMemAllocatorCallbackTemp* This);

    HRESULT (STDMETHODCALLTYPE *GetBuffer)(
        IMemAllocatorCallbackTemp* This,
        IMediaSample** ppBuffer,
        REFERENCE_TIME* pStartTime,
        REFERENCE_TIME* pEndTime,
        DWORD dwFlags);

    HRESULT (STDMETHODCALLTYPE *ReleaseBuffer)(
        IMemAllocatorCallbackTemp* This,
        IMediaSample* pBuffer);

    /*** IMemAllocatorCallbackTemp methods ***/
    HRESULT (STDMETHODCALLTYPE *SetNotify)(
        IMemAllocatorCallbackTemp* This,
        IMemAllocatorNotifyCallbackTemp* pNotify);

    HRESULT (STDMETHODCALLTYPE *GetFreeCount)(
        IMemAllocatorCallbackTemp* This,
        LONG* plBuffersFree);

};

/*** IUnknown methods ***/
#define IMemAllocatorCallbackTemp_QueryInterface(p,a,b) (p)->lpVtbl->QueryInterface(p,a,b)
#define IMemAllocatorCallbackTemp_AddRef(p) (p)->lpVtbl->AddRef(p)
#define IMemAllocatorCallbackTemp_Release(p) (p)->lpVtbl->Release(p)
/*** IMemAllocator methods ***/
#define IMemAllocatorCallbackTemp_SetProperties(p,a,b) (p)->lpVtbl->SetProperties(p,a,b)
#define IMemAllocatorCallbackTemp_GetProperties(p,a) (p)->lpVtbl->GetProperties(p,a)
#define IMemAllocatorCallbackTemp_Commit(p) (p)->lpVtbl->Commit(p)
#define IMemAllocatorCallbackTemp_Decommit(p) (p)->lpVtbl->Decommit(p)
#define IMemAllocatorCallbackTemp_GetBuffer(p,a,b,c,d) (p)->lpVtbl->GetBuffer(p,a,b,c,d)
#define IMemAllocatorCallbackTemp_ReleaseBuffer(p,a) (p)->lpVtbl->ReleaseBuffer(p,a)
/*** IMemAllocatorCallbackTemp methods ***/
#define IMemAllocatorCallbackTemp_SetNotify(p,a) (p)->lpVtbl->SetNotify(p,a)
#define IMemAllocatorCallbackTemp_GetFreeCount(p,a) (p)->lpVtbl->GetFreeCount(p,a)

#endif

#define IMemAllocatorCallbackTemp_METHODS \
    ICOM_MSVTABLE_COMPAT_FIELDS \
    /*** IUnknown methods ***/ \
    STDMETHOD_(HRESULT,QueryInterface)(THIS_ REFIID riid, void** ppvObject) PURE; \
    STDMETHOD_(ULONG,AddRef)(THIS) PURE; \
    STDMETHOD_(ULONG,Release)(THIS) PURE; \
    /*** IMemAllocator methods ***/ \
    STDMETHOD_(HRESULT,SetProperties)(THIS_ ALLOCATOR_PROPERTIES* pRequest, ALLOCATOR_PROPERTIES* pActual) PURE; \
    STDMETHOD_(HRESULT,GetProperties)(THIS_ ALLOCATOR_PROPERTIES* pProps) PURE; \
    STDMETHOD_(HRESULT,Commit)(THIS) PURE; \
    STDMETHOD_(HRESULT,Decommit)(THIS) PURE; \
    STDMETHOD_(HRESULT,GetBuffer)(THIS_ IMediaSample** ppBuffer, REFERENCE_TIME* pStartTime, REFERENCE_TIME* pEndTime, DWORD dwFlags) PURE; \
    STDMETHOD_(HRESULT,ReleaseBuffer)(THIS_ IMediaSample* pBuffer) PURE; \
    /*** IMemAllocatorCallbackTemp methods ***/ \
    STDMETHOD_(HRESULT,SetNotify)(THIS_ IMemAllocatorNotifyCallbackTemp* pNotify) PURE; \
    STDMETHOD_(HRESULT,GetFreeCount)(THIS_ LONG* plBuffersFree) PURE;

HRESULT CALLBACK IMemAllocatorCallbackTemp_SetNotify_Proxy(
    IMemAllocatorCallbackTemp* This,
    IMemAllocatorNotifyCallbackTemp* pNotify);
void __RPC_STUB IMemAllocatorCallbackTemp_SetNotify_Stub(
    struct IRpcStubBuffer* This,
    struct IRpcChannelBuffer* pRpcChannelBuffer,
    PRPC_MESSAGE pRpcMessage,
    DWORD* pdwStubPhase);
HRESULT CALLBACK IMemAllocatorCallbackTemp_GetFreeCount_Proxy(
    IMemAllocatorCallbackTemp* This,
    LONG* plBuffersFree);
void __RPC_STUB IMemAllocatorCallbackTemp_GetFreeCount_Stub(
    struct IRpcStubBuffer* This,
    struct IRpcChannelBuffer* pRpcChannelBuffer,
    PRPC_MESSAGE pRpcMessage,
    DWORD* pdwStubPhase);

#endif  /* __IMemAllocatorCallbackTemp_INTERFACE_DEFINED__ */

/*****************************************************************************
 * IMemAllocatorNotifyCallbackTemp interface
 */
#ifndef __IMemAllocatorNotifyCallbackTemp_INTERFACE_DEFINED__
#define __IMemAllocatorNotifyCallbackTemp_INTERFACE_DEFINED__

DEFINE_GUID(IID_IMemAllocatorNotifyCallbackTemp, 0x92980b30, 0xc1de, 0x11d2, 0xab,0xf5, 0x00,0xa0,0xc9,0x05,0xf3,0x75);
#if defined(__cplusplus) && !defined(CINTERFACE)
struct IMemAllocatorNotifyCallbackTemp : public IUnknown
{
    virtual HRESULT STDMETHODCALLTYPE NotifyRelease(
        ) = 0;

};
#else
typedef struct IMemAllocatorNotifyCallbackTempVtbl IMemAllocatorNotifyCallbackTempVtbl;
struct IMemAllocatorNotifyCallbackTemp {
    const IMemAllocatorNotifyCallbackTempVtbl* lpVtbl;
};
struct IMemAllocatorNotifyCallbackTempVtbl {
    ICOM_MSVTABLE_COMPAT_FIELDS

    /*** IUnknown methods ***/
    HRESULT (STDMETHODCALLTYPE *QueryInterface)(
        IMemAllocatorNotifyCallbackTemp* This,
        REFIID riid,
        void** ppvObject);

    ULONG (STDMETHODCALLTYPE *AddRef)(
        IMemAllocatorNotifyCallbackTemp* This);

    ULONG (STDMETHODCALLTYPE *Release)(
        IMemAllocatorNotifyCallbackTemp* This);

    /*** IMemAllocatorNotifyCallbackTemp methods ***/
    HRESULT (STDMETHODCALLTYPE *NotifyRelease)(
        IMemAllocatorNotifyCallbackTemp* This);

};

/*** IUnknown methods ***/
#define IMemAllocatorNotifyCallbackTemp_QueryInterface(p,a,b) (p)->lpVtbl->QueryInterface(p,a,b)
#define IMemAllocatorNotifyCallbackTemp_AddRef(p) (p)->lpVtbl->AddRef(p)
#define IMemAllocatorNotifyCallbackTemp_Release(p) (p)->lpVtbl->Release(p)
/*** IMemAllocatorNotifyCallbackTemp methods ***/
#define IMemAllocatorNotifyCallbackTemp_NotifyRelease(p) (p)->lpVtbl->NotifyRelease(p)

#endif

#define IMemAllocatorNotifyCallbackTemp_METHODS \
    ICOM_MSVTABLE_COMPAT_FIELDS \
    /*** IUnknown methods ***/ \
    STDMETHOD_(HRESULT,QueryInterface)(THIS_ REFIID riid, void** ppvObject) PURE; \
    STDMETHOD_(ULONG,AddRef)(THIS) PURE; \
    STDMETHOD_(ULONG,Release)(THIS) PURE; \
    /*** IMemAllocatorNotifyCallbackTemp methods ***/ \
    STDMETHOD_(HRESULT,NotifyRelease)(THIS) PURE;

HRESULT CALLBACK IMemAllocatorNotifyCallbackTemp_NotifyRelease_Proxy(
    IMemAllocatorNotifyCallbackTemp* This);
void __RPC_STUB IMemAllocatorNotifyCallbackTemp_NotifyRelease_Stub(
    struct IRpcStubBuffer* This,
    struct IRpcChannelBuffer* pRpcChannelBuffer,
    PRPC_MESSAGE pRpcMessage,
    DWORD* pdwStubPhase);

#endif  /* __IMemAllocatorNotifyCallbackTemp_INTERFACE_DEFINED__ */

/*****************************************************************************
 * IMemInputPin interface
 */
#ifndef __IMemInputPin_INTERFACE_DEFINED__
#define __IMemInputPin_INTERFACE_DEFINED__

DEFINE_GUID(IID_IMemInputPin, 0x56a8689d, 0x0ad4, 0x11ce, 0xb0,0x3a, 0x00,0x20,0xaf,0x0b,0xa7,0x70);
#if defined(__cplusplus) && !defined(CINTERFACE)
struct IMemInputPin : public IUnknown
{
    virtual HRESULT STDMETHODCALLTYPE GetAllocator(
        IMemAllocator** ppAllocator) = 0;

    virtual HRESULT STDMETHODCALLTYPE NotifyAllocator(
        IMemAllocator* pAllocator,
        BOOL bReadOnly) = 0;

    virtual HRESULT STDMETHODCALLTYPE GetAllocatorRequirements(
        ALLOCATOR_PROPERTIES* pProps) = 0;

    virtual HRESULT STDMETHODCALLTYPE Receive(
        IMediaSample* pSample) = 0;

    virtual HRESULT STDMETHODCALLTYPE ReceiveMultiple(
        IMediaSample** pSamples,
        long nSamples,
        long* nSamplesProcessed) = 0;

    virtual HRESULT STDMETHODCALLTYPE ReceiveCanBlock(
        ) = 0;

};
#else
typedef struct IMemInputPinVtbl IMemInputPinVtbl;
struct IMemInputPin {
    const IMemInputPinVtbl* lpVtbl;
};
struct IMemInputPinVtbl {
    ICOM_MSVTABLE_COMPAT_FIELDS

    /*** IUnknown methods ***/
    HRESULT (STDMETHODCALLTYPE *QueryInterface)(
        IMemInputPin* This,
        REFIID riid,
        void** ppvObject);

    ULONG (STDMETHODCALLTYPE *AddRef)(
        IMemInputPin* This);

    ULONG (STDMETHODCALLTYPE *Release)(
        IMemInputPin* This);

    /*** IMemInputPin methods ***/
    HRESULT (STDMETHODCALLTYPE *GetAllocator)(
        IMemInputPin* This,
        IMemAllocator** ppAllocator);

    HRESULT (STDMETHODCALLTYPE *NotifyAllocator)(
        IMemInputPin* This,
        IMemAllocator* pAllocator,
        BOOL bReadOnly);

    HRESULT (STDMETHODCALLTYPE *GetAllocatorRequirements)(
        IMemInputPin* This,
        ALLOCATOR_PROPERTIES* pProps);

    HRESULT (STDMETHODCALLTYPE *Receive)(
        IMemInputPin* This,
        IMediaSample* pSample);

    HRESULT (STDMETHODCALLTYPE *ReceiveMultiple)(
        IMemInputPin* This,
        IMediaSample** pSamples,
        long nSamples,
        long* nSamplesProcessed);

    HRESULT (STDMETHODCALLTYPE *ReceiveCanBlock)(
        IMemInputPin* This);

};

/*** IUnknown methods ***/
#define IMemInputPin_QueryInterface(p,a,b) (p)->lpVtbl->QueryInterface(p,a,b)
#define IMemInputPin_AddRef(p) (p)->lpVtbl->AddRef(p)
#define IMemInputPin_Release(p) (p)->lpVtbl->Release(p)
/*** IMemInputPin methods ***/
#define IMemInputPin_GetAllocator(p,a) (p)->lpVtbl->GetAllocator(p,a)
#define IMemInputPin_NotifyAllocator(p,a,b) (p)->lpVtbl->NotifyAllocator(p,a,b)
#define IMemInputPin_GetAllocatorRequirements(p,a) (p)->lpVtbl->GetAllocatorRequirements(p,a)
#define IMemInputPin_Receive(p,a) (p)->lpVtbl->Receive(p,a)
#define IMemInputPin_ReceiveMultiple(p,a,b,c) (p)->lpVtbl->ReceiveMultiple(p,a,b,c)
#define IMemInputPin_ReceiveCanBlock(p) (p)->lpVtbl->ReceiveCanBlock(p)

#endif

#define IMemInputPin_METHODS \
    ICOM_MSVTABLE_COMPAT_FIELDS \
    /*** IUnknown methods ***/ \
    STDMETHOD_(HRESULT,QueryInterface)(THIS_ REFIID riid, void** ppvObject) PURE; \
    STDMETHOD_(ULONG,AddRef)(THIS) PURE; \
    STDMETHOD_(ULONG,Release)(THIS) PURE; \
    /*** IMemInputPin methods ***/ \
    STDMETHOD_(HRESULT,GetAllocator)(THIS_ IMemAllocator** ppAllocator) PURE; \
    STDMETHOD_(HRESULT,NotifyAllocator)(THIS_ IMemAllocator* pAllocator, BOOL bReadOnly) PURE; \
    STDMETHOD_(HRESULT,GetAllocatorRequirements)(THIS_ ALLOCATOR_PROPERTIES* pProps) PURE; \
    STDMETHOD_(HRESULT,Receive)(THIS_ IMediaSample* pSample) PURE; \
    STDMETHOD_(HRESULT,ReceiveMultiple)(THIS_ IMediaSample** pSamples, long nSamples, long* nSamplesProcessed) PURE; \
    STDMETHOD_(HRESULT,ReceiveCanBlock)(THIS) PURE;

HRESULT CALLBACK IMemInputPin_GetAllocator_Proxy(
    IMemInputPin* This,
    IMemAllocator** ppAllocator);
void __RPC_STUB IMemInputPin_GetAllocator_Stub(
    struct IRpcStubBuffer* This,
    struct IRpcChannelBuffer* pRpcChannelBuffer,
    PRPC_MESSAGE pRpcMessage,
    DWORD* pdwStubPhase);
HRESULT CALLBACK IMemInputPin_NotifyAllocator_Proxy(
    IMemInputPin* This,
    IMemAllocator* pAllocator,
    BOOL bReadOnly);
void __RPC_STUB IMemInputPin_NotifyAllocator_Stub(
    struct IRpcStubBuffer* This,
    struct IRpcChannelBuffer* pRpcChannelBuffer,
    PRPC_MESSAGE pRpcMessage,
    DWORD* pdwStubPhase);
HRESULT CALLBACK IMemInputPin_GetAllocatorRequirements_Proxy(
    IMemInputPin* This,
    ALLOCATOR_PROPERTIES* pProps);
void __RPC_STUB IMemInputPin_GetAllocatorRequirements_Stub(
    struct IRpcStubBuffer* This,
    struct IRpcChannelBuffer* pRpcChannelBuffer,
    PRPC_MESSAGE pRpcMessage,
    DWORD* pdwStubPhase);
HRESULT CALLBACK IMemInputPin_Receive_Proxy(
    IMemInputPin* This,
    IMediaSample* pSample);
void __RPC_STUB IMemInputPin_Receive_Stub(
    struct IRpcStubBuffer* This,
    struct IRpcChannelBuffer* pRpcChannelBuffer,
    PRPC_MESSAGE pRpcMessage,
    DWORD* pdwStubPhase);
HRESULT CALLBACK IMemInputPin_ReceiveMultiple_Proxy(
    IMemInputPin* This,
    IMediaSample** pSamples,
    long nSamples,
    long* nSamplesProcessed);
void __RPC_STUB IMemInputPin_ReceiveMultiple_Stub(
    struct IRpcStubBuffer* This,
    struct IRpcChannelBuffer* pRpcChannelBuffer,
    PRPC_MESSAGE pRpcMessage,
    DWORD* pdwStubPhase);
HRESULT CALLBACK IMemInputPin_ReceiveCanBlock_Proxy(
    IMemInputPin* This);
void __RPC_STUB IMemInputPin_ReceiveCanBlock_Stub(
    struct IRpcStubBuffer* This,
    struct IRpcChannelBuffer* pRpcChannelBuffer,
    PRPC_MESSAGE pRpcMessage,
    DWORD* pdwStubPhase);

#endif  /* __IMemInputPin_INTERFACE_DEFINED__ */

typedef IMemInputPin *PMEMINPUTPIN;

/*****************************************************************************
 * IAMovieSetup interface
 */
#ifndef __IAMovieSetup_INTERFACE_DEFINED__
#define __IAMovieSetup_INTERFACE_DEFINED__

DEFINE_GUID(IID_IAMovieSetup, 0xa3d8cec0, 0x7e5a, 0x11cf, 0xbb,0xc5, 0x00,0x80,0x5f,0x6c,0xef,0x20);
#if defined(__cplusplus) && !defined(CINTERFACE)
struct IAMovieSetup : public IUnknown
{
    virtual HRESULT STDMETHODCALLTYPE Register(
        ) = 0;

    virtual HRESULT STDMETHODCALLTYPE Unregister(
        ) = 0;

};
#else
typedef struct IAMovieSetupVtbl IAMovieSetupVtbl;
struct IAMovieSetup {
    const IAMovieSetupVtbl* lpVtbl;
};
struct IAMovieSetupVtbl {
    ICOM_MSVTABLE_COMPAT_FIELDS

    /*** IUnknown methods ***/
    HRESULT (STDMETHODCALLTYPE *QueryInterface)(
        IAMovieSetup* This,
        REFIID riid,
        void** ppvObject);

    ULONG (STDMETHODCALLTYPE *AddRef)(
        IAMovieSetup* This);

    ULONG (STDMETHODCALLTYPE *Release)(
        IAMovieSetup* This);

    /*** IAMovieSetup methods ***/
    HRESULT (STDMETHODCALLTYPE *Register)(
        IAMovieSetup* This);

    HRESULT (STDMETHODCALLTYPE *Unregister)(
        IAMovieSetup* This);

};

/*** IUnknown methods ***/
#define IAMovieSetup_QueryInterface(p,a,b) (p)->lpVtbl->QueryInterface(p,a,b)
#define IAMovieSetup_AddRef(p) (p)->lpVtbl->AddRef(p)
#define IAMovieSetup_Release(p) (p)->lpVtbl->Release(p)
/*** IAMovieSetup methods ***/
#define IAMovieSetup_Register(p) (p)->lpVtbl->Register(p)
#define IAMovieSetup_Unregister(p) (p)->lpVtbl->Unregister(p)

#endif

#define IAMovieSetup_METHODS \
    ICOM_MSVTABLE_COMPAT_FIELDS \
    /*** IUnknown methods ***/ \
    STDMETHOD_(HRESULT,QueryInterface)(THIS_ REFIID riid, void** ppvObject) PURE; \
    STDMETHOD_(ULONG,AddRef)(THIS) PURE; \
    STDMETHOD_(ULONG,Release)(THIS) PURE; \
    /*** IAMovieSetup methods ***/ \
    STDMETHOD_(HRESULT,Register)(THIS) PURE; \
    STDMETHOD_(HRESULT,Unregister)(THIS) PURE;

HRESULT CALLBACK IAMovieSetup_Register_Proxy(
    IAMovieSetup* This);
void __RPC_STUB IAMovieSetup_Register_Stub(
    struct IRpcStubBuffer* This,
    struct IRpcChannelBuffer* pRpcChannelBuffer,
    PRPC_MESSAGE pRpcMessage,
    DWORD* pdwStubPhase);
HRESULT CALLBACK IAMovieSetup_Unregister_Proxy(
    IAMovieSetup* This);
void __RPC_STUB IAMovieSetup_Unregister_Stub(
    struct IRpcStubBuffer* This,
    struct IRpcChannelBuffer* pRpcChannelBuffer,
    PRPC_MESSAGE pRpcMessage,
    DWORD* pdwStubPhase);

#endif  /* __IAMovieSetup_INTERFACE_DEFINED__ */

typedef IAMovieSetup *PAMOVIESETUP;

typedef enum AM_SEEKING_SeekingFlags {
    AM_SEEKING_NoPositioning = 0x0,
    AM_SEEKING_AbsolutePositioning = 0x1,
    AM_SEEKING_RelativePositioning = 0x2,
    AM_SEEKING_IncrementalPositioning = 0x3,
    AM_SEEKING_PositioningBitsMask = 0x3,
    AM_SEEKING_SeekToKeyFrame = 0x4,
    AM_SEEKING_ReturnTime = 0x8,
    AM_SEEKING_Segment = 0x10,
    AM_SEEKING_NoFlush = 0x20
} AM_SEEKING_SEEKING_FLAGS;

typedef enum AM_SEEKING_SeekingCapabilities {
    AM_SEEKING_CanSeekAbsolute = 0x1,
    AM_SEEKING_CanSeekForwards = 0x2,
    AM_SEEKING_CanSeekBackwards = 0x4,
    AM_SEEKING_CanGetCurrentPos = 0x8,
    AM_SEEKING_CanGetStopPos = 0x10,
    AM_SEEKING_CanGetDuration = 0x20,
    AM_SEEKING_CanPlayBackwards = 0x40,
    AM_SEEKING_CanDoSegments = 0x80,
    AM_SEEKING_Source = 0x100
} AM_SEEKING_SEEKING_CAPABILITIES;

#ifndef __IMediaSeeking_FWD_DEFINED__
#define __IMediaSeeking_FWD_DEFINED__
typedef struct IMediaSeeking IMediaSeeking;
#endif

/*****************************************************************************
 * IMediaSeeking interface
 */
#ifndef __IMediaSeeking_INTERFACE_DEFINED__
#define __IMediaSeeking_INTERFACE_DEFINED__

DEFINE_GUID(IID_IMediaSeeking, 0x36b73880, 0xc2c8, 0x11cf, 0x8b,0x46, 0x00,0x80,0x5f,0x6c,0xef,0x60);
#if defined(__cplusplus) && !defined(CINTERFACE)
struct IMediaSeeking : public IUnknown
{
    virtual HRESULT STDMETHODCALLTYPE GetCapabilities(
        DWORD* pCapabilities) = 0;

    virtual HRESULT STDMETHODCALLTYPE CheckCapabilities(
        DWORD* pCapabilities) = 0;

    virtual HRESULT STDMETHODCALLTYPE IsFormatSupported(
        const GUID* pFormat) = 0;

    virtual HRESULT STDMETHODCALLTYPE QueryPreferredFormat(
        GUID* pFormat) = 0;

    virtual HRESULT STDMETHODCALLTYPE GetTimeFormat(
        GUID* pFormat) = 0;

    virtual HRESULT STDMETHODCALLTYPE IsUsingTimeFormat(
        const GUID* pFormat) = 0;

    virtual HRESULT STDMETHODCALLTYPE SetTimeFormat(
        const GUID* pFormat) = 0;

    virtual HRESULT STDMETHODCALLTYPE GetDuration(
        LONGLONG* pDuration) = 0;

    virtual HRESULT STDMETHODCALLTYPE GetStopPosition(
        LONGLONG* pStop) = 0;

    virtual HRESULT STDMETHODCALLTYPE GetCurrentPosition(
        LONGLONG* pCurrent) = 0;

    virtual HRESULT STDMETHODCALLTYPE ConvertTimeFormat(
        LONGLONG* pTarget,
        const GUID* pTargetFormat,
        LONGLONG Source,
        const GUID* pSourceFormat) = 0;

    virtual HRESULT STDMETHODCALLTYPE SetPositions(
        LONGLONG* pCurrent,
        DWORD dwCurrentFlags,
        LONGLONG* pStop,
        DWORD dwStopFlags) = 0;

    virtual HRESULT STDMETHODCALLTYPE GetPositions(
        LONGLONG* pCurrent,
        LONGLONG* pStop) = 0;

    virtual HRESULT STDMETHODCALLTYPE GetAvailable(
        LONGLONG* pEarliest,
        LONGLONG* pLatest) = 0;

    virtual HRESULT STDMETHODCALLTYPE SetRate(
        double dRate) = 0;

    virtual HRESULT STDMETHODCALLTYPE GetRate(
        double* pdRate) = 0;

    virtual HRESULT STDMETHODCALLTYPE GetPreroll(
        LONGLONG* pllPreroll) = 0;

};
#else
typedef struct IMediaSeekingVtbl IMediaSeekingVtbl;
struct IMediaSeeking {
    const IMediaSeekingVtbl* lpVtbl;
};
struct IMediaSeekingVtbl {
    ICOM_MSVTABLE_COMPAT_FIELDS

    /*** IUnknown methods ***/
    HRESULT (STDMETHODCALLTYPE *QueryInterface)(
        IMediaSeeking* This,
        REFIID riid,
        void** ppvObject);

    ULONG (STDMETHODCALLTYPE *AddRef)(
        IMediaSeeking* This);

    ULONG (STDMETHODCALLTYPE *Release)(
        IMediaSeeking* This);

    /*** IMediaSeeking methods ***/
    HRESULT (STDMETHODCALLTYPE *GetCapabilities)(
        IMediaSeeking* This,
        DWORD* pCapabilities);

    HRESULT (STDMETHODCALLTYPE *CheckCapabilities)(
        IMediaSeeking* This,
        DWORD* pCapabilities);

    HRESULT (STDMETHODCALLTYPE *IsFormatSupported)(
        IMediaSeeking* This,
        const GUID* pFormat);

    HRESULT (STDMETHODCALLTYPE *QueryPreferredFormat)(
        IMediaSeeking* This,
        GUID* pFormat);

    HRESULT (STDMETHODCALLTYPE *GetTimeFormat)(
        IMediaSeeking* This,
        GUID* pFormat);

    HRESULT (STDMETHODCALLTYPE *IsUsingTimeFormat)(
        IMediaSeeking* This,
        const GUID* pFormat);

    HRESULT (STDMETHODCALLTYPE *SetTimeFormat)(
        IMediaSeeking* This,
        const GUID* pFormat);

    HRESULT (STDMETHODCALLTYPE *GetDuration)(
        IMediaSeeking* This,
        LONGLONG* pDuration);

    HRESULT (STDMETHODCALLTYPE *GetStopPosition)(
        IMediaSeeking* This,
        LONGLONG* pStop);

    HRESULT (STDMETHODCALLTYPE *GetCurrentPosition)(
        IMediaSeeking* This,
        LONGLONG* pCurrent);

    HRESULT (STDMETHODCALLTYPE *ConvertTimeFormat)(
        IMediaSeeking* This,
        LONGLONG* pTarget,
        const GUID* pTargetFormat,
        LONGLONG Source,
        const GUID* pSourceFormat);

    HRESULT (STDMETHODCALLTYPE *SetPositions)(
        IMediaSeeking* This,
        LONGLONG* pCurrent,
        DWORD dwCurrentFlags,
        LONGLONG* pStop,
        DWORD dwStopFlags);

    HRESULT (STDMETHODCALLTYPE *GetPositions)(
        IMediaSeeking* This,
        LONGLONG* pCurrent,
        LONGLONG* pStop);

    HRESULT (STDMETHODCALLTYPE *GetAvailable)(
        IMediaSeeking* This,
        LONGLONG* pEarliest,
        LONGLONG* pLatest);

    HRESULT (STDMETHODCALLTYPE *SetRate)(
        IMediaSeeking* This,
        double dRate);

    HRESULT (STDMETHODCALLTYPE *GetRate)(
        IMediaSeeking* This,
        double* pdRate);

    HRESULT (STDMETHODCALLTYPE *GetPreroll)(
        IMediaSeeking* This,
        LONGLONG* pllPreroll);

};

/*** IUnknown methods ***/
#define IMediaSeeking_QueryInterface(p,a,b) (p)->lpVtbl->QueryInterface(p,a,b)
#define IMediaSeeking_AddRef(p) (p)->lpVtbl->AddRef(p)
#define IMediaSeeking_Release(p) (p)->lpVtbl->Release(p)
/*** IMediaSeeking methods ***/
#define IMediaSeeking_GetCapabilities(p,a) (p)->lpVtbl->GetCapabilities(p,a)
#define IMediaSeeking_CheckCapabilities(p,a) (p)->lpVtbl->CheckCapabilities(p,a)
#define IMediaSeeking_IsFormatSupported(p,a) (p)->lpVtbl->IsFormatSupported(p,a)
#define IMediaSeeking_QueryPreferredFormat(p,a) (p)->lpVtbl->QueryPreferredFormat(p,a)
#define IMediaSeeking_GetTimeFormat(p,a) (p)->lpVtbl->GetTimeFormat(p,a)
#define IMediaSeeking_IsUsingTimeFormat(p,a) (p)->lpVtbl->IsUsingTimeFormat(p,a)
#define IMediaSeeking_SetTimeFormat(p,a) (p)->lpVtbl->SetTimeFormat(p,a)
#define IMediaSeeking_GetDuration(p,a) (p)->lpVtbl->GetDuration(p,a)
#define IMediaSeeking_GetStopPosition(p,a) (p)->lpVtbl->GetStopPosition(p,a)
#define IMediaSeeking_GetCurrentPosition(p,a) (p)->lpVtbl->GetCurrentPosition(p,a)
#define IMediaSeeking_ConvertTimeFormat(p,a,b,c,d) (p)->lpVtbl->ConvertTimeFormat(p,a,b,c,d)
#define IMediaSeeking_SetPositions(p,a,b,c,d) (p)->lpVtbl->SetPositions(p,a,b,c,d)
#define IMediaSeeking_GetPositions(p,a,b) (p)->lpVtbl->GetPositions(p,a,b)
#define IMediaSeeking_GetAvailable(p,a,b) (p)->lpVtbl->GetAvailable(p,a,b)
#define IMediaSeeking_SetRate(p,a) (p)->lpVtbl->SetRate(p,a)
#define IMediaSeeking_GetRate(p,a) (p)->lpVtbl->GetRate(p,a)
#define IMediaSeeking_GetPreroll(p,a) (p)->lpVtbl->GetPreroll(p,a)

#endif

#define IMediaSeeking_METHODS \
    ICOM_MSVTABLE_COMPAT_FIELDS \
    /*** IUnknown methods ***/ \
    STDMETHOD_(HRESULT,QueryInterface)(THIS_ REFIID riid, void** ppvObject) PURE; \
    STDMETHOD_(ULONG,AddRef)(THIS) PURE; \
    STDMETHOD_(ULONG,Release)(THIS) PURE; \
    /*** IMediaSeeking methods ***/ \
    STDMETHOD_(HRESULT,GetCapabilities)(THIS_ DWORD* pCapabilities) PURE; \
    STDMETHOD_(HRESULT,CheckCapabilities)(THIS_ DWORD* pCapabilities) PURE; \
    STDMETHOD_(HRESULT,IsFormatSupported)(THIS_ const GUID* pFormat) PURE; \
    STDMETHOD_(HRESULT,QueryPreferredFormat)(THIS_ GUID* pFormat) PURE; \
    STDMETHOD_(HRESULT,GetTimeFormat)(THIS_ GUID* pFormat) PURE; \
    STDMETHOD_(HRESULT,IsUsingTimeFormat)(THIS_ const GUID* pFormat) PURE; \
    STDMETHOD_(HRESULT,SetTimeFormat)(THIS_ const GUID* pFormat) PURE; \
    STDMETHOD_(HRESULT,GetDuration)(THIS_ LONGLONG* pDuration) PURE; \
    STDMETHOD_(HRESULT,GetStopPosition)(THIS_ LONGLONG* pStop) PURE; \
    STDMETHOD_(HRESULT,GetCurrentPosition)(THIS_ LONGLONG* pCurrent) PURE; \
    STDMETHOD_(HRESULT,ConvertTimeFormat)(THIS_ LONGLONG* pTarget, const GUID* pTargetFormat, LONGLONG Source, const GUID* pSourceFormat) PURE; \
    STDMETHOD_(HRESULT,SetPositions)(THIS_ LONGLONG* pCurrent, DWORD dwCurrentFlags, LONGLONG* pStop, DWORD dwStopFlags) PURE; \
    STDMETHOD_(HRESULT,GetPositions)(THIS_ LONGLONG* pCurrent, LONGLONG* pStop) PURE; \
    STDMETHOD_(HRESULT,GetAvailable)(THIS_ LONGLONG* pEarliest, LONGLONG* pLatest) PURE; \
    STDMETHOD_(HRESULT,SetRate)(THIS_ double dRate) PURE; \
    STDMETHOD_(HRESULT,GetRate)(THIS_ double* pdRate) PURE; \
    STDMETHOD_(HRESULT,GetPreroll)(THIS_ LONGLONG* pllPreroll) PURE;

HRESULT CALLBACK IMediaSeeking_GetCapabilities_Proxy(
    IMediaSeeking* This,
    DWORD* pCapabilities);
void __RPC_STUB IMediaSeeking_GetCapabilities_Stub(
    struct IRpcStubBuffer* This,
    struct IRpcChannelBuffer* pRpcChannelBuffer,
    PRPC_MESSAGE pRpcMessage,
    DWORD* pdwStubPhase);
HRESULT CALLBACK IMediaSeeking_CheckCapabilities_Proxy(
    IMediaSeeking* This,
    DWORD* pCapabilities);
void __RPC_STUB IMediaSeeking_CheckCapabilities_Stub(
    struct IRpcStubBuffer* This,
    struct IRpcChannelBuffer* pRpcChannelBuffer,
    PRPC_MESSAGE pRpcMessage,
    DWORD* pdwStubPhase);
HRESULT CALLBACK IMediaSeeking_IsFormatSupported_Proxy(
    IMediaSeeking* This,
    const GUID* pFormat);
void __RPC_STUB IMediaSeeking_IsFormatSupported_Stub(
    struct IRpcStubBuffer* This,
    struct IRpcChannelBuffer* pRpcChannelBuffer,
    PRPC_MESSAGE pRpcMessage,
    DWORD* pdwStubPhase);
HRESULT CALLBACK IMediaSeeking_QueryPreferredFormat_Proxy(
    IMediaSeeking* This,
    GUID* pFormat);
void __RPC_STUB IMediaSeeking_QueryPreferredFormat_Stub(
    struct IRpcStubBuffer* This,
    struct IRpcChannelBuffer* pRpcChannelBuffer,
    PRPC_MESSAGE pRpcMessage,
    DWORD* pdwStubPhase);
HRESULT CALLBACK IMediaSeeking_GetTimeFormat_Proxy(
    IMediaSeeking* This,
    GUID* pFormat);
void __RPC_STUB IMediaSeeking_GetTimeFormat_Stub(
    struct IRpcStubBuffer* This,
    struct IRpcChannelBuffer* pRpcChannelBuffer,
    PRPC_MESSAGE pRpcMessage,
    DWORD* pdwStubPhase);
HRESULT CALLBACK IMediaSeeking_IsUsingTimeFormat_Proxy(
    IMediaSeeking* This,
    const GUID* pFormat);
void __RPC_STUB IMediaSeeking_IsUsingTimeFormat_Stub(
    struct IRpcStubBuffer* This,
    struct IRpcChannelBuffer* pRpcChannelBuffer,
    PRPC_MESSAGE pRpcMessage,
    DWORD* pdwStubPhase);
HRESULT CALLBACK IMediaSeeking_SetTimeFormat_Proxy(
    IMediaSeeking* This,
    const GUID* pFormat);
void __RPC_STUB IMediaSeeking_SetTimeFormat_Stub(
    struct IRpcStubBuffer* This,
    struct IRpcChannelBuffer* pRpcChannelBuffer,
    PRPC_MESSAGE pRpcMessage,
    DWORD* pdwStubPhase);
HRESULT CALLBACK IMediaSeeking_GetDuration_Proxy(
    IMediaSeeking* This,
    LONGLONG* pDuration);
void __RPC_STUB IMediaSeeking_GetDuration_Stub(
    struct IRpcStubBuffer* This,
    struct IRpcChannelBuffer* pRpcChannelBuffer,
    PRPC_MESSAGE pRpcMessage,
    DWORD* pdwStubPhase);
HRESULT CALLBACK IMediaSeeking_GetStopPosition_Proxy(
    IMediaSeeking* This,
    LONGLONG* pStop);
void __RPC_STUB IMediaSeeking_GetStopPosition_Stub(
    struct IRpcStubBuffer* This,
    struct IRpcChannelBuffer* pRpcChannelBuffer,
    PRPC_MESSAGE pRpcMessage,
    DWORD* pdwStubPhase);
HRESULT CALLBACK IMediaSeeking_GetCurrentPosition_Proxy(
    IMediaSeeking* This,
    LONGLONG* pCurrent);
void __RPC_STUB IMediaSeeking_GetCurrentPosition_Stub(
    struct IRpcStubBuffer* This,
    struct IRpcChannelBuffer* pRpcChannelBuffer,
    PRPC_MESSAGE pRpcMessage,
    DWORD* pdwStubPhase);
HRESULT CALLBACK IMediaSeeking_ConvertTimeFormat_Proxy(
    IMediaSeeking* This,
    LONGLONG* pTarget,
    const GUID* pTargetFormat,
    LONGLONG Source,
    const GUID* pSourceFormat);
void __RPC_STUB IMediaSeeking_ConvertTimeFormat_Stub(
    struct IRpcStubBuffer* This,
    struct IRpcChannelBuffer* pRpcChannelBuffer,
    PRPC_MESSAGE pRpcMessage,
    DWORD* pdwStubPhase);
HRESULT CALLBACK IMediaSeeking_SetPositions_Proxy(
    IMediaSeeking* This,
    LONGLONG* pCurrent,
    DWORD dwCurrentFlags,
    LONGLONG* pStop,
    DWORD dwStopFlags);
void __RPC_STUB IMediaSeeking_SetPositions_Stub(
    struct IRpcStubBuffer* This,
    struct IRpcChannelBuffer* pRpcChannelBuffer,
    PRPC_MESSAGE pRpcMessage,
    DWORD* pdwStubPhase);
HRESULT CALLBACK IMediaSeeking_GetPositions_Proxy(
    IMediaSeeking* This,
    LONGLONG* pCurrent,
    LONGLONG* pStop);
void __RPC_STUB IMediaSeeking_GetPositions_Stub(
    struct IRpcStubBuffer* This,
    struct IRpcChannelBuffer* pRpcChannelBuffer,
    PRPC_MESSAGE pRpcMessage,
    DWORD* pdwStubPhase);
HRESULT CALLBACK IMediaSeeking_GetAvailable_Proxy(
    IMediaSeeking* This,
    LONGLONG* pEarliest,
    LONGLONG* pLatest);
void __RPC_STUB IMediaSeeking_GetAvailable_Stub(
    struct IRpcStubBuffer* This,
    struct IRpcChannelBuffer* pRpcChannelBuffer,
    PRPC_MESSAGE pRpcMessage,
    DWORD* pdwStubPhase);
HRESULT CALLBACK IMediaSeeking_SetRate_Proxy(
    IMediaSeeking* This,
    double dRate);
void __RPC_STUB IMediaSeeking_SetRate_Stub(
    struct IRpcStubBuffer* This,
    struct IRpcChannelBuffer* pRpcChannelBuffer,
    PRPC_MESSAGE pRpcMessage,
    DWORD* pdwStubPhase);
HRESULT CALLBACK IMediaSeeking_GetRate_Proxy(
    IMediaSeeking* This,
    double* pdRate);
void __RPC_STUB IMediaSeeking_GetRate_Stub(
    struct IRpcStubBuffer* This,
    struct IRpcChannelBuffer* pRpcChannelBuffer,
    PRPC_MESSAGE pRpcMessage,
    DWORD* pdwStubPhase);
HRESULT CALLBACK IMediaSeeking_GetPreroll_Proxy(
    IMediaSeeking* This,
    LONGLONG* pllPreroll);
void __RPC_STUB IMediaSeeking_GetPreroll_Stub(
    struct IRpcStubBuffer* This,
    struct IRpcChannelBuffer* pRpcChannelBuffer,
    PRPC_MESSAGE pRpcMessage,
    DWORD* pdwStubPhase);

#endif  /* __IMediaSeeking_INTERFACE_DEFINED__ */

typedef IMediaSeeking *PMEDIASEEKING;

enum tagAM_MEDIAEVENT_FLAGS {
    AM_MEDIAEVENT_NONOTIFY = 0x1
};

#ifndef __IAMAnalogVideoDecoder_FWD_DEFINED__
#define __IAMAnalogVideoDecoder_FWD_DEFINED__
typedef struct IAMAnalogVideoDecoder IAMAnalogVideoDecoder;
#endif

#ifndef __IAMAnalogVideoEncoder_FWD_DEFINED__
#define __IAMAnalogVideoEncoder_FWD_DEFINED__
typedef struct IAMAnalogVideoEncoder IAMAnalogVideoEncoder;
#endif

#ifndef __IAMAudioInputMixer_FWD_DEFINED__
#define __IAMAudioInputMixer_FWD_DEFINED__
typedef struct IAMAudioInputMixer IAMAudioInputMixer;
#endif

#ifndef __IAMAudioRendererStats_FWD_DEFINED__
#define __IAMAudioRendererStats_FWD_DEFINED__
typedef struct IAMAudioRendererStats IAMAudioRendererStats;
#endif

#ifndef __IAMBufferNegotiation_FWD_DEFINED__
#define __IAMBufferNegotiation_FWD_DEFINED__
typedef struct IAMBufferNegotiation IAMBufferNegotiation;
#endif

#ifndef __IAMCameraControl_FWD_DEFINED__
#define __IAMCameraControl_FWD_DEFINED__
typedef struct IAMCameraControl IAMCameraControl;
#endif

#ifndef __IAMCopyCaptureFileProgress_FWD_DEFINED__
#define __IAMCopyCaptureFileProgress_FWD_DEFINED__
typedef struct IAMCopyCaptureFileProgress IAMCopyCaptureFileProgress;
#endif

#ifndef __IAMCrossbar_FWD_DEFINED__
#define __IAMCrossbar_FWD_DEFINED__
typedef struct IAMCrossbar IAMCrossbar;
#endif

#ifndef __IAMDevMemoryAllocator_FWD_DEFINED__
#define __IAMDevMemoryAllocator_FWD_DEFINED__
typedef struct IAMDevMemoryAllocator IAMDevMemoryAllocator;
#endif

#ifndef __IAMDevMemoryControl_FWD_DEFINED__
#define __IAMDevMemoryControl_FWD_DEFINED__
typedef struct IAMDevMemoryControl IAMDevMemoryControl;
#endif

#ifndef __IAMDroppedFrames_FWD_DEFINED__
#define __IAMDroppedFrames_FWD_DEFINED__
typedef struct IAMDroppedFrames IAMDroppedFrames;
#endif

#ifndef __IAMExtDevice_FWD_DEFINED__
#define __IAMExtDevice_FWD_DEFINED__
typedef struct IAMExtDevice IAMExtDevice;
#endif

#ifndef __IAMExtTransport_FWD_DEFINED__
#define __IAMExtTransport_FWD_DEFINED__
typedef struct IAMExtTransport IAMExtTransport;
#endif

#ifndef __IAMGraphStreams_FWD_DEFINED__
#define __IAMGraphStreams_FWD_DEFINED__
typedef struct IAMGraphStreams IAMGraphStreams;
#endif

#ifndef __IAMLatency_FWD_DEFINED__
#define __IAMLatency_FWD_DEFINED__
typedef struct IAMLatency IAMLatency;
#endif

#ifndef __IAMOpenProgress_FWD_DEFINED__
#define __IAMOpenProgress_FWD_DEFINED__
typedef struct IAMOpenProgress IAMOpenProgress;
#endif

#ifndef __IAMOverlayFX_FWD_DEFINED__
#define __IAMOverlayFX_FWD_DEFINED__
typedef struct IAMOverlayFX IAMOverlayFX;
#endif

#ifndef __IAMPhysicalPinInfo_FWD_DEFINED__
#define __IAMPhysicalPinInfo_FWD_DEFINED__
typedef struct IAMPhysicalPinInfo IAMPhysicalPinInfo;
#endif

#ifndef __IAMPushSource_FWD_DEFINED__
#define __IAMPushSource_FWD_DEFINED__
typedef struct IAMPushSource IAMPushSource;
#endif

#ifndef __IAMStreamConfig_FWD_DEFINED__
#define __IAMStreamConfig_FWD_DEFINED__
typedef struct IAMStreamConfig IAMStreamConfig;
#endif

#ifndef __IAMTimecodeDisplay_FWD_DEFINED__
#define __IAMTimecodeDisplay_FWD_DEFINED__
typedef struct IAMTimecodeDisplay IAMTimecodeDisplay;
#endif

#ifndef __IAMTimecodeGenerator_FWD_DEFINED__
#define __IAMTimecodeGenerator_FWD_DEFINED__
typedef struct IAMTimecodeGenerator IAMTimecodeGenerator;
#endif

#ifndef __IAMTimecodeReader_FWD_DEFINED__
#define __IAMTimecodeReader_FWD_DEFINED__
typedef struct IAMTimecodeReader IAMTimecodeReader;
#endif

#ifndef __IAMTVTuner_FWD_DEFINED__
#define __IAMTVTuner_FWD_DEFINED__
typedef struct IAMTVTuner IAMTVTuner;
#endif

#ifndef __IAMVfwCaptureDialogs_FWD_DEFINED__
#define __IAMVfwCaptureDialogs_FWD_DEFINED__
typedef struct IAMVfwCaptureDialogs IAMVfwCaptureDialogs;
#endif

#ifndef __IAMVfwCompressDialogs_FWD_DEFINED__
#define __IAMVfwCompressDialogs_FWD_DEFINED__
typedef struct IAMVfwCompressDialogs IAMVfwCompressDialogs;
#endif

#ifndef __IAMVideoCompression_FWD_DEFINED__
#define __IAMVideoCompression_FWD_DEFINED__
typedef struct IAMVideoCompression IAMVideoCompression;
#endif

#ifndef __IAMVideoDecimationProperties_FWD_DEFINED__
#define __IAMVideoDecimationProperties_FWD_DEFINED__
typedef struct IAMVideoDecimationProperties IAMVideoDecimationProperties;
#endif

#ifndef __IAMVideoProcAmp_FWD_DEFINED__
#define __IAMVideoProcAmp_FWD_DEFINED__
typedef struct IAMVideoProcAmp IAMVideoProcAmp;
#endif

#ifndef __ICaptureGraphBuilder_FWD_DEFINED__
#define __ICaptureGraphBuilder_FWD_DEFINED__
typedef struct ICaptureGraphBuilder ICaptureGraphBuilder;
#endif

#ifndef __ICaptureGraphBuilder2_FWD_DEFINED__
#define __ICaptureGraphBuilder2_FWD_DEFINED__
typedef struct ICaptureGraphBuilder2 ICaptureGraphBuilder2;
#endif

#ifndef __IConfigAviMux_FWD_DEFINED__
#define __IConfigAviMux_FWD_DEFINED__
typedef struct IConfigAviMux IConfigAviMux;
#endif

#ifndef __IConfigInterleaving_FWD_DEFINED__
#define __IConfigInterleaving_FWD_DEFINED__
typedef struct IConfigInterleaving IConfigInterleaving;
#endif

#ifndef __IDecimateVideoImage_FWD_DEFINED__
#define __IDecimateVideoImage_FWD_DEFINED__
typedef struct IDecimateVideoImage IDecimateVideoImage;
#endif

#ifndef __IDrawVideoImage_FWD_DEFINED__
#define __IDrawVideoImage_FWD_DEFINED__
typedef struct IDrawVideoImage IDrawVideoImage;
#endif

#ifndef __IEnumRegFilters_FWD_DEFINED__
#define __IEnumRegFilters_FWD_DEFINED__
typedef struct IEnumRegFilters IEnumRegFilters;
#endif

#ifndef __IEnumStreamIdMap_FWD_DEFINED__
#define __IEnumStreamIdMap_FWD_DEFINED__
typedef struct IEnumStreamIdMap IEnumStreamIdMap;
#endif

#ifndef __IFileSourceFilter_FWD_DEFINED__
#define __IFileSourceFilter_FWD_DEFINED__
typedef struct IFileSourceFilter IFileSourceFilter;
#endif

#ifndef __IFileSinkFilter_FWD_DEFINED__
#define __IFileSinkFilter_FWD_DEFINED__
typedef struct IFileSinkFilter IFileSinkFilter;
#endif

#ifndef __IFileSinkFilter2_FWD_DEFINED__
#define __IFileSinkFilter2_FWD_DEFINED__
typedef struct IFileSinkFilter2 IFileSinkFilter2;
#endif

#ifndef __IFilterMapper_FWD_DEFINED__
#define __IFilterMapper_FWD_DEFINED__
typedef struct IFilterMapper IFilterMapper;
#endif

#ifndef __IFilterMapper2_FWD_DEFINED__
#define __IFilterMapper2_FWD_DEFINED__
typedef struct IFilterMapper2 IFilterMapper2;
#endif

#ifndef __IGraphBuilder_FWD_DEFINED__
#define __IGraphBuilder_FWD_DEFINED__
typedef struct IGraphBuilder IGraphBuilder;
#endif

#ifndef __IKsPropertySet_FWD_DEFINED__
#define __IKsPropertySet_FWD_DEFINED__
typedef struct IKsPropertySet IKsPropertySet;
#endif

#ifndef __IMediaEventSink_FWD_DEFINED__
#define __IMediaEventSink_FWD_DEFINED__
typedef struct IMediaEventSink IMediaEventSink;
#endif

#ifndef __IMpeg2Demultiplexer_FWD_DEFINED__
#define __IMpeg2Demultiplexer_FWD_DEFINED__
typedef struct IMpeg2Demultiplexer IMpeg2Demultiplexer;
#endif

#ifndef __IMPEG2StreamIdMap_FWD_DEFINED__
#define __IMPEG2StreamIdMap_FWD_DEFINED__
typedef struct IMPEG2StreamIdMap IMPEG2StreamIdMap;
#endif

#ifndef __IOverlay_FWD_DEFINED__
#define __IOverlay_FWD_DEFINED__
typedef struct IOverlay IOverlay;
#endif

#ifndef __IOverlayNotify_FWD_DEFINED__
#define __IOverlayNotify_FWD_DEFINED__
typedef struct IOverlayNotify IOverlayNotify;
#endif

#ifndef __IOverlayNotify2_FWD_DEFINED__
#define __IOverlayNotify2_FWD_DEFINED__
typedef struct IOverlayNotify2 IOverlayNotify2;
#endif

#ifndef __IQualityControl_FWD_DEFINED__
#define __IQualityControl_FWD_DEFINED__
typedef struct IQualityControl IQualityControl;
#endif

#ifndef __ISeekingPassThru_FWD_DEFINED__
#define __ISeekingPassThru_FWD_DEFINED__
typedef struct ISeekingPassThru ISeekingPassThru;
#endif

typedef struct {
    CLSID Clsid;
    LPWSTR Name;
} REGFILTER;

/*****************************************************************************
 * IEnumRegFilters interface
 */
#ifndef __IEnumRegFilters_INTERFACE_DEFINED__
#define __IEnumRegFilters_INTERFACE_DEFINED__

DEFINE_GUID(IID_IEnumRegFilters, 0x56a868a4, 0x0ad4, 0x11ce, 0xb0,0x3a, 0x00,0x20,0xaf,0x0b,0xa7,0x70);
#if defined(__cplusplus) && !defined(CINTERFACE)
struct IEnumRegFilters : public IUnknown
{
    virtual HRESULT STDMETHODCALLTYPE Next(
        ULONG cFilters,
        REGFILTER** apRegFilter,
        ULONG* pcFetched) = 0;

    virtual HRESULT STDMETHODCALLTYPE Skip(
        ULONG cFilters) = 0;

    virtual HRESULT STDMETHODCALLTYPE Reset(
        ) = 0;

    virtual HRESULT STDMETHODCALLTYPE Clone(
        IEnumRegFilters** ppEnum) = 0;

};
#else
typedef struct IEnumRegFiltersVtbl IEnumRegFiltersVtbl;
struct IEnumRegFilters {
    const IEnumRegFiltersVtbl* lpVtbl;
};
struct IEnumRegFiltersVtbl {
    ICOM_MSVTABLE_COMPAT_FIELDS

    /*** IUnknown methods ***/
    HRESULT (STDMETHODCALLTYPE *QueryInterface)(
        IEnumRegFilters* This,
        REFIID riid,
        void** ppvObject);

    ULONG (STDMETHODCALLTYPE *AddRef)(
        IEnumRegFilters* This);

    ULONG (STDMETHODCALLTYPE *Release)(
        IEnumRegFilters* This);

    /*** IEnumRegFilters methods ***/
    HRESULT (STDMETHODCALLTYPE *Next)(
        IEnumRegFilters* This,
        ULONG cFilters,
        REGFILTER** apRegFilter,
        ULONG* pcFetched);

    HRESULT (STDMETHODCALLTYPE *Skip)(
        IEnumRegFilters* This,
        ULONG cFilters);

    HRESULT (STDMETHODCALLTYPE *Reset)(
        IEnumRegFilters* This);

    HRESULT (STDMETHODCALLTYPE *Clone)(
        IEnumRegFilters* This,
        IEnumRegFilters** ppEnum);

};

/*** IUnknown methods ***/
#define IEnumRegFilters_QueryInterface(p,a,b) (p)->lpVtbl->QueryInterface(p,a,b)
#define IEnumRegFilters_AddRef(p) (p)->lpVtbl->AddRef(p)
#define IEnumRegFilters_Release(p) (p)->lpVtbl->Release(p)
/*** IEnumRegFilters methods ***/
#define IEnumRegFilters_Next(p,a,b,c) (p)->lpVtbl->Next(p,a,b,c)
#define IEnumRegFilters_Skip(p,a) (p)->lpVtbl->Skip(p,a)
#define IEnumRegFilters_Reset(p) (p)->lpVtbl->Reset(p)
#define IEnumRegFilters_Clone(p,a) (p)->lpVtbl->Clone(p,a)

#endif

#define IEnumRegFilters_METHODS \
    ICOM_MSVTABLE_COMPAT_FIELDS \
    /*** IUnknown methods ***/ \
    STDMETHOD_(HRESULT,QueryInterface)(THIS_ REFIID riid, void** ppvObject) PURE; \
    STDMETHOD_(ULONG,AddRef)(THIS) PURE; \
    STDMETHOD_(ULONG,Release)(THIS) PURE; \
    /*** IEnumRegFilters methods ***/ \
    STDMETHOD_(HRESULT,Next)(THIS_ ULONG cFilters, REGFILTER** apRegFilter, ULONG* pcFetched) PURE; \
    STDMETHOD_(HRESULT,Skip)(THIS_ ULONG cFilters) PURE; \
    STDMETHOD_(HRESULT,Reset)(THIS) PURE; \
    STDMETHOD_(HRESULT,Clone)(THIS_ IEnumRegFilters** ppEnum) PURE;

HRESULT CALLBACK IEnumRegFilters_Next_Proxy(
    IEnumRegFilters* This,
    ULONG cFilters,
    REGFILTER** apRegFilter,
    ULONG* pcFetched);
void __RPC_STUB IEnumRegFilters_Next_Stub(
    struct IRpcStubBuffer* This,
    struct IRpcChannelBuffer* pRpcChannelBuffer,
    PRPC_MESSAGE pRpcMessage,
    DWORD* pdwStubPhase);
HRESULT CALLBACK IEnumRegFilters_Skip_Proxy(
    IEnumRegFilters* This,
    ULONG cFilters);
void __RPC_STUB IEnumRegFilters_Skip_Stub(
    struct IRpcStubBuffer* This,
    struct IRpcChannelBuffer* pRpcChannelBuffer,
    PRPC_MESSAGE pRpcMessage,
    DWORD* pdwStubPhase);
HRESULT CALLBACK IEnumRegFilters_Reset_Proxy(
    IEnumRegFilters* This);
void __RPC_STUB IEnumRegFilters_Reset_Stub(
    struct IRpcStubBuffer* This,
    struct IRpcChannelBuffer* pRpcChannelBuffer,
    PRPC_MESSAGE pRpcMessage,
    DWORD* pdwStubPhase);
HRESULT CALLBACK IEnumRegFilters_Clone_Proxy(
    IEnumRegFilters* This,
    IEnumRegFilters** ppEnum);
void __RPC_STUB IEnumRegFilters_Clone_Stub(
    struct IRpcStubBuffer* This,
    struct IRpcChannelBuffer* pRpcChannelBuffer,
    PRPC_MESSAGE pRpcMessage,
    DWORD* pdwStubPhase);

#endif  /* __IEnumRegFilters_INTERFACE_DEFINED__ */

typedef IEnumRegFilters *PENUMREGFILTERS;

enum {
    MERIT_PREFERRED = 0x800000,
    MERIT_NORMAL = 0x600000,
    MERIT_UNLIKELY = 0x400000,
    MERIT_DO_NOT_USE = 0x200000,
    MERIT_SW_COMPRESSOR = 0x100000,
    MERIT_HW_COMPRESSOR = 0x100050
};

/*****************************************************************************
 * IFilterMapper interface
 */
#ifndef __IFilterMapper_INTERFACE_DEFINED__
#define __IFilterMapper_INTERFACE_DEFINED__

DEFINE_GUID(IID_IFilterMapper, 0x56a868a3, 0x0ad4, 0x11ce, 0xb0,0x3a, 0x00,0x20,0xaf,0x0b,0xa7,0x70);
#if defined(__cplusplus) && !defined(CINTERFACE)
struct IFilterMapper : public IUnknown
{
    virtual HRESULT STDMETHODCALLTYPE RegisterFilter(
        CLSID clsid,
        LPCWSTR Name,
        DWORD dwMerit) = 0;

    virtual HRESULT STDMETHODCALLTYPE RegisterFilterInstance(
        CLSID clsid,
        LPCWSTR Name,
        CLSID* MRId) = 0;

    virtual HRESULT STDMETHODCALLTYPE RegisterPin(
        CLSID Filter,
        LPCWSTR Name,
        BOOL bRendered,
        BOOL bOutput,
        BOOL bZero,
        BOOL bMany,
        CLSID ConnectsToFilter,
        LPCWSTR ConnectsToPin) = 0;

    virtual HRESULT STDMETHODCALLTYPE RegisterPinType(
        CLSID clsFilter,
        LPCWSTR strName,
        CLSID clsMajorType,
        CLSID clsSubType) = 0;

    virtual HRESULT STDMETHODCALLTYPE UnregisterFilter(
        CLSID Filter) = 0;

    virtual HRESULT STDMETHODCALLTYPE UnregisterFilterInstance(
        CLSID MRId) = 0;

    virtual HRESULT STDMETHODCALLTYPE UnregisterPin(
        CLSID Filter,
        LPCWSTR Name) = 0;

    virtual HRESULT STDMETHODCALLTYPE EnumMatchingFilters(
        IEnumRegFilters** ppEnum,
        DWORD dwMerit,
        BOOL bInputNeeded,
        CLSID clsInMaj,
        CLSID clsInSub,
        BOOL bRender,
        BOOL bOututNeeded,
        CLSID clsOutMaj,
        CLSID clsOutSub) = 0;

};
#else
typedef struct IFilterMapperVtbl IFilterMapperVtbl;
struct IFilterMapper {
    const IFilterMapperVtbl* lpVtbl;
};
struct IFilterMapperVtbl {
    ICOM_MSVTABLE_COMPAT_FIELDS

    /*** IUnknown methods ***/
    HRESULT (STDMETHODCALLTYPE *QueryInterface)(
        IFilterMapper* This,
        REFIID riid,
        void** ppvObject);

    ULONG (STDMETHODCALLTYPE *AddRef)(
        IFilterMapper* This);

    ULONG (STDMETHODCALLTYPE *Release)(
        IFilterMapper* This);

    /*** IFilterMapper methods ***/
    HRESULT (STDMETHODCALLTYPE *RegisterFilter)(
        IFilterMapper* This,
        CLSID clsid,
        LPCWSTR Name,
        DWORD dwMerit);

    HRESULT (STDMETHODCALLTYPE *RegisterFilterInstance)(
        IFilterMapper* This,
        CLSID clsid,
        LPCWSTR Name,
        CLSID* MRId);

    HRESULT (STDMETHODCALLTYPE *RegisterPin)(
        IFilterMapper* This,
        CLSID Filter,
        LPCWSTR Name,
        BOOL bRendered,
        BOOL bOutput,
        BOOL bZero,
        BOOL bMany,
        CLSID ConnectsToFilter,
        LPCWSTR ConnectsToPin);

    HRESULT (STDMETHODCALLTYPE *RegisterPinType)(
        IFilterMapper* This,
        CLSID clsFilter,
        LPCWSTR strName,
        CLSID clsMajorType,
        CLSID clsSubType);

    HRESULT (STDMETHODCALLTYPE *UnregisterFilter)(
        IFilterMapper* This,
        CLSID Filter);

    HRESULT (STDMETHODCALLTYPE *UnregisterFilterInstance)(
        IFilterMapper* This,
        CLSID MRId);

    HRESULT (STDMETHODCALLTYPE *UnregisterPin)(
        IFilterMapper* This,
        CLSID Filter,
        LPCWSTR Name);

    HRESULT (STDMETHODCALLTYPE *EnumMatchingFilters)(
        IFilterMapper* This,
        IEnumRegFilters** ppEnum,
        DWORD dwMerit,
        BOOL bInputNeeded,
        CLSID clsInMaj,
        CLSID clsInSub,
        BOOL bRender,
        BOOL bOututNeeded,
        CLSID clsOutMaj,
        CLSID clsOutSub);

};

/*** IUnknown methods ***/
#define IFilterMapper_QueryInterface(p,a,b) (p)->lpVtbl->QueryInterface(p,a,b)
#define IFilterMapper_AddRef(p) (p)->lpVtbl->AddRef(p)
#define IFilterMapper_Release(p) (p)->lpVtbl->Release(p)
/*** IFilterMapper methods ***/
#define IFilterMapper_RegisterFilter(p,a,b,c) (p)->lpVtbl->RegisterFilter(p,a,b,c)
#define IFilterMapper_RegisterFilterInstance(p,a,b,c) (p)->lpVtbl->RegisterFilterInstance(p,a,b,c)
#define IFilterMapper_RegisterPin(p,a,b,c,d,e,f,g,h) (p)->lpVtbl->RegisterPin(p,a,b,c,d,e,f,g,h)
#define IFilterMapper_RegisterPinType(p,a,b,c,d) (p)->lpVtbl->RegisterPinType(p,a,b,c,d)
#define IFilterMapper_UnregisterFilter(p,a) (p)->lpVtbl->UnregisterFilter(p,a)
#define IFilterMapper_UnregisterFilterInstance(p,a) (p)->lpVtbl->UnregisterFilterInstance(p,a)
#define IFilterMapper_UnregisterPin(p,a,b) (p)->lpVtbl->UnregisterPin(p,a,b)
#define IFilterMapper_EnumMatchingFilters(p,a,b,c,d,e,f,g,h,i) (p)->lpVtbl->EnumMatchingFilters(p,a,b,c,d,e,f,g,h,i)

#endif

#define IFilterMapper_METHODS \
    ICOM_MSVTABLE_COMPAT_FIELDS \
    /*** IUnknown methods ***/ \
    STDMETHOD_(HRESULT,QueryInterface)(THIS_ REFIID riid, void** ppvObject) PURE; \
    STDMETHOD_(ULONG,AddRef)(THIS) PURE; \
    STDMETHOD_(ULONG,Release)(THIS) PURE; \
    /*** IFilterMapper methods ***/ \
    STDMETHOD_(HRESULT,RegisterFilter)(THIS_ CLSID clsid, LPCWSTR Name, DWORD dwMerit) PURE; \
    STDMETHOD_(HRESULT,RegisterFilterInstance)(THIS_ CLSID clsid, LPCWSTR Name, CLSID* MRId) PURE; \
    STDMETHOD_(HRESULT,RegisterPin)(THIS_ CLSID Filter, LPCWSTR Name, BOOL bRendered, BOOL bOutput, BOOL bZero, BOOL bMany, CLSID ConnectsToFilter, LPCWSTR ConnectsToPin) PURE; \
    STDMETHOD_(HRESULT,RegisterPinType)(THIS_ CLSID clsFilter, LPCWSTR strName, CLSID clsMajorType, CLSID clsSubType) PURE; \
    STDMETHOD_(HRESULT,UnregisterFilter)(THIS_ CLSID Filter) PURE; \
    STDMETHOD_(HRESULT,UnregisterFilterInstance)(THIS_ CLSID MRId) PURE; \
    STDMETHOD_(HRESULT,UnregisterPin)(THIS_ CLSID Filter, LPCWSTR Name) PURE; \
    STDMETHOD_(HRESULT,EnumMatchingFilters)(THIS_ IEnumRegFilters** ppEnum, DWORD dwMerit, BOOL bInputNeeded, CLSID clsInMaj, CLSID clsInSub, BOOL bRender, BOOL bOututNeeded, CLSID clsOutMaj, CLSID clsOutSub) PURE;

HRESULT CALLBACK IFilterMapper_RegisterFilter_Proxy(
    IFilterMapper* This,
    CLSID clsid,
    LPCWSTR Name,
    DWORD dwMerit);
void __RPC_STUB IFilterMapper_RegisterFilter_Stub(
    struct IRpcStubBuffer* This,
    struct IRpcChannelBuffer* pRpcChannelBuffer,
    PRPC_MESSAGE pRpcMessage,
    DWORD* pdwStubPhase);
HRESULT CALLBACK IFilterMapper_RegisterFilterInstance_Proxy(
    IFilterMapper* This,
    CLSID clsid,
    LPCWSTR Name,
    CLSID* MRId);
void __RPC_STUB IFilterMapper_RegisterFilterInstance_Stub(
    struct IRpcStubBuffer* This,
    struct IRpcChannelBuffer* pRpcChannelBuffer,
    PRPC_MESSAGE pRpcMessage,
    DWORD* pdwStubPhase);
HRESULT CALLBACK IFilterMapper_RegisterPin_Proxy(
    IFilterMapper* This,
    CLSID Filter,
    LPCWSTR Name,
    BOOL bRendered,
    BOOL bOutput,
    BOOL bZero,
    BOOL bMany,
    CLSID ConnectsToFilter,
    LPCWSTR ConnectsToPin);
void __RPC_STUB IFilterMapper_RegisterPin_Stub(
    struct IRpcStubBuffer* This,
    struct IRpcChannelBuffer* pRpcChannelBuffer,
    PRPC_MESSAGE pRpcMessage,
    DWORD* pdwStubPhase);
HRESULT CALLBACK IFilterMapper_RegisterPinType_Proxy(
    IFilterMapper* This,
    CLSID clsFilter,
    LPCWSTR strName,
    CLSID clsMajorType,
    CLSID clsSubType);
void __RPC_STUB IFilterMapper_RegisterPinType_Stub(
    struct IRpcStubBuffer* This,
    struct IRpcChannelBuffer* pRpcChannelBuffer,
    PRPC_MESSAGE pRpcMessage,
    DWORD* pdwStubPhase);
HRESULT CALLBACK IFilterMapper_UnregisterFilter_Proxy(
    IFilterMapper* This,
    CLSID Filter);
void __RPC_STUB IFilterMapper_UnregisterFilter_Stub(
    struct IRpcStubBuffer* This,
    struct IRpcChannelBuffer* pRpcChannelBuffer,
    PRPC_MESSAGE pRpcMessage,
    DWORD* pdwStubPhase);
HRESULT CALLBACK IFilterMapper_UnregisterFilterInstance_Proxy(
    IFilterMapper* This,
    CLSID MRId);
void __RPC_STUB IFilterMapper_UnregisterFilterInstance_Stub(
    struct IRpcStubBuffer* This,
    struct IRpcChannelBuffer* pRpcChannelBuffer,
    PRPC_MESSAGE pRpcMessage,
    DWORD* pdwStubPhase);
HRESULT CALLBACK IFilterMapper_UnregisterPin_Proxy(
    IFilterMapper* This,
    CLSID Filter,
    LPCWSTR Name);
void __RPC_STUB IFilterMapper_UnregisterPin_Stub(
    struct IRpcStubBuffer* This,
    struct IRpcChannelBuffer* pRpcChannelBuffer,
    PRPC_MESSAGE pRpcMessage,
    DWORD* pdwStubPhase);
HRESULT CALLBACK IFilterMapper_EnumMatchingFilters_Proxy(
    IFilterMapper* This,
    IEnumRegFilters** ppEnum,
    DWORD dwMerit,
    BOOL bInputNeeded,
    CLSID clsInMaj,
    CLSID clsInSub,
    BOOL bRender,
    BOOL bOututNeeded,
    CLSID clsOutMaj,
    CLSID clsOutSub);
void __RPC_STUB IFilterMapper_EnumMatchingFilters_Stub(
    struct IRpcStubBuffer* This,
    struct IRpcChannelBuffer* pRpcChannelBuffer,
    PRPC_MESSAGE pRpcMessage,
    DWORD* pdwStubPhase);

#endif  /* __IFilterMapper_INTERFACE_DEFINED__ */

typedef struct {
    const CLSID *clsMajorType;
    const CLSID *clsMinorType;
} REGPINTYPES;

typedef struct {
    LPWSTR strName;
    BOOL bRendered;
    BOOL bOutput;
    BOOL bZero;
    BOOL bMany;
    const CLSID *clsConnectsToFilter;
    const WCHAR *strConnectsToPin;
    UINT nMediaTypes;
    const REGPINTYPES *lpMediaType;
} REGFILTERPINS;

typedef struct {
    CLSID clsMedium;
    DWORD dw1;
    DWORD dw2;
} REGPINMEDIUM;

enum {
    REG_PINFLAG_B_ZERO = 0x1,
    REG_PINFLAG_B_RENDERER = 0x2,
    REG_PINFLAG_B_MANY = 0x4,
    REG_PINFLAG_B_OUTPUT = 0x8
};

typedef struct {
    DWORD dwFlags;
    UINT cInstances;
    UINT nMediaTypes;
    const REGPINTYPES *lpMediaType;
    UINT nMediums;
    const REGPINMEDIUM *lpMedium;
    const CLSID *clsPinCategory;
} REGFILTERPINS2;

typedef struct {
    DWORD dwVersion;
    DWORD dwMerit;
    union {
        struct {
            ULONG cPins;
            const REGFILTERPINS *rgPins;
        } DUMMYSTRUCTNAME;
        struct {
            ULONG cPins2;
            const REGFILTERPINS2 *rgPins2;
        } DUMMYSTRUCTNAME1;
    } DUMMYUNIONNAME;
} REGFILTER2;

/*****************************************************************************
 * IFilterMapper2 interface
 */
#ifndef __IFilterMapper2_INTERFACE_DEFINED__
#define __IFilterMapper2_INTERFACE_DEFINED__

DEFINE_GUID(IID_IFilterMapper2, 0xb79bb0b0, 0x33c1, 0x11d1, 0xab,0xe1, 0x00,0xa0,0xc9,0x05,0xf3,0x75);
#if defined(__cplusplus) && !defined(CINTERFACE)
struct IFilterMapper2 : public IUnknown
{
    virtual HRESULT STDMETHODCALLTYPE CreateCategory(
        REFCLSID clsidCategory,
        DWORD dwCategoryMerit,
        LPCWSTR Description) = 0;

    virtual HRESULT STDMETHODCALLTYPE UnregisterFilter(
        const CLSID* pclsidCategory,
        const OLECHAR* szInstance,
        REFCLSID Filter) = 0;

    virtual HRESULT STDMETHODCALLTYPE RegisterFilter(
        REFCLSID clsidFilter,
        LPCWSTR Name,
        IMoniker** ppMoniker,
        const CLSID* pclsidCategory,
        const OLECHAR* szInstance,
        const REGFILTER2* prf2) = 0;

    virtual HRESULT STDMETHODCALLTYPE EnumMatchingFilters(
        IEnumMoniker** ppEnum,
        DWORD dwFlags,
        BOOL bExactMatch,
        DWORD dwMerit,
        BOOL bInputNeeded,
        DWORD cInputTypes,
        const GUID* pInputTypes,
        const REGPINMEDIUM* pMedIn,
        const CLSID* pPinCategoryIn,
        BOOL bRender,
        BOOL bOutputNeeded,
        DWORD cOutputTypes,
        const GUID* pOutputTypes,
        const REGPINMEDIUM* pMedOut,
        const CLSID* pPinCategoryOut) = 0;

};
#else
typedef struct IFilterMapper2Vtbl IFilterMapper2Vtbl;
struct IFilterMapper2 {
    const IFilterMapper2Vtbl* lpVtbl;
};
struct IFilterMapper2Vtbl {
    ICOM_MSVTABLE_COMPAT_FIELDS

    /*** IUnknown methods ***/
    HRESULT (STDMETHODCALLTYPE *QueryInterface)(
        IFilterMapper2* This,
        REFIID riid,
        void** ppvObject);

    ULONG (STDMETHODCALLTYPE *AddRef)(
        IFilterMapper2* This);

    ULONG (STDMETHODCALLTYPE *Release)(
        IFilterMapper2* This);

    /*** IFilterMapper2 methods ***/
    HRESULT (STDMETHODCALLTYPE *CreateCategory)(
        IFilterMapper2* This,
        REFCLSID clsidCategory,
        DWORD dwCategoryMerit,
        LPCWSTR Description);

    HRESULT (STDMETHODCALLTYPE *UnregisterFilter)(
        IFilterMapper2* This,
        const CLSID* pclsidCategory,
        const OLECHAR* szInstance,
        REFCLSID Filter);

    HRESULT (STDMETHODCALLTYPE *RegisterFilter)(
        IFilterMapper2* This,
        REFCLSID clsidFilter,
        LPCWSTR Name,
        IMoniker** ppMoniker,
        const CLSID* pclsidCategory,
        const OLECHAR* szInstance,
        const REGFILTER2* prf2);

    HRESULT (STDMETHODCALLTYPE *EnumMatchingFilters)(
        IFilterMapper2* This,
        IEnumMoniker** ppEnum,
        DWORD dwFlags,
        BOOL bExactMatch,
        DWORD dwMerit,
        BOOL bInputNeeded,
        DWORD cInputTypes,
        const GUID* pInputTypes,
        const REGPINMEDIUM* pMedIn,
        const CLSID* pPinCategoryIn,
        BOOL bRender,
        BOOL bOutputNeeded,
        DWORD cOutputTypes,
        const GUID* pOutputTypes,
        const REGPINMEDIUM* pMedOut,
        const CLSID* pPinCategoryOut);

};

/*** IUnknown methods ***/
#define IFilterMapper2_QueryInterface(p,a,b) (p)->lpVtbl->QueryInterface(p,a,b)
#define IFilterMapper2_AddRef(p) (p)->lpVtbl->AddRef(p)
#define IFilterMapper2_Release(p) (p)->lpVtbl->Release(p)
/*** IFilterMapper2 methods ***/
#define IFilterMapper2_CreateCategory(p,a,b,c) (p)->lpVtbl->CreateCategory(p,a,b,c)
#define IFilterMapper2_UnregisterFilter(p,a,b,c) (p)->lpVtbl->UnregisterFilter(p,a,b,c)
#define IFilterMapper2_RegisterFilter(p,a,b,c,d,e,f) (p)->lpVtbl->RegisterFilter(p,a,b,c,d,e,f)
#define IFilterMapper2_EnumMatchingFilters(p,a,b,c,d,e,f,g,h,i,j,k,l,m,n,o) (p)->lpVtbl->EnumMatchingFilters(p,a,b,c,d,e,f,g,h,i,j,k,l,m,n,o)

#endif

#define IFilterMapper2_METHODS \
    ICOM_MSVTABLE_COMPAT_FIELDS \
    /*** IUnknown methods ***/ \
    STDMETHOD_(HRESULT,QueryInterface)(THIS_ REFIID riid, void** ppvObject) PURE; \
    STDMETHOD_(ULONG,AddRef)(THIS) PURE; \
    STDMETHOD_(ULONG,Release)(THIS) PURE; \
    /*** IFilterMapper2 methods ***/ \
    STDMETHOD_(HRESULT,CreateCategory)(THIS_ REFCLSID clsidCategory, DWORD dwCategoryMerit, LPCWSTR Description) PURE; \
    STDMETHOD_(HRESULT,UnregisterFilter)(THIS_ const CLSID* pclsidCategory, const OLECHAR* szInstance, REFCLSID Filter) PURE; \
    STDMETHOD_(HRESULT,RegisterFilter)(THIS_ REFCLSID clsidFilter, LPCWSTR Name, IMoniker** ppMoniker, const CLSID* pclsidCategory, const OLECHAR* szInstance, const REGFILTER2* prf2) PURE; \
    STDMETHOD_(HRESULT,EnumMatchingFilters)(THIS_ IEnumMoniker** ppEnum, DWORD dwFlags, BOOL bExactMatch, DWORD dwMerit, BOOL bInputNeeded, DWORD cInputTypes, const GUID* pInputTypes, const REGPINMEDIUM* pMedIn, const CLSID* pPinCategoryIn, BOOL bRender, BOOL bOutputNeeded, DWORD cOutputTypes, const GUID* pOutputTypes, const REGPINMEDIUM* pMedOut, const CLSID* pPinCategoryOut) PURE;

HRESULT CALLBACK IFilterMapper2_CreateCategory_Proxy(
    IFilterMapper2* This,
    REFCLSID clsidCategory,
    DWORD dwCategoryMerit,
    LPCWSTR Description);
void __RPC_STUB IFilterMapper2_CreateCategory_Stub(
    struct IRpcStubBuffer* This,
    struct IRpcChannelBuffer* pRpcChannelBuffer,
    PRPC_MESSAGE pRpcMessage,
    DWORD* pdwStubPhase);
HRESULT CALLBACK IFilterMapper2_UnregisterFilter_Proxy(
    IFilterMapper2* This,
    const CLSID* pclsidCategory,
    const OLECHAR* szInstance,
    REFCLSID Filter);
void __RPC_STUB IFilterMapper2_UnregisterFilter_Stub(
    struct IRpcStubBuffer* This,
    struct IRpcChannelBuffer* pRpcChannelBuffer,
    PRPC_MESSAGE pRpcMessage,
    DWORD* pdwStubPhase);
HRESULT CALLBACK IFilterMapper2_RegisterFilter_Proxy(
    IFilterMapper2* This,
    REFCLSID clsidFilter,
    LPCWSTR Name,
    IMoniker** ppMoniker,
    const CLSID* pclsidCategory,
    const OLECHAR* szInstance,
    const REGFILTER2* prf2);
void __RPC_STUB IFilterMapper2_RegisterFilter_Stub(
    struct IRpcStubBuffer* This,
    struct IRpcChannelBuffer* pRpcChannelBuffer,
    PRPC_MESSAGE pRpcMessage,
    DWORD* pdwStubPhase);
HRESULT CALLBACK IFilterMapper2_EnumMatchingFilters_Proxy(
    IFilterMapper2* This,
    IEnumMoniker** ppEnum,
    DWORD dwFlags,
    BOOL bExactMatch,
    DWORD dwMerit,
    BOOL bInputNeeded,
    DWORD cInputTypes,
    const GUID* pInputTypes,
    const REGPINMEDIUM* pMedIn,
    const CLSID* pPinCategoryIn,
    BOOL bRender,
    BOOL bOutputNeeded,
    DWORD cOutputTypes,
    const GUID* pOutputTypes,
    const REGPINMEDIUM* pMedOut,
    const CLSID* pPinCategoryOut);
void __RPC_STUB IFilterMapper2_EnumMatchingFilters_Stub(
    struct IRpcStubBuffer* This,
    struct IRpcChannelBuffer* pRpcChannelBuffer,
    PRPC_MESSAGE pRpcMessage,
    DWORD* pdwStubPhase);

#endif  /* __IFilterMapper2_INTERFACE_DEFINED__ */

#ifndef __IFilterMapper3_FWD_DEFINED__
#define __IFilterMapper3_FWD_DEFINED__
typedef struct IFilterMapper3 IFilterMapper3;
#endif

/*****************************************************************************
 * IFilterMapper3 interface
 */
#ifndef __IFilterMapper3_INTERFACE_DEFINED__
#define __IFilterMapper3_INTERFACE_DEFINED__

DEFINE_GUID(IID_IFilterMapper3, 0xb79bb0b1, 0x33c1, 0x11d1, 0xab,0xe1, 0x00,0xa0,0xc9,0x05,0xf3,0x75);
#if defined(__cplusplus) && !defined(CINTERFACE)
struct IFilterMapper3 : public IFilterMapper2
{
    virtual HRESULT STDMETHODCALLTYPE GetICreateDevEnum(
        ICreateDevEnum** ppEnum) = 0;

};
#else
typedef struct IFilterMapper3Vtbl IFilterMapper3Vtbl;
struct IFilterMapper3 {
    const IFilterMapper3Vtbl* lpVtbl;
};
struct IFilterMapper3Vtbl {
    ICOM_MSVTABLE_COMPAT_FIELDS

    /*** IUnknown methods ***/
    HRESULT (STDMETHODCALLTYPE *QueryInterface)(
        IFilterMapper3* This,
        REFIID riid,
        void** ppvObject);

    ULONG (STDMETHODCALLTYPE *AddRef)(
        IFilterMapper3* This);

    ULONG (STDMETHODCALLTYPE *Release)(
        IFilterMapper3* This);

    /*** IFilterMapper2 methods ***/
    HRESULT (STDMETHODCALLTYPE *CreateCategory)(
        IFilterMapper3* This,
        REFCLSID clsidCategory,
        DWORD dwCategoryMerit,
        LPCWSTR Description);

    HRESULT (STDMETHODCALLTYPE *UnregisterFilter)(
        IFilterMapper3* This,
        const CLSID* pclsidCategory,
        const OLECHAR* szInstance,
        REFCLSID Filter);

    HRESULT (STDMETHODCALLTYPE *RegisterFilter)(
        IFilterMapper3* This,
        REFCLSID clsidFilter,
        LPCWSTR Name,
        IMoniker** ppMoniker,
        const CLSID* pclsidCategory,
        const OLECHAR* szInstance,
        const REGFILTER2* prf2);

    HRESULT (STDMETHODCALLTYPE *EnumMatchingFilters)(
        IFilterMapper3* This,
        IEnumMoniker** ppEnum,
        DWORD dwFlags,
        BOOL bExactMatch,
        DWORD dwMerit,
        BOOL bInputNeeded,
        DWORD cInputTypes,
        const GUID* pInputTypes,
        const REGPINMEDIUM* pMedIn,
        const CLSID* pPinCategoryIn,
        BOOL bRender,
        BOOL bOutputNeeded,
        DWORD cOutputTypes,
        const GUID* pOutputTypes,
        const REGPINMEDIUM* pMedOut,
        const CLSID* pPinCategoryOut);

    /*** IFilterMapper3 methods ***/
    HRESULT (STDMETHODCALLTYPE *GetICreateDevEnum)(
        IFilterMapper3* This,
        ICreateDevEnum** ppEnum);

};

/*** IUnknown methods ***/
#define IFilterMapper3_QueryInterface(p,a,b) (p)->lpVtbl->QueryInterface(p,a,b)
#define IFilterMapper3_AddRef(p) (p)->lpVtbl->AddRef(p)
#define IFilterMapper3_Release(p) (p)->lpVtbl->Release(p)
/*** IFilterMapper2 methods ***/
#define IFilterMapper3_CreateCategory(p,a,b,c) (p)->lpVtbl->CreateCategory(p,a,b,c)
#define IFilterMapper3_UnregisterFilter(p,a,b,c) (p)->lpVtbl->UnregisterFilter(p,a,b,c)
#define IFilterMapper3_RegisterFilter(p,a,b,c,d,e,f) (p)->lpVtbl->RegisterFilter(p,a,b,c,d,e,f)
#define IFilterMapper3_EnumMatchingFilters(p,a,b,c,d,e,f,g,h,i,j,k,l,m,n,o) (p)->lpVtbl->EnumMatchingFilters(p,a,b,c,d,e,f,g,h,i,j,k,l,m,n,o)
/*** IFilterMapper3 methods ***/
#define IFilterMapper3_GetICreateDevEnum(p,a) (p)->lpVtbl->GetICreateDevEnum(p,a)

#endif

#define IFilterMapper3_METHODS \
    ICOM_MSVTABLE_COMPAT_FIELDS \
    /*** IUnknown methods ***/ \
    STDMETHOD_(HRESULT,QueryInterface)(THIS_ REFIID riid, void** ppvObject) PURE; \
    STDMETHOD_(ULONG,AddRef)(THIS) PURE; \
    STDMETHOD_(ULONG,Release)(THIS) PURE; \
    /*** IFilterMapper2 methods ***/ \
    STDMETHOD_(HRESULT,CreateCategory)(THIS_ REFCLSID clsidCategory, DWORD dwCategoryMerit, LPCWSTR Description) PURE; \
    STDMETHOD_(HRESULT,UnregisterFilter)(THIS_ const CLSID* pclsidCategory, const OLECHAR* szInstance, REFCLSID Filter) PURE; \
    STDMETHOD_(HRESULT,RegisterFilter)(THIS_ REFCLSID clsidFilter, LPCWSTR Name, IMoniker** ppMoniker, const CLSID* pclsidCategory, const OLECHAR* szInstance, const REGFILTER2* prf2) PURE; \
    STDMETHOD_(HRESULT,EnumMatchingFilters)(THIS_ IEnumMoniker** ppEnum, DWORD dwFlags, BOOL bExactMatch, DWORD dwMerit, BOOL bInputNeeded, DWORD cInputTypes, const GUID* pInputTypes, const REGPINMEDIUM* pMedIn, const CLSID* pPinCategoryIn, BOOL bRender, BOOL bOutputNeeded, DWORD cOutputTypes, const GUID* pOutputTypes, const REGPINMEDIUM* pMedOut, const CLSID* pPinCategoryOut) PURE; \
    /*** IFilterMapper3 methods ***/ \
    STDMETHOD_(HRESULT,GetICreateDevEnum)(THIS_ ICreateDevEnum** ppEnum) PURE;

HRESULT CALLBACK IFilterMapper3_GetICreateDevEnum_Proxy(
    IFilterMapper3* This,
    ICreateDevEnum** ppEnum);
void __RPC_STUB IFilterMapper3_GetICreateDevEnum_Stub(
    struct IRpcStubBuffer* This,
    struct IRpcChannelBuffer* pRpcChannelBuffer,
    PRPC_MESSAGE pRpcMessage,
    DWORD* pdwStubPhase);

#endif  /* __IFilterMapper3_INTERFACE_DEFINED__ */

typedef enum tagQualityMessageType {
    Famine,
    Flood
} QualityMessageType;

typedef struct tagQuality {
    QualityMessageType Type;
    long Proportion;
    REFERENCE_TIME Late;
    REFERENCE_TIME TimeStamp;
} Quality;

typedef IQualityControl *PQUALITYCONTROL;

/*****************************************************************************
 * IQualityControl interface
 */
#ifndef __IQualityControl_INTERFACE_DEFINED__
#define __IQualityControl_INTERFACE_DEFINED__

DEFINE_GUID(IID_IQualityControl, 0x56a868a5, 0x0ad4, 0x11ce, 0xb0,0x3a, 0x00,0x20,0xaf,0x0b,0xa7,0x70);
#if defined(__cplusplus) && !defined(CINTERFACE)
struct IQualityControl : public IUnknown
{
    virtual HRESULT STDMETHODCALLTYPE Notify(
        IBaseFilter* pSelf,
        Quality q) = 0;

    virtual HRESULT STDMETHODCALLTYPE SetSink(
        IQualityControl* piqc) = 0;

};
#else
typedef struct IQualityControlVtbl IQualityControlVtbl;
struct IQualityControl {
    const IQualityControlVtbl* lpVtbl;
};
struct IQualityControlVtbl {
    ICOM_MSVTABLE_COMPAT_FIELDS

    /*** IUnknown methods ***/
    HRESULT (STDMETHODCALLTYPE *QueryInterface)(
        IQualityControl* This,
        REFIID riid,
        void** ppvObject);

    ULONG (STDMETHODCALLTYPE *AddRef)(
        IQualityControl* This);

    ULONG (STDMETHODCALLTYPE *Release)(
        IQualityControl* This);

    /*** IQualityControl methods ***/
    HRESULT (STDMETHODCALLTYPE *Notify)(
        IQualityControl* This,
        IBaseFilter* pSelf,
        Quality q);

    HRESULT (STDMETHODCALLTYPE *SetSink)(
        IQualityControl* This,
        IQualityControl* piqc);

};

/*** IUnknown methods ***/
#define IQualityControl_QueryInterface(p,a,b) (p)->lpVtbl->QueryInterface(p,a,b)
#define IQualityControl_AddRef(p) (p)->lpVtbl->AddRef(p)
#define IQualityControl_Release(p) (p)->lpVtbl->Release(p)
/*** IQualityControl methods ***/
#define IQualityControl_Notify(p,a,b) (p)->lpVtbl->Notify(p,a,b)
#define IQualityControl_SetSink(p,a) (p)->lpVtbl->SetSink(p,a)

#endif

#define IQualityControl_METHODS \
    ICOM_MSVTABLE_COMPAT_FIELDS \
    /*** IUnknown methods ***/ \
    STDMETHOD_(HRESULT,QueryInterface)(THIS_ REFIID riid, void** ppvObject) PURE; \
    STDMETHOD_(ULONG,AddRef)(THIS) PURE; \
    STDMETHOD_(ULONG,Release)(THIS) PURE; \
    /*** IQualityControl methods ***/ \
    STDMETHOD_(HRESULT,Notify)(THIS_ IBaseFilter* pSelf, Quality q) PURE; \
    STDMETHOD_(HRESULT,SetSink)(THIS_ IQualityControl* piqc) PURE;

HRESULT CALLBACK IQualityControl_Notify_Proxy(
    IQualityControl* This,
    IBaseFilter* pSelf,
    Quality q);
void __RPC_STUB IQualityControl_Notify_Stub(
    struct IRpcStubBuffer* This,
    struct IRpcChannelBuffer* pRpcChannelBuffer,
    PRPC_MESSAGE pRpcMessage,
    DWORD* pdwStubPhase);
HRESULT CALLBACK IQualityControl_SetSink_Proxy(
    IQualityControl* This,
    IQualityControl* piqc);
void __RPC_STUB IQualityControl_SetSink_Stub(
    struct IRpcStubBuffer* This,
    struct IRpcChannelBuffer* pRpcChannelBuffer,
    PRPC_MESSAGE pRpcMessage,
    DWORD* pdwStubPhase);

#endif  /* __IQualityControl_INTERFACE_DEFINED__ */

enum {
    CK_NOCOLORKEY = 0x0,
    CK_INDEX = 0x1,
    CK_RGB = 0x2
};

typedef struct tagCOLORKEY {
    DWORD KeyType;
    DWORD PaletteIndex;
    COLORREF LowColorValue;
    COLORREF HighColorValue;
} COLORKEY;

enum {
    ADVISE_NONE = 0x0,
    ADVISE_CLIPPING = 0x1,
    ADVISE_PALETTE = 0x2,
    ADVISE_COLORKEY = 0x4,
    ADVISE_POSITION = 0x8,
    ADVISE_DISPLAY_CHANGE = 0x10
};

#define ADVISE_ALL (((ADVISE_CLIPPING | ADVISE_PALETTE) | ADVISE_COLORKEY) | ADVISE_POSITION)

#define ADVISE_ALL2 (ADVISE_ALL | ADVISE_DISPLAY_CHANGE)

#ifndef _WINGDI_
typedef struct _RGNDATAHEADER {
    DWORD dwSize;
    DWORD iType;
    DWORD nCount;
    DWORD nRgnSize;
    RECT rcBound;
} RGNDATAHEADER;

typedef struct _RGNDATA {
    RGNDATAHEADER rdh;
    char Buffer[1];
} RGNDATA;

#endif /* _WINGDI_ */
/*****************************************************************************
 * IOverlayNotify interface
 */
#ifndef __IOverlayNotify_INTERFACE_DEFINED__
#define __IOverlayNotify_INTERFACE_DEFINED__

DEFINE_GUID(IID_IOverlayNotify, 0x56a868a0, 0x0ad4, 0x11ce, 0xb0,0x3a, 0x00,0x20,0xaf,0x0b,0xa7,0x70);
#if defined(__cplusplus) && !defined(CINTERFACE)
struct IOverlayNotify : public IUnknown
{
    virtual HRESULT STDMETHODCALLTYPE OnPaletteChange(
        DWORD dwColors,
        const PALETTEENTRY* pPalette) = 0;

    virtual HRESULT STDMETHODCALLTYPE OnClipChange(
        const RECT* pSourceRect,
        const RECT* pDestinationRect,
        const RGNDATA* pRgnData) = 0;

    virtual HRESULT STDMETHODCALLTYPE OnColorKeyChange(
        const COLORKEY* pColorKey) = 0;

    virtual HRESULT STDMETHODCALLTYPE OnPositionChange(
        const RECT* pSourceRect,
        const RECT* pDestinationRect) = 0;

};
#else
typedef struct IOverlayNotifyVtbl IOverlayNotifyVtbl;
struct IOverlayNotify {
    const IOverlayNotifyVtbl* lpVtbl;
};
struct IOverlayNotifyVtbl {
    ICOM_MSVTABLE_COMPAT_FIELDS

    /*** IUnknown methods ***/
    HRESULT (STDMETHODCALLTYPE *QueryInterface)(
        IOverlayNotify* This,
        REFIID riid,
        void** ppvObject);

    ULONG (STDMETHODCALLTYPE *AddRef)(
        IOverlayNotify* This);

    ULONG (STDMETHODCALLTYPE *Release)(
        IOverlayNotify* This);

    /*** IOverlayNotify methods ***/
    HRESULT (STDMETHODCALLTYPE *OnPaletteChange)(
        IOverlayNotify* This,
        DWORD dwColors,
        const PALETTEENTRY* pPalette);

    HRESULT (STDMETHODCALLTYPE *OnClipChange)(
        IOverlayNotify* This,
        const RECT* pSourceRect,
        const RECT* pDestinationRect,
        const RGNDATA* pRgnData);

    HRESULT (STDMETHODCALLTYPE *OnColorKeyChange)(
        IOverlayNotify* This,
        const COLORKEY* pColorKey);

    HRESULT (STDMETHODCALLTYPE *OnPositionChange)(
        IOverlayNotify* This,
        const RECT* pSourceRect,
        const RECT* pDestinationRect);

};

/*** IUnknown methods ***/
#define IOverlayNotify_QueryInterface(p,a,b) (p)->lpVtbl->QueryInterface(p,a,b)
#define IOverlayNotify_AddRef(p) (p)->lpVtbl->AddRef(p)
#define IOverlayNotify_Release(p) (p)->lpVtbl->Release(p)
/*** IOverlayNotify methods ***/
#define IOverlayNotify_OnPaletteChange(p,a,b) (p)->lpVtbl->OnPaletteChange(p,a,b)
#define IOverlayNotify_OnClipChange(p,a,b,c) (p)->lpVtbl->OnClipChange(p,a,b,c)
#define IOverlayNotify_OnColorKeyChange(p,a) (p)->lpVtbl->OnColorKeyChange(p,a)
#define IOverlayNotify_OnPositionChange(p,a,b) (p)->lpVtbl->OnPositionChange(p,a,b)

#endif

#define IOverlayNotify_METHODS \
    ICOM_MSVTABLE_COMPAT_FIELDS \
    /*** IUnknown methods ***/ \
    STDMETHOD_(HRESULT,QueryInterface)(THIS_ REFIID riid, void** ppvObject) PURE; \
    STDMETHOD_(ULONG,AddRef)(THIS) PURE; \
    STDMETHOD_(ULONG,Release)(THIS) PURE; \
    /*** IOverlayNotify methods ***/ \
    STDMETHOD_(HRESULT,OnPaletteChange)(THIS_ DWORD dwColors, const PALETTEENTRY* pPalette) PURE; \
    STDMETHOD_(HRESULT,OnClipChange)(THIS_ const RECT* pSourceRect, const RECT* pDestinationRect, const RGNDATA* pRgnData) PURE; \
    STDMETHOD_(HRESULT,OnColorKeyChange)(THIS_ const COLORKEY* pColorKey) PURE; \
    STDMETHOD_(HRESULT,OnPositionChange)(THIS_ const RECT* pSourceRect, const RECT* pDestinationRect) PURE;

HRESULT CALLBACK IOverlayNotify_OnPaletteChange_Proxy(
    IOverlayNotify* This,
    DWORD dwColors,
    const PALETTEENTRY* pPalette);
void __RPC_STUB IOverlayNotify_OnPaletteChange_Stub(
    struct IRpcStubBuffer* This,
    struct IRpcChannelBuffer* pRpcChannelBuffer,
    PRPC_MESSAGE pRpcMessage,
    DWORD* pdwStubPhase);
HRESULT CALLBACK IOverlayNotify_OnClipChange_Proxy(
    IOverlayNotify* This,
    const RECT* pSourceRect,
    const RECT* pDestinationRect,
    const RGNDATA* pRgnData);
void __RPC_STUB IOverlayNotify_OnClipChange_Stub(
    struct IRpcStubBuffer* This,
    struct IRpcChannelBuffer* pRpcChannelBuffer,
    PRPC_MESSAGE pRpcMessage,
    DWORD* pdwStubPhase);
HRESULT CALLBACK IOverlayNotify_OnColorKeyChange_Proxy(
    IOverlayNotify* This,
    const COLORKEY* pColorKey);
void __RPC_STUB IOverlayNotify_OnColorKeyChange_Stub(
    struct IRpcStubBuffer* This,
    struct IRpcChannelBuffer* pRpcChannelBuffer,
    PRPC_MESSAGE pRpcMessage,
    DWORD* pdwStubPhase);
HRESULT CALLBACK IOverlayNotify_OnPositionChange_Proxy(
    IOverlayNotify* This,
    const RECT* pSourceRect,
    const RECT* pDestinationRect);
void __RPC_STUB IOverlayNotify_OnPositionChange_Stub(
    struct IRpcStubBuffer* This,
    struct IRpcChannelBuffer* pRpcChannelBuffer,
    PRPC_MESSAGE pRpcMessage,
    DWORD* pdwStubPhase);

#endif  /* __IOverlayNotify_INTERFACE_DEFINED__ */

typedef IOverlayNotify *POVERLAYNOTIFY;

#if 0
typedef HANDLE HMONITOR;

#endif /* 0 */
/*****************************************************************************
 * IOverlayNotify2 interface
 */
#ifndef __IOverlayNotify2_INTERFACE_DEFINED__
#define __IOverlayNotify2_INTERFACE_DEFINED__

DEFINE_GUID(IID_IOverlayNotify2, 0x680efa10, 0xd535, 0x11d1, 0x87,0xc8, 0x00,0xa0,0xc9,0x22,0x31,0x96);
#if defined(__cplusplus) && !defined(CINTERFACE)
struct IOverlayNotify2 : public IOverlayNotify
{
    virtual HRESULT STDMETHODCALLTYPE OnDisplayChange(
        HMONITOR hMonitor) = 0;

};
#else
typedef struct IOverlayNotify2Vtbl IOverlayNotify2Vtbl;
struct IOverlayNotify2 {
    const IOverlayNotify2Vtbl* lpVtbl;
};
struct IOverlayNotify2Vtbl {
    ICOM_MSVTABLE_COMPAT_FIELDS

    /*** IUnknown methods ***/
    HRESULT (STDMETHODCALLTYPE *QueryInterface)(
        IOverlayNotify2* This,
        REFIID riid,
        void** ppvObject);

    ULONG (STDMETHODCALLTYPE *AddRef)(
        IOverlayNotify2* This);

    ULONG (STDMETHODCALLTYPE *Release)(
        IOverlayNotify2* This);

    /*** IOverlayNotify methods ***/
    HRESULT (STDMETHODCALLTYPE *OnPaletteChange)(
        IOverlayNotify2* This,
        DWORD dwColors,
        const PALETTEENTRY* pPalette);

    HRESULT (STDMETHODCALLTYPE *OnClipChange)(
        IOverlayNotify2* This,
        const RECT* pSourceRect,
        const RECT* pDestinationRect,
        const RGNDATA* pRgnData);

    HRESULT (STDMETHODCALLTYPE *OnColorKeyChange)(
        IOverlayNotify2* This,
        const COLORKEY* pColorKey);

    HRESULT (STDMETHODCALLTYPE *OnPositionChange)(
        IOverlayNotify2* This,
        const RECT* pSourceRect,
        const RECT* pDestinationRect);

    /*** IOverlayNotify2 methods ***/
    HRESULT (STDMETHODCALLTYPE *OnDisplayChange)(
        IOverlayNotify2* This,
        HMONITOR hMonitor);

};

/*** IUnknown methods ***/
#define IOverlayNotify2_QueryInterface(p,a,b) (p)->lpVtbl->QueryInterface(p,a,b)
#define IOverlayNotify2_AddRef(p) (p)->lpVtbl->AddRef(p)
#define IOverlayNotify2_Release(p) (p)->lpVtbl->Release(p)
/*** IOverlayNotify methods ***/
#define IOverlayNotify2_OnPaletteChange(p,a,b) (p)->lpVtbl->OnPaletteChange(p,a,b)
#define IOverlayNotify2_OnClipChange(p,a,b,c) (p)->lpVtbl->OnClipChange(p,a,b,c)
#define IOverlayNotify2_OnColorKeyChange(p,a) (p)->lpVtbl->OnColorKeyChange(p,a)
#define IOverlayNotify2_OnPositionChange(p,a,b) (p)->lpVtbl->OnPositionChange(p,a,b)
/*** IOverlayNotify2 methods ***/
#define IOverlayNotify2_OnDisplayChange(p,a) (p)->lpVtbl->OnDisplayChange(p,a)

#endif

#define IOverlayNotify2_METHODS \
    ICOM_MSVTABLE_COMPAT_FIELDS \
    /*** IUnknown methods ***/ \
    STDMETHOD_(HRESULT,QueryInterface)(THIS_ REFIID riid, void** ppvObject) PURE; \
    STDMETHOD_(ULONG,AddRef)(THIS) PURE; \
    STDMETHOD_(ULONG,Release)(THIS) PURE; \
    /*** IOverlayNotify methods ***/ \
    STDMETHOD_(HRESULT,OnPaletteChange)(THIS_ DWORD dwColors, const PALETTEENTRY* pPalette) PURE; \
    STDMETHOD_(HRESULT,OnClipChange)(THIS_ const RECT* pSourceRect, const RECT* pDestinationRect, const RGNDATA* pRgnData) PURE; \
    STDMETHOD_(HRESULT,OnColorKeyChange)(THIS_ const COLORKEY* pColorKey) PURE; \
    STDMETHOD_(HRESULT,OnPositionChange)(THIS_ const RECT* pSourceRect, const RECT* pDestinationRect) PURE; \
    /*** IOverlayNotify2 methods ***/ \
    STDMETHOD_(HRESULT,OnDisplayChange)(THIS_ HMONITOR hMonitor) PURE;

HRESULT CALLBACK IOverlayNotify2_OnDisplayChange_Proxy(
    IOverlayNotify2* This,
    HMONITOR hMonitor);
void __RPC_STUB IOverlayNotify2_OnDisplayChange_Stub(
    struct IRpcStubBuffer* This,
    struct IRpcChannelBuffer* pRpcChannelBuffer,
    PRPC_MESSAGE pRpcMessage,
    DWORD* pdwStubPhase);

#endif  /* __IOverlayNotify2_INTERFACE_DEFINED__ */

typedef IOverlayNotify2 *POVERLAYNOTIFY2;

/*****************************************************************************
 * IOverlay interface
 */
#ifndef __IOverlay_INTERFACE_DEFINED__
#define __IOverlay_INTERFACE_DEFINED__

DEFINE_GUID(IID_IOverlay, 0x56a868a1, 0x0ad4, 0x11ce, 0xb0,0x3a, 0x00,0x20,0xaf,0x0b,0xa7,0x70);
#if defined(__cplusplus) && !defined(CINTERFACE)
struct IOverlay : public IUnknown
{
    virtual HRESULT STDMETHODCALLTYPE GetPalette(
        DWORD* pdwColors,
        PALETTEENTRY** ppPalette) = 0;

    virtual HRESULT STDMETHODCALLTYPE SetPalette(
        DWORD dwColors,
        PALETTEENTRY* pPalette) = 0;

    virtual HRESULT STDMETHODCALLTYPE GetDefaultColorKey(
        COLORKEY* pColorKey) = 0;

    virtual HRESULT STDMETHODCALLTYPE GetColorKey(
        COLORKEY* pColorKey) = 0;

    virtual HRESULT STDMETHODCALLTYPE SetColorKey(
        COLORKEY* pColorKey) = 0;

    virtual HRESULT STDMETHODCALLTYPE GetWindowHandle(
        HWND* pHwnd) = 0;

    virtual HRESULT STDMETHODCALLTYPE GetClipList(
        RECT* pSourceRect,
        RECT* pDestinationRect,
        RGNDATA** ppRgnData) = 0;

    virtual HRESULT STDMETHODCALLTYPE GetVideoPosition(
        RECT* pSourceRect,
        RECT* pDestinationRect) = 0;

    virtual HRESULT STDMETHODCALLTYPE Advise(
        IOverlayNotify* pOverlayNotify,
        DWORD dwInterests) = 0;

    virtual HRESULT STDMETHODCALLTYPE Unadvise(
        ) = 0;

};
#else
typedef struct IOverlayVtbl IOverlayVtbl;
struct IOverlay {
    const IOverlayVtbl* lpVtbl;
};
struct IOverlayVtbl {
    ICOM_MSVTABLE_COMPAT_FIELDS

    /*** IUnknown methods ***/
    HRESULT (STDMETHODCALLTYPE *QueryInterface)(
        IOverlay* This,
        REFIID riid,
        void** ppvObject);

    ULONG (STDMETHODCALLTYPE *AddRef)(
        IOverlay* This);

    ULONG (STDMETHODCALLTYPE *Release)(
        IOverlay* This);

    /*** IOverlay methods ***/
    HRESULT (STDMETHODCALLTYPE *GetPalette)(
        IOverlay* This,
        DWORD* pdwColors,
        PALETTEENTRY** ppPalette);

    HRESULT (STDMETHODCALLTYPE *SetPalette)(
        IOverlay* This,
        DWORD dwColors,
        PALETTEENTRY* pPalette);

    HRESULT (STDMETHODCALLTYPE *GetDefaultColorKey)(
        IOverlay* This,
        COLORKEY* pColorKey);

    HRESULT (STDMETHODCALLTYPE *GetColorKey)(
        IOverlay* This,
        COLORKEY* pColorKey);

    HRESULT (STDMETHODCALLTYPE *SetColorKey)(
        IOverlay* This,
        COLORKEY* pColorKey);

    HRESULT (STDMETHODCALLTYPE *GetWindowHandle)(
        IOverlay* This,
        HWND* pHwnd);

    HRESULT (STDMETHODCALLTYPE *GetClipList)(
        IOverlay* This,
        RECT* pSourceRect,
        RECT* pDestinationRect,
        RGNDATA** ppRgnData);

    HRESULT (STDMETHODCALLTYPE *GetVideoPosition)(
        IOverlay* This,
        RECT* pSourceRect,
        RECT* pDestinationRect);

    HRESULT (STDMETHODCALLTYPE *Advise)(
        IOverlay* This,
        IOverlayNotify* pOverlayNotify,
        DWORD dwInterests);

    HRESULT (STDMETHODCALLTYPE *Unadvise)(
        IOverlay* This);

};

/*** IUnknown methods ***/
#define IOverlay_QueryInterface(p,a,b) (p)->lpVtbl->QueryInterface(p,a,b)
#define IOverlay_AddRef(p) (p)->lpVtbl->AddRef(p)
#define IOverlay_Release(p) (p)->lpVtbl->Release(p)
/*** IOverlay methods ***/
#define IOverlay_GetPalette(p,a,b) (p)->lpVtbl->GetPalette(p,a,b)
#define IOverlay_SetPalette(p,a,b) (p)->lpVtbl->SetPalette(p,a,b)
#define IOverlay_GetDefaultColorKey(p,a) (p)->lpVtbl->GetDefaultColorKey(p,a)
#define IOverlay_GetColorKey(p,a) (p)->lpVtbl->GetColorKey(p,a)
#define IOverlay_SetColorKey(p,a) (p)->lpVtbl->SetColorKey(p,a)
#define IOverlay_GetWindowHandle(p,a) (p)->lpVtbl->GetWindowHandle(p,a)
#define IOverlay_GetClipList(p,a,b,c) (p)->lpVtbl->GetClipList(p,a,b,c)
#define IOverlay_GetVideoPosition(p,a,b) (p)->lpVtbl->GetVideoPosition(p,a,b)
#define IOverlay_Advise(p,a,b) (p)->lpVtbl->Advise(p,a,b)
#define IOverlay_Unadvise(p) (p)->lpVtbl->Unadvise(p)

#endif

#define IOverlay_METHODS \
    ICOM_MSVTABLE_COMPAT_FIELDS \
    /*** IUnknown methods ***/ \
    STDMETHOD_(HRESULT,QueryInterface)(THIS_ REFIID riid, void** ppvObject) PURE; \
    STDMETHOD_(ULONG,AddRef)(THIS) PURE; \
    STDMETHOD_(ULONG,Release)(THIS) PURE; \
    /*** IOverlay methods ***/ \
    STDMETHOD_(HRESULT,GetPalette)(THIS_ DWORD* pdwColors, PALETTEENTRY** ppPalette) PURE; \
    STDMETHOD_(HRESULT,SetPalette)(THIS_ DWORD dwColors, PALETTEENTRY* pPalette) PURE; \
    STDMETHOD_(HRESULT,GetDefaultColorKey)(THIS_ COLORKEY* pColorKey) PURE; \
    STDMETHOD_(HRESULT,GetColorKey)(THIS_ COLORKEY* pColorKey) PURE; \
    STDMETHOD_(HRESULT,SetColorKey)(THIS_ COLORKEY* pColorKey) PURE; \
    STDMETHOD_(HRESULT,GetWindowHandle)(THIS_ HWND* pHwnd) PURE; \
    STDMETHOD_(HRESULT,GetClipList)(THIS_ RECT* pSourceRect, RECT* pDestinationRect, RGNDATA** ppRgnData) PURE; \
    STDMETHOD_(HRESULT,GetVideoPosition)(THIS_ RECT* pSourceRect, RECT* pDestinationRect) PURE; \
    STDMETHOD_(HRESULT,Advise)(THIS_ IOverlayNotify* pOverlayNotify, DWORD dwInterests) PURE; \
    STDMETHOD_(HRESULT,Unadvise)(THIS) PURE;

HRESULT CALLBACK IOverlay_GetPalette_Proxy(
    IOverlay* This,
    DWORD* pdwColors,
    PALETTEENTRY** ppPalette);
void __RPC_STUB IOverlay_GetPalette_Stub(
    struct IRpcStubBuffer* This,
    struct IRpcChannelBuffer* pRpcChannelBuffer,
    PRPC_MESSAGE pRpcMessage,
    DWORD* pdwStubPhase);
HRESULT CALLBACK IOverlay_SetPalette_Proxy(
    IOverlay* This,
    DWORD dwColors,
    PALETTEENTRY* pPalette);
void __RPC_STUB IOverlay_SetPalette_Stub(
    struct IRpcStubBuffer* This,
    struct IRpcChannelBuffer* pRpcChannelBuffer,
    PRPC_MESSAGE pRpcMessage,
    DWORD* pdwStubPhase);
HRESULT CALLBACK IOverlay_GetDefaultColorKey_Proxy(
    IOverlay* This,
    COLORKEY* pColorKey);
void __RPC_STUB IOverlay_GetDefaultColorKey_Stub(
    struct IRpcStubBuffer* This,
    struct IRpcChannelBuffer* pRpcChannelBuffer,
    PRPC_MESSAGE pRpcMessage,
    DWORD* pdwStubPhase);
HRESULT CALLBACK IOverlay_GetColorKey_Proxy(
    IOverlay* This,
    COLORKEY* pColorKey);
void __RPC_STUB IOverlay_GetColorKey_Stub(
    struct IRpcStubBuffer* This,
    struct IRpcChannelBuffer* pRpcChannelBuffer,
    PRPC_MESSAGE pRpcMessage,
    DWORD* pdwStubPhase);
HRESULT CALLBACK IOverlay_SetColorKey_Proxy(
    IOverlay* This,
    COLORKEY* pColorKey);
void __RPC_STUB IOverlay_SetColorKey_Stub(
    struct IRpcStubBuffer* This,
    struct IRpcChannelBuffer* pRpcChannelBuffer,
    PRPC_MESSAGE pRpcMessage,
    DWORD* pdwStubPhase);
HRESULT CALLBACK IOverlay_GetWindowHandle_Proxy(
    IOverlay* This,
    HWND* pHwnd);
void __RPC_STUB IOverlay_GetWindowHandle_Stub(
    struct IRpcStubBuffer* This,
    struct IRpcChannelBuffer* pRpcChannelBuffer,
    PRPC_MESSAGE pRpcMessage,
    DWORD* pdwStubPhase);
HRESULT CALLBACK IOverlay_GetClipList_Proxy(
    IOverlay* This,
    RECT* pSourceRect,
    RECT* pDestinationRect,
    RGNDATA** ppRgnData);
void __RPC_STUB IOverlay_GetClipList_Stub(
    struct IRpcStubBuffer* This,
    struct IRpcChannelBuffer* pRpcChannelBuffer,
    PRPC_MESSAGE pRpcMessage,
    DWORD* pdwStubPhase);
HRESULT CALLBACK IOverlay_GetVideoPosition_Proxy(
    IOverlay* This,
    RECT* pSourceRect,
    RECT* pDestinationRect);
void __RPC_STUB IOverlay_GetVideoPosition_Stub(
    struct IRpcStubBuffer* This,
    struct IRpcChannelBuffer* pRpcChannelBuffer,
    PRPC_MESSAGE pRpcMessage,
    DWORD* pdwStubPhase);
HRESULT CALLBACK IOverlay_Advise_Proxy(
    IOverlay* This,
    IOverlayNotify* pOverlayNotify,
    DWORD dwInterests);
void __RPC_STUB IOverlay_Advise_Stub(
    struct IRpcStubBuffer* This,
    struct IRpcChannelBuffer* pRpcChannelBuffer,
    PRPC_MESSAGE pRpcMessage,
    DWORD* pdwStubPhase);
HRESULT CALLBACK IOverlay_Unadvise_Proxy(
    IOverlay* This);
void __RPC_STUB IOverlay_Unadvise_Stub(
    struct IRpcStubBuffer* This,
    struct IRpcChannelBuffer* pRpcChannelBuffer,
    PRPC_MESSAGE pRpcMessage,
    DWORD* pdwStubPhase);

#endif  /* __IOverlay_INTERFACE_DEFINED__ */

typedef IOverlay *POVERLAY;

/*****************************************************************************
 * IMediaEventSink interface
 */
#ifndef __IMediaEventSink_INTERFACE_DEFINED__
#define __IMediaEventSink_INTERFACE_DEFINED__

DEFINE_GUID(IID_IMediaEventSink, 0x56a868a2, 0x0ad4, 0x11ce, 0xb0,0x3a, 0x00,0x20,0xaf,0x0b,0xa7,0x70);
#if defined(__cplusplus) && !defined(CINTERFACE)
struct IMediaEventSink : public IUnknown
{
    virtual HRESULT STDMETHODCALLTYPE Notify(
        long EventCode,
        LONG_PTR EventParam1,
        LONG_PTR EventParam2) = 0;

};
#else
typedef struct IMediaEventSinkVtbl IMediaEventSinkVtbl;
struct IMediaEventSink {
    const IMediaEventSinkVtbl* lpVtbl;
};
struct IMediaEventSinkVtbl {
    ICOM_MSVTABLE_COMPAT_FIELDS

    /*** IUnknown methods ***/
    HRESULT (STDMETHODCALLTYPE *QueryInterface)(
        IMediaEventSink* This,
        REFIID riid,
        void** ppvObject);

    ULONG (STDMETHODCALLTYPE *AddRef)(
        IMediaEventSink* This);

    ULONG (STDMETHODCALLTYPE *Release)(
        IMediaEventSink* This);

    /*** IMediaEventSink methods ***/
    HRESULT (STDMETHODCALLTYPE *Notify)(
        IMediaEventSink* This,
        long EventCode,
        LONG_PTR EventParam1,
        LONG_PTR EventParam2);

};

/*** IUnknown methods ***/
#define IMediaEventSink_QueryInterface(p,a,b) (p)->lpVtbl->QueryInterface(p,a,b)
#define IMediaEventSink_AddRef(p) (p)->lpVtbl->AddRef(p)
#define IMediaEventSink_Release(p) (p)->lpVtbl->Release(p)
/*** IMediaEventSink methods ***/
#define IMediaEventSink_Notify(p,a,b,c) (p)->lpVtbl->Notify(p,a,b,c)

#endif

#define IMediaEventSink_METHODS \
    ICOM_MSVTABLE_COMPAT_FIELDS \
    /*** IUnknown methods ***/ \
    STDMETHOD_(HRESULT,QueryInterface)(THIS_ REFIID riid, void** ppvObject) PURE; \
    STDMETHOD_(ULONG,AddRef)(THIS) PURE; \
    STDMETHOD_(ULONG,Release)(THIS) PURE; \
    /*** IMediaEventSink methods ***/ \
    STDMETHOD_(HRESULT,Notify)(THIS_ long EventCode, LONG_PTR EventParam1, LONG_PTR EventParam2) PURE;

HRESULT CALLBACK IMediaEventSink_Notify_Proxy(
    IMediaEventSink* This,
    long EventCode,
    LONG_PTR EventParam1,
    LONG_PTR EventParam2);
void __RPC_STUB IMediaEventSink_Notify_Stub(
    struct IRpcStubBuffer* This,
    struct IRpcChannelBuffer* pRpcChannelBuffer,
    PRPC_MESSAGE pRpcMessage,
    DWORD* pdwStubPhase);

#endif  /* __IMediaEventSink_INTERFACE_DEFINED__ */

typedef IMediaEventSink *PMEDIAEVENTSINK;

/*****************************************************************************
 * IFileSourceFilter interface
 */
#ifndef __IFileSourceFilter_INTERFACE_DEFINED__
#define __IFileSourceFilter_INTERFACE_DEFINED__

DEFINE_GUID(IID_IFileSourceFilter, 0x56a868a6, 0x0ad4, 0x11ce, 0xb0,0x3a, 0x00,0x20,0xaf,0x0b,0xa7,0x70);
#if defined(__cplusplus) && !defined(CINTERFACE)
struct IFileSourceFilter : public IUnknown
{
    virtual HRESULT STDMETHODCALLTYPE Load(
        LPCOLESTR pszFileName,
        const AM_MEDIA_TYPE* pmt) = 0;

    virtual HRESULT STDMETHODCALLTYPE GetCurFile(
        LPOLESTR* ppszFileName,
        AM_MEDIA_TYPE* pmt) = 0;

};
#else
typedef struct IFileSourceFilterVtbl IFileSourceFilterVtbl;
struct IFileSourceFilter {
    const IFileSourceFilterVtbl* lpVtbl;
};
struct IFileSourceFilterVtbl {
    ICOM_MSVTABLE_COMPAT_FIELDS

    /*** IUnknown methods ***/
    HRESULT (STDMETHODCALLTYPE *QueryInterface)(
        IFileSourceFilter* This,
        REFIID riid,
        void** ppvObject);

    ULONG (STDMETHODCALLTYPE *AddRef)(
        IFileSourceFilter* This);

    ULONG (STDMETHODCALLTYPE *Release)(
        IFileSourceFilter* This);

    /*** IFileSourceFilter methods ***/
    HRESULT (STDMETHODCALLTYPE *Load)(
        IFileSourceFilter* This,
        LPCOLESTR pszFileName,
        const AM_MEDIA_TYPE* pmt);

    HRESULT (STDMETHODCALLTYPE *GetCurFile)(
        IFileSourceFilter* This,
        LPOLESTR* ppszFileName,
        AM_MEDIA_TYPE* pmt);

};

/*** IUnknown methods ***/
#define IFileSourceFilter_QueryInterface(p,a,b) (p)->lpVtbl->QueryInterface(p,a,b)
#define IFileSourceFilter_AddRef(p) (p)->lpVtbl->AddRef(p)
#define IFileSourceFilter_Release(p) (p)->lpVtbl->Release(p)
/*** IFileSourceFilter methods ***/
#define IFileSourceFilter_Load(p,a,b) (p)->lpVtbl->Load(p,a,b)
#define IFileSourceFilter_GetCurFile(p,a,b) (p)->lpVtbl->GetCurFile(p,a,b)

#endif

#define IFileSourceFilter_METHODS \
    ICOM_MSVTABLE_COMPAT_FIELDS \
    /*** IUnknown methods ***/ \
    STDMETHOD_(HRESULT,QueryInterface)(THIS_ REFIID riid, void** ppvObject) PURE; \
    STDMETHOD_(ULONG,AddRef)(THIS) PURE; \
    STDMETHOD_(ULONG,Release)(THIS) PURE; \
    /*** IFileSourceFilter methods ***/ \
    STDMETHOD_(HRESULT,Load)(THIS_ LPCOLESTR pszFileName, const AM_MEDIA_TYPE* pmt) PURE; \
    STDMETHOD_(HRESULT,GetCurFile)(THIS_ LPOLESTR* ppszFileName, AM_MEDIA_TYPE* pmt) PURE;

HRESULT CALLBACK IFileSourceFilter_Load_Proxy(
    IFileSourceFilter* This,
    LPCOLESTR pszFileName,
    const AM_MEDIA_TYPE* pmt);
void __RPC_STUB IFileSourceFilter_Load_Stub(
    struct IRpcStubBuffer* This,
    struct IRpcChannelBuffer* pRpcChannelBuffer,
    PRPC_MESSAGE pRpcMessage,
    DWORD* pdwStubPhase);
HRESULT CALLBACK IFileSourceFilter_GetCurFile_Proxy(
    IFileSourceFilter* This,
    LPOLESTR* ppszFileName,
    AM_MEDIA_TYPE* pmt);
void __RPC_STUB IFileSourceFilter_GetCurFile_Stub(
    struct IRpcStubBuffer* This,
    struct IRpcChannelBuffer* pRpcChannelBuffer,
    PRPC_MESSAGE pRpcMessage,
    DWORD* pdwStubPhase);

#endif  /* __IFileSourceFilter_INTERFACE_DEFINED__ */

typedef IFileSourceFilter *PFILTERFILESOURCE;

/*****************************************************************************
 * IFileSinkFilter interface
 */
#ifndef __IFileSinkFilter_INTERFACE_DEFINED__
#define __IFileSinkFilter_INTERFACE_DEFINED__

DEFINE_GUID(IID_IFileSinkFilter, 0xa2104830, 0x7c70, 0x11cf, 0x8b,0xce, 0x00,0xaa,0x00,0xa3,0xf1,0xa6);
#if defined(__cplusplus) && !defined(CINTERFACE)
struct IFileSinkFilter : public IUnknown
{
    virtual HRESULT STDMETHODCALLTYPE SetFileName(
        LPCOLESTR pszFileName,
        const AM_MEDIA_TYPE* pmt) = 0;

    virtual HRESULT STDMETHODCALLTYPE GetCurFile(
        LPOLESTR* ppszFileName,
        AM_MEDIA_TYPE* pmt) = 0;

};
#else
typedef struct IFileSinkFilterVtbl IFileSinkFilterVtbl;
struct IFileSinkFilter {
    const IFileSinkFilterVtbl* lpVtbl;
};
struct IFileSinkFilterVtbl {
    ICOM_MSVTABLE_COMPAT_FIELDS

    /*** IUnknown methods ***/
    HRESULT (STDMETHODCALLTYPE *QueryInterface)(
        IFileSinkFilter* This,
        REFIID riid,
        void** ppvObject);

    ULONG (STDMETHODCALLTYPE *AddRef)(
        IFileSinkFilter* This);

    ULONG (STDMETHODCALLTYPE *Release)(
        IFileSinkFilter* This);

    /*** IFileSinkFilter methods ***/
    HRESULT (STDMETHODCALLTYPE *SetFileName)(
        IFileSinkFilter* This,
        LPCOLESTR pszFileName,
        const AM_MEDIA_TYPE* pmt);

    HRESULT (STDMETHODCALLTYPE *GetCurFile)(
        IFileSinkFilter* This,
        LPOLESTR* ppszFileName,
        AM_MEDIA_TYPE* pmt);

};

/*** IUnknown methods ***/
#define IFileSinkFilter_QueryInterface(p,a,b) (p)->lpVtbl->QueryInterface(p,a,b)
#define IFileSinkFilter_AddRef(p) (p)->lpVtbl->AddRef(p)
#define IFileSinkFilter_Release(p) (p)->lpVtbl->Release(p)
/*** IFileSinkFilter methods ***/
#define IFileSinkFilter_SetFileName(p,a,b) (p)->lpVtbl->SetFileName(p,a,b)
#define IFileSinkFilter_GetCurFile(p,a,b) (p)->lpVtbl->GetCurFile(p,a,b)

#endif

#define IFileSinkFilter_METHODS \
    ICOM_MSVTABLE_COMPAT_FIELDS \
    /*** IUnknown methods ***/ \
    STDMETHOD_(HRESULT,QueryInterface)(THIS_ REFIID riid, void** ppvObject) PURE; \
    STDMETHOD_(ULONG,AddRef)(THIS) PURE; \
    STDMETHOD_(ULONG,Release)(THIS) PURE; \
    /*** IFileSinkFilter methods ***/ \
    STDMETHOD_(HRESULT,SetFileName)(THIS_ LPCOLESTR pszFileName, const AM_MEDIA_TYPE* pmt) PURE; \
    STDMETHOD_(HRESULT,GetCurFile)(THIS_ LPOLESTR* ppszFileName, AM_MEDIA_TYPE* pmt) PURE;

HRESULT CALLBACK IFileSinkFilter_SetFileName_Proxy(
    IFileSinkFilter* This,
    LPCOLESTR pszFileName,
    const AM_MEDIA_TYPE* pmt);
void __RPC_STUB IFileSinkFilter_SetFileName_Stub(
    struct IRpcStubBuffer* This,
    struct IRpcChannelBuffer* pRpcChannelBuffer,
    PRPC_MESSAGE pRpcMessage,
    DWORD* pdwStubPhase);
HRESULT CALLBACK IFileSinkFilter_GetCurFile_Proxy(
    IFileSinkFilter* This,
    LPOLESTR* ppszFileName,
    AM_MEDIA_TYPE* pmt);
void __RPC_STUB IFileSinkFilter_GetCurFile_Stub(
    struct IRpcStubBuffer* This,
    struct IRpcChannelBuffer* pRpcChannelBuffer,
    PRPC_MESSAGE pRpcMessage,
    DWORD* pdwStubPhase);

#endif  /* __IFileSinkFilter_INTERFACE_DEFINED__ */

typedef IFileSinkFilter *PFILTERFILESINK;

/*****************************************************************************
 * IFileSinkFilter2 interface
 */
#ifndef __IFileSinkFilter2_INTERFACE_DEFINED__
#define __IFileSinkFilter2_INTERFACE_DEFINED__

DEFINE_GUID(IID_IFileSinkFilter2, 0x00855b90, 0xce1b, 0x11d0, 0xbd,0x4f, 0x00,0xa0,0xc9,0x11,0xce,0x86);
#if defined(__cplusplus) && !defined(CINTERFACE)
struct IFileSinkFilter2 : public IFileSinkFilter
{
    virtual HRESULT STDMETHODCALLTYPE SetMode(
        DWORD dwFlags) = 0;

    virtual HRESULT STDMETHODCALLTYPE GetMode(
        DWORD* pdwFlags) = 0;

};
#else
typedef struct IFileSinkFilter2Vtbl IFileSinkFilter2Vtbl;
struct IFileSinkFilter2 {
    const IFileSinkFilter2Vtbl* lpVtbl;
};
struct IFileSinkFilter2Vtbl {
    ICOM_MSVTABLE_COMPAT_FIELDS

    /*** IUnknown methods ***/
    HRESULT (STDMETHODCALLTYPE *QueryInterface)(
        IFileSinkFilter2* This,
        REFIID riid,
        void** ppvObject);

    ULONG (STDMETHODCALLTYPE *AddRef)(
        IFileSinkFilter2* This);

    ULONG (STDMETHODCALLTYPE *Release)(
        IFileSinkFilter2* This);

    /*** IFileSinkFilter methods ***/
    HRESULT (STDMETHODCALLTYPE *SetFileName)(
        IFileSinkFilter2* This,
        LPCOLESTR pszFileName,
        const AM_MEDIA_TYPE* pmt);

    HRESULT (STDMETHODCALLTYPE *GetCurFile)(
        IFileSinkFilter2* This,
        LPOLESTR* ppszFileName,
        AM_MEDIA_TYPE* pmt);

    /*** IFileSinkFilter2 methods ***/
    HRESULT (STDMETHODCALLTYPE *SetMode)(
        IFileSinkFilter2* This,
        DWORD dwFlags);

    HRESULT (STDMETHODCALLTYPE *GetMode)(
        IFileSinkFilter2* This,
        DWORD* pdwFlags);

};

/*** IUnknown methods ***/
#define IFileSinkFilter2_QueryInterface(p,a,b) (p)->lpVtbl->QueryInterface(p,a,b)
#define IFileSinkFilter2_AddRef(p) (p)->lpVtbl->AddRef(p)
#define IFileSinkFilter2_Release(p) (p)->lpVtbl->Release(p)
/*** IFileSinkFilter methods ***/
#define IFileSinkFilter2_SetFileName(p,a,b) (p)->lpVtbl->SetFileName(p,a,b)
#define IFileSinkFilter2_GetCurFile(p,a,b) (p)->lpVtbl->GetCurFile(p,a,b)
/*** IFileSinkFilter2 methods ***/
#define IFileSinkFilter2_SetMode(p,a) (p)->lpVtbl->SetMode(p,a)
#define IFileSinkFilter2_GetMode(p,a) (p)->lpVtbl->GetMode(p,a)

#endif

#define IFileSinkFilter2_METHODS \
    ICOM_MSVTABLE_COMPAT_FIELDS \
    /*** IUnknown methods ***/ \
    STDMETHOD_(HRESULT,QueryInterface)(THIS_ REFIID riid, void** ppvObject) PURE; \
    STDMETHOD_(ULONG,AddRef)(THIS) PURE; \
    STDMETHOD_(ULONG,Release)(THIS) PURE; \
    /*** IFileSinkFilter methods ***/ \
    STDMETHOD_(HRESULT,SetFileName)(THIS_ LPCOLESTR pszFileName, const AM_MEDIA_TYPE* pmt) PURE; \
    STDMETHOD_(HRESULT,GetCurFile)(THIS_ LPOLESTR* ppszFileName, AM_MEDIA_TYPE* pmt) PURE; \
    /*** IFileSinkFilter2 methods ***/ \
    STDMETHOD_(HRESULT,SetMode)(THIS_ DWORD dwFlags) PURE; \
    STDMETHOD_(HRESULT,GetMode)(THIS_ DWORD* pdwFlags) PURE;

HRESULT CALLBACK IFileSinkFilter2_SetMode_Proxy(
    IFileSinkFilter2* This,
    DWORD dwFlags);
void __RPC_STUB IFileSinkFilter2_SetMode_Stub(
    struct IRpcStubBuffer* This,
    struct IRpcChannelBuffer* pRpcChannelBuffer,
    PRPC_MESSAGE pRpcMessage,
    DWORD* pdwStubPhase);
HRESULT CALLBACK IFileSinkFilter2_GetMode_Proxy(
    IFileSinkFilter2* This,
    DWORD* pdwFlags);
void __RPC_STUB IFileSinkFilter2_GetMode_Stub(
    struct IRpcStubBuffer* This,
    struct IRpcChannelBuffer* pRpcChannelBuffer,
    PRPC_MESSAGE pRpcMessage,
    DWORD* pdwStubPhase);

#endif  /* __IFileSinkFilter2_INTERFACE_DEFINED__ */

typedef IFileSinkFilter2 *PFILESINKFILTER2;

typedef enum {
    AM_FILE_OVERWRITE = 0x1
} AM_FILESINK_FLAGS;

/*****************************************************************************
 * IGraphBuilder interface
 */
#ifndef __IGraphBuilder_INTERFACE_DEFINED__
#define __IGraphBuilder_INTERFACE_DEFINED__

DEFINE_GUID(IID_IGraphBuilder, 0x56a868a9, 0x0ad4, 0x11ce, 0xb0,0x3a, 0x00,0x20,0xaf,0x0b,0xa7,0x70);
#if defined(__cplusplus) && !defined(CINTERFACE)
struct IGraphBuilder : public IFilterGraph
{
    virtual HRESULT STDMETHODCALLTYPE Connect(
        IPin* ppinOut,
        IPin* ppinIn) = 0;

    virtual HRESULT STDMETHODCALLTYPE Render(
        IPin* ppinOut) = 0;

    virtual HRESULT STDMETHODCALLTYPE RenderFile(
        LPCWSTR lpcwstrFile,
        LPCWSTR lpcwstrPlayList) = 0;

    virtual HRESULT STDMETHODCALLTYPE AddSourceFilter(
        LPCWSTR lpcwstrFileName,
        LPCWSTR lpcwstrFilterName,
        IBaseFilter** ppFilter) = 0;

    virtual HRESULT STDMETHODCALLTYPE SetLogFile(
        DWORD_PTR hFile) = 0;

    virtual HRESULT STDMETHODCALLTYPE Abort(
        ) = 0;

    virtual HRESULT STDMETHODCALLTYPE ShouldOperationContinue(
        ) = 0;

};
#else
typedef struct IGraphBuilderVtbl IGraphBuilderVtbl;
struct IGraphBuilder {
    const IGraphBuilderVtbl* lpVtbl;
};
struct IGraphBuilderVtbl {
    ICOM_MSVTABLE_COMPAT_FIELDS

    /*** IUnknown methods ***/
    HRESULT (STDMETHODCALLTYPE *QueryInterface)(
        IGraphBuilder* This,
        REFIID riid,
        void** ppvObject);

    ULONG (STDMETHODCALLTYPE *AddRef)(
        IGraphBuilder* This);

    ULONG (STDMETHODCALLTYPE *Release)(
        IGraphBuilder* This);

    /*** IFilterGraph methods ***/
    HRESULT (STDMETHODCALLTYPE *AddFilter)(
        IGraphBuilder* This,
        IBaseFilter* pFilter,
        LPCWSTR pName);

    HRESULT (STDMETHODCALLTYPE *RemoveFilter)(
        IGraphBuilder* This,
        IBaseFilter* pFilter);

    HRESULT (STDMETHODCALLTYPE *EnumFilters)(
        IGraphBuilder* This,
        IEnumFilters** ppEnum);

    HRESULT (STDMETHODCALLTYPE *FindFilterByName)(
        IGraphBuilder* This,
        LPCWSTR pName,
        IBaseFilter** ppFilter);

    HRESULT (STDMETHODCALLTYPE *ConnectDirect)(
        IGraphBuilder* This,
        IPin* ppinOut,
        IPin* ppinIn,
        const AM_MEDIA_TYPE* pmt);

    HRESULT (STDMETHODCALLTYPE *Reconnect)(
        IGraphBuilder* This,
        IPin* ppin);

    HRESULT (STDMETHODCALLTYPE *Disconnect)(
        IGraphBuilder* This,
        IPin* ppin);

    HRESULT (STDMETHODCALLTYPE *SetDefaultSyncSource)(
        IGraphBuilder* This);

    /*** IGraphBuilder methods ***/
    HRESULT (STDMETHODCALLTYPE *Connect)(
        IGraphBuilder* This,
        IPin* ppinOut,
        IPin* ppinIn);

    HRESULT (STDMETHODCALLTYPE *Render)(
        IGraphBuilder* This,
        IPin* ppinOut);

    HRESULT (STDMETHODCALLTYPE *RenderFile)(
        IGraphBuilder* This,
        LPCWSTR lpcwstrFile,
        LPCWSTR lpcwstrPlayList);

    HRESULT (STDMETHODCALLTYPE *AddSourceFilter)(
        IGraphBuilder* This,
        LPCWSTR lpcwstrFileName,
        LPCWSTR lpcwstrFilterName,
        IBaseFilter** ppFilter);

    HRESULT (STDMETHODCALLTYPE *SetLogFile)(
        IGraphBuilder* This,
        DWORD_PTR hFile);

    HRESULT (STDMETHODCALLTYPE *Abort)(
        IGraphBuilder* This);

    HRESULT (STDMETHODCALLTYPE *ShouldOperationContinue)(
        IGraphBuilder* This);

};

/*** IUnknown methods ***/
#define IGraphBuilder_QueryInterface(p,a,b) (p)->lpVtbl->QueryInterface(p,a,b)
#define IGraphBuilder_AddRef(p) (p)->lpVtbl->AddRef(p)
#define IGraphBuilder_Release(p) (p)->lpVtbl->Release(p)
/*** IFilterGraph methods ***/
#define IGraphBuilder_AddFilter(p,a,b) (p)->lpVtbl->AddFilter(p,a,b)
#define IGraphBuilder_RemoveFilter(p,a) (p)->lpVtbl->RemoveFilter(p,a)
#define IGraphBuilder_EnumFilters(p,a) (p)->lpVtbl->EnumFilters(p,a)
#define IGraphBuilder_FindFilterByName(p,a,b) (p)->lpVtbl->FindFilterByName(p,a,b)
#define IGraphBuilder_ConnectDirect(p,a,b,c) (p)->lpVtbl->ConnectDirect(p,a,b,c)
#define IGraphBuilder_Reconnect(p,a) (p)->lpVtbl->Reconnect(p,a)
#define IGraphBuilder_Disconnect(p,a) (p)->lpVtbl->Disconnect(p,a)
#define IGraphBuilder_SetDefaultSyncSource(p) (p)->lpVtbl->SetDefaultSyncSource(p)
/*** IGraphBuilder methods ***/
#define IGraphBuilder_Connect(p,a,b) (p)->lpVtbl->Connect(p,a,b)
#define IGraphBuilder_Render(p,a) (p)->lpVtbl->Render(p,a)
#define IGraphBuilder_RenderFile(p,a,b) (p)->lpVtbl->RenderFile(p,a,b)
#define IGraphBuilder_AddSourceFilter(p,a,b,c) (p)->lpVtbl->AddSourceFilter(p,a,b,c)
#define IGraphBuilder_SetLogFile(p,a) (p)->lpVtbl->SetLogFile(p,a)
#define IGraphBuilder_Abort(p) (p)->lpVtbl->Abort(p)
#define IGraphBuilder_ShouldOperationContinue(p) (p)->lpVtbl->ShouldOperationContinue(p)

#endif

#define IGraphBuilder_METHODS \
    ICOM_MSVTABLE_COMPAT_FIELDS \
    /*** IUnknown methods ***/ \
    STDMETHOD_(HRESULT,QueryInterface)(THIS_ REFIID riid, void** ppvObject) PURE; \
    STDMETHOD_(ULONG,AddRef)(THIS) PURE; \
    STDMETHOD_(ULONG,Release)(THIS) PURE; \
    /*** IFilterGraph methods ***/ \
    STDMETHOD_(HRESULT,AddFilter)(THIS_ IBaseFilter* pFilter, LPCWSTR pName) PURE; \
    STDMETHOD_(HRESULT,RemoveFilter)(THIS_ IBaseFilter* pFilter) PURE; \
    STDMETHOD_(HRESULT,EnumFilters)(THIS_ IEnumFilters** ppEnum) PURE; \
    STDMETHOD_(HRESULT,FindFilterByName)(THIS_ LPCWSTR pName, IBaseFilter** ppFilter) PURE; \
    STDMETHOD_(HRESULT,ConnectDirect)(THIS_ IPin* ppinOut, IPin* ppinIn, const AM_MEDIA_TYPE* pmt) PURE; \
    STDMETHOD_(HRESULT,Reconnect)(THIS_ IPin* ppin) PURE; \
    STDMETHOD_(HRESULT,Disconnect)(THIS_ IPin* ppin) PURE; \
    STDMETHOD_(HRESULT,SetDefaultSyncSource)(THIS) PURE; \
    /*** IGraphBuilder methods ***/ \
    STDMETHOD_(HRESULT,Connect)(THIS_ IPin* ppinOut, IPin* ppinIn) PURE; \
    STDMETHOD_(HRESULT,Render)(THIS_ IPin* ppinOut) PURE; \
    STDMETHOD_(HRESULT,RenderFile)(THIS_ LPCWSTR lpcwstrFile, LPCWSTR lpcwstrPlayList) PURE; \
    STDMETHOD_(HRESULT,AddSourceFilter)(THIS_ LPCWSTR lpcwstrFileName, LPCWSTR lpcwstrFilterName, IBaseFilter** ppFilter) PURE; \
    STDMETHOD_(HRESULT,SetLogFile)(THIS_ DWORD_PTR hFile) PURE; \
    STDMETHOD_(HRESULT,Abort)(THIS) PURE; \
    STDMETHOD_(HRESULT,ShouldOperationContinue)(THIS) PURE;

HRESULT CALLBACK IGraphBuilder_Connect_Proxy(
    IGraphBuilder* This,
    IPin* ppinOut,
    IPin* ppinIn);
void __RPC_STUB IGraphBuilder_Connect_Stub(
    struct IRpcStubBuffer* This,
    struct IRpcChannelBuffer* pRpcChannelBuffer,
    PRPC_MESSAGE pRpcMessage,
    DWORD* pdwStubPhase);
HRESULT CALLBACK IGraphBuilder_Render_Proxy(
    IGraphBuilder* This,
    IPin* ppinOut);
void __RPC_STUB IGraphBuilder_Render_Stub(
    struct IRpcStubBuffer* This,
    struct IRpcChannelBuffer* pRpcChannelBuffer,
    PRPC_MESSAGE pRpcMessage,
    DWORD* pdwStubPhase);
HRESULT CALLBACK IGraphBuilder_RenderFile_Proxy(
    IGraphBuilder* This,
    LPCWSTR lpcwstrFile,
    LPCWSTR lpcwstrPlayList);
void __RPC_STUB IGraphBuilder_RenderFile_Stub(
    struct IRpcStubBuffer* This,
    struct IRpcChannelBuffer* pRpcChannelBuffer,
    PRPC_MESSAGE pRpcMessage,
    DWORD* pdwStubPhase);
HRESULT CALLBACK IGraphBuilder_AddSourceFilter_Proxy(
    IGraphBuilder* This,
    LPCWSTR lpcwstrFileName,
    LPCWSTR lpcwstrFilterName,
    IBaseFilter** ppFilter);
void __RPC_STUB IGraphBuilder_AddSourceFilter_Stub(
    struct IRpcStubBuffer* This,
    struct IRpcChannelBuffer* pRpcChannelBuffer,
    PRPC_MESSAGE pRpcMessage,
    DWORD* pdwStubPhase);
HRESULT CALLBACK IGraphBuilder_SetLogFile_Proxy(
    IGraphBuilder* This,
    DWORD_PTR hFile);
void __RPC_STUB IGraphBuilder_SetLogFile_Stub(
    struct IRpcStubBuffer* This,
    struct IRpcChannelBuffer* pRpcChannelBuffer,
    PRPC_MESSAGE pRpcMessage,
    DWORD* pdwStubPhase);
HRESULT CALLBACK IGraphBuilder_Abort_Proxy(
    IGraphBuilder* This);
void __RPC_STUB IGraphBuilder_Abort_Stub(
    struct IRpcStubBuffer* This,
    struct IRpcChannelBuffer* pRpcChannelBuffer,
    PRPC_MESSAGE pRpcMessage,
    DWORD* pdwStubPhase);
HRESULT CALLBACK IGraphBuilder_ShouldOperationContinue_Proxy(
    IGraphBuilder* This);
void __RPC_STUB IGraphBuilder_ShouldOperationContinue_Stub(
    struct IRpcStubBuffer* This,
    struct IRpcChannelBuffer* pRpcChannelBuffer,
    PRPC_MESSAGE pRpcMessage,
    DWORD* pdwStubPhase);

#endif  /* __IGraphBuilder_INTERFACE_DEFINED__ */

/*****************************************************************************
 * ICaptureGraphBuilder interface
 */
#ifndef __ICaptureGraphBuilder_INTERFACE_DEFINED__
#define __ICaptureGraphBuilder_INTERFACE_DEFINED__

DEFINE_GUID(IID_ICaptureGraphBuilder, 0xbf87b6e0, 0x8c27, 0x11d0, 0xb3,0xf0, 0x00,0xaa,0x00,0x37,0x61,0xc5);
#if defined(__cplusplus) && !defined(CINTERFACE)
struct ICaptureGraphBuilder : public IUnknown
{
    virtual HRESULT STDMETHODCALLTYPE SetFiltergraph(
        IGraphBuilder* pfg) = 0;

    virtual HRESULT STDMETHODCALLTYPE GetFiltergraph(
        IGraphBuilder** ppfg) = 0;

    virtual HRESULT STDMETHODCALLTYPE SetOutputFileName(
        const GUID* pType,
        LPCOLESTR lpstrFile,
        IBaseFilter** ppf,
        IFileSinkFilter** ppSink) = 0;

    virtual HRESULT STDMETHODCALLTYPE FindInterface(
        const GUID* pCategory,
        IBaseFilter* pf,
        REFIID riid,
        void** ppint) = 0;

    virtual HRESULT STDMETHODCALLTYPE RenderStream(
        const GUID* pCategory,
        IUnknown* pSource,
        IBaseFilter* pfCompressor,
        IBaseFilter* pfRenderer) = 0;

    virtual HRESULT STDMETHODCALLTYPE ControlStream(
        const GUID* pCategory,
        IBaseFilter* pFilter,
        REFERENCE_TIME* pstart,
        REFERENCE_TIME* pstop,
        WORD wStartCookie,
        WORD wStopCookie) = 0;

    virtual HRESULT STDMETHODCALLTYPE AllocCapFile(
        LPCOLESTR lpstr,
        DWORDLONG dwlSize) = 0;

    virtual HRESULT STDMETHODCALLTYPE CopyCaptureFile(
        LPOLESTR lpwstrOld,
        LPOLESTR lpwstrNew,
        int fAllowEscAbort,
        IAMCopyCaptureFileProgress* pCallback) = 0;

};
#else
typedef struct ICaptureGraphBuilderVtbl ICaptureGraphBuilderVtbl;
struct ICaptureGraphBuilder {
    const ICaptureGraphBuilderVtbl* lpVtbl;
};
struct ICaptureGraphBuilderVtbl {
    ICOM_MSVTABLE_COMPAT_FIELDS

    /*** IUnknown methods ***/
    HRESULT (STDMETHODCALLTYPE *QueryInterface)(
        ICaptureGraphBuilder* This,
        REFIID riid,
        void** ppvObject);

    ULONG (STDMETHODCALLTYPE *AddRef)(
        ICaptureGraphBuilder* This);

    ULONG (STDMETHODCALLTYPE *Release)(
        ICaptureGraphBuilder* This);

    /*** ICaptureGraphBuilder methods ***/
    HRESULT (STDMETHODCALLTYPE *SetFiltergraph)(
        ICaptureGraphBuilder* This,
        IGraphBuilder* pfg);

    HRESULT (STDMETHODCALLTYPE *GetFiltergraph)(
        ICaptureGraphBuilder* This,
        IGraphBuilder** ppfg);

    HRESULT (STDMETHODCALLTYPE *SetOutputFileName)(
        ICaptureGraphBuilder* This,
        const GUID* pType,
        LPCOLESTR lpstrFile,
        IBaseFilter** ppf,
        IFileSinkFilter** ppSink);

    HRESULT (STDMETHODCALLTYPE *FindInterface)(
        ICaptureGraphBuilder* This,
        const GUID* pCategory,
        IBaseFilter* pf,
        REFIID riid,
        void** ppint);

    HRESULT (STDMETHODCALLTYPE *RenderStream)(
        ICaptureGraphBuilder* This,
        const GUID* pCategory,
        IUnknown* pSource,
        IBaseFilter* pfCompressor,
        IBaseFilter* pfRenderer);

    HRESULT (STDMETHODCALLTYPE *ControlStream)(
        ICaptureGraphBuilder* This,
        const GUID* pCategory,
        IBaseFilter* pFilter,
        REFERENCE_TIME* pstart,
        REFERENCE_TIME* pstop,
        WORD wStartCookie,
        WORD wStopCookie);

    HRESULT (STDMETHODCALLTYPE *AllocCapFile)(
        ICaptureGraphBuilder* This,
        LPCOLESTR lpstr,
        DWORDLONG dwlSize);

    HRESULT (STDMETHODCALLTYPE *CopyCaptureFile)(
        ICaptureGraphBuilder* This,
        LPOLESTR lpwstrOld,
        LPOLESTR lpwstrNew,
        int fAllowEscAbort,
        IAMCopyCaptureFileProgress* pCallback);

};

/*** IUnknown methods ***/
#define ICaptureGraphBuilder_QueryInterface(p,a,b) (p)->lpVtbl->QueryInterface(p,a,b)
#define ICaptureGraphBuilder_AddRef(p) (p)->lpVtbl->AddRef(p)
#define ICaptureGraphBuilder_Release(p) (p)->lpVtbl->Release(p)
/*** ICaptureGraphBuilder methods ***/
#define ICaptureGraphBuilder_SetFiltergraph(p,a) (p)->lpVtbl->SetFiltergraph(p,a)
#define ICaptureGraphBuilder_GetFiltergraph(p,a) (p)->lpVtbl->GetFiltergraph(p,a)
#define ICaptureGraphBuilder_SetOutputFileName(p,a,b,c,d) (p)->lpVtbl->SetOutputFileName(p,a,b,c,d)
#define ICaptureGraphBuilder_FindInterface(p,a,b,c,d) (p)->lpVtbl->FindInterface(p,a,b,c,d)
#define ICaptureGraphBuilder_RenderStream(p,a,b,c,d) (p)->lpVtbl->RenderStream(p,a,b,c,d)
#define ICaptureGraphBuilder_ControlStream(p,a,b,c,d,e,f) (p)->lpVtbl->ControlStream(p,a,b,c,d,e,f)
#define ICaptureGraphBuilder_AllocCapFile(p,a,b) (p)->lpVtbl->AllocCapFile(p,a,b)
#define ICaptureGraphBuilder_CopyCaptureFile(p,a,b,c,d) (p)->lpVtbl->CopyCaptureFile(p,a,b,c,d)

#endif

#define ICaptureGraphBuilder_METHODS \
    ICOM_MSVTABLE_COMPAT_FIELDS \
    /*** IUnknown methods ***/ \
    STDMETHOD_(HRESULT,QueryInterface)(THIS_ REFIID riid, void** ppvObject) PURE; \
    STDMETHOD_(ULONG,AddRef)(THIS) PURE; \
    STDMETHOD_(ULONG,Release)(THIS) PURE; \
    /*** ICaptureGraphBuilder methods ***/ \
    STDMETHOD_(HRESULT,SetFiltergraph)(THIS_ IGraphBuilder* pfg) PURE; \
    STDMETHOD_(HRESULT,GetFiltergraph)(THIS_ IGraphBuilder** ppfg) PURE; \
    STDMETHOD_(HRESULT,SetOutputFileName)(THIS_ const GUID* pType, LPCOLESTR lpstrFile, IBaseFilter** ppf, IFileSinkFilter** ppSink) PURE; \
    STDMETHOD_(HRESULT,FindInterface)(THIS_ const GUID* pCategory, IBaseFilter* pf, REFIID riid, void** ppint) PURE; \
    STDMETHOD_(HRESULT,RenderStream)(THIS_ const GUID* pCategory, IUnknown* pSource, IBaseFilter* pfCompressor, IBaseFilter* pfRenderer) PURE; \
    STDMETHOD_(HRESULT,ControlStream)(THIS_ const GUID* pCategory, IBaseFilter* pFilter, REFERENCE_TIME* pstart, REFERENCE_TIME* pstop, WORD wStartCookie, WORD wStopCookie) PURE; \
    STDMETHOD_(HRESULT,AllocCapFile)(THIS_ LPCOLESTR lpstr, DWORDLONG dwlSize) PURE; \
    STDMETHOD_(HRESULT,CopyCaptureFile)(THIS_ LPOLESTR lpwstrOld, LPOLESTR lpwstrNew, int fAllowEscAbort, IAMCopyCaptureFileProgress* pCallback) PURE;

HRESULT CALLBACK ICaptureGraphBuilder_SetFiltergraph_Proxy(
    ICaptureGraphBuilder* This,
    IGraphBuilder* pfg);
void __RPC_STUB ICaptureGraphBuilder_SetFiltergraph_Stub(
    struct IRpcStubBuffer* This,
    struct IRpcChannelBuffer* pRpcChannelBuffer,
    PRPC_MESSAGE pRpcMessage,
    DWORD* pdwStubPhase);
HRESULT CALLBACK ICaptureGraphBuilder_GetFiltergraph_Proxy(
    ICaptureGraphBuilder* This,
    IGraphBuilder** ppfg);
void __RPC_STUB ICaptureGraphBuilder_GetFiltergraph_Stub(
    struct IRpcStubBuffer* This,
    struct IRpcChannelBuffer* pRpcChannelBuffer,
    PRPC_MESSAGE pRpcMessage,
    DWORD* pdwStubPhase);
HRESULT CALLBACK ICaptureGraphBuilder_SetOutputFileName_Proxy(
    ICaptureGraphBuilder* This,
    const GUID* pType,
    LPCOLESTR lpstrFile,
    IBaseFilter** ppf,
    IFileSinkFilter** ppSink);
void __RPC_STUB ICaptureGraphBuilder_SetOutputFileName_Stub(
    struct IRpcStubBuffer* This,
    struct IRpcChannelBuffer* pRpcChannelBuffer,
    PRPC_MESSAGE pRpcMessage,
    DWORD* pdwStubPhase);
HRESULT CALLBACK ICaptureGraphBuilder_RemoteFindInterface_Proxy(
    ICaptureGraphBuilder* This,
    const GUID* pCategory,
    IBaseFilter* pf,
    REFIID riid,
    IUnknown** ppint);
void __RPC_STUB ICaptureGraphBuilder_RemoteFindInterface_Stub(
    struct IRpcStubBuffer* This,
    struct IRpcChannelBuffer* pRpcChannelBuffer,
    PRPC_MESSAGE pRpcMessage,
    DWORD* pdwStubPhase);
HRESULT CALLBACK ICaptureGraphBuilder_FindInterface_Proxy(
    ICaptureGraphBuilder* This,
    const GUID* pCategory,
    IBaseFilter* pf,
    REFIID riid,
    void** ppint);
HRESULT __RPC_STUB ICaptureGraphBuilder_FindInterface_Stub(
    ICaptureGraphBuilder* This,
    const GUID* pCategory,
    IBaseFilter* pf,
    REFIID riid,
    IUnknown** ppint);
HRESULT CALLBACK ICaptureGraphBuilder_RenderStream_Proxy(
    ICaptureGraphBuilder* This,
    const GUID* pCategory,
    IUnknown* pSource,
    IBaseFilter* pfCompressor,
    IBaseFilter* pfRenderer);
void __RPC_STUB ICaptureGraphBuilder_RenderStream_Stub(
    struct IRpcStubBuffer* This,
    struct IRpcChannelBuffer* pRpcChannelBuffer,
    PRPC_MESSAGE pRpcMessage,
    DWORD* pdwStubPhase);
HRESULT CALLBACK ICaptureGraphBuilder_ControlStream_Proxy(
    ICaptureGraphBuilder* This,
    const GUID* pCategory,
    IBaseFilter* pFilter,
    REFERENCE_TIME* pstart,
    REFERENCE_TIME* pstop,
    WORD wStartCookie,
    WORD wStopCookie);
void __RPC_STUB ICaptureGraphBuilder_ControlStream_Stub(
    struct IRpcStubBuffer* This,
    struct IRpcChannelBuffer* pRpcChannelBuffer,
    PRPC_MESSAGE pRpcMessage,
    DWORD* pdwStubPhase);
HRESULT CALLBACK ICaptureGraphBuilder_AllocCapFile_Proxy(
    ICaptureGraphBuilder* This,
    LPCOLESTR lpstr,
    DWORDLONG dwlSize);
void __RPC_STUB ICaptureGraphBuilder_AllocCapFile_Stub(
    struct IRpcStubBuffer* This,
    struct IRpcChannelBuffer* pRpcChannelBuffer,
    PRPC_MESSAGE pRpcMessage,
    DWORD* pdwStubPhase);
HRESULT CALLBACK ICaptureGraphBuilder_CopyCaptureFile_Proxy(
    ICaptureGraphBuilder* This,
    LPOLESTR lpwstrOld,
    LPOLESTR lpwstrNew,
    int fAllowEscAbort,
    IAMCopyCaptureFileProgress* pCallback);
void __RPC_STUB ICaptureGraphBuilder_CopyCaptureFile_Stub(
    struct IRpcStubBuffer* This,
    struct IRpcChannelBuffer* pRpcChannelBuffer,
    PRPC_MESSAGE pRpcMessage,
    DWORD* pdwStubPhase);

#endif  /* __ICaptureGraphBuilder_INTERFACE_DEFINED__ */

/*****************************************************************************
 * IAMCopyCaptureFileProgress interface
 */
#ifndef __IAMCopyCaptureFileProgress_INTERFACE_DEFINED__
#define __IAMCopyCaptureFileProgress_INTERFACE_DEFINED__

DEFINE_GUID(IID_IAMCopyCaptureFileProgress, 0x670d1d20, 0xa068, 0x11d0, 0xb3,0xf0, 0x00,0xaa,0x00,0x37,0x61,0xc5);
#if defined(__cplusplus) && !defined(CINTERFACE)
struct IAMCopyCaptureFileProgress : public IUnknown
{
    virtual HRESULT STDMETHODCALLTYPE Progress(
        int iProgress) = 0;

};
#else
typedef struct IAMCopyCaptureFileProgressVtbl IAMCopyCaptureFileProgressVtbl;
struct IAMCopyCaptureFileProgress {
    const IAMCopyCaptureFileProgressVtbl* lpVtbl;
};
struct IAMCopyCaptureFileProgressVtbl {
    ICOM_MSVTABLE_COMPAT_FIELDS

    /*** IUnknown methods ***/
    HRESULT (STDMETHODCALLTYPE *QueryInterface)(
        IAMCopyCaptureFileProgress* This,
        REFIID riid,
        void** ppvObject);

    ULONG (STDMETHODCALLTYPE *AddRef)(
        IAMCopyCaptureFileProgress* This);

    ULONG (STDMETHODCALLTYPE *Release)(
        IAMCopyCaptureFileProgress* This);

    /*** IAMCopyCaptureFileProgress methods ***/
    HRESULT (STDMETHODCALLTYPE *Progress)(
        IAMCopyCaptureFileProgress* This,
        int iProgress);

};

/*** IUnknown methods ***/
#define IAMCopyCaptureFileProgress_QueryInterface(p,a,b) (p)->lpVtbl->QueryInterface(p,a,b)
#define IAMCopyCaptureFileProgress_AddRef(p) (p)->lpVtbl->AddRef(p)
#define IAMCopyCaptureFileProgress_Release(p) (p)->lpVtbl->Release(p)
/*** IAMCopyCaptureFileProgress methods ***/
#define IAMCopyCaptureFileProgress_Progress(p,a) (p)->lpVtbl->Progress(p,a)

#endif

#define IAMCopyCaptureFileProgress_METHODS \
    ICOM_MSVTABLE_COMPAT_FIELDS \
    /*** IUnknown methods ***/ \
    STDMETHOD_(HRESULT,QueryInterface)(THIS_ REFIID riid, void** ppvObject) PURE; \
    STDMETHOD_(ULONG,AddRef)(THIS) PURE; \
    STDMETHOD_(ULONG,Release)(THIS) PURE; \
    /*** IAMCopyCaptureFileProgress methods ***/ \
    STDMETHOD_(HRESULT,Progress)(THIS_ int iProgress) PURE;

HRESULT CALLBACK IAMCopyCaptureFileProgress_Progress_Proxy(
    IAMCopyCaptureFileProgress* This,
    int iProgress);
void __RPC_STUB IAMCopyCaptureFileProgress_Progress_Stub(
    struct IRpcStubBuffer* This,
    struct IRpcChannelBuffer* pRpcChannelBuffer,
    PRPC_MESSAGE pRpcMessage,
    DWORD* pdwStubPhase);

#endif  /* __IAMCopyCaptureFileProgress_INTERFACE_DEFINED__ */

/*****************************************************************************
 * ICaptureGraphBuilder2 interface
 */
#ifndef __ICaptureGraphBuilder2_INTERFACE_DEFINED__
#define __ICaptureGraphBuilder2_INTERFACE_DEFINED__

DEFINE_GUID(IID_ICaptureGraphBuilder2, 0x93e5a4e0, 0x2d50, 0x11d2, 0xab,0xfa, 0x00,0xa0,0xc9,0xc6,0xe3,0x8d);
#if defined(__cplusplus) && !defined(CINTERFACE)
struct ICaptureGraphBuilder2 : public IUnknown
{
    virtual HRESULT STDMETHODCALLTYPE SetFiltergraph(
        IGraphBuilder* pfg) = 0;

    virtual HRESULT STDMETHODCALLTYPE GetFiltergraph(
        IGraphBuilder** ppfg) = 0;

    virtual HRESULT STDMETHODCALLTYPE SetOutputFileName(
        const GUID* pType,
        LPCOLESTR lpstrFile,
        IBaseFilter** ppf,
        IFileSinkFilter** ppSink) = 0;

    virtual HRESULT STDMETHODCALLTYPE FindInterface(
        const GUID* pCategory,
        const GUID* pType,
        IBaseFilter* pf,
        REFIID riid,
        void** ppint) = 0;

    virtual HRESULT STDMETHODCALLTYPE RenderStream(
        const GUID* pCategory,
        const GUID* pType,
        IUnknown* pSource,
        IBaseFilter* pfCompressor,
        IBaseFilter* pfRenderer) = 0;

    virtual HRESULT STDMETHODCALLTYPE ControlStream(
        const GUID* pCategory,
        const GUID* pType,
        IBaseFilter* pFilter,
        REFERENCE_TIME* pstart,
        REFERENCE_TIME* pstop,
        WORD wStartCookie,
        WORD wStopCookie) = 0;

    virtual HRESULT STDMETHODCALLTYPE AllocCapFile(
        LPCOLESTR lpstr,
        DWORDLONG dwlSize) = 0;

    virtual HRESULT STDMETHODCALLTYPE CopyCaptureFile(
        LPOLESTR lpwstrOld,
        LPOLESTR lpwstrNew,
        int fAllowEscAbort,
        IAMCopyCaptureFileProgress* pCallback) = 0;

    virtual HRESULT STDMETHODCALLTYPE FindPin(
        IUnknown* pSource,
        PIN_DIRECTION pindir,
        const GUID* pCategory,
        const GUID* pType,
        BOOL fUnconnected,
        int num,
        IPin** ppPin) = 0;

};
#else
typedef struct ICaptureGraphBuilder2Vtbl ICaptureGraphBuilder2Vtbl;
struct ICaptureGraphBuilder2 {
    const ICaptureGraphBuilder2Vtbl* lpVtbl;
};
struct ICaptureGraphBuilder2Vtbl {
    ICOM_MSVTABLE_COMPAT_FIELDS

    /*** IUnknown methods ***/
    HRESULT (STDMETHODCALLTYPE *QueryInterface)(
        ICaptureGraphBuilder2* This,
        REFIID riid,
        void** ppvObject);

    ULONG (STDMETHODCALLTYPE *AddRef)(
        ICaptureGraphBuilder2* This);

    ULONG (STDMETHODCALLTYPE *Release)(
        ICaptureGraphBuilder2* This);

    /*** ICaptureGraphBuilder2 methods ***/
    HRESULT (STDMETHODCALLTYPE *SetFiltergraph)(
        ICaptureGraphBuilder2* This,
        IGraphBuilder* pfg);

    HRESULT (STDMETHODCALLTYPE *GetFiltergraph)(
        ICaptureGraphBuilder2* This,
        IGraphBuilder** ppfg);

    HRESULT (STDMETHODCALLTYPE *SetOutputFileName)(
        ICaptureGraphBuilder2* This,
        const GUID* pType,
        LPCOLESTR lpstrFile,
        IBaseFilter** ppf,
        IFileSinkFilter** ppSink);

    HRESULT (STDMETHODCALLTYPE *FindInterface)(
        ICaptureGraphBuilder2* This,
        const GUID* pCategory,
        const GUID* pType,
        IBaseFilter* pf,
        REFIID riid,
        void** ppint);

    HRESULT (STDMETHODCALLTYPE *RenderStream)(
        ICaptureGraphBuilder2* This,
        const GUID* pCategory,
        const GUID* pType,
        IUnknown* pSource,
        IBaseFilter* pfCompressor,
        IBaseFilter* pfRenderer);

    HRESULT (STDMETHODCALLTYPE *ControlStream)(
        ICaptureGraphBuilder2* This,
        const GUID* pCategory,
        const GUID* pType,
        IBaseFilter* pFilter,
        REFERENCE_TIME* pstart,
        REFERENCE_TIME* pstop,
        WORD wStartCookie,
        WORD wStopCookie);

    HRESULT (STDMETHODCALLTYPE *AllocCapFile)(
        ICaptureGraphBuilder2* This,
        LPCOLESTR lpstr,
        DWORDLONG dwlSize);

    HRESULT (STDMETHODCALLTYPE *CopyCaptureFile)(
        ICaptureGraphBuilder2* This,
        LPOLESTR lpwstrOld,
        LPOLESTR lpwstrNew,
        int fAllowEscAbort,
        IAMCopyCaptureFileProgress* pCallback);

    HRESULT (STDMETHODCALLTYPE *FindPin)(
        ICaptureGraphBuilder2* This,
        IUnknown* pSource,
        PIN_DIRECTION pindir,
        const GUID* pCategory,
        const GUID* pType,
        BOOL fUnconnected,
        int num,
        IPin** ppPin);

};

/*** IUnknown methods ***/
#define ICaptureGraphBuilder2_QueryInterface(p,a,b) (p)->lpVtbl->QueryInterface(p,a,b)
#define ICaptureGraphBuilder2_AddRef(p) (p)->lpVtbl->AddRef(p)
#define ICaptureGraphBuilder2_Release(p) (p)->lpVtbl->Release(p)
/*** ICaptureGraphBuilder2 methods ***/
#define ICaptureGraphBuilder2_SetFiltergraph(p,a) (p)->lpVtbl->SetFiltergraph(p,a)
#define ICaptureGraphBuilder2_GetFiltergraph(p,a) (p)->lpVtbl->GetFiltergraph(p,a)
#define ICaptureGraphBuilder2_SetOutputFileName(p,a,b,c,d) (p)->lpVtbl->SetOutputFileName(p,a,b,c,d)
#define ICaptureGraphBuilder2_FindInterface(p,a,b,c,d,e) (p)->lpVtbl->FindInterface(p,a,b,c,d,e)
#define ICaptureGraphBuilder2_RenderStream(p,a,b,c,d,e) (p)->lpVtbl->RenderStream(p,a,b,c,d,e)
#define ICaptureGraphBuilder2_ControlStream(p,a,b,c,d,e,f,g) (p)->lpVtbl->ControlStream(p,a,b,c,d,e,f,g)
#define ICaptureGraphBuilder2_AllocCapFile(p,a,b) (p)->lpVtbl->AllocCapFile(p,a,b)
#define ICaptureGraphBuilder2_CopyCaptureFile(p,a,b,c,d) (p)->lpVtbl->CopyCaptureFile(p,a,b,c,d)
#define ICaptureGraphBuilder2_FindPin(p,a,b,c,d,e,f,g) (p)->lpVtbl->FindPin(p,a,b,c,d,e,f,g)

#endif

#define ICaptureGraphBuilder2_METHODS \
    ICOM_MSVTABLE_COMPAT_FIELDS \
    /*** IUnknown methods ***/ \
    STDMETHOD_(HRESULT,QueryInterface)(THIS_ REFIID riid, void** ppvObject) PURE; \
    STDMETHOD_(ULONG,AddRef)(THIS) PURE; \
    STDMETHOD_(ULONG,Release)(THIS) PURE; \
    /*** ICaptureGraphBuilder2 methods ***/ \
    STDMETHOD_(HRESULT,SetFiltergraph)(THIS_ IGraphBuilder* pfg) PURE; \
    STDMETHOD_(HRESULT,GetFiltergraph)(THIS_ IGraphBuilder** ppfg) PURE; \
    STDMETHOD_(HRESULT,SetOutputFileName)(THIS_ const GUID* pType, LPCOLESTR lpstrFile, IBaseFilter** ppf, IFileSinkFilter** ppSink) PURE; \
    STDMETHOD_(HRESULT,FindInterface)(THIS_ const GUID* pCategory, const GUID* pType, IBaseFilter* pf, REFIID riid, void** ppint) PURE; \
    STDMETHOD_(HRESULT,RenderStream)(THIS_ const GUID* pCategory, const GUID* pType, IUnknown* pSource, IBaseFilter* pfCompressor, IBaseFilter* pfRenderer) PURE; \
    STDMETHOD_(HRESULT,ControlStream)(THIS_ const GUID* pCategory, const GUID* pType, IBaseFilter* pFilter, REFERENCE_TIME* pstart, REFERENCE_TIME* pstop, WORD wStartCookie, WORD wStopCookie) PURE; \
    STDMETHOD_(HRESULT,AllocCapFile)(THIS_ LPCOLESTR lpstr, DWORDLONG dwlSize) PURE; \
    STDMETHOD_(HRESULT,CopyCaptureFile)(THIS_ LPOLESTR lpwstrOld, LPOLESTR lpwstrNew, int fAllowEscAbort, IAMCopyCaptureFileProgress* pCallback) PURE; \
    STDMETHOD_(HRESULT,FindPin)(THIS_ IUnknown* pSource, PIN_DIRECTION pindir, const GUID* pCategory, const GUID* pType, BOOL fUnconnected, int num, IPin** ppPin) PURE;

HRESULT CALLBACK ICaptureGraphBuilder2_SetFiltergraph_Proxy(
    ICaptureGraphBuilder2* This,
    IGraphBuilder* pfg);
void __RPC_STUB ICaptureGraphBuilder2_SetFiltergraph_Stub(
    struct IRpcStubBuffer* This,
    struct IRpcChannelBuffer* pRpcChannelBuffer,
    PRPC_MESSAGE pRpcMessage,
    DWORD* pdwStubPhase);
HRESULT CALLBACK ICaptureGraphBuilder2_GetFiltergraph_Proxy(
    ICaptureGraphBuilder2* This,
    IGraphBuilder** ppfg);
void __RPC_STUB ICaptureGraphBuilder2_GetFiltergraph_Stub(
    struct IRpcStubBuffer* This,
    struct IRpcChannelBuffer* pRpcChannelBuffer,
    PRPC_MESSAGE pRpcMessage,
    DWORD* pdwStubPhase);
HRESULT CALLBACK ICaptureGraphBuilder2_SetOutputFileName_Proxy(
    ICaptureGraphBuilder2* This,
    const GUID* pType,
    LPCOLESTR lpstrFile,
    IBaseFilter** ppf,
    IFileSinkFilter** ppSink);
void __RPC_STUB ICaptureGraphBuilder2_SetOutputFileName_Stub(
    struct IRpcStubBuffer* This,
    struct IRpcChannelBuffer* pRpcChannelBuffer,
    PRPC_MESSAGE pRpcMessage,
    DWORD* pdwStubPhase);
HRESULT CALLBACK ICaptureGraphBuilder2_RemoteFindInterface_Proxy(
    ICaptureGraphBuilder2* This,
    const GUID* pCategory,
    const GUID* pType,
    IBaseFilter* pf,
    REFIID riid,
    IUnknown** ppint);
void __RPC_STUB ICaptureGraphBuilder2_RemoteFindInterface_Stub(
    struct IRpcStubBuffer* This,
    struct IRpcChannelBuffer* pRpcChannelBuffer,
    PRPC_MESSAGE pRpcMessage,
    DWORD* pdwStubPhase);
HRESULT CALLBACK ICaptureGraphBuilder2_FindInterface_Proxy(
    ICaptureGraphBuilder2* This,
    const GUID* pCategory,
    const GUID* pType,
    IBaseFilter* pf,
    REFIID riid,
    void** ppint);
HRESULT __RPC_STUB ICaptureGraphBuilder2_FindInterface_Stub(
    ICaptureGraphBuilder2* This,
    const GUID* pCategory,
    const GUID* pType,
    IBaseFilter* pf,
    REFIID riid,
    IUnknown** ppint);
HRESULT CALLBACK ICaptureGraphBuilder2_RenderStream_Proxy(
    ICaptureGraphBuilder2* This,
    const GUID* pCategory,
    const GUID* pType,
    IUnknown* pSource,
    IBaseFilter* pfCompressor,
    IBaseFilter* pfRenderer);
void __RPC_STUB ICaptureGraphBuilder2_RenderStream_Stub(
    struct IRpcStubBuffer* This,
    struct IRpcChannelBuffer* pRpcChannelBuffer,
    PRPC_MESSAGE pRpcMessage,
    DWORD* pdwStubPhase);
HRESULT CALLBACK ICaptureGraphBuilder2_ControlStream_Proxy(
    ICaptureGraphBuilder2* This,
    const GUID* pCategory,
    const GUID* pType,
    IBaseFilter* pFilter,
    REFERENCE_TIME* pstart,
    REFERENCE_TIME* pstop,
    WORD wStartCookie,
    WORD wStopCookie);
void __RPC_STUB ICaptureGraphBuilder2_ControlStream_Stub(
    struct IRpcStubBuffer* This,
    struct IRpcChannelBuffer* pRpcChannelBuffer,
    PRPC_MESSAGE pRpcMessage,
    DWORD* pdwStubPhase);
HRESULT CALLBACK ICaptureGraphBuilder2_AllocCapFile_Proxy(
    ICaptureGraphBuilder2* This,
    LPCOLESTR lpstr,
    DWORDLONG dwlSize);
void __RPC_STUB ICaptureGraphBuilder2_AllocCapFile_Stub(
    struct IRpcStubBuffer* This,
    struct IRpcChannelBuffer* pRpcChannelBuffer,
    PRPC_MESSAGE pRpcMessage,
    DWORD* pdwStubPhase);
HRESULT CALLBACK ICaptureGraphBuilder2_CopyCaptureFile_Proxy(
    ICaptureGraphBuilder2* This,
    LPOLESTR lpwstrOld,
    LPOLESTR lpwstrNew,
    int fAllowEscAbort,
    IAMCopyCaptureFileProgress* pCallback);
void __RPC_STUB ICaptureGraphBuilder2_CopyCaptureFile_Stub(
    struct IRpcStubBuffer* This,
    struct IRpcChannelBuffer* pRpcChannelBuffer,
    PRPC_MESSAGE pRpcMessage,
    DWORD* pdwStubPhase);
HRESULT CALLBACK ICaptureGraphBuilder2_FindPin_Proxy(
    ICaptureGraphBuilder2* This,
    IUnknown* pSource,
    PIN_DIRECTION pindir,
    const GUID* pCategory,
    const GUID* pType,
    BOOL fUnconnected,
    int num,
    IPin** ppPin);
void __RPC_STUB ICaptureGraphBuilder2_FindPin_Stub(
    struct IRpcStubBuffer* This,
    struct IRpcChannelBuffer* pRpcChannelBuffer,
    PRPC_MESSAGE pRpcMessage,
    DWORD* pdwStubPhase);

#endif  /* __ICaptureGraphBuilder2_INTERFACE_DEFINED__ */

enum _AM_RENSDEREXFLAGS {
    AM_RENDEREX_RENDERTOEXISTINGRENDERERS = 0x1
};

#ifndef __IFilterGraph2_FWD_DEFINED__
#define __IFilterGraph2_FWD_DEFINED__
typedef struct IFilterGraph2 IFilterGraph2;
#endif

/*****************************************************************************
 * IFilterGraph2 interface
 */
#ifndef __IFilterGraph2_INTERFACE_DEFINED__
#define __IFilterGraph2_INTERFACE_DEFINED__

DEFINE_GUID(IID_IFilterGraph2, 0x36b73882, 0xc2c8, 0x11cf, 0x8b,0x46, 0x00,0x80,0x5f,0x6c,0xef,0x60);
#if defined(__cplusplus) && !defined(CINTERFACE)
struct IFilterGraph2 : public IGraphBuilder
{
    virtual HRESULT STDMETHODCALLTYPE AddSourceFilterForMoniker(
        IMoniker* pMoniker,
        IBindCtx* pCtx,
        LPCWSTR lpcwstrFilterName,
        IBaseFilter** ppFilter) = 0;

    virtual HRESULT STDMETHODCALLTYPE ReconnectEx(
        IPin* ppin,
        const AM_MEDIA_TYPE* pmt) = 0;

    virtual HRESULT STDMETHODCALLTYPE RenderEx(
        IPin* pPinOut,
        DWORD dwFlags,
        DWORD* pvContext) = 0;

};
#else
typedef struct IFilterGraph2Vtbl IFilterGraph2Vtbl;
struct IFilterGraph2 {
    const IFilterGraph2Vtbl* lpVtbl;
};
struct IFilterGraph2Vtbl {
    ICOM_MSVTABLE_COMPAT_FIELDS

    /*** IUnknown methods ***/
    HRESULT (STDMETHODCALLTYPE *QueryInterface)(
        IFilterGraph2* This,
        REFIID riid,
        void** ppvObject);

    ULONG (STDMETHODCALLTYPE *AddRef)(
        IFilterGraph2* This);

    ULONG (STDMETHODCALLTYPE *Release)(
        IFilterGraph2* This);

    /*** IFilterGraph methods ***/
    HRESULT (STDMETHODCALLTYPE *AddFilter)(
        IFilterGraph2* This,
        IBaseFilter* pFilter,
        LPCWSTR pName);

    HRESULT (STDMETHODCALLTYPE *RemoveFilter)(
        IFilterGraph2* This,
        IBaseFilter* pFilter);

    HRESULT (STDMETHODCALLTYPE *EnumFilters)(
        IFilterGraph2* This,
        IEnumFilters** ppEnum);

    HRESULT (STDMETHODCALLTYPE *FindFilterByName)(
        IFilterGraph2* This,
        LPCWSTR pName,
        IBaseFilter** ppFilter);

    HRESULT (STDMETHODCALLTYPE *ConnectDirect)(
        IFilterGraph2* This,
        IPin* ppinOut,
        IPin* ppinIn,
        const AM_MEDIA_TYPE* pmt);

    HRESULT (STDMETHODCALLTYPE *Reconnect)(
        IFilterGraph2* This,
        IPin* ppin);

    HRESULT (STDMETHODCALLTYPE *Disconnect)(
        IFilterGraph2* This,
        IPin* ppin);

    HRESULT (STDMETHODCALLTYPE *SetDefaultSyncSource)(
        IFilterGraph2* This);

    /*** IGraphBuilder methods ***/
    HRESULT (STDMETHODCALLTYPE *Connect)(
        IFilterGraph2* This,
        IPin* ppinOut,
        IPin* ppinIn);

    HRESULT (STDMETHODCALLTYPE *Render)(
        IFilterGraph2* This,
        IPin* ppinOut);

    HRESULT (STDMETHODCALLTYPE *RenderFile)(
        IFilterGraph2* This,
        LPCWSTR lpcwstrFile,
        LPCWSTR lpcwstrPlayList);

    HRESULT (STDMETHODCALLTYPE *AddSourceFilter)(
        IFilterGraph2* This,
        LPCWSTR lpcwstrFileName,
        LPCWSTR lpcwstrFilterName,
        IBaseFilter** ppFilter);

    HRESULT (STDMETHODCALLTYPE *SetLogFile)(
        IFilterGraph2* This,
        DWORD_PTR hFile);

    HRESULT (STDMETHODCALLTYPE *Abort)(
        IFilterGraph2* This);

    HRESULT (STDMETHODCALLTYPE *ShouldOperationContinue)(
        IFilterGraph2* This);

    /*** IFilterGraph2 methods ***/
    HRESULT (STDMETHODCALLTYPE *AddSourceFilterForMoniker)(
        IFilterGraph2* This,
        IMoniker* pMoniker,
        IBindCtx* pCtx,
        LPCWSTR lpcwstrFilterName,
        IBaseFilter** ppFilter);

    HRESULT (STDMETHODCALLTYPE *ReconnectEx)(
        IFilterGraph2* This,
        IPin* ppin,
        const AM_MEDIA_TYPE* pmt);

    HRESULT (STDMETHODCALLTYPE *RenderEx)(
        IFilterGraph2* This,
        IPin* pPinOut,
        DWORD dwFlags,
        DWORD* pvContext);

};

/*** IUnknown methods ***/
#define IFilterGraph2_QueryInterface(p,a,b) (p)->lpVtbl->QueryInterface(p,a,b)
#define IFilterGraph2_AddRef(p) (p)->lpVtbl->AddRef(p)
#define IFilterGraph2_Release(p) (p)->lpVtbl->Release(p)
/*** IFilterGraph methods ***/
#define IFilterGraph2_AddFilter(p,a,b) (p)->lpVtbl->AddFilter(p,a,b)
#define IFilterGraph2_RemoveFilter(p,a) (p)->lpVtbl->RemoveFilter(p,a)
#define IFilterGraph2_EnumFilters(p,a) (p)->lpVtbl->EnumFilters(p,a)
#define IFilterGraph2_FindFilterByName(p,a,b) (p)->lpVtbl->FindFilterByName(p,a,b)
#define IFilterGraph2_ConnectDirect(p,a,b,c) (p)->lpVtbl->ConnectDirect(p,a,b,c)
#define IFilterGraph2_Reconnect(p,a) (p)->lpVtbl->Reconnect(p,a)
#define IFilterGraph2_Disconnect(p,a) (p)->lpVtbl->Disconnect(p,a)
#define IFilterGraph2_SetDefaultSyncSource(p) (p)->lpVtbl->SetDefaultSyncSource(p)
/*** IGraphBuilder methods ***/
#define IFilterGraph2_Connect(p,a,b) (p)->lpVtbl->Connect(p,a,b)
#define IFilterGraph2_Render(p,a) (p)->lpVtbl->Render(p,a)
#define IFilterGraph2_RenderFile(p,a,b) (p)->lpVtbl->RenderFile(p,a,b)
#define IFilterGraph2_AddSourceFilter(p,a,b,c) (p)->lpVtbl->AddSourceFilter(p,a,b,c)
#define IFilterGraph2_SetLogFile(p,a) (p)->lpVtbl->SetLogFile(p,a)
#define IFilterGraph2_Abort(p) (p)->lpVtbl->Abort(p)
#define IFilterGraph2_ShouldOperationContinue(p) (p)->lpVtbl->ShouldOperationContinue(p)
/*** IFilterGraph2 methods ***/
#define IFilterGraph2_AddSourceFilterForMoniker(p,a,b,c,d) (p)->lpVtbl->AddSourceFilterForMoniker(p,a,b,c,d)
#define IFilterGraph2_ReconnectEx(p,a,b) (p)->lpVtbl->ReconnectEx(p,a,b)
#define IFilterGraph2_RenderEx(p,a,b,c) (p)->lpVtbl->RenderEx(p,a,b,c)

#endif

#define IFilterGraph2_METHODS \
    ICOM_MSVTABLE_COMPAT_FIELDS \
    /*** IUnknown methods ***/ \
    STDMETHOD_(HRESULT,QueryInterface)(THIS_ REFIID riid, void** ppvObject) PURE; \
    STDMETHOD_(ULONG,AddRef)(THIS) PURE; \
    STDMETHOD_(ULONG,Release)(THIS) PURE; \
    /*** IFilterGraph methods ***/ \
    STDMETHOD_(HRESULT,AddFilter)(THIS_ IBaseFilter* pFilter, LPCWSTR pName) PURE; \
    STDMETHOD_(HRESULT,RemoveFilter)(THIS_ IBaseFilter* pFilter) PURE; \
    STDMETHOD_(HRESULT,EnumFilters)(THIS_ IEnumFilters** ppEnum) PURE; \
    STDMETHOD_(HRESULT,FindFilterByName)(THIS_ LPCWSTR pName, IBaseFilter** ppFilter) PURE; \
    STDMETHOD_(HRESULT,ConnectDirect)(THIS_ IPin* ppinOut, IPin* ppinIn, const AM_MEDIA_TYPE* pmt) PURE; \
    STDMETHOD_(HRESULT,Reconnect)(THIS_ IPin* ppin) PURE; \
    STDMETHOD_(HRESULT,Disconnect)(THIS_ IPin* ppin) PURE; \
    STDMETHOD_(HRESULT,SetDefaultSyncSource)(THIS) PURE; \
    /*** IGraphBuilder methods ***/ \
    STDMETHOD_(HRESULT,Connect)(THIS_ IPin* ppinOut, IPin* ppinIn) PURE; \
    STDMETHOD_(HRESULT,Render)(THIS_ IPin* ppinOut) PURE; \
    STDMETHOD_(HRESULT,RenderFile)(THIS_ LPCWSTR lpcwstrFile, LPCWSTR lpcwstrPlayList) PURE; \
    STDMETHOD_(HRESULT,AddSourceFilter)(THIS_ LPCWSTR lpcwstrFileName, LPCWSTR lpcwstrFilterName, IBaseFilter** ppFilter) PURE; \
    STDMETHOD_(HRESULT,SetLogFile)(THIS_ DWORD_PTR hFile) PURE; \
    STDMETHOD_(HRESULT,Abort)(THIS) PURE; \
    STDMETHOD_(HRESULT,ShouldOperationContinue)(THIS) PURE; \
    /*** IFilterGraph2 methods ***/ \
    STDMETHOD_(HRESULT,AddSourceFilterForMoniker)(THIS_ IMoniker* pMoniker, IBindCtx* pCtx, LPCWSTR lpcwstrFilterName, IBaseFilter** ppFilter) PURE; \
    STDMETHOD_(HRESULT,ReconnectEx)(THIS_ IPin* ppin, const AM_MEDIA_TYPE* pmt) PURE; \
    STDMETHOD_(HRESULT,RenderEx)(THIS_ IPin* pPinOut, DWORD dwFlags, DWORD* pvContext) PURE;

HRESULT CALLBACK IFilterGraph2_AddSourceFilterForMoniker_Proxy(
    IFilterGraph2* This,
    IMoniker* pMoniker,
    IBindCtx* pCtx,
    LPCWSTR lpcwstrFilterName,
    IBaseFilter** ppFilter);
void __RPC_STUB IFilterGraph2_AddSourceFilterForMoniker_Stub(
    struct IRpcStubBuffer* This,
    struct IRpcChannelBuffer* pRpcChannelBuffer,
    PRPC_MESSAGE pRpcMessage,
    DWORD* pdwStubPhase);
HRESULT CALLBACK IFilterGraph2_ReconnectEx_Proxy(
    IFilterGraph2* This,
    IPin* ppin,
    const AM_MEDIA_TYPE* pmt);
void __RPC_STUB IFilterGraph2_ReconnectEx_Stub(
    struct IRpcStubBuffer* This,
    struct IRpcChannelBuffer* pRpcChannelBuffer,
    PRPC_MESSAGE pRpcMessage,
    DWORD* pdwStubPhase);
HRESULT CALLBACK IFilterGraph2_RenderEx_Proxy(
    IFilterGraph2* This,
    IPin* pPinOut,
    DWORD dwFlags,
    DWORD* pvContext);
void __RPC_STUB IFilterGraph2_RenderEx_Stub(
    struct IRpcStubBuffer* This,
    struct IRpcChannelBuffer* pRpcChannelBuffer,
    PRPC_MESSAGE pRpcMessage,
    DWORD* pdwStubPhase);

#endif  /* __IFilterGraph2_INTERFACE_DEFINED__ */

#ifndef __IStreamBuilder_FWD_DEFINED__
#define __IStreamBuilder_FWD_DEFINED__
typedef struct IStreamBuilder IStreamBuilder;
#endif

/*****************************************************************************
 * IStreamBuilder interface
 */
#ifndef __IStreamBuilder_INTERFACE_DEFINED__
#define __IStreamBuilder_INTERFACE_DEFINED__

DEFINE_GUID(IID_IStreamBuilder, 0x56a868bf, 0x0ad4, 0x11ce, 0xb0,0x3a, 0x00,0x20,0xaf,0x0b,0xa7,0x70);
#if defined(__cplusplus) && !defined(CINTERFACE)
struct IStreamBuilder : public IUnknown
{
    virtual HRESULT STDMETHODCALLTYPE Render(
        IPin* ppinOut,
        IGraphBuilder* pGraph) = 0;

    virtual HRESULT STDMETHODCALLTYPE Backout(
        IPin* ppinOut,
        IGraphBuilder* pGraph) = 0;

};
#else
typedef struct IStreamBuilderVtbl IStreamBuilderVtbl;
struct IStreamBuilder {
    const IStreamBuilderVtbl* lpVtbl;
};
struct IStreamBuilderVtbl {
    ICOM_MSVTABLE_COMPAT_FIELDS

    /*** IUnknown methods ***/
    HRESULT (STDMETHODCALLTYPE *QueryInterface)(
        IStreamBuilder* This,
        REFIID riid,
        void** ppvObject);

    ULONG (STDMETHODCALLTYPE *AddRef)(
        IStreamBuilder* This);

    ULONG (STDMETHODCALLTYPE *Release)(
        IStreamBuilder* This);

    /*** IStreamBuilder methods ***/
    HRESULT (STDMETHODCALLTYPE *Render)(
        IStreamBuilder* This,
        IPin* ppinOut,
        IGraphBuilder* pGraph);

    HRESULT (STDMETHODCALLTYPE *Backout)(
        IStreamBuilder* This,
        IPin* ppinOut,
        IGraphBuilder* pGraph);

};

/*** IUnknown methods ***/
#define IStreamBuilder_QueryInterface(p,a,b) (p)->lpVtbl->QueryInterface(p,a,b)
#define IStreamBuilder_AddRef(p) (p)->lpVtbl->AddRef(p)
#define IStreamBuilder_Release(p) (p)->lpVtbl->Release(p)
/*** IStreamBuilder methods ***/
#define IStreamBuilder_Render(p,a,b) (p)->lpVtbl->Render(p,a,b)
#define IStreamBuilder_Backout(p,a,b) (p)->lpVtbl->Backout(p,a,b)

#endif

#define IStreamBuilder_METHODS \
    ICOM_MSVTABLE_COMPAT_FIELDS \
    /*** IUnknown methods ***/ \
    STDMETHOD_(HRESULT,QueryInterface)(THIS_ REFIID riid, void** ppvObject) PURE; \
    STDMETHOD_(ULONG,AddRef)(THIS) PURE; \
    STDMETHOD_(ULONG,Release)(THIS) PURE; \
    /*** IStreamBuilder methods ***/ \
    STDMETHOD_(HRESULT,Render)(THIS_ IPin* ppinOut, IGraphBuilder* pGraph) PURE; \
    STDMETHOD_(HRESULT,Backout)(THIS_ IPin* ppinOut, IGraphBuilder* pGraph) PURE;

HRESULT CALLBACK IStreamBuilder_Render_Proxy(
    IStreamBuilder* This,
    IPin* ppinOut,
    IGraphBuilder* pGraph);
void __RPC_STUB IStreamBuilder_Render_Stub(
    struct IRpcStubBuffer* This,
    struct IRpcChannelBuffer* pRpcChannelBuffer,
    PRPC_MESSAGE pRpcMessage,
    DWORD* pdwStubPhase);
HRESULT CALLBACK IStreamBuilder_Backout_Proxy(
    IStreamBuilder* This,
    IPin* ppinOut,
    IGraphBuilder* pGraph);
void __RPC_STUB IStreamBuilder_Backout_Stub(
    struct IRpcStubBuffer* This,
    struct IRpcChannelBuffer* pRpcChannelBuffer,
    PRPC_MESSAGE pRpcMessage,
    DWORD* pdwStubPhase);

#endif  /* __IStreamBuilder_INTERFACE_DEFINED__ */

#ifndef __IAsyncReader_FWD_DEFINED__
#define __IAsyncReader_FWD_DEFINED__
typedef struct IAsyncReader IAsyncReader;
#endif

/*****************************************************************************
 * IAsyncReader interface
 */
#ifndef __IAsyncReader_INTERFACE_DEFINED__
#define __IAsyncReader_INTERFACE_DEFINED__

DEFINE_GUID(IID_IAsyncReader, 0x56a868aa, 0x0ad4, 0x11ce, 0xb0,0x3a, 0x00,0x20,0xaf,0x0b,0xa7,0x70);
#if defined(__cplusplus) && !defined(CINTERFACE)
struct IAsyncReader : public IUnknown
{
    virtual HRESULT STDMETHODCALLTYPE RequestAllocator(
        IMemAllocator* pPreferred,
        ALLOCATOR_PROPERTIES* pProps,
        IMemAllocator** ppActual) = 0;

    virtual HRESULT STDMETHODCALLTYPE Request(
        IMediaSample* pSample,
        DWORD_PTR dwUser) = 0;

    virtual HRESULT STDMETHODCALLTYPE WaitForNext(
        DWORD dwTimeout,
        IMediaSample** ppSample,
        DWORD_PTR* pdwUser) = 0;

    virtual HRESULT STDMETHODCALLTYPE SyncReadAligned(
        IMediaSample* pSample) = 0;

    virtual HRESULT STDMETHODCALLTYPE SyncRead(
        LONGLONG llPosition,
        LONG lLength,
        BYTE* pBuffer) = 0;

    virtual HRESULT STDMETHODCALLTYPE Length(
        LONGLONG* pTotal,
        LONGLONG* pAvailable) = 0;

    virtual HRESULT STDMETHODCALLTYPE BeginFlush(
        ) = 0;

    virtual HRESULT STDMETHODCALLTYPE EndFlush(
        ) = 0;

};
#else
typedef struct IAsyncReaderVtbl IAsyncReaderVtbl;
struct IAsyncReader {
    const IAsyncReaderVtbl* lpVtbl;
};
struct IAsyncReaderVtbl {
    ICOM_MSVTABLE_COMPAT_FIELDS

    /*** IUnknown methods ***/
    HRESULT (STDMETHODCALLTYPE *QueryInterface)(
        IAsyncReader* This,
        REFIID riid,
        void** ppvObject);

    ULONG (STDMETHODCALLTYPE *AddRef)(
        IAsyncReader* This);

    ULONG (STDMETHODCALLTYPE *Release)(
        IAsyncReader* This);

    /*** IAsyncReader methods ***/
    HRESULT (STDMETHODCALLTYPE *RequestAllocator)(
        IAsyncReader* This,
        IMemAllocator* pPreferred,
        ALLOCATOR_PROPERTIES* pProps,
        IMemAllocator** ppActual);

    HRESULT (STDMETHODCALLTYPE *Request)(
        IAsyncReader* This,
        IMediaSample* pSample,
        DWORD_PTR dwUser);

    HRESULT (STDMETHODCALLTYPE *WaitForNext)(
        IAsyncReader* This,
        DWORD dwTimeout,
        IMediaSample** ppSample,
        DWORD_PTR* pdwUser);

    HRESULT (STDMETHODCALLTYPE *SyncReadAligned)(
        IAsyncReader* This,
        IMediaSample* pSample);

    HRESULT (STDMETHODCALLTYPE *SyncRead)(
        IAsyncReader* This,
        LONGLONG llPosition,
        LONG lLength,
        BYTE* pBuffer);

    HRESULT (STDMETHODCALLTYPE *Length)(
        IAsyncReader* This,
        LONGLONG* pTotal,
        LONGLONG* pAvailable);

    HRESULT (STDMETHODCALLTYPE *BeginFlush)(
        IAsyncReader* This);

    HRESULT (STDMETHODCALLTYPE *EndFlush)(
        IAsyncReader* This);

};

/*** IUnknown methods ***/
#define IAsyncReader_QueryInterface(p,a,b) (p)->lpVtbl->QueryInterface(p,a,b)
#define IAsyncReader_AddRef(p) (p)->lpVtbl->AddRef(p)
#define IAsyncReader_Release(p) (p)->lpVtbl->Release(p)
/*** IAsyncReader methods ***/
#define IAsyncReader_RequestAllocator(p,a,b,c) (p)->lpVtbl->RequestAllocator(p,a,b,c)
#define IAsyncReader_Request(p,a,b) (p)->lpVtbl->Request(p,a,b)
#define IAsyncReader_WaitForNext(p,a,b,c) (p)->lpVtbl->WaitForNext(p,a,b,c)
#define IAsyncReader_SyncReadAligned(p,a) (p)->lpVtbl->SyncReadAligned(p,a)
#define IAsyncReader_SyncRead(p,a,b,c) (p)->lpVtbl->SyncRead(p,a,b,c)
#define IAsyncReader_Length(p,a,b) (p)->lpVtbl->Length(p,a,b)
#define IAsyncReader_BeginFlush(p) (p)->lpVtbl->BeginFlush(p)
#define IAsyncReader_EndFlush(p) (p)->lpVtbl->EndFlush(p)

#endif

#define IAsyncReader_METHODS \
    ICOM_MSVTABLE_COMPAT_FIELDS \
    /*** IUnknown methods ***/ \
    STDMETHOD_(HRESULT,QueryInterface)(THIS_ REFIID riid, void** ppvObject) PURE; \
    STDMETHOD_(ULONG,AddRef)(THIS) PURE; \
    STDMETHOD_(ULONG,Release)(THIS) PURE; \
    /*** IAsyncReader methods ***/ \
    STDMETHOD_(HRESULT,RequestAllocator)(THIS_ IMemAllocator* pPreferred, ALLOCATOR_PROPERTIES* pProps, IMemAllocator** ppActual) PURE; \
    STDMETHOD_(HRESULT,Request)(THIS_ IMediaSample* pSample, DWORD_PTR dwUser) PURE; \
    STDMETHOD_(HRESULT,WaitForNext)(THIS_ DWORD dwTimeout, IMediaSample** ppSample, DWORD_PTR* pdwUser) PURE; \
    STDMETHOD_(HRESULT,SyncReadAligned)(THIS_ IMediaSample* pSample) PURE; \
    STDMETHOD_(HRESULT,SyncRead)(THIS_ LONGLONG llPosition, LONG lLength, BYTE* pBuffer) PURE; \
    STDMETHOD_(HRESULT,Length)(THIS_ LONGLONG* pTotal, LONGLONG* pAvailable) PURE; \
    STDMETHOD_(HRESULT,BeginFlush)(THIS) PURE; \
    STDMETHOD_(HRESULT,EndFlush)(THIS) PURE;

HRESULT CALLBACK IAsyncReader_RequestAllocator_Proxy(
    IAsyncReader* This,
    IMemAllocator* pPreferred,
    ALLOCATOR_PROPERTIES* pProps,
    IMemAllocator** ppActual);
void __RPC_STUB IAsyncReader_RequestAllocator_Stub(
    struct IRpcStubBuffer* This,
    struct IRpcChannelBuffer* pRpcChannelBuffer,
    PRPC_MESSAGE pRpcMessage,
    DWORD* pdwStubPhase);
HRESULT CALLBACK IAsyncReader_Request_Proxy(
    IAsyncReader* This,
    IMediaSample* pSample,
    DWORD_PTR dwUser);
void __RPC_STUB IAsyncReader_Request_Stub(
    struct IRpcStubBuffer* This,
    struct IRpcChannelBuffer* pRpcChannelBuffer,
    PRPC_MESSAGE pRpcMessage,
    DWORD* pdwStubPhase);
HRESULT CALLBACK IAsyncReader_WaitForNext_Proxy(
    IAsyncReader* This,
    DWORD dwTimeout,
    IMediaSample** ppSample,
    DWORD_PTR* pdwUser);
void __RPC_STUB IAsyncReader_WaitForNext_Stub(
    struct IRpcStubBuffer* This,
    struct IRpcChannelBuffer* pRpcChannelBuffer,
    PRPC_MESSAGE pRpcMessage,
    DWORD* pdwStubPhase);
HRESULT CALLBACK IAsyncReader_SyncReadAligned_Proxy(
    IAsyncReader* This,
    IMediaSample* pSample);
void __RPC_STUB IAsyncReader_SyncReadAligned_Stub(
    struct IRpcStubBuffer* This,
    struct IRpcChannelBuffer* pRpcChannelBuffer,
    PRPC_MESSAGE pRpcMessage,
    DWORD* pdwStubPhase);
HRESULT CALLBACK IAsyncReader_SyncRead_Proxy(
    IAsyncReader* This,
    LONGLONG llPosition,
    LONG lLength,
    BYTE* pBuffer);
void __RPC_STUB IAsyncReader_SyncRead_Stub(
    struct IRpcStubBuffer* This,
    struct IRpcChannelBuffer* pRpcChannelBuffer,
    PRPC_MESSAGE pRpcMessage,
    DWORD* pdwStubPhase);
HRESULT CALLBACK IAsyncReader_Length_Proxy(
    IAsyncReader* This,
    LONGLONG* pTotal,
    LONGLONG* pAvailable);
void __RPC_STUB IAsyncReader_Length_Stub(
    struct IRpcStubBuffer* This,
    struct IRpcChannelBuffer* pRpcChannelBuffer,
    PRPC_MESSAGE pRpcMessage,
    DWORD* pdwStubPhase);
HRESULT CALLBACK IAsyncReader_BeginFlush_Proxy(
    IAsyncReader* This);
void __RPC_STUB IAsyncReader_BeginFlush_Stub(
    struct IRpcStubBuffer* This,
    struct IRpcChannelBuffer* pRpcChannelBuffer,
    PRPC_MESSAGE pRpcMessage,
    DWORD* pdwStubPhase);
HRESULT CALLBACK IAsyncReader_EndFlush_Proxy(
    IAsyncReader* This);
void __RPC_STUB IAsyncReader_EndFlush_Stub(
    struct IRpcStubBuffer* This,
    struct IRpcChannelBuffer* pRpcChannelBuffer,
    PRPC_MESSAGE pRpcMessage,
    DWORD* pdwStubPhase);

#endif  /* __IAsyncReader_INTERFACE_DEFINED__ */

#ifndef __IGraphVersion_FWD_DEFINED__
#define __IGraphVersion_FWD_DEFINED__
typedef struct IGraphVersion IGraphVersion;
#endif

/*****************************************************************************
 * IGraphVersion interface
 */
#ifndef __IGraphVersion_INTERFACE_DEFINED__
#define __IGraphVersion_INTERFACE_DEFINED__

DEFINE_GUID(IID_IGraphVersion, 0x56a868ab, 0x0ad4, 0x11ce, 0xb0,0x3a, 0x00,0x20,0xaf,0x0b,0xa7,0x70);
#if defined(__cplusplus) && !defined(CINTERFACE)
struct IGraphVersion : public IUnknown
{
    virtual HRESULT STDMETHODCALLTYPE QueryVersion(
        LONG* pVersion) = 0;

};
#else
typedef struct IGraphVersionVtbl IGraphVersionVtbl;
struct IGraphVersion {
    const IGraphVersionVtbl* lpVtbl;
};
struct IGraphVersionVtbl {
    ICOM_MSVTABLE_COMPAT_FIELDS

    /*** IUnknown methods ***/
    HRESULT (STDMETHODCALLTYPE *QueryInterface)(
        IGraphVersion* This,
        REFIID riid,
        void** ppvObject);

    ULONG (STDMETHODCALLTYPE *AddRef)(
        IGraphVersion* This);

    ULONG (STDMETHODCALLTYPE *Release)(
        IGraphVersion* This);

    /*** IGraphVersion methods ***/
    HRESULT (STDMETHODCALLTYPE *QueryVersion)(
        IGraphVersion* This,
        LONG* pVersion);

};

/*** IUnknown methods ***/
#define IGraphVersion_QueryInterface(p,a,b) (p)->lpVtbl->QueryInterface(p,a,b)
#define IGraphVersion_AddRef(p) (p)->lpVtbl->AddRef(p)
#define IGraphVersion_Release(p) (p)->lpVtbl->Release(p)
/*** IGraphVersion methods ***/
#define IGraphVersion_QueryVersion(p,a) (p)->lpVtbl->QueryVersion(p,a)

#endif

#define IGraphVersion_METHODS \
    ICOM_MSVTABLE_COMPAT_FIELDS \
    /*** IUnknown methods ***/ \
    STDMETHOD_(HRESULT,QueryInterface)(THIS_ REFIID riid, void** ppvObject) PURE; \
    STDMETHOD_(ULONG,AddRef)(THIS) PURE; \
    STDMETHOD_(ULONG,Release)(THIS) PURE; \
    /*** IGraphVersion methods ***/ \
    STDMETHOD_(HRESULT,QueryVersion)(THIS_ LONG* pVersion) PURE;

HRESULT CALLBACK IGraphVersion_QueryVersion_Proxy(
    IGraphVersion* This,
    LONG* pVersion);
void __RPC_STUB IGraphVersion_QueryVersion_Stub(
    struct IRpcStubBuffer* This,
    struct IRpcChannelBuffer* pRpcChannelBuffer,
    PRPC_MESSAGE pRpcMessage,
    DWORD* pdwStubPhase);

#endif  /* __IGraphVersion_INTERFACE_DEFINED__ */

#ifndef __IResourceConsumer_FWD_DEFINED__
#define __IResourceConsumer_FWD_DEFINED__
typedef struct IResourceConsumer IResourceConsumer;
#endif

/*****************************************************************************
 * IResourceConsumer interface
 */
#ifndef __IResourceConsumer_INTERFACE_DEFINED__
#define __IResourceConsumer_INTERFACE_DEFINED__

DEFINE_GUID(IID_IResourceConsumer, 0x56a868ad, 0x0ad4, 0x11ce, 0xb0,0x3a, 0x00,0x20,0xaf,0x0b,0xa7,0x70);
#if defined(__cplusplus) && !defined(CINTERFACE)
struct IResourceConsumer : public IUnknown
{
    virtual HRESULT STDMETHODCALLTYPE AcquireResource(
        LONG idResource) = 0;

    virtual HRESULT STDMETHODCALLTYPE ReleaseResource(
        LONG idResource) = 0;

};
#else
typedef struct IResourceConsumerVtbl IResourceConsumerVtbl;
struct IResourceConsumer {
    const IResourceConsumerVtbl* lpVtbl;
};
struct IResourceConsumerVtbl {
    ICOM_MSVTABLE_COMPAT_FIELDS

    /*** IUnknown methods ***/
    HRESULT (STDMETHODCALLTYPE *QueryInterface)(
        IResourceConsumer* This,
        REFIID riid,
        void** ppvObject);

    ULONG (STDMETHODCALLTYPE *AddRef)(
        IResourceConsumer* This);

    ULONG (STDMETHODCALLTYPE *Release)(
        IResourceConsumer* This);

    /*** IResourceConsumer methods ***/
    HRESULT (STDMETHODCALLTYPE *AcquireResource)(
        IResourceConsumer* This,
        LONG idResource);

    HRESULT (STDMETHODCALLTYPE *ReleaseResource)(
        IResourceConsumer* This,
        LONG idResource);

};

/*** IUnknown methods ***/
#define IResourceConsumer_QueryInterface(p,a,b) (p)->lpVtbl->QueryInterface(p,a,b)
#define IResourceConsumer_AddRef(p) (p)->lpVtbl->AddRef(p)
#define IResourceConsumer_Release(p) (p)->lpVtbl->Release(p)
/*** IResourceConsumer methods ***/
#define IResourceConsumer_AcquireResource(p,a) (p)->lpVtbl->AcquireResource(p,a)
#define IResourceConsumer_ReleaseResource(p,a) (p)->lpVtbl->ReleaseResource(p,a)

#endif

#define IResourceConsumer_METHODS \
    ICOM_MSVTABLE_COMPAT_FIELDS \
    /*** IUnknown methods ***/ \
    STDMETHOD_(HRESULT,QueryInterface)(THIS_ REFIID riid, void** ppvObject) PURE; \
    STDMETHOD_(ULONG,AddRef)(THIS) PURE; \
    STDMETHOD_(ULONG,Release)(THIS) PURE; \
    /*** IResourceConsumer methods ***/ \
    STDMETHOD_(HRESULT,AcquireResource)(THIS_ LONG idResource) PURE; \
    STDMETHOD_(HRESULT,ReleaseResource)(THIS_ LONG idResource) PURE;

HRESULT CALLBACK IResourceConsumer_AcquireResource_Proxy(
    IResourceConsumer* This,
    LONG idResource);
void __RPC_STUB IResourceConsumer_AcquireResource_Stub(
    struct IRpcStubBuffer* This,
    struct IRpcChannelBuffer* pRpcChannelBuffer,
    PRPC_MESSAGE pRpcMessage,
    DWORD* pdwStubPhase);
HRESULT CALLBACK IResourceConsumer_ReleaseResource_Proxy(
    IResourceConsumer* This,
    LONG idResource);
void __RPC_STUB IResourceConsumer_ReleaseResource_Stub(
    struct IRpcStubBuffer* This,
    struct IRpcChannelBuffer* pRpcChannelBuffer,
    PRPC_MESSAGE pRpcMessage,
    DWORD* pdwStubPhase);

#endif  /* __IResourceConsumer_INTERFACE_DEFINED__ */

#ifndef __IResourceManager_FWD_DEFINED__
#define __IResourceManager_FWD_DEFINED__
typedef struct IResourceManager IResourceManager;
#endif

/*****************************************************************************
 * IResourceManager interface
 */
#ifndef __IResourceManager_INTERFACE_DEFINED__
#define __IResourceManager_INTERFACE_DEFINED__

DEFINE_GUID(IID_IResourceManager, 0x56a868ac, 0x0ad4, 0x11ce, 0xb0,0x3a, 0x00,0x20,0xaf,0x0b,0xa7,0x70);
#if defined(__cplusplus) && !defined(CINTERFACE)
struct IResourceManager : public IUnknown
{
    virtual HRESULT STDMETHODCALLTYPE Register(
        LPCWSTR pName,
        LONG cResource,
        LONG* plToken) = 0;

    virtual HRESULT STDMETHODCALLTYPE RegisterGroup(
        LPCWSTR pName,
        LONG cResource,
        LONG* palTokens,
        LONG* plToken) = 0;

    virtual HRESULT STDMETHODCALLTYPE RequestResource(
        LONG idResource,
        IUnknown* pFocusObject,
        IResourceConsumer* pConsumer) = 0;

    virtual HRESULT STDMETHODCALLTYPE NotifyAcquire(
        LONG idResource,
        IResourceConsumer* pConsumer,
        HRESULT hr) = 0;

    virtual HRESULT STDMETHODCALLTYPE NotifyRelease(
        LONG idResource,
        IResourceConsumer* pConsumer,
        BOOL bStillWant) = 0;

    virtual HRESULT STDMETHODCALLTYPE CancelRequest(
        LONG idResource,
        IResourceConsumer* pConsumer) = 0;

    virtual HRESULT STDMETHODCALLTYPE SetFocus(
        IUnknown* pFocusObject) = 0;

    virtual HRESULT STDMETHODCALLTYPE ReleaseFocus(
        IUnknown* pFocusObject) = 0;

};
#else
typedef struct IResourceManagerVtbl IResourceManagerVtbl;
struct IResourceManager {
    const IResourceManagerVtbl* lpVtbl;
};
struct IResourceManagerVtbl {
    ICOM_MSVTABLE_COMPAT_FIELDS

    /*** IUnknown methods ***/
    HRESULT (STDMETHODCALLTYPE *QueryInterface)(
        IResourceManager* This,
        REFIID riid,
        void** ppvObject);

    ULONG (STDMETHODCALLTYPE *AddRef)(
        IResourceManager* This);

    ULONG (STDMETHODCALLTYPE *Release)(
        IResourceManager* This);

    /*** IResourceManager methods ***/
    HRESULT (STDMETHODCALLTYPE *Register)(
        IResourceManager* This,
        LPCWSTR pName,
        LONG cResource,
        LONG* plToken);

    HRESULT (STDMETHODCALLTYPE *RegisterGroup)(
        IResourceManager* This,
        LPCWSTR pName,
        LONG cResource,
        LONG* palTokens,
        LONG* plToken);

    HRESULT (STDMETHODCALLTYPE *RequestResource)(
        IResourceManager* This,
        LONG idResource,
        IUnknown* pFocusObject,
        IResourceConsumer* pConsumer);

    HRESULT (STDMETHODCALLTYPE *NotifyAcquire)(
        IResourceManager* This,
        LONG idResource,
        IResourceConsumer* pConsumer,
        HRESULT hr);

    HRESULT (STDMETHODCALLTYPE *NotifyRelease)(
        IResourceManager* This,
        LONG idResource,
        IResourceConsumer* pConsumer,
        BOOL bStillWant);

    HRESULT (STDMETHODCALLTYPE *CancelRequest)(
        IResourceManager* This,
        LONG idResource,
        IResourceConsumer* pConsumer);

    HRESULT (STDMETHODCALLTYPE *SetFocus)(
        IResourceManager* This,
        IUnknown* pFocusObject);

    HRESULT (STDMETHODCALLTYPE *ReleaseFocus)(
        IResourceManager* This,
        IUnknown* pFocusObject);

};

/*** IUnknown methods ***/
#define IResourceManager_QueryInterface(p,a,b) (p)->lpVtbl->QueryInterface(p,a,b)
#define IResourceManager_AddRef(p) (p)->lpVtbl->AddRef(p)
#define IResourceManager_Release(p) (p)->lpVtbl->Release(p)
/*** IResourceManager methods ***/
#define IResourceManager_Register(p,a,b,c) (p)->lpVtbl->Register(p,a,b,c)
#define IResourceManager_RegisterGroup(p,a,b,c,d) (p)->lpVtbl->RegisterGroup(p,a,b,c,d)
#define IResourceManager_RequestResource(p,a,b,c) (p)->lpVtbl->RequestResource(p,a,b,c)
#define IResourceManager_NotifyAcquire(p,a,b,c) (p)->lpVtbl->NotifyAcquire(p,a,b,c)
#define IResourceManager_NotifyRelease(p,a,b,c) (p)->lpVtbl->NotifyRelease(p,a,b,c)
#define IResourceManager_CancelRequest(p,a,b) (p)->lpVtbl->CancelRequest(p,a,b)
#define IResourceManager_SetFocus(p,a) (p)->lpVtbl->SetFocus(p,a)
#define IResourceManager_ReleaseFocus(p,a) (p)->lpVtbl->ReleaseFocus(p,a)

#endif

#define IResourceManager_METHODS \
    ICOM_MSVTABLE_COMPAT_FIELDS \
    /*** IUnknown methods ***/ \
    STDMETHOD_(HRESULT,QueryInterface)(THIS_ REFIID riid, void** ppvObject) PURE; \
    STDMETHOD_(ULONG,AddRef)(THIS) PURE; \
    STDMETHOD_(ULONG,Release)(THIS) PURE; \
    /*** IResourceManager methods ***/ \
    STDMETHOD_(HRESULT,Register)(THIS_ LPCWSTR pName, LONG cResource, LONG* plToken) PURE; \
    STDMETHOD_(HRESULT,RegisterGroup)(THIS_ LPCWSTR pName, LONG cResource, LONG* palTokens, LONG* plToken) PURE; \
    STDMETHOD_(HRESULT,RequestResource)(THIS_ LONG idResource, IUnknown* pFocusObject, IResourceConsumer* pConsumer) PURE; \
    STDMETHOD_(HRESULT,NotifyAcquire)(THIS_ LONG idResource, IResourceConsumer* pConsumer, HRESULT hr) PURE; \
    STDMETHOD_(HRESULT,NotifyRelease)(THIS_ LONG idResource, IResourceConsumer* pConsumer, BOOL bStillWant) PURE; \
    STDMETHOD_(HRESULT,CancelRequest)(THIS_ LONG idResource, IResourceConsumer* pConsumer) PURE; \
    STDMETHOD_(HRESULT,SetFocus)(THIS_ IUnknown* pFocusObject) PURE; \
    STDMETHOD_(HRESULT,ReleaseFocus)(THIS_ IUnknown* pFocusObject) PURE;

HRESULT CALLBACK IResourceManager_Register_Proxy(
    IResourceManager* This,
    LPCWSTR pName,
    LONG cResource,
    LONG* plToken);
void __RPC_STUB IResourceManager_Register_Stub(
    struct IRpcStubBuffer* This,
    struct IRpcChannelBuffer* pRpcChannelBuffer,
    PRPC_MESSAGE pRpcMessage,
    DWORD* pdwStubPhase);
HRESULT CALLBACK IResourceManager_RegisterGroup_Proxy(
    IResourceManager* This,
    LPCWSTR pName,
    LONG cResource,
    LONG* palTokens,
    LONG* plToken);
void __RPC_STUB IResourceManager_RegisterGroup_Stub(
    struct IRpcStubBuffer* This,
    struct IRpcChannelBuffer* pRpcChannelBuffer,
    PRPC_MESSAGE pRpcMessage,
    DWORD* pdwStubPhase);
HRESULT CALLBACK IResourceManager_RequestResource_Proxy(
    IResourceManager* This,
    LONG idResource,
    IUnknown* pFocusObject,
    IResourceConsumer* pConsumer);
void __RPC_STUB IResourceManager_RequestResource_Stub(
    struct IRpcStubBuffer* This,
    struct IRpcChannelBuffer* pRpcChannelBuffer,
    PRPC_MESSAGE pRpcMessage,
    DWORD* pdwStubPhase);
HRESULT CALLBACK IResourceManager_NotifyAcquire_Proxy(
    IResourceManager* This,
    LONG idResource,
    IResourceConsumer* pConsumer,
    HRESULT hr);
void __RPC_STUB IResourceManager_NotifyAcquire_Stub(
    struct IRpcStubBuffer* This,
    struct IRpcChannelBuffer* pRpcChannelBuffer,
    PRPC_MESSAGE pRpcMessage,
    DWORD* pdwStubPhase);
HRESULT CALLBACK IResourceManager_NotifyRelease_Proxy(
    IResourceManager* This,
    LONG idResource,
    IResourceConsumer* pConsumer,
    BOOL bStillWant);
void __RPC_STUB IResourceManager_NotifyRelease_Stub(
    struct IRpcStubBuffer* This,
    struct IRpcChannelBuffer* pRpcChannelBuffer,
    PRPC_MESSAGE pRpcMessage,
    DWORD* pdwStubPhase);
HRESULT CALLBACK IResourceManager_CancelRequest_Proxy(
    IResourceManager* This,
    LONG idResource,
    IResourceConsumer* pConsumer);
void __RPC_STUB IResourceManager_CancelRequest_Stub(
    struct IRpcStubBuffer* This,
    struct IRpcChannelBuffer* pRpcChannelBuffer,
    PRPC_MESSAGE pRpcMessage,
    DWORD* pdwStubPhase);
HRESULT CALLBACK IResourceManager_SetFocus_Proxy(
    IResourceManager* This,
    IUnknown* pFocusObject);
void __RPC_STUB IResourceManager_SetFocus_Stub(
    struct IRpcStubBuffer* This,
    struct IRpcChannelBuffer* pRpcChannelBuffer,
    PRPC_MESSAGE pRpcMessage,
    DWORD* pdwStubPhase);
HRESULT CALLBACK IResourceManager_ReleaseFocus_Proxy(
    IResourceManager* This,
    IUnknown* pFocusObject);
void __RPC_STUB IResourceManager_ReleaseFocus_Stub(
    struct IRpcStubBuffer* This,
    struct IRpcChannelBuffer* pRpcChannelBuffer,
    PRPC_MESSAGE pRpcMessage,
    DWORD* pdwStubPhase);

#endif  /* __IResourceManager_INTERFACE_DEFINED__ */

#ifndef _IKsPropertySet_
#define _IKsPropertySet_
#define KSPROPERTY_SUPPORT_GET  1
#define KSPROPERTY_SUPPORT_SET  2
/*****************************************************************************
 * IKsPropertySet interface
 */
#ifndef __IKsPropertySet_INTERFACE_DEFINED__
#define __IKsPropertySet_INTERFACE_DEFINED__

DEFINE_GUID(IID_IKsPropertySet, 0x31efac30, 0x515c, 0x11d0, 0xa9,0xaa, 0x00,0xaa,0x00,0x61,0xbe,0x93);
#if defined(__cplusplus) && !defined(CINTERFACE)
struct IKsPropertySet : public IUnknown
{
    virtual HRESULT STDMETHODCALLTYPE Set(
        REFGUID guidPropSet,
        DWORD dwPropID,
        LPVOID pInstanceData,
        DWORD cbInstanceData,
        LPVOID pPropData,
        DWORD cbPropData) = 0;

    virtual HRESULT STDMETHODCALLTYPE Get(
        REFGUID guidPropSet,
        DWORD dwPropID,
        LPVOID pInstanceData,
        DWORD cbInstanceData,
        LPVOID pPropData,
        DWORD cbPropData,
        DWORD* pcbReturned) = 0;

    virtual HRESULT STDMETHODCALLTYPE QuerySupported(
        REFGUID guidPropSet,
        DWORD dwPropID,
        DWORD* pTypeSupport) = 0;

};
#else
typedef struct IKsPropertySetVtbl IKsPropertySetVtbl;
struct IKsPropertySet {
    const IKsPropertySetVtbl* lpVtbl;
};
struct IKsPropertySetVtbl {
    ICOM_MSVTABLE_COMPAT_FIELDS

    /*** IUnknown methods ***/
    HRESULT (STDMETHODCALLTYPE *QueryInterface)(
        IKsPropertySet* This,
        REFIID riid,
        void** ppvObject);

    ULONG (STDMETHODCALLTYPE *AddRef)(
        IKsPropertySet* This);

    ULONG (STDMETHODCALLTYPE *Release)(
        IKsPropertySet* This);

    /*** IKsPropertySet methods ***/
    HRESULT (STDMETHODCALLTYPE *Set)(
        IKsPropertySet* This,
        REFGUID guidPropSet,
        DWORD dwPropID,
        LPVOID pInstanceData,
        DWORD cbInstanceData,
        LPVOID pPropData,
        DWORD cbPropData);

    HRESULT (STDMETHODCALLTYPE *Get)(
        IKsPropertySet* This,
        REFGUID guidPropSet,
        DWORD dwPropID,
        LPVOID pInstanceData,
        DWORD cbInstanceData,
        LPVOID pPropData,
        DWORD cbPropData,
        DWORD* pcbReturned);

    HRESULT (STDMETHODCALLTYPE *QuerySupported)(
        IKsPropertySet* This,
        REFGUID guidPropSet,
        DWORD dwPropID,
        DWORD* pTypeSupport);

};

/*** IUnknown methods ***/
#define IKsPropertySet_QueryInterface(p,a,b) (p)->lpVtbl->QueryInterface(p,a,b)
#define IKsPropertySet_AddRef(p) (p)->lpVtbl->AddRef(p)
#define IKsPropertySet_Release(p) (p)->lpVtbl->Release(p)
/*** IKsPropertySet methods ***/
#define IKsPropertySet_Set(p,a,b,c,d,e,f) (p)->lpVtbl->Set(p,a,b,c,d,e,f)
#define IKsPropertySet_Get(p,a,b,c,d,e,f,g) (p)->lpVtbl->Get(p,a,b,c,d,e,f,g)
#define IKsPropertySet_QuerySupported(p,a,b,c) (p)->lpVtbl->QuerySupported(p,a,b,c)

#endif

#define IKsPropertySet_METHODS \
    ICOM_MSVTABLE_COMPAT_FIELDS \
    /*** IUnknown methods ***/ \
    STDMETHOD_(HRESULT,QueryInterface)(THIS_ REFIID riid, void** ppvObject) PURE; \
    STDMETHOD_(ULONG,AddRef)(THIS) PURE; \
    STDMETHOD_(ULONG,Release)(THIS) PURE; \
    /*** IKsPropertySet methods ***/ \
    STDMETHOD_(HRESULT,Set)(THIS_ REFGUID guidPropSet, DWORD dwPropID, LPVOID pInstanceData, DWORD cbInstanceData, LPVOID pPropData, DWORD cbPropData) PURE; \
    STDMETHOD_(HRESULT,Get)(THIS_ REFGUID guidPropSet, DWORD dwPropID, LPVOID pInstanceData, DWORD cbInstanceData, LPVOID pPropData, DWORD cbPropData, DWORD* pcbReturned) PURE; \
    STDMETHOD_(HRESULT,QuerySupported)(THIS_ REFGUID guidPropSet, DWORD dwPropID, DWORD* pTypeSupport) PURE;

HRESULT CALLBACK IKsPropertySet_Set_Proxy(
    IKsPropertySet* This,
    REFGUID guidPropSet,
    DWORD dwPropID,
    LPVOID pInstanceData,
    DWORD cbInstanceData,
    LPVOID pPropData,
    DWORD cbPropData);
void __RPC_STUB IKsPropertySet_Set_Stub(
    struct IRpcStubBuffer* This,
    struct IRpcChannelBuffer* pRpcChannelBuffer,
    PRPC_MESSAGE pRpcMessage,
    DWORD* pdwStubPhase);
HRESULT CALLBACK IKsPropertySet_Get_Proxy(
    IKsPropertySet* This,
    REFGUID guidPropSet,
    DWORD dwPropID,
    LPVOID pInstanceData,
    DWORD cbInstanceData,
    LPVOID pPropData,
    DWORD cbPropData,
    DWORD* pcbReturned);
void __RPC_STUB IKsPropertySet_Get_Stub(
    struct IRpcStubBuffer* This,
    struct IRpcChannelBuffer* pRpcChannelBuffer,
    PRPC_MESSAGE pRpcMessage,
    DWORD* pdwStubPhase);
HRESULT CALLBACK IKsPropertySet_QuerySupported_Proxy(
    IKsPropertySet* This,
    REFGUID guidPropSet,
    DWORD dwPropID,
    DWORD* pTypeSupport);
void __RPC_STUB IKsPropertySet_QuerySupported_Stub(
    struct IRpcStubBuffer* This,
    struct IRpcChannelBuffer* pRpcChannelBuffer,
    PRPC_MESSAGE pRpcMessage,
    DWORD* pdwStubPhase);

#endif  /* __IKsPropertySet_INTERFACE_DEFINED__ */

#endif /* _IKsPropertySet_ */
#ifndef __IPinConnection_FWD_DEFINED__
#define __IPinConnection_FWD_DEFINED__
typedef struct IPinConnection IPinConnection;
#endif

#ifndef __IPinFlowControl_FWD_DEFINED__
#define __IPinFlowControl_FWD_DEFINED__
typedef struct IPinFlowControl IPinFlowControl;
#endif

#ifndef __IGraphConfig_FWD_DEFINED__
#define __IGraphConfig_FWD_DEFINED__
typedef struct IGraphConfig IGraphConfig;
#endif

#ifndef __IGraphConfigCallback_FWD_DEFINED__
#define __IGraphConfigCallback_FWD_DEFINED__
typedef struct IGraphConfigCallback IGraphConfigCallback;
#endif

/*****************************************************************************
 * IPinConnection interface
 */
#ifndef __IPinConnection_INTERFACE_DEFINED__
#define __IPinConnection_INTERFACE_DEFINED__

DEFINE_GUID(IID_IPinConnection, 0x4a9a62d3, 0x27d4, 0x403d, 0x91,0xe9, 0x89,0xf5,0x40,0xe5,0x55,0x34);
#if defined(__cplusplus) && !defined(CINTERFACE)
struct IPinConnection : public IUnknown
{
    virtual HRESULT STDMETHODCALLTYPE DynamicQueryAccept(
        const AM_MEDIA_TYPE* pmt) = 0;

    virtual HRESULT STDMETHODCALLTYPE NotifyEndOfStream(
        HANDLE hNotifyEvent) = 0;

    virtual HRESULT STDMETHODCALLTYPE IsEndPin(
        ) = 0;

    virtual HRESULT STDMETHODCALLTYPE DynamicDisconnect(
        ) = 0;

};
#else
typedef struct IPinConnectionVtbl IPinConnectionVtbl;
struct IPinConnection {
    const IPinConnectionVtbl* lpVtbl;
};
struct IPinConnectionVtbl {
    ICOM_MSVTABLE_COMPAT_FIELDS

    /*** IUnknown methods ***/
    HRESULT (STDMETHODCALLTYPE *QueryInterface)(
        IPinConnection* This,
        REFIID riid,
        void** ppvObject);

    ULONG (STDMETHODCALLTYPE *AddRef)(
        IPinConnection* This);

    ULONG (STDMETHODCALLTYPE *Release)(
        IPinConnection* This);

    /*** IPinConnection methods ***/
    HRESULT (STDMETHODCALLTYPE *DynamicQueryAccept)(
        IPinConnection* This,
        const AM_MEDIA_TYPE* pmt);

    HRESULT (STDMETHODCALLTYPE *NotifyEndOfStream)(
        IPinConnection* This,
        HANDLE hNotifyEvent);

    HRESULT (STDMETHODCALLTYPE *IsEndPin)(
        IPinConnection* This);

    HRESULT (STDMETHODCALLTYPE *DynamicDisconnect)(
        IPinConnection* This);

};

/*** IUnknown methods ***/
#define IPinConnection_QueryInterface(p,a,b) (p)->lpVtbl->QueryInterface(p,a,b)
#define IPinConnection_AddRef(p) (p)->lpVtbl->AddRef(p)
#define IPinConnection_Release(p) (p)->lpVtbl->Release(p)
/*** IPinConnection methods ***/
#define IPinConnection_DynamicQueryAccept(p,a) (p)->lpVtbl->DynamicQueryAccept(p,a)
#define IPinConnection_NotifyEndOfStream(p,a) (p)->lpVtbl->NotifyEndOfStream(p,a)
#define IPinConnection_IsEndPin(p) (p)->lpVtbl->IsEndPin(p)
#define IPinConnection_DynamicDisconnect(p) (p)->lpVtbl->DynamicDisconnect(p)

#endif

#define IPinConnection_METHODS \
    ICOM_MSVTABLE_COMPAT_FIELDS \
    /*** IUnknown methods ***/ \
    STDMETHOD_(HRESULT,QueryInterface)(THIS_ REFIID riid, void** ppvObject) PURE; \
    STDMETHOD_(ULONG,AddRef)(THIS) PURE; \
    STDMETHOD_(ULONG,Release)(THIS) PURE; \
    /*** IPinConnection methods ***/ \
    STDMETHOD_(HRESULT,DynamicQueryAccept)(THIS_ const AM_MEDIA_TYPE* pmt) PURE; \
    STDMETHOD_(HRESULT,NotifyEndOfStream)(THIS_ HANDLE hNotifyEvent) PURE; \
    STDMETHOD_(HRESULT,IsEndPin)(THIS) PURE; \
    STDMETHOD_(HRESULT,DynamicDisconnect)(THIS) PURE;

HRESULT CALLBACK IPinConnection_DynamicQueryAccept_Proxy(
    IPinConnection* This,
    const AM_MEDIA_TYPE* pmt);
void __RPC_STUB IPinConnection_DynamicQueryAccept_Stub(
    struct IRpcStubBuffer* This,
    struct IRpcChannelBuffer* pRpcChannelBuffer,
    PRPC_MESSAGE pRpcMessage,
    DWORD* pdwStubPhase);
HRESULT CALLBACK IPinConnection_NotifyEndOfStream_Proxy(
    IPinConnection* This,
    HANDLE hNotifyEvent);
void __RPC_STUB IPinConnection_NotifyEndOfStream_Stub(
    struct IRpcStubBuffer* This,
    struct IRpcChannelBuffer* pRpcChannelBuffer,
    PRPC_MESSAGE pRpcMessage,
    DWORD* pdwStubPhase);
HRESULT CALLBACK IPinConnection_IsEndPin_Proxy(
    IPinConnection* This);
void __RPC_STUB IPinConnection_IsEndPin_Stub(
    struct IRpcStubBuffer* This,
    struct IRpcChannelBuffer* pRpcChannelBuffer,
    PRPC_MESSAGE pRpcMessage,
    DWORD* pdwStubPhase);
HRESULT CALLBACK IPinConnection_DynamicDisconnect_Proxy(
    IPinConnection* This);
void __RPC_STUB IPinConnection_DynamicDisconnect_Stub(
    struct IRpcStubBuffer* This,
    struct IRpcChannelBuffer* pRpcChannelBuffer,
    PRPC_MESSAGE pRpcMessage,
    DWORD* pdwStubPhase);

#endif  /* __IPinConnection_INTERFACE_DEFINED__ */

/*****************************************************************************
 * IPinFlowControl interface
 */
#ifndef __IPinFlowControl_INTERFACE_DEFINED__
#define __IPinFlowControl_INTERFACE_DEFINED__

DEFINE_GUID(IID_IPinFlowControl, 0xc56e9858, 0xdbf3, 0x4f6b, 0x81,0x19, 0x38,0x4a,0xf2,0x06,0x0d,0xeb);
#if defined(__cplusplus) && !defined(CINTERFACE)
struct IPinFlowControl : public IUnknown
{
    virtual HRESULT STDMETHODCALLTYPE Block(
        DWORD dwBlockFlags,
        HANDLE hEvent) = 0;

};
#else
typedef struct IPinFlowControlVtbl IPinFlowControlVtbl;
struct IPinFlowControl {
    const IPinFlowControlVtbl* lpVtbl;
};
struct IPinFlowControlVtbl {
    ICOM_MSVTABLE_COMPAT_FIELDS

    /*** IUnknown methods ***/
    HRESULT (STDMETHODCALLTYPE *QueryInterface)(
        IPinFlowControl* This,
        REFIID riid,
        void** ppvObject);

    ULONG (STDMETHODCALLTYPE *AddRef)(
        IPinFlowControl* This);

    ULONG (STDMETHODCALLTYPE *Release)(
        IPinFlowControl* This);

    /*** IPinFlowControl methods ***/
    HRESULT (STDMETHODCALLTYPE *Block)(
        IPinFlowControl* This,
        DWORD dwBlockFlags,
        HANDLE hEvent);

};

/*** IUnknown methods ***/
#define IPinFlowControl_QueryInterface(p,a,b) (p)->lpVtbl->QueryInterface(p,a,b)
#define IPinFlowControl_AddRef(p) (p)->lpVtbl->AddRef(p)
#define IPinFlowControl_Release(p) (p)->lpVtbl->Release(p)
/*** IPinFlowControl methods ***/
#define IPinFlowControl_Block(p,a,b) (p)->lpVtbl->Block(p,a,b)

#endif

#define IPinFlowControl_METHODS \
    ICOM_MSVTABLE_COMPAT_FIELDS \
    /*** IUnknown methods ***/ \
    STDMETHOD_(HRESULT,QueryInterface)(THIS_ REFIID riid, void** ppvObject) PURE; \
    STDMETHOD_(ULONG,AddRef)(THIS) PURE; \
    STDMETHOD_(ULONG,Release)(THIS) PURE; \
    /*** IPinFlowControl methods ***/ \
    STDMETHOD_(HRESULT,Block)(THIS_ DWORD dwBlockFlags, HANDLE hEvent) PURE;

HRESULT CALLBACK IPinFlowControl_Block_Proxy(
    IPinFlowControl* This,
    DWORD dwBlockFlags,
    HANDLE hEvent);
void __RPC_STUB IPinFlowControl_Block_Stub(
    struct IRpcStubBuffer* This,
    struct IRpcChannelBuffer* pRpcChannelBuffer,
    PRPC_MESSAGE pRpcMessage,
    DWORD* pdwStubPhase);

#endif  /* __IPinFlowControl_INTERFACE_DEFINED__ */

enum _AM_PIN_FLOW_CONTROL_BLOCK_FLAGS {
    AM_PIN_FLOW_CONTROL_BLOCK = 0x1
};

typedef enum _AM_GRAPH_CONFIG_RECONNECT_FLAGS {
    AM_GRAPH_CONFIG_RECONNECT_DIRECTCONNECT = 0x1,
    AM_GRAPH_CONFIG_RECONNECT_CACHE_REMOVED_FILTERS = 0x2,
    AM_GRAPH_CONFIG_RECONNECT_USE_ONLY_CACHED_FILTERS = 0x4
} AM_GRAPH_CONFIG_RECONNECT_FLAGS;

enum _REM_FILTER_FLAGS {
    REMFILTERF_LEAVECONNECTED = 0x1
};

typedef enum _AM_FILTER_FLAGS {
    AM_FILTER_FLAGS_REMOVABLE = 0x1
} AM_FILTER_FLAGS;

/*****************************************************************************
 * IGraphConfig interface
 */
#ifndef __IGraphConfig_INTERFACE_DEFINED__
#define __IGraphConfig_INTERFACE_DEFINED__

DEFINE_GUID(IID_IGraphConfig, 0x03a1eb8e, 0x32bf, 0x4245, 0x85,0x02, 0x11,0x4d,0x08,0xa9,0xcb,0x88);
#if defined(__cplusplus) && !defined(CINTERFACE)
struct IGraphConfig : public IUnknown
{
    virtual HRESULT STDMETHODCALLTYPE Reconnect(
        IPin* pOutputPin,
        IPin* pInputPin,
        const AM_MEDIA_TYPE* pmtFirstConnection,
        IBaseFilter* pUsingFilter,
        HANDLE hAbortEvent,
        DWORD dwFlags) = 0;

    virtual HRESULT STDMETHODCALLTYPE Reconfigure(
        IGraphConfigCallback* pCallback,
        PVOID pvContext,
        DWORD dwFlags,
        HANDLE hAbortEvent) = 0;

    virtual HRESULT STDMETHODCALLTYPE AddFilterToCache(
        IBaseFilter* pFilter) = 0;

    virtual HRESULT STDMETHODCALLTYPE EnumCacheFilter(
        IEnumFilters** pEnum) = 0;

    virtual HRESULT STDMETHODCALLTYPE RemoveFilterFromCache(
        IBaseFilter* pFilter) = 0;

    virtual HRESULT STDMETHODCALLTYPE GetStartTime(
        REFERENCE_TIME* prtStart) = 0;

    virtual HRESULT STDMETHODCALLTYPE PushThroughData(
        IPin* pOutputPin,
        IPinConnection* pConnection,
        HANDLE hEventAbort) = 0;

    virtual HRESULT STDMETHODCALLTYPE SetFilterFlags(
        IBaseFilter* pFilter,
        DWORD dwFlags) = 0;

    virtual HRESULT STDMETHODCALLTYPE GetFilterFlags(
        IBaseFilter* pFilter,
        DWORD* pdwFlags) = 0;

    virtual HRESULT STDMETHODCALLTYPE RemoveFilterEx(
        IBaseFilter* pFilter,
        DWORD Flags) = 0;

};
#else
typedef struct IGraphConfigVtbl IGraphConfigVtbl;
struct IGraphConfig {
    const IGraphConfigVtbl* lpVtbl;
};
struct IGraphConfigVtbl {
    ICOM_MSVTABLE_COMPAT_FIELDS

    /*** IUnknown methods ***/
    HRESULT (STDMETHODCALLTYPE *QueryInterface)(
        IGraphConfig* This,
        REFIID riid,
        void** ppvObject);

    ULONG (STDMETHODCALLTYPE *AddRef)(
        IGraphConfig* This);

    ULONG (STDMETHODCALLTYPE *Release)(
        IGraphConfig* This);

    /*** IGraphConfig methods ***/
    HRESULT (STDMETHODCALLTYPE *Reconnect)(
        IGraphConfig* This,
        IPin* pOutputPin,
        IPin* pInputPin,
        const AM_MEDIA_TYPE* pmtFirstConnection,
        IBaseFilter* pUsingFilter,
        HANDLE hAbortEvent,
        DWORD dwFlags);

    HRESULT (STDMETHODCALLTYPE *Reconfigure)(
        IGraphConfig* This,
        IGraphConfigCallback* pCallback,
        PVOID pvContext,
        DWORD dwFlags,
        HANDLE hAbortEvent);

    HRESULT (STDMETHODCALLTYPE *AddFilterToCache)(
        IGraphConfig* This,
        IBaseFilter* pFilter);

    HRESULT (STDMETHODCALLTYPE *EnumCacheFilter)(
        IGraphConfig* This,
        IEnumFilters** pEnum);

    HRESULT (STDMETHODCALLTYPE *RemoveFilterFromCache)(
        IGraphConfig* This,
        IBaseFilter* pFilter);

    HRESULT (STDMETHODCALLTYPE *GetStartTime)(
        IGraphConfig* This,
        REFERENCE_TIME* prtStart);

    HRESULT (STDMETHODCALLTYPE *PushThroughData)(
        IGraphConfig* This,
        IPin* pOutputPin,
        IPinConnection* pConnection,
        HANDLE hEventAbort);

    HRESULT (STDMETHODCALLTYPE *SetFilterFlags)(
        IGraphConfig* This,
        IBaseFilter* pFilter,
        DWORD dwFlags);

    HRESULT (STDMETHODCALLTYPE *GetFilterFlags)(
        IGraphConfig* This,
        IBaseFilter* pFilter,
        DWORD* pdwFlags);

    HRESULT (STDMETHODCALLTYPE *RemoveFilterEx)(
        IGraphConfig* This,
        IBaseFilter* pFilter,
        DWORD Flags);

};

/*** IUnknown methods ***/
#define IGraphConfig_QueryInterface(p,a,b) (p)->lpVtbl->QueryInterface(p,a,b)
#define IGraphConfig_AddRef(p) (p)->lpVtbl->AddRef(p)
#define IGraphConfig_Release(p) (p)->lpVtbl->Release(p)
/*** IGraphConfig methods ***/
#define IGraphConfig_Reconnect(p,a,b,c,d,e,f) (p)->lpVtbl->Reconnect(p,a,b,c,d,e,f)
#define IGraphConfig_Reconfigure(p,a,b,c,d) (p)->lpVtbl->Reconfigure(p,a,b,c,d)
#define IGraphConfig_AddFilterToCache(p,a) (p)->lpVtbl->AddFilterToCache(p,a)
#define IGraphConfig_EnumCacheFilter(p,a) (p)->lpVtbl->EnumCacheFilter(p,a)
#define IGraphConfig_RemoveFilterFromCache(p,a) (p)->lpVtbl->RemoveFilterFromCache(p,a)
#define IGraphConfig_GetStartTime(p,a) (p)->lpVtbl->GetStartTime(p,a)
#define IGraphConfig_PushThroughData(p,a,b,c) (p)->lpVtbl->PushThroughData(p,a,b,c)
#define IGraphConfig_SetFilterFlags(p,a,b) (p)->lpVtbl->SetFilterFlags(p,a,b)
#define IGraphConfig_GetFilterFlags(p,a,b) (p)->lpVtbl->GetFilterFlags(p,a,b)
#define IGraphConfig_RemoveFilterEx(p,a,b) (p)->lpVtbl->RemoveFilterEx(p,a,b)

#endif

#define IGraphConfig_METHODS \
    ICOM_MSVTABLE_COMPAT_FIELDS \
    /*** IUnknown methods ***/ \
    STDMETHOD_(HRESULT,QueryInterface)(THIS_ REFIID riid, void** ppvObject) PURE; \
    STDMETHOD_(ULONG,AddRef)(THIS) PURE; \
    STDMETHOD_(ULONG,Release)(THIS) PURE; \
    /*** IGraphConfig methods ***/ \
    STDMETHOD_(HRESULT,Reconnect)(THIS_ IPin* pOutputPin, IPin* pInputPin, const AM_MEDIA_TYPE* pmtFirstConnection, IBaseFilter* pUsingFilter, HANDLE hAbortEvent, DWORD dwFlags) PURE; \
    STDMETHOD_(HRESULT,Reconfigure)(THIS_ IGraphConfigCallback* pCallback, PVOID pvContext, DWORD dwFlags, HANDLE hAbortEvent) PURE; \
    STDMETHOD_(HRESULT,AddFilterToCache)(THIS_ IBaseFilter* pFilter) PURE; \
    STDMETHOD_(HRESULT,EnumCacheFilter)(THIS_ IEnumFilters** pEnum) PURE; \
    STDMETHOD_(HRESULT,RemoveFilterFromCache)(THIS_ IBaseFilter* pFilter) PURE; \
    STDMETHOD_(HRESULT,GetStartTime)(THIS_ REFERENCE_TIME* prtStart) PURE; \
    STDMETHOD_(HRESULT,PushThroughData)(THIS_ IPin* pOutputPin, IPinConnection* pConnection, HANDLE hEventAbort) PURE; \
    STDMETHOD_(HRESULT,SetFilterFlags)(THIS_ IBaseFilter* pFilter, DWORD dwFlags) PURE; \
    STDMETHOD_(HRESULT,GetFilterFlags)(THIS_ IBaseFilter* pFilter, DWORD* pdwFlags) PURE; \
    STDMETHOD_(HRESULT,RemoveFilterEx)(THIS_ IBaseFilter* pFilter, DWORD Flags) PURE;

HRESULT CALLBACK IGraphConfig_Reconnect_Proxy(
    IGraphConfig* This,
    IPin* pOutputPin,
    IPin* pInputPin,
    const AM_MEDIA_TYPE* pmtFirstConnection,
    IBaseFilter* pUsingFilter,
    HANDLE hAbortEvent,
    DWORD dwFlags);
void __RPC_STUB IGraphConfig_Reconnect_Stub(
    struct IRpcStubBuffer* This,
    struct IRpcChannelBuffer* pRpcChannelBuffer,
    PRPC_MESSAGE pRpcMessage,
    DWORD* pdwStubPhase);
HRESULT CALLBACK IGraphConfig_Reconfigure_Proxy(
    IGraphConfig* This,
    IGraphConfigCallback* pCallback,
    PVOID pvContext,
    DWORD dwFlags,
    HANDLE hAbortEvent);
void __RPC_STUB IGraphConfig_Reconfigure_Stub(
    struct IRpcStubBuffer* This,
    struct IRpcChannelBuffer* pRpcChannelBuffer,
    PRPC_MESSAGE pRpcMessage,
    DWORD* pdwStubPhase);
HRESULT CALLBACK IGraphConfig_AddFilterToCache_Proxy(
    IGraphConfig* This,
    IBaseFilter* pFilter);
void __RPC_STUB IGraphConfig_AddFilterToCache_Stub(
    struct IRpcStubBuffer* This,
    struct IRpcChannelBuffer* pRpcChannelBuffer,
    PRPC_MESSAGE pRpcMessage,
    DWORD* pdwStubPhase);
HRESULT CALLBACK IGraphConfig_EnumCacheFilter_Proxy(
    IGraphConfig* This,
    IEnumFilters** pEnum);
void __RPC_STUB IGraphConfig_EnumCacheFilter_Stub(
    struct IRpcStubBuffer* This,
    struct IRpcChannelBuffer* pRpcChannelBuffer,
    PRPC_MESSAGE pRpcMessage,
    DWORD* pdwStubPhase);
HRESULT CALLBACK IGraphConfig_RemoveFilterFromCache_Proxy(
    IGraphConfig* This,
    IBaseFilter* pFilter);
void __RPC_STUB IGraphConfig_RemoveFilterFromCache_Stub(
    struct IRpcStubBuffer* This,
    struct IRpcChannelBuffer* pRpcChannelBuffer,
    PRPC_MESSAGE pRpcMessage,
    DWORD* pdwStubPhase);
HRESULT CALLBACK IGraphConfig_GetStartTime_Proxy(
    IGraphConfig* This,
    REFERENCE_TIME* prtStart);
void __RPC_STUB IGraphConfig_GetStartTime_Stub(
    struct IRpcStubBuffer* This,
    struct IRpcChannelBuffer* pRpcChannelBuffer,
    PRPC_MESSAGE pRpcMessage,
    DWORD* pdwStubPhase);
HRESULT CALLBACK IGraphConfig_PushThroughData_Proxy(
    IGraphConfig* This,
    IPin* pOutputPin,
    IPinConnection* pConnection,
    HANDLE hEventAbort);
void __RPC_STUB IGraphConfig_PushThroughData_Stub(
    struct IRpcStubBuffer* This,
    struct IRpcChannelBuffer* pRpcChannelBuffer,
    PRPC_MESSAGE pRpcMessage,
    DWORD* pdwStubPhase);
HRESULT CALLBACK IGraphConfig_SetFilterFlags_Proxy(
    IGraphConfig* This,
    IBaseFilter* pFilter,
    DWORD dwFlags);
void __RPC_STUB IGraphConfig_SetFilterFlags_Stub(
    struct IRpcStubBuffer* This,
    struct IRpcChannelBuffer* pRpcChannelBuffer,
    PRPC_MESSAGE pRpcMessage,
    DWORD* pdwStubPhase);
HRESULT CALLBACK IGraphConfig_GetFilterFlags_Proxy(
    IGraphConfig* This,
    IBaseFilter* pFilter,
    DWORD* pdwFlags);
void __RPC_STUB IGraphConfig_GetFilterFlags_Stub(
    struct IRpcStubBuffer* This,
    struct IRpcChannelBuffer* pRpcChannelBuffer,
    PRPC_MESSAGE pRpcMessage,
    DWORD* pdwStubPhase);
HRESULT CALLBACK IGraphConfig_RemoveFilterEx_Proxy(
    IGraphConfig* This,
    IBaseFilter* pFilter,
    DWORD Flags);
void __RPC_STUB IGraphConfig_RemoveFilterEx_Stub(
    struct IRpcStubBuffer* This,
    struct IRpcChannelBuffer* pRpcChannelBuffer,
    PRPC_MESSAGE pRpcMessage,
    DWORD* pdwStubPhase);

#endif  /* __IGraphConfig_INTERFACE_DEFINED__ */

/*****************************************************************************
 * IGraphConfigCallback interface
 */
#ifndef __IGraphConfigCallback_INTERFACE_DEFINED__
#define __IGraphConfigCallback_INTERFACE_DEFINED__

DEFINE_GUID(IID_IGraphConfigCallback, 0xade0fd60, 0xd19d, 0x11d2, 0xab,0xf6, 0x00,0xa0,0xc9,0x05,0xf3,0x75);
#if defined(__cplusplus) && !defined(CINTERFACE)
struct IGraphConfigCallback : public IUnknown
{
    virtual HRESULT STDMETHODCALLTYPE Reconfigure(
        PVOID pvContext,
        DWORD dwFlags) = 0;

};
#else
typedef struct IGraphConfigCallbackVtbl IGraphConfigCallbackVtbl;
struct IGraphConfigCallback {
    const IGraphConfigCallbackVtbl* lpVtbl;
};
struct IGraphConfigCallbackVtbl {
    ICOM_MSVTABLE_COMPAT_FIELDS

    /*** IUnknown methods ***/
    HRESULT (STDMETHODCALLTYPE *QueryInterface)(
        IGraphConfigCallback* This,
        REFIID riid,
        void** ppvObject);

    ULONG (STDMETHODCALLTYPE *AddRef)(
        IGraphConfigCallback* This);

    ULONG (STDMETHODCALLTYPE *Release)(
        IGraphConfigCallback* This);

    /*** IGraphConfigCallback methods ***/
    HRESULT (STDMETHODCALLTYPE *Reconfigure)(
        IGraphConfigCallback* This,
        PVOID pvContext,
        DWORD dwFlags);

};

/*** IUnknown methods ***/
#define IGraphConfigCallback_QueryInterface(p,a,b) (p)->lpVtbl->QueryInterface(p,a,b)
#define IGraphConfigCallback_AddRef(p) (p)->lpVtbl->AddRef(p)
#define IGraphConfigCallback_Release(p) (p)->lpVtbl->Release(p)
/*** IGraphConfigCallback methods ***/
#define IGraphConfigCallback_Reconfigure(p,a,b) (p)->lpVtbl->Reconfigure(p,a,b)

#endif

#define IGraphConfigCallback_METHODS \
    ICOM_MSVTABLE_COMPAT_FIELDS \
    /*** IUnknown methods ***/ \
    STDMETHOD_(HRESULT,QueryInterface)(THIS_ REFIID riid, void** ppvObject) PURE; \
    STDMETHOD_(ULONG,AddRef)(THIS) PURE; \
    STDMETHOD_(ULONG,Release)(THIS) PURE; \
    /*** IGraphConfigCallback methods ***/ \
    STDMETHOD_(HRESULT,Reconfigure)(THIS_ PVOID pvContext, DWORD dwFlags) PURE;

HRESULT CALLBACK IGraphConfigCallback_Reconfigure_Proxy(
    IGraphConfigCallback* This,
    PVOID pvContext,
    DWORD dwFlags);
void __RPC_STUB IGraphConfigCallback_Reconfigure_Stub(
    struct IRpcStubBuffer* This,
    struct IRpcChannelBuffer* pRpcChannelBuffer,
    PRPC_MESSAGE pRpcMessage,
    DWORD* pdwStubPhase);

#endif  /* __IGraphConfigCallback_INTERFACE_DEFINED__ */

#ifndef __IFilterChain_FWD_DEFINED__
#define __IFilterChain_FWD_DEFINED__
typedef struct IFilterChain IFilterChain;
#endif

/*****************************************************************************
 * IFilterChain interface
 */
#ifndef __IFilterChain_INTERFACE_DEFINED__
#define __IFilterChain_INTERFACE_DEFINED__

DEFINE_GUID(IID_IFilterChain, 0xdcfbdcf6, 0x0dc2, 0x45f5, 0x9a,0xb2, 0x7c,0x33,0x0e,0xa0,0x9c,0x29);
#if defined(__cplusplus) && !defined(CINTERFACE)
struct IFilterChain : public IUnknown
{
    virtual HRESULT STDMETHODCALLTYPE StartChain(
        IBaseFilter* pStartFilter,
        IBaseFilter* pEndFilter) = 0;

    virtual HRESULT STDMETHODCALLTYPE PauseChain(
        IBaseFilter* pStartFilter,
        IBaseFilter* pEndFilter) = 0;

    virtual HRESULT STDMETHODCALLTYPE StopChain(
        IBaseFilter* pStartFilter,
        IBaseFilter* pEndFilter) = 0;

    virtual HRESULT STDMETHODCALLTYPE RemoveChain(
        IBaseFilter* pStartFilter,
        IBaseFilter* pEndFilter) = 0;

};
#else
typedef struct IFilterChainVtbl IFilterChainVtbl;
struct IFilterChain {
    const IFilterChainVtbl* lpVtbl;
};
struct IFilterChainVtbl {
    ICOM_MSVTABLE_COMPAT_FIELDS

    /*** IUnknown methods ***/
    HRESULT (STDMETHODCALLTYPE *QueryInterface)(
        IFilterChain* This,
        REFIID riid,
        void** ppvObject);

    ULONG (STDMETHODCALLTYPE *AddRef)(
        IFilterChain* This);

    ULONG (STDMETHODCALLTYPE *Release)(
        IFilterChain* This);

    /*** IFilterChain methods ***/
    HRESULT (STDMETHODCALLTYPE *StartChain)(
        IFilterChain* This,
        IBaseFilter* pStartFilter,
        IBaseFilter* pEndFilter);

    HRESULT (STDMETHODCALLTYPE *PauseChain)(
        IFilterChain* This,
        IBaseFilter* pStartFilter,
        IBaseFilter* pEndFilter);

    HRESULT (STDMETHODCALLTYPE *StopChain)(
        IFilterChain* This,
        IBaseFilter* pStartFilter,
        IBaseFilter* pEndFilter);

    HRESULT (STDMETHODCALLTYPE *RemoveChain)(
        IFilterChain* This,
        IBaseFilter* pStartFilter,
        IBaseFilter* pEndFilter);

};

/*** IUnknown methods ***/
#define IFilterChain_QueryInterface(p,a,b) (p)->lpVtbl->QueryInterface(p,a,b)
#define IFilterChain_AddRef(p) (p)->lpVtbl->AddRef(p)
#define IFilterChain_Release(p) (p)->lpVtbl->Release(p)
/*** IFilterChain methods ***/
#define IFilterChain_StartChain(p,a,b) (p)->lpVtbl->StartChain(p,a,b)
#define IFilterChain_PauseChain(p,a,b) (p)->lpVtbl->PauseChain(p,a,b)
#define IFilterChain_StopChain(p,a,b) (p)->lpVtbl->StopChain(p,a,b)
#define IFilterChain_RemoveChain(p,a,b) (p)->lpVtbl->RemoveChain(p,a,b)

#endif

#define IFilterChain_METHODS \
    ICOM_MSVTABLE_COMPAT_FIELDS \
    /*** IUnknown methods ***/ \
    STDMETHOD_(HRESULT,QueryInterface)(THIS_ REFIID riid, void** ppvObject) PURE; \
    STDMETHOD_(ULONG,AddRef)(THIS) PURE; \
    STDMETHOD_(ULONG,Release)(THIS) PURE; \
    /*** IFilterChain methods ***/ \
    STDMETHOD_(HRESULT,StartChain)(THIS_ IBaseFilter* pStartFilter, IBaseFilter* pEndFilter) PURE; \
    STDMETHOD_(HRESULT,PauseChain)(THIS_ IBaseFilter* pStartFilter, IBaseFilter* pEndFilter) PURE; \
    STDMETHOD_(HRESULT,StopChain)(THIS_ IBaseFilter* pStartFilter, IBaseFilter* pEndFilter) PURE; \
    STDMETHOD_(HRESULT,RemoveChain)(THIS_ IBaseFilter* pStartFilter, IBaseFilter* pEndFilter) PURE;

HRESULT CALLBACK IFilterChain_StartChain_Proxy(
    IFilterChain* This,
    IBaseFilter* pStartFilter,
    IBaseFilter* pEndFilter);
void __RPC_STUB IFilterChain_StartChain_Stub(
    struct IRpcStubBuffer* This,
    struct IRpcChannelBuffer* pRpcChannelBuffer,
    PRPC_MESSAGE pRpcMessage,
    DWORD* pdwStubPhase);
HRESULT CALLBACK IFilterChain_PauseChain_Proxy(
    IFilterChain* This,
    IBaseFilter* pStartFilter,
    IBaseFilter* pEndFilter);
void __RPC_STUB IFilterChain_PauseChain_Stub(
    struct IRpcStubBuffer* This,
    struct IRpcChannelBuffer* pRpcChannelBuffer,
    PRPC_MESSAGE pRpcMessage,
    DWORD* pdwStubPhase);
HRESULT CALLBACK IFilterChain_StopChain_Proxy(
    IFilterChain* This,
    IBaseFilter* pStartFilter,
    IBaseFilter* pEndFilter);
void __RPC_STUB IFilterChain_StopChain_Stub(
    struct IRpcStubBuffer* This,
    struct IRpcChannelBuffer* pRpcChannelBuffer,
    PRPC_MESSAGE pRpcMessage,
    DWORD* pdwStubPhase);
HRESULT CALLBACK IFilterChain_RemoveChain_Proxy(
    IFilterChain* This,
    IBaseFilter* pStartFilter,
    IBaseFilter* pEndFilter);
void __RPC_STUB IFilterChain_RemoveChain_Stub(
    struct IRpcStubBuffer* This,
    struct IRpcChannelBuffer* pRpcChannelBuffer,
    PRPC_MESSAGE pRpcMessage,
    DWORD* pdwStubPhase);

#endif  /* __IFilterChain_INTERFACE_DEFINED__ */

#ifdef __cplusplus
}
#endif
#endif /* __WIDL_STRMIF_H */
