/*** Autogenerated by WIDL 2.19 from ../../wine/include/strmif.idl - Do not edit ***/

#ifndef __REQUIRED_RPCNDR_H_VERSION__
#define __REQUIRED_RPCNDR_H_VERSION__ 475
#endif

#include <rpc.h>
#include <rpcndr.h>

#ifndef COM_NO_WINDOWS_H
#include <windows.h>
#include <ole2.h>
#endif

#ifndef __strmif_h__
#define __strmif_h__

/* Forward declarations */

#ifndef __ICreateDevEnum_FWD_DEFINED__
#define __ICreateDevEnum_FWD_DEFINED__
typedef interface ICreateDevEnum ICreateDevEnum;
#ifdef __cplusplus
interface ICreateDevEnum;
#endif /* __cplusplus */
#endif

#ifndef __IPin_FWD_DEFINED__
#define __IPin_FWD_DEFINED__
typedef interface IPin IPin;
#ifdef __cplusplus
interface IPin;
#endif /* __cplusplus */
#endif

#ifndef __IEnumPins_FWD_DEFINED__
#define __IEnumPins_FWD_DEFINED__
typedef interface IEnumPins IEnumPins;
#ifdef __cplusplus
interface IEnumPins;
#endif /* __cplusplus */
#endif

#ifndef __IEnumMediaTypes_FWD_DEFINED__
#define __IEnumMediaTypes_FWD_DEFINED__
typedef interface IEnumMediaTypes IEnumMediaTypes;
#ifdef __cplusplus
interface IEnumMediaTypes;
#endif /* __cplusplus */
#endif

#ifndef __IFilterGraph_FWD_DEFINED__
#define __IFilterGraph_FWD_DEFINED__
typedef interface IFilterGraph IFilterGraph;
#ifdef __cplusplus
interface IFilterGraph;
#endif /* __cplusplus */
#endif

#ifndef __IEnumFilters_FWD_DEFINED__
#define __IEnumFilters_FWD_DEFINED__
typedef interface IEnumFilters IEnumFilters;
#ifdef __cplusplus
interface IEnumFilters;
#endif /* __cplusplus */
#endif

#ifndef __IMediaFilter_FWD_DEFINED__
#define __IMediaFilter_FWD_DEFINED__
typedef interface IMediaFilter IMediaFilter;
#ifdef __cplusplus
interface IMediaFilter;
#endif /* __cplusplus */
#endif

#ifndef __IBaseFilter_FWD_DEFINED__
#define __IBaseFilter_FWD_DEFINED__
typedef interface IBaseFilter IBaseFilter;
#ifdef __cplusplus
interface IBaseFilter;
#endif /* __cplusplus */
#endif

#ifndef __IReferenceClock_FWD_DEFINED__
#define __IReferenceClock_FWD_DEFINED__
typedef interface IReferenceClock IReferenceClock;
#ifdef __cplusplus
interface IReferenceClock;
#endif /* __cplusplus */
#endif

#ifndef __IMediaSample_FWD_DEFINED__
#define __IMediaSample_FWD_DEFINED__
typedef interface IMediaSample IMediaSample;
#ifdef __cplusplus
interface IMediaSample;
#endif /* __cplusplus */
#endif

#ifndef __IMediaSample2_FWD_DEFINED__
#define __IMediaSample2_FWD_DEFINED__
typedef interface IMediaSample2 IMediaSample2;
#ifdef __cplusplus
interface IMediaSample2;
#endif /* __cplusplus */
#endif

#ifndef __IMemAllocator_FWD_DEFINED__
#define __IMemAllocator_FWD_DEFINED__
typedef interface IMemAllocator IMemAllocator;
#ifdef __cplusplus
interface IMemAllocator;
#endif /* __cplusplus */
#endif

#ifndef __IMemAllocatorCallbackTemp_FWD_DEFINED__
#define __IMemAllocatorCallbackTemp_FWD_DEFINED__
typedef interface IMemAllocatorCallbackTemp IMemAllocatorCallbackTemp;
#ifdef __cplusplus
interface IMemAllocatorCallbackTemp;
#endif /* __cplusplus */
#endif

#ifndef __IMemAllocatorNotifyCallbackTemp_FWD_DEFINED__
#define __IMemAllocatorNotifyCallbackTemp_FWD_DEFINED__
typedef interface IMemAllocatorNotifyCallbackTemp IMemAllocatorNotifyCallbackTemp;
#ifdef __cplusplus
interface IMemAllocatorNotifyCallbackTemp;
#endif /* __cplusplus */
#endif

#ifndef __IMemInputPin_FWD_DEFINED__
#define __IMemInputPin_FWD_DEFINED__
typedef interface IMemInputPin IMemInputPin;
#ifdef __cplusplus
interface IMemInputPin;
#endif /* __cplusplus */
#endif

#ifndef __IAMovieSetup_FWD_DEFINED__
#define __IAMovieSetup_FWD_DEFINED__
typedef interface IAMovieSetup IAMovieSetup;
#ifdef __cplusplus
interface IAMovieSetup;
#endif /* __cplusplus */
#endif

#ifndef __IMediaSeeking_FWD_DEFINED__
#define __IMediaSeeking_FWD_DEFINED__
typedef interface IMediaSeeking IMediaSeeking;
#ifdef __cplusplus
interface IMediaSeeking;
#endif /* __cplusplus */
#endif

#ifndef __IAMStreamSelect_FWD_DEFINED__
#define __IAMStreamSelect_FWD_DEFINED__
typedef interface IAMStreamSelect IAMStreamSelect;
#ifdef __cplusplus
interface IAMStreamSelect;
#endif /* __cplusplus */
#endif

#ifndef __IEnumRegFilters_FWD_DEFINED__
#define __IEnumRegFilters_FWD_DEFINED__
typedef interface IEnumRegFilters IEnumRegFilters;
#ifdef __cplusplus
interface IEnumRegFilters;
#endif /* __cplusplus */
#endif

#ifndef __IFilterMapper_FWD_DEFINED__
#define __IFilterMapper_FWD_DEFINED__
typedef interface IFilterMapper IFilterMapper;
#ifdef __cplusplus
interface IFilterMapper;
#endif /* __cplusplus */
#endif

#ifndef __IFilterMapper2_FWD_DEFINED__
#define __IFilterMapper2_FWD_DEFINED__
typedef interface IFilterMapper2 IFilterMapper2;
#ifdef __cplusplus
interface IFilterMapper2;
#endif /* __cplusplus */
#endif

#ifndef __IFilterMapper3_FWD_DEFINED__
#define __IFilterMapper3_FWD_DEFINED__
typedef interface IFilterMapper3 IFilterMapper3;
#ifdef __cplusplus
interface IFilterMapper3;
#endif /* __cplusplus */
#endif

#ifndef __IQualityControl_FWD_DEFINED__
#define __IQualityControl_FWD_DEFINED__
typedef interface IQualityControl IQualityControl;
#ifdef __cplusplus
interface IQualityControl;
#endif /* __cplusplus */
#endif

#ifndef __IOverlayNotify_FWD_DEFINED__
#define __IOverlayNotify_FWD_DEFINED__
typedef interface IOverlayNotify IOverlayNotify;
#ifdef __cplusplus
interface IOverlayNotify;
#endif /* __cplusplus */
#endif

#ifndef __IOverlayNotify2_FWD_DEFINED__
#define __IOverlayNotify2_FWD_DEFINED__
typedef interface IOverlayNotify2 IOverlayNotify2;
#ifdef __cplusplus
interface IOverlayNotify2;
#endif /* __cplusplus */
#endif

#ifndef __IOverlay_FWD_DEFINED__
#define __IOverlay_FWD_DEFINED__
typedef interface IOverlay IOverlay;
#ifdef __cplusplus
interface IOverlay;
#endif /* __cplusplus */
#endif

#ifndef __IMediaEventSink_FWD_DEFINED__
#define __IMediaEventSink_FWD_DEFINED__
typedef interface IMediaEventSink IMediaEventSink;
#ifdef __cplusplus
interface IMediaEventSink;
#endif /* __cplusplus */
#endif

#ifndef __IFileSourceFilter_FWD_DEFINED__
#define __IFileSourceFilter_FWD_DEFINED__
typedef interface IFileSourceFilter IFileSourceFilter;
#ifdef __cplusplus
interface IFileSourceFilter;
#endif /* __cplusplus */
#endif

#ifndef __IFileSinkFilter_FWD_DEFINED__
#define __IFileSinkFilter_FWD_DEFINED__
typedef interface IFileSinkFilter IFileSinkFilter;
#ifdef __cplusplus
interface IFileSinkFilter;
#endif /* __cplusplus */
#endif

#ifndef __IFileSinkFilter2_FWD_DEFINED__
#define __IFileSinkFilter2_FWD_DEFINED__
typedef interface IFileSinkFilter2 IFileSinkFilter2;
#ifdef __cplusplus
interface IFileSinkFilter2;
#endif /* __cplusplus */
#endif

#ifndef __IGraphBuilder_FWD_DEFINED__
#define __IGraphBuilder_FWD_DEFINED__
typedef interface IGraphBuilder IGraphBuilder;
#ifdef __cplusplus
interface IGraphBuilder;
#endif /* __cplusplus */
#endif

#ifndef __ICaptureGraphBuilder_FWD_DEFINED__
#define __ICaptureGraphBuilder_FWD_DEFINED__
typedef interface ICaptureGraphBuilder ICaptureGraphBuilder;
#ifdef __cplusplus
interface ICaptureGraphBuilder;
#endif /* __cplusplus */
#endif

#ifndef __IAMCopyCaptureFileProgress_FWD_DEFINED__
#define __IAMCopyCaptureFileProgress_FWD_DEFINED__
typedef interface IAMCopyCaptureFileProgress IAMCopyCaptureFileProgress;
#ifdef __cplusplus
interface IAMCopyCaptureFileProgress;
#endif /* __cplusplus */
#endif

#ifndef __ICaptureGraphBuilder2_FWD_DEFINED__
#define __ICaptureGraphBuilder2_FWD_DEFINED__
typedef interface ICaptureGraphBuilder2 ICaptureGraphBuilder2;
#ifdef __cplusplus
interface ICaptureGraphBuilder2;
#endif /* __cplusplus */
#endif

#ifndef __IConfigAviMux_FWD_DEFINED__
#define __IConfigAviMux_FWD_DEFINED__
typedef interface IConfigAviMux IConfigAviMux;
#ifdef __cplusplus
interface IConfigAviMux;
#endif /* __cplusplus */
#endif

#ifndef __IConfigInterleaving_FWD_DEFINED__
#define __IConfigInterleaving_FWD_DEFINED__
typedef interface IConfigInterleaving IConfigInterleaving;
#ifdef __cplusplus
interface IConfigInterleaving;
#endif /* __cplusplus */
#endif

#ifndef __IAMClockSlave_FWD_DEFINED__
#define __IAMClockSlave_FWD_DEFINED__
typedef interface IAMClockSlave IAMClockSlave;
#ifdef __cplusplus
interface IAMClockSlave;
#endif /* __cplusplus */
#endif

#ifndef __IAMCertifiedOutputProtection_FWD_DEFINED__
#define __IAMCertifiedOutputProtection_FWD_DEFINED__
typedef interface IAMCertifiedOutputProtection IAMCertifiedOutputProtection;
#ifdef __cplusplus
interface IAMCertifiedOutputProtection;
#endif /* __cplusplus */
#endif

#ifndef __IFilterGraph2_FWD_DEFINED__
#define __IFilterGraph2_FWD_DEFINED__
typedef interface IFilterGraph2 IFilterGraph2;
#ifdef __cplusplus
interface IFilterGraph2;
#endif /* __cplusplus */
#endif

#ifndef __IStreamBuilder_FWD_DEFINED__
#define __IStreamBuilder_FWD_DEFINED__
typedef interface IStreamBuilder IStreamBuilder;
#ifdef __cplusplus
interface IStreamBuilder;
#endif /* __cplusplus */
#endif

#ifndef __IAMStreamConfig_FWD_DEFINED__
#define __IAMStreamConfig_FWD_DEFINED__
typedef interface IAMStreamConfig IAMStreamConfig;
#ifdef __cplusplus
interface IAMStreamConfig;
#endif /* __cplusplus */
#endif

#ifndef __IAMVideoProcAmp_FWD_DEFINED__
#define __IAMVideoProcAmp_FWD_DEFINED__
typedef interface IAMVideoProcAmp IAMVideoProcAmp;
#ifdef __cplusplus
interface IAMVideoProcAmp;
#endif /* __cplusplus */
#endif

#ifndef __IAsyncReader_FWD_DEFINED__
#define __IAsyncReader_FWD_DEFINED__
typedef interface IAsyncReader IAsyncReader;
#ifdef __cplusplus
interface IAsyncReader;
#endif /* __cplusplus */
#endif

#ifndef __IGraphVersion_FWD_DEFINED__
#define __IGraphVersion_FWD_DEFINED__
typedef interface IGraphVersion IGraphVersion;
#ifdef __cplusplus
interface IGraphVersion;
#endif /* __cplusplus */
#endif

#ifndef __IResourceConsumer_FWD_DEFINED__
#define __IResourceConsumer_FWD_DEFINED__
typedef interface IResourceConsumer IResourceConsumer;
#ifdef __cplusplus
interface IResourceConsumer;
#endif /* __cplusplus */
#endif

#ifndef __IResourceManager_FWD_DEFINED__
#define __IResourceManager_FWD_DEFINED__
typedef interface IResourceManager IResourceManager;
#ifdef __cplusplus
interface IResourceManager;
#endif /* __cplusplus */
#endif

#ifndef __IAMStreamControl_FWD_DEFINED__
#define __IAMStreamControl_FWD_DEFINED__
typedef interface IAMStreamControl IAMStreamControl;
#ifdef __cplusplus
interface IAMStreamControl;
#endif /* __cplusplus */
#endif

#ifndef __IKsPropertySet_FWD_DEFINED__
#define __IKsPropertySet_FWD_DEFINED__
typedef interface IKsPropertySet IKsPropertySet;
#ifdef __cplusplus
interface IKsPropertySet;
#endif /* __cplusplus */
#endif

#ifndef __IMediaPropertyBag_FWD_DEFINED__
#define __IMediaPropertyBag_FWD_DEFINED__
typedef interface IMediaPropertyBag IMediaPropertyBag;
#ifdef __cplusplus
interface IMediaPropertyBag;
#endif /* __cplusplus */
#endif

#ifndef __IPersistMediaPropertyBag_FWD_DEFINED__
#define __IPersistMediaPropertyBag_FWD_DEFINED__
typedef interface IPersistMediaPropertyBag IPersistMediaPropertyBag;
#ifdef __cplusplus
interface IPersistMediaPropertyBag;
#endif /* __cplusplus */
#endif

#ifndef __ISeekingPassThru_FWD_DEFINED__
#define __ISeekingPassThru_FWD_DEFINED__
typedef interface ISeekingPassThru ISeekingPassThru;
#ifdef __cplusplus
interface ISeekingPassThru;
#endif /* __cplusplus */
#endif

#ifndef __IAMFilterMiscFlags_FWD_DEFINED__
#define __IAMFilterMiscFlags_FWD_DEFINED__
typedef interface IAMFilterMiscFlags IAMFilterMiscFlags;
#ifdef __cplusplus
interface IAMFilterMiscFlags;
#endif /* __cplusplus */
#endif

#ifndef __IAMGraphBuilderCallback_FWD_DEFINED__
#define __IAMGraphBuilderCallback_FWD_DEFINED__
typedef interface IAMGraphBuilderCallback IAMGraphBuilderCallback;
#ifdef __cplusplus
interface IAMGraphBuilderCallback;
#endif /* __cplusplus */
#endif

#ifndef __IAMVfwCaptureDialogs_FWD_DEFINED__
#define __IAMVfwCaptureDialogs_FWD_DEFINED__
typedef interface IAMVfwCaptureDialogs IAMVfwCaptureDialogs;
#ifdef __cplusplus
interface IAMVfwCaptureDialogs;
#endif /* __cplusplus */
#endif

#ifndef __IPinConnection_FWD_DEFINED__
#define __IPinConnection_FWD_DEFINED__
typedef interface IPinConnection IPinConnection;
#ifdef __cplusplus
interface IPinConnection;
#endif /* __cplusplus */
#endif

#ifndef __IPinFlowControl_FWD_DEFINED__
#define __IPinFlowControl_FWD_DEFINED__
typedef interface IPinFlowControl IPinFlowControl;
#ifdef __cplusplus
interface IPinFlowControl;
#endif /* __cplusplus */
#endif

#ifndef __IGraphConfig_FWD_DEFINED__
#define __IGraphConfig_FWD_DEFINED__
typedef interface IGraphConfig IGraphConfig;
#ifdef __cplusplus
interface IGraphConfig;
#endif /* __cplusplus */
#endif

#ifndef __IGraphConfigCallback_FWD_DEFINED__
#define __IGraphConfigCallback_FWD_DEFINED__
typedef interface IGraphConfigCallback IGraphConfigCallback;
#ifdef __cplusplus
interface IGraphConfigCallback;
#endif /* __cplusplus */
#endif

#ifndef __IFilterChain_FWD_DEFINED__
#define __IFilterChain_FWD_DEFINED__
typedef interface IFilterChain IFilterChain;
#ifdef __cplusplus
interface IFilterChain;
#endif /* __cplusplus */
#endif

#ifndef __IVMRImagePresenter_FWD_DEFINED__
#define __IVMRImagePresenter_FWD_DEFINED__
typedef interface IVMRImagePresenter IVMRImagePresenter;
#ifdef __cplusplus
interface IVMRImagePresenter;
#endif /* __cplusplus */
#endif

#ifndef __IVMRSurfaceAllocator_FWD_DEFINED__
#define __IVMRSurfaceAllocator_FWD_DEFINED__
typedef interface IVMRSurfaceAllocator IVMRSurfaceAllocator;
#ifdef __cplusplus
interface IVMRSurfaceAllocator;
#endif /* __cplusplus */
#endif

#ifndef __IVMRSurfaceAllocatorNotify_FWD_DEFINED__
#define __IVMRSurfaceAllocatorNotify_FWD_DEFINED__
typedef interface IVMRSurfaceAllocatorNotify IVMRSurfaceAllocatorNotify;
#ifdef __cplusplus
interface IVMRSurfaceAllocatorNotify;
#endif /* __cplusplus */
#endif

#ifndef __IVMRWindowlessControl_FWD_DEFINED__
#define __IVMRWindowlessControl_FWD_DEFINED__
typedef interface IVMRWindowlessControl IVMRWindowlessControl;
#ifdef __cplusplus
interface IVMRWindowlessControl;
#endif /* __cplusplus */
#endif

#ifndef __IVMRMixerControl_FWD_DEFINED__
#define __IVMRMixerControl_FWD_DEFINED__
typedef interface IVMRMixerControl IVMRMixerControl;
#ifdef __cplusplus
interface IVMRMixerControl;
#endif /* __cplusplus */
#endif

#ifndef __IVMRMonitorConfig_FWD_DEFINED__
#define __IVMRMonitorConfig_FWD_DEFINED__
typedef interface IVMRMonitorConfig IVMRMonitorConfig;
#ifdef __cplusplus
interface IVMRMonitorConfig;
#endif /* __cplusplus */
#endif

#ifndef __IVMRFilterConfig_FWD_DEFINED__
#define __IVMRFilterConfig_FWD_DEFINED__
typedef interface IVMRFilterConfig IVMRFilterConfig;
#ifdef __cplusplus
interface IVMRFilterConfig;
#endif /* __cplusplus */
#endif

#ifndef __IVMRAspectRatioControl_FWD_DEFINED__
#define __IVMRAspectRatioControl_FWD_DEFINED__
typedef interface IVMRAspectRatioControl IVMRAspectRatioControl;
#ifdef __cplusplus
interface IVMRAspectRatioControl;
#endif /* __cplusplus */
#endif

#ifndef __IVMRDeinterlaceControl_FWD_DEFINED__
#define __IVMRDeinterlaceControl_FWD_DEFINED__
typedef interface IVMRDeinterlaceControl IVMRDeinterlaceControl;
#ifdef __cplusplus
interface IVMRDeinterlaceControl;
#endif /* __cplusplus */
#endif

#ifndef __IVMRMixerBitmap_FWD_DEFINED__
#define __IVMRMixerBitmap_FWD_DEFINED__
typedef interface IVMRMixerBitmap IVMRMixerBitmap;
#ifdef __cplusplus
interface IVMRMixerBitmap;
#endif /* __cplusplus */
#endif

#ifndef __IVMRImageCompositor_FWD_DEFINED__
#define __IVMRImageCompositor_FWD_DEFINED__
typedef interface IVMRImageCompositor IVMRImageCompositor;
#ifdef __cplusplus
interface IVMRImageCompositor;
#endif /* __cplusplus */
#endif

#ifndef __IVMRVideoStreamControl_FWD_DEFINED__
#define __IVMRVideoStreamControl_FWD_DEFINED__
typedef interface IVMRVideoStreamControl IVMRVideoStreamControl;
#ifdef __cplusplus
interface IVMRVideoStreamControl;
#endif /* __cplusplus */
#endif

#ifndef __IVMRImagePresenterConfig_FWD_DEFINED__
#define __IVMRImagePresenterConfig_FWD_DEFINED__
typedef interface IVMRImagePresenterConfig IVMRImagePresenterConfig;
#ifdef __cplusplus
interface IVMRImagePresenterConfig;
#endif /* __cplusplus */
#endif

#ifndef __IVMRImagePresenterExclModeConfig_FWD_DEFINED__
#define __IVMRImagePresenterExclModeConfig_FWD_DEFINED__
typedef interface IVMRImagePresenterExclModeConfig IVMRImagePresenterExclModeConfig;
#ifdef __cplusplus
interface IVMRImagePresenterExclModeConfig;
#endif /* __cplusplus */
#endif

#ifndef __IVPManager_FWD_DEFINED__
#define __IVPManager_FWD_DEFINED__
typedef interface IVPManager IVPManager;
#ifdef __cplusplus
interface IVPManager;
#endif /* __cplusplus */
#endif

/* Headers for imported files */

#include <unknwn.h>
#include <objidl.h>
#include <oaidl.h>

#ifdef __cplusplus
extern "C" {
#endif

#define CDEF_CLASS_DEFAULT 0x0001
#define CDEF_BYPASS_CLASS_MANAGER 0x0002
#define CDEF_CLASS_LEGACY  0x0004
#define CDEF_MERIT_ABOVE_DO_NOT_USE 0x0008
/*****************************************************************************
 * 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)
MIDL_INTERFACE("29840822-5b84-11d0-bd3b-00a0c911ce86")
ICreateDevEnum : public IUnknown
{
    virtual HRESULT STDMETHODCALLTYPE CreateClassEnumerator(
        REFCLSID clsidDeviceClass,
        IEnumMoniker **ppEnumMoniker,
        DWORD dwFlags) = 0;

};
#ifdef __CRT_UUID_DECL
__CRT_UUID_DECL(ICreateDevEnum, 0x29840822, 0x5b84, 0x11d0, 0xbd,0x3b, 0x00,0xa0,0xc9,0x11,0xce,0x86)
#endif
#else
typedef struct ICreateDevEnumVtbl {
    BEGIN_INTERFACE

    /*** 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);

    END_INTERFACE
} ICreateDevEnumVtbl;

interface ICreateDevEnum {
    CONST_VTBL ICreateDevEnumVtbl* lpVtbl;
};

#ifdef COBJMACROS
#ifndef WIDL_C_INLINE_WRAPPERS
/*** IUnknown methods ***/
#define ICreateDevEnum_QueryInterface(This,riid,ppvObject) (This)->lpVtbl->QueryInterface(This,riid,ppvObject)
#define ICreateDevEnum_AddRef(This) (This)->lpVtbl->AddRef(This)
#define ICreateDevEnum_Release(This) (This)->lpVtbl->Release(This)
/*** ICreateDevEnum methods ***/
#define ICreateDevEnum_CreateClassEnumerator(This,clsidDeviceClass,ppEnumMoniker,dwFlags) (This)->lpVtbl->CreateClassEnumerator(This,clsidDeviceClass,ppEnumMoniker,dwFlags)
#else
/*** IUnknown methods ***/
static FORCEINLINE HRESULT ICreateDevEnum_QueryInterface(ICreateDevEnum* This,REFIID riid,void **ppvObject) {
    return This->lpVtbl->QueryInterface(This,riid,ppvObject);
}
static FORCEINLINE ULONG ICreateDevEnum_AddRef(ICreateDevEnum* This) {
    return This->lpVtbl->AddRef(This);
}
static FORCEINLINE ULONG ICreateDevEnum_Release(ICreateDevEnum* This) {
    return This->lpVtbl->Release(This);
}
/*** ICreateDevEnum methods ***/
static FORCEINLINE HRESULT ICreateDevEnum_CreateClassEnumerator(ICreateDevEnum* This,REFCLSID clsidDeviceClass,IEnumMoniker **ppEnumMoniker,DWORD dwFlags) {
    return This->lpVtbl->CreateClassEnumerator(This,clsidDeviceClass,ppEnumMoniker,dwFlags);
}
#endif
#endif

#endif


#endif  /* __ICreateDevEnum_INTERFACE_DEFINED__ */

#define CHARS_IN_GUID 39
#ifdef WINE_NO_UNICODE_MACROS
#undef GetTimeFormat
#endif
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 = 0,
    PINDIR_OUTPUT = 1
} PIN_DIRECTION;
#define MAX_PIN_NAME    128
#define MAX_FILTER_NAME 128
#ifndef REFERENCE_TIME_DEFINED
#define REFERENCE_TIME_DEFINED
typedef LONGLONG REFERENCE_TIME;
#endif
#ifndef REFTIME_DEFINED
#define REFTIME_DEFINED
typedef DOUBLE REFTIME;
#endif
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 interface IAMovieSetup IAMovieSetup;
#ifdef __cplusplus
interface IAMovieSetup;
#endif /* __cplusplus */
#endif

#ifndef __IEnumFilters_FWD_DEFINED__
#define __IEnumFilters_FWD_DEFINED__
typedef interface IEnumFilters IEnumFilters;
#ifdef __cplusplus
interface IEnumFilters;
#endif /* __cplusplus */
#endif

#ifndef __IEnumMediaTypes_FWD_DEFINED__
#define __IEnumMediaTypes_FWD_DEFINED__
typedef interface IEnumMediaTypes IEnumMediaTypes;
#ifdef __cplusplus
interface IEnumMediaTypes;
#endif /* __cplusplus */
#endif

#ifndef __IEnumPins_FWD_DEFINED__
#define __IEnumPins_FWD_DEFINED__
typedef interface IEnumPins IEnumPins;
#ifdef __cplusplus
interface IEnumPins;
#endif /* __cplusplus */
#endif

#ifndef __IBaseFilter_FWD_DEFINED__
#define __IBaseFilter_FWD_DEFINED__
typedef interface IBaseFilter IBaseFilter;
#ifdef __cplusplus
interface IBaseFilter;
#endif /* __cplusplus */
#endif

#ifndef __IFilterGraph_FWD_DEFINED__
#define __IFilterGraph_FWD_DEFINED__
typedef interface IFilterGraph IFilterGraph;
#ifdef __cplusplus
interface IFilterGraph;
#endif /* __cplusplus */
#endif

#ifndef __IMediaFilter_FWD_DEFINED__
#define __IMediaFilter_FWD_DEFINED__
typedef interface IMediaFilter IMediaFilter;
#ifdef __cplusplus
interface IMediaFilter;
#endif /* __cplusplus */
#endif

#ifndef __IMediaSample_FWD_DEFINED__
#define __IMediaSample_FWD_DEFINED__
typedef interface IMediaSample IMediaSample;
#ifdef __cplusplus
interface IMediaSample;
#endif /* __cplusplus */
#endif

#ifndef __IMemAllocator_FWD_DEFINED__
#define __IMemAllocator_FWD_DEFINED__
typedef interface IMemAllocator IMemAllocator;
#ifdef __cplusplus
interface IMemAllocator;
#endif /* __cplusplus */
#endif

#ifndef __IMemAllocatorCallbackTemp_FWD_DEFINED__
#define __IMemAllocatorCallbackTemp_FWD_DEFINED__
typedef interface IMemAllocatorCallbackTemp IMemAllocatorCallbackTemp;
#ifdef __cplusplus
interface IMemAllocatorCallbackTemp;
#endif /* __cplusplus */
#endif

#ifndef __IMemAllocatorNotifyCallbackTemp_FWD_DEFINED__
#define __IMemAllocatorNotifyCallbackTemp_FWD_DEFINED__
typedef interface IMemAllocatorNotifyCallbackTemp IMemAllocatorNotifyCallbackTemp;
#ifdef __cplusplus
interface IMemAllocatorNotifyCallbackTemp;
#endif /* __cplusplus */
#endif

#ifndef __IMemInputPin_FWD_DEFINED__
#define __IMemInputPin_FWD_DEFINED__
typedef interface IMemInputPin IMemInputPin;
#ifdef __cplusplus
interface IMemInputPin;
#endif /* __cplusplus */
#endif

#ifndef __IPin_FWD_DEFINED__
#define __IPin_FWD_DEFINED__
typedef interface IPin IPin;
#ifdef __cplusplus
interface IPin;
#endif /* __cplusplus */
#endif

#ifndef __IReferenceClock_FWD_DEFINED__
#define __IReferenceClock_FWD_DEFINED__
typedef interface IReferenceClock IReferenceClock;
#ifdef __cplusplus
interface IReferenceClock;
#endif /* __cplusplus */
#endif

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

typedef struct _PinInfo {
    IBaseFilter *pFilter;
    PIN_DIRECTION dir;
    WCHAR achName[128];
} PIN_INFO;
DEFINE_GUID(IID_IPin, 0x56a86891, 0x0ad4, 0x11ce, 0xb0,0x3a, 0x00,0x20,0xaf,0x0b,0xa7,0x70);
#if defined(__cplusplus) && !defined(CINTERFACE)
MIDL_INTERFACE("56a86891-0ad4-11ce-b03a-0020af0ba770")
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;

};
#ifdef __CRT_UUID_DECL
__CRT_UUID_DECL(IPin, 0x56a86891, 0x0ad4, 0x11ce, 0xb0,0x3a, 0x00,0x20,0xaf,0x0b,0xa7,0x70)
#endif
#else
typedef struct IPinVtbl {
    BEGIN_INTERFACE

    /*** 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);

    END_INTERFACE
} IPinVtbl;

interface IPin {
    CONST_VTBL IPinVtbl* lpVtbl;
};

#ifdef COBJMACROS
#ifndef WIDL_C_INLINE_WRAPPERS
/*** IUnknown methods ***/
#define IPin_QueryInterface(This,riid,ppvObject) (This)->lpVtbl->QueryInterface(This,riid,ppvObject)
#define IPin_AddRef(This) (This)->lpVtbl->AddRef(This)
#define IPin_Release(This) (This)->lpVtbl->Release(This)
/*** IPin methods ***/
#define IPin_Connect(This,pReceivePin,pmt) (This)->lpVtbl->Connect(This,pReceivePin,pmt)
#define IPin_ReceiveConnection(This,pConnector,pmt) (This)->lpVtbl->ReceiveConnection(This,pConnector,pmt)
#define IPin_Disconnect(This) (This)->lpVtbl->Disconnect(This)
#define IPin_ConnectedTo(This,pPin) (This)->lpVtbl->ConnectedTo(This,pPin)
#define IPin_ConnectionMediaType(This,pmt) (This)->lpVtbl->ConnectionMediaType(This,pmt)
#define IPin_QueryPinInfo(This,pInfo) (This)->lpVtbl->QueryPinInfo(This,pInfo)
#define IPin_QueryDirection(This,pPinDir) (This)->lpVtbl->QueryDirection(This,pPinDir)
#define IPin_QueryId(This,Id) (This)->lpVtbl->QueryId(This,Id)
#define IPin_QueryAccept(This,pmt) (This)->lpVtbl->QueryAccept(This,pmt)
#define IPin_EnumMediaTypes(This,ppEnum) (This)->lpVtbl->EnumMediaTypes(This,ppEnum)
#define IPin_QueryInternalConnections(This,apPin,nPin) (This)->lpVtbl->QueryInternalConnections(This,apPin,nPin)
#define IPin_EndOfStream(This) (This)->lpVtbl->EndOfStream(This)
#define IPin_BeginFlush(This) (This)->lpVtbl->BeginFlush(This)
#define IPin_EndFlush(This) (This)->lpVtbl->EndFlush(This)
#define IPin_NewSegment(This,tStart,tStop,dRate) (This)->lpVtbl->NewSegment(This,tStart,tStop,dRate)
#else
/*** IUnknown methods ***/
static FORCEINLINE HRESULT IPin_QueryInterface(IPin* This,REFIID riid,void **ppvObject) {
    return This->lpVtbl->QueryInterface(This,riid,ppvObject);
}
static FORCEINLINE ULONG IPin_AddRef(IPin* This) {
    return This->lpVtbl->AddRef(This);
}
static FORCEINLINE ULONG IPin_Release(IPin* This) {
    return This->lpVtbl->Release(This);
}
/*** IPin methods ***/
static FORCEINLINE HRESULT IPin_Connect(IPin* This,IPin *pReceivePin,const AM_MEDIA_TYPE *pmt) {
    return This->lpVtbl->Connect(This,pReceivePin,pmt);
}
static FORCEINLINE HRESULT IPin_ReceiveConnection(IPin* This,IPin *pConnector,const AM_MEDIA_TYPE *pmt) {
    return This->lpVtbl->ReceiveConnection(This,pConnector,pmt);
}
static FORCEINLINE HRESULT IPin_Disconnect(IPin* This) {
    return This->lpVtbl->Disconnect(This);
}
static FORCEINLINE HRESULT IPin_ConnectedTo(IPin* This,IPin **pPin) {
    return This->lpVtbl->ConnectedTo(This,pPin);
}
static FORCEINLINE HRESULT IPin_ConnectionMediaType(IPin* This,AM_MEDIA_TYPE *pmt) {
    return This->lpVtbl->ConnectionMediaType(This,pmt);
}
static FORCEINLINE HRESULT IPin_QueryPinInfo(IPin* This,PIN_INFO *pInfo) {
    return This->lpVtbl->QueryPinInfo(This,pInfo);
}
static FORCEINLINE HRESULT IPin_QueryDirection(IPin* This,PIN_DIRECTION *pPinDir) {
    return This->lpVtbl->QueryDirection(This,pPinDir);
}
static FORCEINLINE HRESULT IPin_QueryId(IPin* This,LPWSTR *Id) {
    return This->lpVtbl->QueryId(This,Id);
}
static FORCEINLINE HRESULT IPin_QueryAccept(IPin* This,const AM_MEDIA_TYPE *pmt) {
    return This->lpVtbl->QueryAccept(This,pmt);
}
static FORCEINLINE HRESULT IPin_EnumMediaTypes(IPin* This,IEnumMediaTypes **ppEnum) {
    return This->lpVtbl->EnumMediaTypes(This,ppEnum);
}
static FORCEINLINE HRESULT IPin_QueryInternalConnections(IPin* This,IPin **apPin,ULONG *nPin) {
    return This->lpVtbl->QueryInternalConnections(This,apPin,nPin);
}
static FORCEINLINE HRESULT IPin_EndOfStream(IPin* This) {
    return This->lpVtbl->EndOfStream(This);
}
static FORCEINLINE HRESULT IPin_BeginFlush(IPin* This) {
    return This->lpVtbl->BeginFlush(This);
}
static FORCEINLINE HRESULT IPin_EndFlush(IPin* This) {
    return This->lpVtbl->EndFlush(This);
}
static FORCEINLINE HRESULT IPin_NewSegment(IPin* This,REFERENCE_TIME tStart,REFERENCE_TIME tStop,double dRate) {
    return This->lpVtbl->NewSegment(This,tStart,tStop,dRate);
}
#endif
#endif

#endif


#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)
MIDL_INTERFACE("56a86892-0ad4-11ce-b03a-0020af0ba770")
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;

};
#ifdef __CRT_UUID_DECL
__CRT_UUID_DECL(IEnumPins, 0x56a86892, 0x0ad4, 0x11ce, 0xb0,0x3a, 0x00,0x20,0xaf,0x0b,0xa7,0x70)
#endif
#else
typedef struct IEnumPinsVtbl {
    BEGIN_INTERFACE

    /*** 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);

    END_INTERFACE
} IEnumPinsVtbl;

interface IEnumPins {
    CONST_VTBL IEnumPinsVtbl* lpVtbl;
};

#ifdef COBJMACROS
#ifndef WIDL_C_INLINE_WRAPPERS
/*** IUnknown methods ***/
#define IEnumPins_QueryInterface(This,riid,ppvObject) (This)->lpVtbl->QueryInterface(This,riid,ppvObject)
#define IEnumPins_AddRef(This) (This)->lpVtbl->AddRef(This)
#define IEnumPins_Release(This) (This)->lpVtbl->Release(This)
/*** IEnumPins methods ***/
#define IEnumPins_Next(This,cPins,ppPins,pcFetched) (This)->lpVtbl->Next(This,cPins,ppPins,pcFetched)
#define IEnumPins_Skip(This,cPins) (This)->lpVtbl->Skip(This,cPins)
#define IEnumPins_Reset(This) (This)->lpVtbl->Reset(This)
#define IEnumPins_Clone(This,ppEnum) (This)->lpVtbl->Clone(This,ppEnum)
#else
/*** IUnknown methods ***/
static FORCEINLINE HRESULT IEnumPins_QueryInterface(IEnumPins* This,REFIID riid,void **ppvObject) {
    return This->lpVtbl->QueryInterface(This,riid,ppvObject);
}
static FORCEINLINE ULONG IEnumPins_AddRef(IEnumPins* This) {
    return This->lpVtbl->AddRef(This);
}
static FORCEINLINE ULONG IEnumPins_Release(IEnumPins* This) {
    return This->lpVtbl->Release(This);
}
/*** IEnumPins methods ***/
static FORCEINLINE HRESULT IEnumPins_Next(IEnumPins* This,ULONG cPins,IPin **ppPins,ULONG *pcFetched) {
    return This->lpVtbl->Next(This,cPins,ppPins,pcFetched);
}
static FORCEINLINE HRESULT IEnumPins_Skip(IEnumPins* This,ULONG cPins) {
    return This->lpVtbl->Skip(This,cPins);
}
static FORCEINLINE HRESULT IEnumPins_Reset(IEnumPins* This) {
    return This->lpVtbl->Reset(This);
}
static FORCEINLINE HRESULT IEnumPins_Clone(IEnumPins* This,IEnumPins **ppEnum) {
    return This->lpVtbl->Clone(This,ppEnum);
}
#endif
#endif

#endif


#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)
MIDL_INTERFACE("89c31040-846b-11ce-97d3-00aa0055595a")
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;

};
#ifdef __CRT_UUID_DECL
__CRT_UUID_DECL(IEnumMediaTypes, 0x89c31040, 0x846b, 0x11ce, 0x97,0xd3, 0x00,0xaa,0x00,0x55,0x59,0x5a)
#endif
#else
typedef struct IEnumMediaTypesVtbl {
    BEGIN_INTERFACE

    /*** 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);

    END_INTERFACE
} IEnumMediaTypesVtbl;

interface IEnumMediaTypes {
    CONST_VTBL IEnumMediaTypesVtbl* lpVtbl;
};

#ifdef COBJMACROS
#ifndef WIDL_C_INLINE_WRAPPERS
/*** IUnknown methods ***/
#define IEnumMediaTypes_QueryInterface(This,riid,ppvObject) (This)->lpVtbl->QueryInterface(This,riid,ppvObject)
#define IEnumMediaTypes_AddRef(This) (This)->lpVtbl->AddRef(This)
#define IEnumMediaTypes_Release(This) (This)->lpVtbl->Release(This)
/*** IEnumMediaTypes methods ***/
#define IEnumMediaTypes_Next(This,cMediaTypes,ppMediaTypes,pcFetched) (This)->lpVtbl->Next(This,cMediaTypes,ppMediaTypes,pcFetched)
#define IEnumMediaTypes_Skip(This,cMediaTypes) (This)->lpVtbl->Skip(This,cMediaTypes)
#define IEnumMediaTypes_Reset(This) (This)->lpVtbl->Reset(This)
#define IEnumMediaTypes_Clone(This,ppEnum) (This)->lpVtbl->Clone(This,ppEnum)
#else
/*** IUnknown methods ***/
static FORCEINLINE HRESULT IEnumMediaTypes_QueryInterface(IEnumMediaTypes* This,REFIID riid,void **ppvObject) {
    return This->lpVtbl->QueryInterface(This,riid,ppvObject);
}
static FORCEINLINE ULONG IEnumMediaTypes_AddRef(IEnumMediaTypes* This) {
    return This->lpVtbl->AddRef(This);
}
static FORCEINLINE ULONG IEnumMediaTypes_Release(IEnumMediaTypes* This) {
    return This->lpVtbl->Release(This);
}
/*** IEnumMediaTypes methods ***/
static FORCEINLINE HRESULT IEnumMediaTypes_Next(IEnumMediaTypes* This,ULONG cMediaTypes,AM_MEDIA_TYPE **ppMediaTypes,ULONG *pcFetched) {
    return This->lpVtbl->Next(This,cMediaTypes,ppMediaTypes,pcFetched);
}
static FORCEINLINE HRESULT IEnumMediaTypes_Skip(IEnumMediaTypes* This,ULONG cMediaTypes) {
    return This->lpVtbl->Skip(This,cMediaTypes);
}
static FORCEINLINE HRESULT IEnumMediaTypes_Reset(IEnumMediaTypes* This) {
    return This->lpVtbl->Reset(This);
}
static FORCEINLINE HRESULT IEnumMediaTypes_Clone(IEnumMediaTypes* This,IEnumMediaTypes **ppEnum) {
    return This->lpVtbl->Clone(This,ppEnum);
}
#endif
#endif

#endif


#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)
MIDL_INTERFACE("56a8689f-0ad4-11ce-b03a-0020af0ba770")
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;

};
#ifdef __CRT_UUID_DECL
__CRT_UUID_DECL(IFilterGraph, 0x56a8689f, 0x0ad4, 0x11ce, 0xb0,0x3a, 0x00,0x20,0xaf,0x0b,0xa7,0x70)
#endif
#else
typedef struct IFilterGraphVtbl {
    BEGIN_INTERFACE

    /*** 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);

    END_INTERFACE
} IFilterGraphVtbl;

interface IFilterGraph {
    CONST_VTBL IFilterGraphVtbl* lpVtbl;
};

#ifdef COBJMACROS
#ifndef WIDL_C_INLINE_WRAPPERS
/*** IUnknown methods ***/
#define IFilterGraph_QueryInterface(This,riid,ppvObject) (This)->lpVtbl->QueryInterface(This,riid,ppvObject)
#define IFilterGraph_AddRef(This) (This)->lpVtbl->AddRef(This)
#define IFilterGraph_Release(This) (This)->lpVtbl->Release(This)
/*** IFilterGraph methods ***/
#define IFilterGraph_AddFilter(This,pFilter,pName) (This)->lpVtbl->AddFilter(This,pFilter,pName)
#define IFilterGraph_RemoveFilter(This,pFilter) (This)->lpVtbl->RemoveFilter(This,pFilter)
#define IFilterGraph_EnumFilters(This,ppEnum) (This)->lpVtbl->EnumFilters(This,ppEnum)
#define IFilterGraph_FindFilterByName(This,pName,ppFilter) (This)->lpVtbl->FindFilterByName(This,pName,ppFilter)
#define IFilterGraph_ConnectDirect(This,ppinOut,ppinIn,pmt) (This)->lpVtbl->ConnectDirect(This,ppinOut,ppinIn,pmt)
#define IFilterGraph_Reconnect(This,ppin) (This)->lpVtbl->Reconnect(This,ppin)
#define IFilterGraph_Disconnect(This,ppin) (This)->lpVtbl->Disconnect(This,ppin)
#define IFilterGraph_SetDefaultSyncSource(This) (This)->lpVtbl->SetDefaultSyncSource(This)
#else
/*** IUnknown methods ***/
static FORCEINLINE HRESULT IFilterGraph_QueryInterface(IFilterGraph* This,REFIID riid,void **ppvObject) {
    return This->lpVtbl->QueryInterface(This,riid,ppvObject);
}
static FORCEINLINE ULONG IFilterGraph_AddRef(IFilterGraph* This) {
    return This->lpVtbl->AddRef(This);
}
static FORCEINLINE ULONG IFilterGraph_Release(IFilterGraph* This) {
    return This->lpVtbl->Release(This);
}
/*** IFilterGraph methods ***/
static FORCEINLINE HRESULT IFilterGraph_AddFilter(IFilterGraph* This,IBaseFilter *pFilter,LPCWSTR pName) {
    return This->lpVtbl->AddFilter(This,pFilter,pName);
}
static FORCEINLINE HRESULT IFilterGraph_RemoveFilter(IFilterGraph* This,IBaseFilter *pFilter) {
    return This->lpVtbl->RemoveFilter(This,pFilter);
}
static FORCEINLINE HRESULT IFilterGraph_EnumFilters(IFilterGraph* This,IEnumFilters **ppEnum) {
    return This->lpVtbl->EnumFilters(This,ppEnum);
}
static FORCEINLINE HRESULT IFilterGraph_FindFilterByName(IFilterGraph* This,LPCWSTR pName,IBaseFilter **ppFilter) {
    return This->lpVtbl->FindFilterByName(This,pName,ppFilter);
}
static FORCEINLINE HRESULT IFilterGraph_ConnectDirect(IFilterGraph* This,IPin *ppinOut,IPin *ppinIn,const AM_MEDIA_TYPE *pmt) {
    return This->lpVtbl->ConnectDirect(This,ppinOut,ppinIn,pmt);
}
static FORCEINLINE HRESULT IFilterGraph_Reconnect(IFilterGraph* This,IPin *ppin) {
    return This->lpVtbl->Reconnect(This,ppin);
}
static FORCEINLINE HRESULT IFilterGraph_Disconnect(IFilterGraph* This,IPin *ppin) {
    return This->lpVtbl->Disconnect(This,ppin);
}
static FORCEINLINE HRESULT IFilterGraph_SetDefaultSyncSource(IFilterGraph* This) {
    return This->lpVtbl->SetDefaultSyncSource(This);
}
#endif
#endif

#endif


#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)
MIDL_INTERFACE("56a86893-0ad4-11ce-b03a-0020af0ba770")
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;

};
#ifdef __CRT_UUID_DECL
__CRT_UUID_DECL(IEnumFilters, 0x56a86893, 0x0ad4, 0x11ce, 0xb0,0x3a, 0x00,0x20,0xaf,0x0b,0xa7,0x70)
#endif
#else
typedef struct IEnumFiltersVtbl {
    BEGIN_INTERFACE

    /*** 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);

    END_INTERFACE
} IEnumFiltersVtbl;

interface IEnumFilters {
    CONST_VTBL IEnumFiltersVtbl* lpVtbl;
};

#ifdef COBJMACROS
#ifndef WIDL_C_INLINE_WRAPPERS
/*** IUnknown methods ***/
#define IEnumFilters_QueryInterface(This,riid,ppvObject) (This)->lpVtbl->QueryInterface(This,riid,ppvObject)
#define IEnumFilters_AddRef(This) (This)->lpVtbl->AddRef(This)
#define IEnumFilters_Release(This) (This)->lpVtbl->Release(This)
/*** IEnumFilters methods ***/
#define IEnumFilters_Next(This,cFilters,ppFilter,pcFetched) (This)->lpVtbl->Next(This,cFilters,ppFilter,pcFetched)
#define IEnumFilters_Skip(This,cFilters) (This)->lpVtbl->Skip(This,cFilters)
#define IEnumFilters_Reset(This) (This)->lpVtbl->Reset(This)
#define IEnumFilters_Clone(This,ppEnum) (This)->lpVtbl->Clone(This,ppEnum)
#else
/*** IUnknown methods ***/
static FORCEINLINE HRESULT IEnumFilters_QueryInterface(IEnumFilters* This,REFIID riid,void **ppvObject) {
    return This->lpVtbl->QueryInterface(This,riid,ppvObject);
}
static FORCEINLINE ULONG IEnumFilters_AddRef(IEnumFilters* This) {
    return This->lpVtbl->AddRef(This);
}
static FORCEINLINE ULONG IEnumFilters_Release(IEnumFilters* This) {
    return This->lpVtbl->Release(This);
}
/*** IEnumFilters methods ***/
static FORCEINLINE HRESULT IEnumFilters_Next(IEnumFilters* This,ULONG cFilters,IBaseFilter **ppFilter,ULONG *pcFetched) {
    return This->lpVtbl->Next(This,cFilters,ppFilter,pcFetched);
}
static FORCEINLINE HRESULT IEnumFilters_Skip(IEnumFilters* This,ULONG cFilters) {
    return This->lpVtbl->Skip(This,cFilters);
}
static FORCEINLINE HRESULT IEnumFilters_Reset(IEnumFilters* This) {
    return This->lpVtbl->Reset(This);
}
static FORCEINLINE HRESULT IEnumFilters_Clone(IEnumFilters* This,IEnumFilters **ppEnum) {
    return This->lpVtbl->Clone(This,ppEnum);
}
#endif
#endif

#endif


#endif  /* __IEnumFilters_INTERFACE_DEFINED__ */

typedef IEnumFilters *PENUMFILTERS;
/*****************************************************************************
 * IMediaFilter interface
 */
#ifndef __IMediaFilter_INTERFACE_DEFINED__
#define __IMediaFilter_INTERFACE_DEFINED__

typedef enum _FilterState {
    State_Stopped = 0,
    State_Paused = 1,
    State_Running = 2
} FILTER_STATE;
DEFINE_GUID(IID_IMediaFilter, 0x56a86899, 0x0ad4, 0x11ce, 0xb0,0x3a, 0x00,0x20,0xaf,0x0b,0xa7,0x70);
#if defined(__cplusplus) && !defined(CINTERFACE)
MIDL_INTERFACE("56a86899-0ad4-11ce-b03a-0020af0ba770")
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;

};
#ifdef __CRT_UUID_DECL
__CRT_UUID_DECL(IMediaFilter, 0x56a86899, 0x0ad4, 0x11ce, 0xb0,0x3a, 0x00,0x20,0xaf,0x0b,0xa7,0x70)
#endif
#else
typedef struct IMediaFilterVtbl {
    BEGIN_INTERFACE

    /*** 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);

    END_INTERFACE
} IMediaFilterVtbl;

interface IMediaFilter {
    CONST_VTBL IMediaFilterVtbl* lpVtbl;
};

#ifdef COBJMACROS
#ifndef WIDL_C_INLINE_WRAPPERS
/*** IUnknown methods ***/
#define IMediaFilter_QueryInterface(This,riid,ppvObject) (This)->lpVtbl->QueryInterface(This,riid,ppvObject)
#define IMediaFilter_AddRef(This) (This)->lpVtbl->AddRef(This)
#define IMediaFilter_Release(This) (This)->lpVtbl->Release(This)
/*** IPersist methods ***/
#define IMediaFilter_GetClassID(This,pClassID) (This)->lpVtbl->GetClassID(This,pClassID)
/*** IMediaFilter methods ***/
#define IMediaFilter_Stop(This) (This)->lpVtbl->Stop(This)
#define IMediaFilter_Pause(This) (This)->lpVtbl->Pause(This)
#define IMediaFilter_Run(This,tStart) (This)->lpVtbl->Run(This,tStart)
#define IMediaFilter_GetState(This,dwMilliSecsTimeout,State) (This)->lpVtbl->GetState(This,dwMilliSecsTimeout,State)
#define IMediaFilter_SetSyncSource(This,pClock) (This)->lpVtbl->SetSyncSource(This,pClock)
#define IMediaFilter_GetSyncSource(This,pClock) (This)->lpVtbl->GetSyncSource(This,pClock)
#else
/*** IUnknown methods ***/
static FORCEINLINE HRESULT IMediaFilter_QueryInterface(IMediaFilter* This,REFIID riid,void **ppvObject) {
    return This->lpVtbl->QueryInterface(This,riid,ppvObject);
}
static FORCEINLINE ULONG IMediaFilter_AddRef(IMediaFilter* This) {
    return This->lpVtbl->AddRef(This);
}
static FORCEINLINE ULONG IMediaFilter_Release(IMediaFilter* This) {
    return This->lpVtbl->Release(This);
}
/*** IPersist methods ***/
static FORCEINLINE HRESULT IMediaFilter_GetClassID(IMediaFilter* This,CLSID *pClassID) {
    return This->lpVtbl->GetClassID(This,pClassID);
}
/*** IMediaFilter methods ***/
static FORCEINLINE HRESULT IMediaFilter_Stop(IMediaFilter* This) {
    return This->lpVtbl->Stop(This);
}
static FORCEINLINE HRESULT IMediaFilter_Pause(IMediaFilter* This) {
    return This->lpVtbl->Pause(This);
}
static FORCEINLINE HRESULT IMediaFilter_Run(IMediaFilter* This,REFERENCE_TIME tStart) {
    return This->lpVtbl->Run(This,tStart);
}
static FORCEINLINE HRESULT IMediaFilter_GetState(IMediaFilter* This,DWORD dwMilliSecsTimeout,FILTER_STATE *State) {
    return This->lpVtbl->GetState(This,dwMilliSecsTimeout,State);
}
static FORCEINLINE HRESULT IMediaFilter_SetSyncSource(IMediaFilter* This,IReferenceClock *pClock) {
    return This->lpVtbl->SetSyncSource(This,pClock);
}
static FORCEINLINE HRESULT IMediaFilter_GetSyncSource(IMediaFilter* This,IReferenceClock **pClock) {
    return This->lpVtbl->GetSyncSource(This,pClock);
}
#endif
#endif

#endif


#endif  /* __IMediaFilter_INTERFACE_DEFINED__ */

typedef IMediaFilter *PMEDIAFILTER;
/*****************************************************************************
 * IBaseFilter interface
 */
#ifndef __IBaseFilter_INTERFACE_DEFINED__
#define __IBaseFilter_INTERFACE_DEFINED__

typedef struct _FilterInfo {
    WCHAR achName[128];
    IFilterGraph *pGraph;
} FILTER_INFO;
DEFINE_GUID(IID_IBaseFilter, 0x56a86895, 0x0ad4, 0x11ce, 0xb0,0x3a, 0x00,0x20,0xaf,0x0b,0xa7,0x70);
#if defined(__cplusplus) && !defined(CINTERFACE)
MIDL_INTERFACE("56a86895-0ad4-11ce-b03a-0020af0ba770")
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;

};
#ifdef __CRT_UUID_DECL
__CRT_UUID_DECL(IBaseFilter, 0x56a86895, 0x0ad4, 0x11ce, 0xb0,0x3a, 0x00,0x20,0xaf,0x0b,0xa7,0x70)
#endif
#else
typedef struct IBaseFilterVtbl {
    BEGIN_INTERFACE

    /*** 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);

    END_INTERFACE
} IBaseFilterVtbl;

interface IBaseFilter {
    CONST_VTBL IBaseFilterVtbl* lpVtbl;
};

#ifdef COBJMACROS
#ifndef WIDL_C_INLINE_WRAPPERS
/*** IUnknown methods ***/
#define IBaseFilter_QueryInterface(This,riid,ppvObject) (This)->lpVtbl->QueryInterface(This,riid,ppvObject)
#define IBaseFilter_AddRef(This) (This)->lpVtbl->AddRef(This)
#define IBaseFilter_Release(This) (This)->lpVtbl->Release(This)
/*** IPersist methods ***/
#define IBaseFilter_GetClassID(This,pClassID) (This)->lpVtbl->GetClassID(This,pClassID)
/*** IMediaFilter methods ***/
#define IBaseFilter_Stop(This) (This)->lpVtbl->Stop(This)
#define IBaseFilter_Pause(This) (This)->lpVtbl->Pause(This)
#define IBaseFilter_Run(This,tStart) (This)->lpVtbl->Run(This,tStart)
#define IBaseFilter_GetState(This,dwMilliSecsTimeout,State) (This)->lpVtbl->GetState(This,dwMilliSecsTimeout,State)
#define IBaseFilter_SetSyncSource(This,pClock) (This)->lpVtbl->SetSyncSource(This,pClock)
#define IBaseFilter_GetSyncSource(This,pClock) (This)->lpVtbl->GetSyncSource(This,pClock)
/*** IBaseFilter methods ***/
#define IBaseFilter_EnumPins(This,ppEnum) (This)->lpVtbl->EnumPins(This,ppEnum)
#define IBaseFilter_FindPin(This,Id,ppPin) (This)->lpVtbl->FindPin(This,Id,ppPin)
#define IBaseFilter_QueryFilterInfo(This,pInfo) (This)->lpVtbl->QueryFilterInfo(This,pInfo)
#define IBaseFilter_JoinFilterGraph(This,pGraph,pName) (This)->lpVtbl->JoinFilterGraph(This,pGraph,pName)
#define IBaseFilter_QueryVendorInfo(This,pVendorInfo) (This)->lpVtbl->QueryVendorInfo(This,pVendorInfo)
#else
/*** IUnknown methods ***/
static FORCEINLINE HRESULT IBaseFilter_QueryInterface(IBaseFilter* This,REFIID riid,void **ppvObject) {
    return This->lpVtbl->QueryInterface(This,riid,ppvObject);
}
static FORCEINLINE ULONG IBaseFilter_AddRef(IBaseFilter* This) {
    return This->lpVtbl->AddRef(This);
}
static FORCEINLINE ULONG IBaseFilter_Release(IBaseFilter* This) {
    return This->lpVtbl->Release(This);
}
/*** IPersist methods ***/
static FORCEINLINE HRESULT IBaseFilter_GetClassID(IBaseFilter* This,CLSID *pClassID) {
    return This->lpVtbl->GetClassID(This,pClassID);
}
/*** IMediaFilter methods ***/
static FORCEINLINE HRESULT IBaseFilter_Stop(IBaseFilter* This) {
    return This->lpVtbl->Stop(This);
}
static FORCEINLINE HRESULT IBaseFilter_Pause(IBaseFilter* This) {
    return This->lpVtbl->Pause(This);
}
static FORCEINLINE HRESULT IBaseFilter_Run(IBaseFilter* This,REFERENCE_TIME tStart) {
    return This->lpVtbl->Run(This,tStart);
}
static FORCEINLINE HRESULT IBaseFilter_GetState(IBaseFilter* This,DWORD dwMilliSecsTimeout,FILTER_STATE *State) {
    return This->lpVtbl->GetState(This,dwMilliSecsTimeout,State);
}
static FORCEINLINE HRESULT IBaseFilter_SetSyncSource(IBaseFilter* This,IReferenceClock *pClock) {
    return This->lpVtbl->SetSyncSource(This,pClock);
}
static FORCEINLINE HRESULT IBaseFilter_GetSyncSource(IBaseFilter* This,IReferenceClock **pClock) {
    return This->lpVtbl->GetSyncSource(This,pClock);
}
/*** IBaseFilter methods ***/
static FORCEINLINE HRESULT IBaseFilter_EnumPins(IBaseFilter* This,IEnumPins **ppEnum) {
    return This->lpVtbl->EnumPins(This,ppEnum);
}
static FORCEINLINE HRESULT IBaseFilter_FindPin(IBaseFilter* This,LPCWSTR Id,IPin **ppPin) {
    return This->lpVtbl->FindPin(This,Id,ppPin);
}
static FORCEINLINE HRESULT IBaseFilter_QueryFilterInfo(IBaseFilter* This,FILTER_INFO *pInfo) {
    return This->lpVtbl->QueryFilterInfo(This,pInfo);
}
static FORCEINLINE HRESULT IBaseFilter_JoinFilterGraph(IBaseFilter* This,IFilterGraph *pGraph,LPCWSTR pName) {
    return This->lpVtbl->JoinFilterGraph(This,pGraph,pName);
}
static FORCEINLINE HRESULT IBaseFilter_QueryVendorInfo(IBaseFilter* This,LPWSTR *pVendorInfo) {
    return This->lpVtbl->QueryVendorInfo(This,pVendorInfo);
}
#endif
#endif

#endif


#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)
MIDL_INTERFACE("56a86897-0ad4-11ce-b03a-0020af0ba770")
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;

};
#ifdef __CRT_UUID_DECL
__CRT_UUID_DECL(IReferenceClock, 0x56a86897, 0x0ad4, 0x11ce, 0xb0,0x3a, 0x00,0x20,0xaf,0x0b,0xa7,0x70)
#endif
#else
typedef struct IReferenceClockVtbl {
    BEGIN_INTERFACE

    /*** 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);

    END_INTERFACE
} IReferenceClockVtbl;

interface IReferenceClock {
    CONST_VTBL IReferenceClockVtbl* lpVtbl;
};

#ifdef COBJMACROS
#ifndef WIDL_C_INLINE_WRAPPERS
/*** IUnknown methods ***/
#define IReferenceClock_QueryInterface(This,riid,ppvObject) (This)->lpVtbl->QueryInterface(This,riid,ppvObject)
#define IReferenceClock_AddRef(This) (This)->lpVtbl->AddRef(This)
#define IReferenceClock_Release(This) (This)->lpVtbl->Release(This)
/*** IReferenceClock methods ***/
#define IReferenceClock_GetTime(This,pTime) (This)->lpVtbl->GetTime(This,pTime)
#define IReferenceClock_AdviseTime(This,baseTime,streamTime,hEvent,pdwAdviseCookie) (This)->lpVtbl->AdviseTime(This,baseTime,streamTime,hEvent,pdwAdviseCookie)
#define IReferenceClock_AdvisePeriodic(This,startTime,periodTime,hSemaphore,pdwAdviseCookie) (This)->lpVtbl->AdvisePeriodic(This,startTime,periodTime,hSemaphore,pdwAdviseCookie)
#define IReferenceClock_Unadvise(This,dwAdviseCookie) (This)->lpVtbl->Unadvise(This,dwAdviseCookie)
#else
/*** IUnknown methods ***/
static FORCEINLINE HRESULT IReferenceClock_QueryInterface(IReferenceClock* This,REFIID riid,void **ppvObject) {
    return This->lpVtbl->QueryInterface(This,riid,ppvObject);
}
static FORCEINLINE ULONG IReferenceClock_AddRef(IReferenceClock* This) {
    return This->lpVtbl->AddRef(This);
}
static FORCEINLINE ULONG IReferenceClock_Release(IReferenceClock* This) {
    return This->lpVtbl->Release(This);
}
/*** IReferenceClock methods ***/
static FORCEINLINE HRESULT IReferenceClock_GetTime(IReferenceClock* This,REFERENCE_TIME *pTime) {
    return This->lpVtbl->GetTime(This,pTime);
}
static FORCEINLINE HRESULT IReferenceClock_AdviseTime(IReferenceClock* This,REFERENCE_TIME baseTime,REFERENCE_TIME streamTime,HEVENT hEvent,DWORD_PTR *pdwAdviseCookie) {
    return This->lpVtbl->AdviseTime(This,baseTime,streamTime,hEvent,pdwAdviseCookie);
}
static FORCEINLINE HRESULT IReferenceClock_AdvisePeriodic(IReferenceClock* This,REFERENCE_TIME startTime,REFERENCE_TIME periodTime,HSEMAPHORE hSemaphore,DWORD_PTR *pdwAdviseCookie) {
    return This->lpVtbl->AdvisePeriodic(This,startTime,periodTime,hSemaphore,pdwAdviseCookie);
}
static FORCEINLINE HRESULT IReferenceClock_Unadvise(IReferenceClock* This,DWORD_PTR dwAdviseCookie) {
    return This->lpVtbl->Unadvise(This,dwAdviseCookie);
}
#endif
#endif

#endif


#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)
MIDL_INTERFACE("56a8689a-0ad4-11ce-b03a-0020af0ba770")
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;

};
#ifdef __CRT_UUID_DECL
__CRT_UUID_DECL(IMediaSample, 0x56a8689a, 0x0ad4, 0x11ce, 0xb0,0x3a, 0x00,0x20,0xaf,0x0b,0xa7,0x70)
#endif
#else
typedef struct IMediaSampleVtbl {
    BEGIN_INTERFACE

    /*** 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);

    END_INTERFACE
} IMediaSampleVtbl;

interface IMediaSample {
    CONST_VTBL IMediaSampleVtbl* lpVtbl;
};

#ifdef COBJMACROS
#ifndef WIDL_C_INLINE_WRAPPERS
/*** IUnknown methods ***/
#define IMediaSample_QueryInterface(This,riid,ppvObject) (This)->lpVtbl->QueryInterface(This,riid,ppvObject)
#define IMediaSample_AddRef(This) (This)->lpVtbl->AddRef(This)
#define IMediaSample_Release(This) (This)->lpVtbl->Release(This)
/*** IMediaSample methods ***/
#define IMediaSample_GetPointer(This,ppBuffer) (This)->lpVtbl->GetPointer(This,ppBuffer)
#define IMediaSample_GetSize(This) (This)->lpVtbl->GetSize(This)
#define IMediaSample_GetTime(This,pTimeStart,pTimeEnd) (This)->lpVtbl->GetTime(This,pTimeStart,pTimeEnd)
#define IMediaSample_SetTime(This,pTimeStart,pTimeEnd) (This)->lpVtbl->SetTime(This,pTimeStart,pTimeEnd)
#define IMediaSample_IsSyncPoint(This) (This)->lpVtbl->IsSyncPoint(This)
#define IMediaSample_SetSyncPoint(This,bIsSyncPoint) (This)->lpVtbl->SetSyncPoint(This,bIsSyncPoint)
#define IMediaSample_IsPreroll(This) (This)->lpVtbl->IsPreroll(This)
#define IMediaSample_SetPreroll(This,bIsPreroll) (This)->lpVtbl->SetPreroll(This,bIsPreroll)
#define IMediaSample_GetActualDataLength(This) (This)->lpVtbl->GetActualDataLength(This)
#define IMediaSample_SetActualDataLength(This,length) (This)->lpVtbl->SetActualDataLength(This,length)
#define IMediaSample_GetMediaType(This,ppMediaType) (This)->lpVtbl->GetMediaType(This,ppMediaType)
#define IMediaSample_SetMediaType(This,pMediaType) (This)->lpVtbl->SetMediaType(This,pMediaType)
#define IMediaSample_IsDiscontinuity(This) (This)->lpVtbl->IsDiscontinuity(This)
#define IMediaSample_SetDiscontinuity(This,bDiscontinuity) (This)->lpVtbl->SetDiscontinuity(This,bDiscontinuity)
#define IMediaSample_GetMediaTime(This,pTimeStart,pTimeEnd) (This)->lpVtbl->GetMediaTime(This,pTimeStart,pTimeEnd)
#define IMediaSample_SetMediaTime(This,pTimeStart,pTimeEnd) (This)->lpVtbl->SetMediaTime(This,pTimeStart,pTimeEnd)
#else
/*** IUnknown methods ***/
static FORCEINLINE HRESULT IMediaSample_QueryInterface(IMediaSample* This,REFIID riid,void **ppvObject) {
    return This->lpVtbl->QueryInterface(This,riid,ppvObject);
}
static FORCEINLINE ULONG IMediaSample_AddRef(IMediaSample* This) {
    return This->lpVtbl->AddRef(This);
}
static FORCEINLINE ULONG IMediaSample_Release(IMediaSample* This) {
    return This->lpVtbl->Release(This);
}
/*** IMediaSample methods ***/
static FORCEINLINE HRESULT IMediaSample_GetPointer(IMediaSample* This,BYTE **ppBuffer) {
    return This->lpVtbl->GetPointer(This,ppBuffer);
}
static FORCEINLINE LONG IMediaSample_GetSize(IMediaSample* This) {
    return This->lpVtbl->GetSize(This);
}
static FORCEINLINE HRESULT IMediaSample_GetTime(IMediaSample* This,REFERENCE_TIME *pTimeStart,REFERENCE_TIME *pTimeEnd) {
    return This->lpVtbl->GetTime(This,pTimeStart,pTimeEnd);
}
static FORCEINLINE HRESULT IMediaSample_SetTime(IMediaSample* This,REFERENCE_TIME *pTimeStart,REFERENCE_TIME *pTimeEnd) {
    return This->lpVtbl->SetTime(This,pTimeStart,pTimeEnd);
}
static FORCEINLINE HRESULT IMediaSample_IsSyncPoint(IMediaSample* This) {
    return This->lpVtbl->IsSyncPoint(This);
}
static FORCEINLINE HRESULT IMediaSample_SetSyncPoint(IMediaSample* This,BOOL bIsSyncPoint) {
    return This->lpVtbl->SetSyncPoint(This,bIsSyncPoint);
}
static FORCEINLINE HRESULT IMediaSample_IsPreroll(IMediaSample* This) {
    return This->lpVtbl->IsPreroll(This);
}
static FORCEINLINE HRESULT IMediaSample_SetPreroll(IMediaSample* This,BOOL bIsPreroll) {
    return This->lpVtbl->SetPreroll(This,bIsPreroll);
}
static FORCEINLINE LONG IMediaSample_GetActualDataLength(IMediaSample* This) {
    return This->lpVtbl->GetActualDataLength(This);
}
static FORCEINLINE HRESULT IMediaSample_SetActualDataLength(IMediaSample* This,LONG length) {
    return This->lpVtbl->SetActualDataLength(This,length);
}
static FORCEINLINE HRESULT IMediaSample_GetMediaType(IMediaSample* This,AM_MEDIA_TYPE **ppMediaType) {
    return This->lpVtbl->GetMediaType(This,ppMediaType);
}
static FORCEINLINE HRESULT IMediaSample_SetMediaType(IMediaSample* This,AM_MEDIA_TYPE *pMediaType) {
    return This->lpVtbl->SetMediaType(This,pMediaType);
}
static FORCEINLINE HRESULT IMediaSample_IsDiscontinuity(IMediaSample* This) {
    return This->lpVtbl->IsDiscontinuity(This);
}
static FORCEINLINE HRESULT IMediaSample_SetDiscontinuity(IMediaSample* This,BOOL bDiscontinuity) {
    return This->lpVtbl->SetDiscontinuity(This,bDiscontinuity);
}
static FORCEINLINE HRESULT IMediaSample_GetMediaTime(IMediaSample* This,LONGLONG *pTimeStart,LONGLONG *pTimeEnd) {
    return This->lpVtbl->GetMediaTime(This,pTimeStart,pTimeEnd);
}
static FORCEINLINE HRESULT IMediaSample_SetMediaTime(IMediaSample* This,LONGLONG *pTimeStart,LONGLONG *pTimeEnd) {
    return This->lpVtbl->SetMediaTime(This,pTimeStart,pTimeEnd);
}
#endif
#endif

#endif


#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;
/*****************************************************************************
 * 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)
MIDL_INTERFACE("36b73884-c2c8-11cf-8b46-00805f6cef60")
IMediaSample2 : public IMediaSample
{
    virtual HRESULT STDMETHODCALLTYPE GetProperties(
        DWORD cbProperties,
        BYTE *pbProperties) = 0;

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

};
#ifdef __CRT_UUID_DECL
__CRT_UUID_DECL(IMediaSample2, 0x36b73884, 0xc2c8, 0x11cf, 0x8b,0x46, 0x00,0x80,0x5f,0x6c,0xef,0x60)
#endif
#else
typedef struct IMediaSample2Vtbl {
    BEGIN_INTERFACE

    /*** 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);

    END_INTERFACE
} IMediaSample2Vtbl;

interface IMediaSample2 {
    CONST_VTBL IMediaSample2Vtbl* lpVtbl;
};

#ifdef COBJMACROS
#ifndef WIDL_C_INLINE_WRAPPERS
/*** IUnknown methods ***/
#define IMediaSample2_QueryInterface(This,riid,ppvObject) (This)->lpVtbl->QueryInterface(This,riid,ppvObject)
#define IMediaSample2_AddRef(This) (This)->lpVtbl->AddRef(This)
#define IMediaSample2_Release(This) (This)->lpVtbl->Release(This)
/*** IMediaSample methods ***/
#define IMediaSample2_GetPointer(This,ppBuffer) (This)->lpVtbl->GetPointer(This,ppBuffer)
#define IMediaSample2_GetSize(This) (This)->lpVtbl->GetSize(This)
#define IMediaSample2_GetTime(This,pTimeStart,pTimeEnd) (This)->lpVtbl->GetTime(This,pTimeStart,pTimeEnd)
#define IMediaSample2_SetTime(This,pTimeStart,pTimeEnd) (This)->lpVtbl->SetTime(This,pTimeStart,pTimeEnd)
#define IMediaSample2_IsSyncPoint(This) (This)->lpVtbl->IsSyncPoint(This)
#define IMediaSample2_SetSyncPoint(This,bIsSyncPoint) (This)->lpVtbl->SetSyncPoint(This,bIsSyncPoint)
#define IMediaSample2_IsPreroll(This) (This)->lpVtbl->IsPreroll(This)
#define IMediaSample2_SetPreroll(This,bIsPreroll) (This)->lpVtbl->SetPreroll(This,bIsPreroll)
#define IMediaSample2_GetActualDataLength(This) (This)->lpVtbl->GetActualDataLength(This)
#define IMediaSample2_SetActualDataLength(This,length) (This)->lpVtbl->SetActualDataLength(This,length)
#define IMediaSample2_GetMediaType(This,ppMediaType) (This)->lpVtbl->GetMediaType(This,ppMediaType)
#define IMediaSample2_SetMediaType(This,pMediaType) (This)->lpVtbl->SetMediaType(This,pMediaType)
#define IMediaSample2_IsDiscontinuity(This) (This)->lpVtbl->IsDiscontinuity(This)
#define IMediaSample2_SetDiscontinuity(This,bDiscontinuity) (This)->lpVtbl->SetDiscontinuity(This,bDiscontinuity)
#define IMediaSample2_GetMediaTime(This,pTimeStart,pTimeEnd) (This)->lpVtbl->GetMediaTime(This,pTimeStart,pTimeEnd)
#define IMediaSample2_SetMediaTime(This,pTimeStart,pTimeEnd) (This)->lpVtbl->SetMediaTime(This,pTimeStart,pTimeEnd)
/*** IMediaSample2 methods ***/
#define IMediaSample2_GetProperties(This,cbProperties,pbProperties) (This)->lpVtbl->GetProperties(This,cbProperties,pbProperties)
#define IMediaSample2_SetProperties(This,cbProperties,pbProperties) (This)->lpVtbl->SetProperties(This,cbProperties,pbProperties)
#else
/*** IUnknown methods ***/
static FORCEINLINE HRESULT IMediaSample2_QueryInterface(IMediaSample2* This,REFIID riid,void **ppvObject) {
    return This->lpVtbl->QueryInterface(This,riid,ppvObject);
}
static FORCEINLINE ULONG IMediaSample2_AddRef(IMediaSample2* This) {
    return This->lpVtbl->AddRef(This);
}
static FORCEINLINE ULONG IMediaSample2_Release(IMediaSample2* This) {
    return This->lpVtbl->Release(This);
}
/*** IMediaSample methods ***/
static FORCEINLINE HRESULT IMediaSample2_GetPointer(IMediaSample2* This,BYTE **ppBuffer) {
    return This->lpVtbl->GetPointer(This,ppBuffer);
}
static FORCEINLINE LONG IMediaSample2_GetSize(IMediaSample2* This) {
    return This->lpVtbl->GetSize(This);
}
static FORCEINLINE HRESULT IMediaSample2_GetTime(IMediaSample2* This,REFERENCE_TIME *pTimeStart,REFERENCE_TIME *pTimeEnd) {
    return This->lpVtbl->GetTime(This,pTimeStart,pTimeEnd);
}
static FORCEINLINE HRESULT IMediaSample2_SetTime(IMediaSample2* This,REFERENCE_TIME *pTimeStart,REFERENCE_TIME *pTimeEnd) {
    return This->lpVtbl->SetTime(This,pTimeStart,pTimeEnd);
}
static FORCEINLINE HRESULT IMediaSample2_IsSyncPoint(IMediaSample2* This) {
    return This->lpVtbl->IsSyncPoint(This);
}
static FORCEINLINE HRESULT IMediaSample2_SetSyncPoint(IMediaSample2* This,BOOL bIsSyncPoint) {
    return This->lpVtbl->SetSyncPoint(This,bIsSyncPoint);
}
static FORCEINLINE HRESULT IMediaSample2_IsPreroll(IMediaSample2* This) {
    return This->lpVtbl->IsPreroll(This);
}
static FORCEINLINE HRESULT IMediaSample2_SetPreroll(IMediaSample2* This,BOOL bIsPreroll) {
    return This->lpVtbl->SetPreroll(This,bIsPreroll);
}
static FORCEINLINE LONG IMediaSample2_GetActualDataLength(IMediaSample2* This) {
    return This->lpVtbl->GetActualDataLength(This);
}
static FORCEINLINE HRESULT IMediaSample2_SetActualDataLength(IMediaSample2* This,LONG length) {
    return This->lpVtbl->SetActualDataLength(This,length);
}
static FORCEINLINE HRESULT IMediaSample2_GetMediaType(IMediaSample2* This,AM_MEDIA_TYPE **ppMediaType) {
    return This->lpVtbl->GetMediaType(This,ppMediaType);
}
static FORCEINLINE HRESULT IMediaSample2_SetMediaType(IMediaSample2* This,AM_MEDIA_TYPE *pMediaType) {
    return This->lpVtbl->SetMediaType(This,pMediaType);
}
static FORCEINLINE HRESULT IMediaSample2_IsDiscontinuity(IMediaSample2* This) {
    return This->lpVtbl->IsDiscontinuity(This);
}
static FORCEINLINE HRESULT IMediaSample2_SetDiscontinuity(IMediaSample2* This,BOOL bDiscontinuity) {
    return This->lpVtbl->SetDiscontinuity(This,bDiscontinuity);
}
static FORCEINLINE HRESULT IMediaSample2_GetMediaTime(IMediaSample2* This,LONGLONG *pTimeStart,LONGLONG *pTimeEnd) {
    return This->lpVtbl->GetMediaTime(This,pTimeStart,pTimeEnd);
}
static FORCEINLINE HRESULT IMediaSample2_SetMediaTime(IMediaSample2* This,LONGLONG *pTimeStart,LONGLONG *pTimeEnd) {
    return This->lpVtbl->SetMediaTime(This,pTimeStart,pTimeEnd);
}
/*** IMediaSample2 methods ***/
static FORCEINLINE HRESULT IMediaSample2_GetProperties(IMediaSample2* This,DWORD cbProperties,BYTE *pbProperties) {
    return This->lpVtbl->GetProperties(This,cbProperties,pbProperties);
}
static FORCEINLINE HRESULT IMediaSample2_SetProperties(IMediaSample2* This,DWORD cbProperties,const BYTE *pbProperties) {
    return This->lpVtbl->SetProperties(This,cbProperties,pbProperties);
}
#endif
#endif

#endif


#endif  /* __IMediaSample2_INTERFACE_DEFINED__ */

typedef IMediaSample2 *PMEDIASAMPLE2;
#define AM_GBF_PREVFRAMESKIPPED 1
#define AM_GBF_NOTASYNCPOINT 2
#define AM_GBF_NOWAIT 4
#define AM_GBF_NODDSURFACELOCK 8
/*****************************************************************************
 * 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)
MIDL_INTERFACE("56a8689c-0ad4-11ce-b03a-0020af0ba770")
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;

};
#ifdef __CRT_UUID_DECL
__CRT_UUID_DECL(IMemAllocator, 0x56a8689c, 0x0ad4, 0x11ce, 0xb0,0x3a, 0x00,0x20,0xaf,0x0b,0xa7,0x70)
#endif
#else
typedef struct IMemAllocatorVtbl {
    BEGIN_INTERFACE

    /*** 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);

    END_INTERFACE
} IMemAllocatorVtbl;

interface IMemAllocator {
    CONST_VTBL IMemAllocatorVtbl* lpVtbl;
};

#ifdef COBJMACROS
#ifndef WIDL_C_INLINE_WRAPPERS
/*** IUnknown methods ***/
#define IMemAllocator_QueryInterface(This,riid,ppvObject) (This)->lpVtbl->QueryInterface(This,riid,ppvObject)
#define IMemAllocator_AddRef(This) (This)->lpVtbl->AddRef(This)
#define IMemAllocator_Release(This) (This)->lpVtbl->Release(This)
/*** IMemAllocator methods ***/
#define IMemAllocator_SetProperties(This,pRequest,pActual) (This)->lpVtbl->SetProperties(This,pRequest,pActual)
#define IMemAllocator_GetProperties(This,pProps) (This)->lpVtbl->GetProperties(This,pProps)
#define IMemAllocator_Commit(This) (This)->lpVtbl->Commit(This)
#define IMemAllocator_Decommit(This) (This)->lpVtbl->Decommit(This)
#define IMemAllocator_GetBuffer(This,ppBuffer,pStartTime,pEndTime,dwFlags) (This)->lpVtbl->GetBuffer(This,ppBuffer,pStartTime,pEndTime,dwFlags)
#define IMemAllocator_ReleaseBuffer(This,pBuffer) (This)->lpVtbl->ReleaseBuffer(This,pBuffer)
#else
/*** IUnknown methods ***/
static FORCEINLINE HRESULT IMemAllocator_QueryInterface(IMemAllocator* This,REFIID riid,void **ppvObject) {
    return This->lpVtbl->QueryInterface(This,riid,ppvObject);
}
static FORCEINLINE ULONG IMemAllocator_AddRef(IMemAllocator* This) {
    return This->lpVtbl->AddRef(This);
}
static FORCEINLINE ULONG IMemAllocator_Release(IMemAllocator* This) {
    return This->lpVtbl->Release(This);
}
/*** IMemAllocator methods ***/
static FORCEINLINE HRESULT IMemAllocator_SetProperties(IMemAllocator* This,ALLOCATOR_PROPERTIES *pRequest,ALLOCATOR_PROPERTIES *pActual) {
    return This->lpVtbl->SetProperties(This,pRequest,pActual);
}
static FORCEINLINE HRESULT IMemAllocator_GetProperties(IMemAllocator* This,ALLOCATOR_PROPERTIES *pProps) {
    return This->lpVtbl->GetProperties(This,pProps);
}
static FORCEINLINE HRESULT IMemAllocator_Commit(IMemAllocator* This) {
    return This->lpVtbl->Commit(This);
}
static FORCEINLINE HRESULT IMemAllocator_Decommit(IMemAllocator* This) {
    return This->lpVtbl->Decommit(This);
}
static FORCEINLINE HRESULT IMemAllocator_GetBuffer(IMemAllocator* This,IMediaSample **ppBuffer,REFERENCE_TIME *pStartTime,REFERENCE_TIME *pEndTime,DWORD dwFlags) {
    return This->lpVtbl->GetBuffer(This,ppBuffer,pStartTime,pEndTime,dwFlags);
}
static FORCEINLINE HRESULT IMemAllocator_ReleaseBuffer(IMemAllocator* This,IMediaSample *pBuffer) {
    return This->lpVtbl->ReleaseBuffer(This,pBuffer);
}
#endif
#endif

#endif


#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)
MIDL_INTERFACE("379a0cf0-c1de-11d2-abf5-00a0c905f375")
IMemAllocatorCallbackTemp : public IMemAllocator
{
    virtual HRESULT STDMETHODCALLTYPE SetNotify(
        IMemAllocatorNotifyCallbackTemp *pNotify) = 0;

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

};
#ifdef __CRT_UUID_DECL
__CRT_UUID_DECL(IMemAllocatorCallbackTemp, 0x379a0cf0, 0xc1de, 0x11d2, 0xab,0xf5, 0x00,0xa0,0xc9,0x05,0xf3,0x75)
#endif
#else
typedef struct IMemAllocatorCallbackTempVtbl {
    BEGIN_INTERFACE

    /*** 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);

    END_INTERFACE
} IMemAllocatorCallbackTempVtbl;

interface IMemAllocatorCallbackTemp {
    CONST_VTBL IMemAllocatorCallbackTempVtbl* lpVtbl;
};

#ifdef COBJMACROS
#ifndef WIDL_C_INLINE_WRAPPERS
/*** IUnknown methods ***/
#define IMemAllocatorCallbackTemp_QueryInterface(This,riid,ppvObject) (This)->lpVtbl->QueryInterface(This,riid,ppvObject)
#define IMemAllocatorCallbackTemp_AddRef(This) (This)->lpVtbl->AddRef(This)
#define IMemAllocatorCallbackTemp_Release(This) (This)->lpVtbl->Release(This)
/*** IMemAllocator methods ***/
#define IMemAllocatorCallbackTemp_SetProperties(This,pRequest,pActual) (This)->lpVtbl->SetProperties(This,pRequest,pActual)
#define IMemAllocatorCallbackTemp_GetProperties(This,pProps) (This)->lpVtbl->GetProperties(This,pProps)
#define IMemAllocatorCallbackTemp_Commit(This) (This)->lpVtbl->Commit(This)
#define IMemAllocatorCallbackTemp_Decommit(This) (This)->lpVtbl->Decommit(This)
#define IMemAllocatorCallbackTemp_GetBuffer(This,ppBuffer,pStartTime,pEndTime,dwFlags) (This)->lpVtbl->GetBuffer(This,ppBuffer,pStartTime,pEndTime,dwFlags)
#define IMemAllocatorCallbackTemp_ReleaseBuffer(This,pBuffer) (This)->lpVtbl->ReleaseBuffer(This,pBuffer)
/*** IMemAllocatorCallbackTemp methods ***/
#define IMemAllocatorCallbackTemp_SetNotify(This,pNotify) (This)->lpVtbl->SetNotify(This,pNotify)
#define IMemAllocatorCallbackTemp_GetFreeCount(This,plBuffersFree) (This)->lpVtbl->GetFreeCount(This,plBuffersFree)
#else
/*** IUnknown methods ***/
static FORCEINLINE HRESULT IMemAllocatorCallbackTemp_QueryInterface(IMemAllocatorCallbackTemp* This,REFIID riid,void **ppvObject) {
    return This->lpVtbl->QueryInterface(This,riid,ppvObject);
}
static FORCEINLINE ULONG IMemAllocatorCallbackTemp_AddRef(IMemAllocatorCallbackTemp* This) {
    return This->lpVtbl->AddRef(This);
}
static FORCEINLINE ULONG IMemAllocatorCallbackTemp_Release(IMemAllocatorCallbackTemp* This) {
    return This->lpVtbl->Release(This);
}
/*** IMemAllocator methods ***/
static FORCEINLINE HRESULT IMemAllocatorCallbackTemp_SetProperties(IMemAllocatorCallbackTemp* This,ALLOCATOR_PROPERTIES *pRequest,ALLOCATOR_PROPERTIES *pActual) {
    return This->lpVtbl->SetProperties(This,pRequest,pActual);
}
static FORCEINLINE HRESULT IMemAllocatorCallbackTemp_GetProperties(IMemAllocatorCallbackTemp* This,ALLOCATOR_PROPERTIES *pProps) {
    return This->lpVtbl->GetProperties(This,pProps);
}
static FORCEINLINE HRESULT IMemAllocatorCallbackTemp_Commit(IMemAllocatorCallbackTemp* This) {
    return This->lpVtbl->Commit(This);
}
static FORCEINLINE HRESULT IMemAllocatorCallbackTemp_Decommit(IMemAllocatorCallbackTemp* This) {
    return This->lpVtbl->Decommit(This);
}
static FORCEINLINE HRESULT IMemAllocatorCallbackTemp_GetBuffer(IMemAllocatorCallbackTemp* This,IMediaSample **ppBuffer,REFERENCE_TIME *pStartTime,REFERENCE_TIME *pEndTime,DWORD dwFlags) {
    return This->lpVtbl->GetBuffer(This,ppBuffer,pStartTime,pEndTime,dwFlags);
}
static FORCEINLINE HRESULT IMemAllocatorCallbackTemp_ReleaseBuffer(IMemAllocatorCallbackTemp* This,IMediaSample *pBuffer) {
    return This->lpVtbl->ReleaseBuffer(This,pBuffer);
}
/*** IMemAllocatorCallbackTemp methods ***/
static FORCEINLINE HRESULT IMemAllocatorCallbackTemp_SetNotify(IMemAllocatorCallbackTemp* This,IMemAllocatorNotifyCallbackTemp *pNotify) {
    return This->lpVtbl->SetNotify(This,pNotify);
}
static FORCEINLINE HRESULT IMemAllocatorCallbackTemp_GetFreeCount(IMemAllocatorCallbackTemp* This,LONG *plBuffersFree) {
    return This->lpVtbl->GetFreeCount(This,plBuffersFree);
}
#endif
#endif

#endif


#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)
MIDL_INTERFACE("92980b30-c1de-11d2-abf5-00a0c905f375")
IMemAllocatorNotifyCallbackTemp : public IUnknown
{
    virtual HRESULT STDMETHODCALLTYPE NotifyRelease(
        ) = 0;

};
#ifdef __CRT_UUID_DECL
__CRT_UUID_DECL(IMemAllocatorNotifyCallbackTemp, 0x92980b30, 0xc1de, 0x11d2, 0xab,0xf5, 0x00,0xa0,0xc9,0x05,0xf3,0x75)
#endif
#else
typedef struct IMemAllocatorNotifyCallbackTempVtbl {
    BEGIN_INTERFACE

    /*** 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);

    END_INTERFACE
} IMemAllocatorNotifyCallbackTempVtbl;

interface IMemAllocatorNotifyCallbackTemp {
    CONST_VTBL IMemAllocatorNotifyCallbackTempVtbl* lpVtbl;
};

#ifdef COBJMACROS
#ifndef WIDL_C_INLINE_WRAPPERS
/*** IUnknown methods ***/
#define IMemAllocatorNotifyCallbackTemp_QueryInterface(This,riid,ppvObject) (This)->lpVtbl->QueryInterface(This,riid,ppvObject)
#define IMemAllocatorNotifyCallbackTemp_AddRef(This) (This)->lpVtbl->AddRef(This)
#define IMemAllocatorNotifyCallbackTemp_Release(This) (This)->lpVtbl->Release(This)
/*** IMemAllocatorNotifyCallbackTemp methods ***/
#define IMemAllocatorNotifyCallbackTemp_NotifyRelease(This) (This)->lpVtbl->NotifyRelease(This)
#else
/*** IUnknown methods ***/
static FORCEINLINE HRESULT IMemAllocatorNotifyCallbackTemp_QueryInterface(IMemAllocatorNotifyCallbackTemp* This,REFIID riid,void **ppvObject) {
    return This->lpVtbl->QueryInterface(This,riid,ppvObject);
}
static FORCEINLINE ULONG IMemAllocatorNotifyCallbackTemp_AddRef(IMemAllocatorNotifyCallbackTemp* This) {
    return This->lpVtbl->AddRef(This);
}
static FORCEINLINE ULONG IMemAllocatorNotifyCallbackTemp_Release(IMemAllocatorNotifyCallbackTemp* This) {
    return This->lpVtbl->Release(This);
}
/*** IMemAllocatorNotifyCallbackTemp methods ***/
static FORCEINLINE HRESULT IMemAllocatorNotifyCallbackTemp_NotifyRelease(IMemAllocatorNotifyCallbackTemp* This) {
    return This->lpVtbl->NotifyRelease(This);
}
#endif
#endif

#endif


#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)
MIDL_INTERFACE("56a8689d-0ad4-11ce-b03a-0020af0ba770")
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;

};
#ifdef __CRT_UUID_DECL
__CRT_UUID_DECL(IMemInputPin, 0x56a8689d, 0x0ad4, 0x11ce, 0xb0,0x3a, 0x00,0x20,0xaf,0x0b,0xa7,0x70)
#endif
#else
typedef struct IMemInputPinVtbl {
    BEGIN_INTERFACE

    /*** 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);

    END_INTERFACE
} IMemInputPinVtbl;

interface IMemInputPin {
    CONST_VTBL IMemInputPinVtbl* lpVtbl;
};

#ifdef COBJMACROS
#ifndef WIDL_C_INLINE_WRAPPERS
/*** IUnknown methods ***/
#define IMemInputPin_QueryInterface(This,riid,ppvObject) (This)->lpVtbl->QueryInterface(This,riid,ppvObject)
#define IMemInputPin_AddRef(This) (This)->lpVtbl->AddRef(This)
#define IMemInputPin_Release(This) (This)->lpVtbl->Release(This)
/*** IMemInputPin methods ***/
#define IMemInputPin_GetAllocator(This,ppAllocator) (This)->lpVtbl->GetAllocator(This,ppAllocator)
#define IMemInputPin_NotifyAllocator(This,pAllocator,bReadOnly) (This)->lpVtbl->NotifyAllocator(This,pAllocator,bReadOnly)
#define IMemInputPin_GetAllocatorRequirements(This,pProps) (This)->lpVtbl->GetAllocatorRequirements(This,pProps)
#define IMemInputPin_Receive(This,pSample) (This)->lpVtbl->Receive(This,pSample)
#define IMemInputPin_ReceiveMultiple(This,pSamples,nSamples,nSamplesProcessed) (This)->lpVtbl->ReceiveMultiple(This,pSamples,nSamples,nSamplesProcessed)
#define IMemInputPin_ReceiveCanBlock(This) (This)->lpVtbl->ReceiveCanBlock(This)
#else
/*** IUnknown methods ***/
static FORCEINLINE HRESULT IMemInputPin_QueryInterface(IMemInputPin* This,REFIID riid,void **ppvObject) {
    return This->lpVtbl->QueryInterface(This,riid,ppvObject);
}
static FORCEINLINE ULONG IMemInputPin_AddRef(IMemInputPin* This) {
    return This->lpVtbl->AddRef(This);
}
static FORCEINLINE ULONG IMemInputPin_Release(IMemInputPin* This) {
    return This->lpVtbl->Release(This);
}
/*** IMemInputPin methods ***/
static FORCEINLINE HRESULT IMemInputPin_GetAllocator(IMemInputPin* This,IMemAllocator **ppAllocator) {
    return This->lpVtbl->GetAllocator(This,ppAllocator);
}
static FORCEINLINE HRESULT IMemInputPin_NotifyAllocator(IMemInputPin* This,IMemAllocator *pAllocator,BOOL bReadOnly) {
    return This->lpVtbl->NotifyAllocator(This,pAllocator,bReadOnly);
}
static FORCEINLINE HRESULT IMemInputPin_GetAllocatorRequirements(IMemInputPin* This,ALLOCATOR_PROPERTIES *pProps) {
    return This->lpVtbl->GetAllocatorRequirements(This,pProps);
}
static FORCEINLINE HRESULT IMemInputPin_Receive(IMemInputPin* This,IMediaSample *pSample) {
    return This->lpVtbl->Receive(This,pSample);
}
static FORCEINLINE HRESULT IMemInputPin_ReceiveMultiple(IMemInputPin* This,IMediaSample **pSamples,LONG nSamples,LONG *nSamplesProcessed) {
    return This->lpVtbl->ReceiveMultiple(This,pSamples,nSamples,nSamplesProcessed);
}
static FORCEINLINE HRESULT IMemInputPin_ReceiveCanBlock(IMemInputPin* This) {
    return This->lpVtbl->ReceiveCanBlock(This);
}
#endif
#endif

#endif


#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)
MIDL_INTERFACE("a3d8cec0-7e5a-11cf-bbc5-00805f6cef20")
IAMovieSetup : public IUnknown
{
    virtual HRESULT STDMETHODCALLTYPE Register(
        ) = 0;

    virtual HRESULT STDMETHODCALLTYPE Unregister(
        ) = 0;

};
#ifdef __CRT_UUID_DECL
__CRT_UUID_DECL(IAMovieSetup, 0xa3d8cec0, 0x7e5a, 0x11cf, 0xbb,0xc5, 0x00,0x80,0x5f,0x6c,0xef,0x20)
#endif
#else
typedef struct IAMovieSetupVtbl {
    BEGIN_INTERFACE

    /*** 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);

    END_INTERFACE
} IAMovieSetupVtbl;

interface IAMovieSetup {
    CONST_VTBL IAMovieSetupVtbl* lpVtbl;
};

#ifdef COBJMACROS
#ifndef WIDL_C_INLINE_WRAPPERS
/*** IUnknown methods ***/
#define IAMovieSetup_QueryInterface(This,riid,ppvObject) (This)->lpVtbl->QueryInterface(This,riid,ppvObject)
#define IAMovieSetup_AddRef(This) (This)->lpVtbl->AddRef(This)
#define IAMovieSetup_Release(This) (This)->lpVtbl->Release(This)
/*** IAMovieSetup methods ***/
#define IAMovieSetup_Register(This) (This)->lpVtbl->Register(This)
#define IAMovieSetup_Unregister(This) (This)->lpVtbl->Unregister(This)
#else
/*** IUnknown methods ***/
static FORCEINLINE HRESULT IAMovieSetup_QueryInterface(IAMovieSetup* This,REFIID riid,void **ppvObject) {
    return This->lpVtbl->QueryInterface(This,riid,ppvObject);
}
static FORCEINLINE ULONG IAMovieSetup_AddRef(IAMovieSetup* This) {
    return This->lpVtbl->AddRef(This);
}
static FORCEINLINE ULONG IAMovieSetup_Release(IAMovieSetup* This) {
    return This->lpVtbl->Release(This);
}
/*** IAMovieSetup methods ***/
static FORCEINLINE HRESULT IAMovieSetup_Register(IAMovieSetup* This) {
    return This->lpVtbl->Register(This);
}
static FORCEINLINE HRESULT IAMovieSetup_Unregister(IAMovieSetup* This) {
    return This->lpVtbl->Unregister(This);
}
#endif
#endif

#endif


#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;
/*****************************************************************************
 * 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)
MIDL_INTERFACE("36b73880-c2c8-11cf-8b46-00805f6cef60")
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;

};
#ifdef __CRT_UUID_DECL
__CRT_UUID_DECL(IMediaSeeking, 0x36b73880, 0xc2c8, 0x11cf, 0x8b,0x46, 0x00,0x80,0x5f,0x6c,0xef,0x60)
#endif
#else
typedef struct IMediaSeekingVtbl {
    BEGIN_INTERFACE

    /*** 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);

    END_INTERFACE
} IMediaSeekingVtbl;

interface IMediaSeeking {
    CONST_VTBL IMediaSeekingVtbl* lpVtbl;
};

#ifdef COBJMACROS
#ifndef WIDL_C_INLINE_WRAPPERS
/*** IUnknown methods ***/
#define IMediaSeeking_QueryInterface(This,riid,ppvObject) (This)->lpVtbl->QueryInterface(This,riid,ppvObject)
#define IMediaSeeking_AddRef(This) (This)->lpVtbl->AddRef(This)
#define IMediaSeeking_Release(This) (This)->lpVtbl->Release(This)
/*** IMediaSeeking methods ***/
#define IMediaSeeking_GetCapabilities(This,pCapabilities) (This)->lpVtbl->GetCapabilities(This,pCapabilities)
#define IMediaSeeking_CheckCapabilities(This,pCapabilities) (This)->lpVtbl->CheckCapabilities(This,pCapabilities)
#define IMediaSeeking_IsFormatSupported(This,pFormat) (This)->lpVtbl->IsFormatSupported(This,pFormat)
#define IMediaSeeking_QueryPreferredFormat(This,pFormat) (This)->lpVtbl->QueryPreferredFormat(This,pFormat)
#define IMediaSeeking_GetTimeFormat(This,pFormat) (This)->lpVtbl->GetTimeFormat(This,pFormat)
#define IMediaSeeking_IsUsingTimeFormat(This,pFormat) (This)->lpVtbl->IsUsingTimeFormat(This,pFormat)
#define IMediaSeeking_SetTimeFormat(This,pFormat) (This)->lpVtbl->SetTimeFormat(This,pFormat)
#define IMediaSeeking_GetDuration(This,pDuration) (This)->lpVtbl->GetDuration(This,pDuration)
#define IMediaSeeking_GetStopPosition(This,pStop) (This)->lpVtbl->GetStopPosition(This,pStop)
#define IMediaSeeking_GetCurrentPosition(This,pCurrent) (This)->lpVtbl->GetCurrentPosition(This,pCurrent)
#define IMediaSeeking_ConvertTimeFormat(This,pTarget,pTargetFormat,Source,pSourceFormat) (This)->lpVtbl->ConvertTimeFormat(This,pTarget,pTargetFormat,Source,pSourceFormat)
#define IMediaSeeking_SetPositions(This,pCurrent,dwCurrentFlags,pStop,dwStopFlags) (This)->lpVtbl->SetPositions(This,pCurrent,dwCurrentFlags,pStop,dwStopFlags)
#define IMediaSeeking_GetPositions(This,pCurrent,pStop) (This)->lpVtbl->GetPositions(This,pCurrent,pStop)
#define IMediaSeeking_GetAvailable(This,pEarliest,pLatest) (This)->lpVtbl->GetAvailable(This,pEarliest,pLatest)
#define IMediaSeeking_SetRate(This,dRate) (This)->lpVtbl->SetRate(This,dRate)
#define IMediaSeeking_GetRate(This,pdRate) (This)->lpVtbl->GetRate(This,pdRate)
#define IMediaSeeking_GetPreroll(This,pllPreroll) (This)->lpVtbl->GetPreroll(This,pllPreroll)
#else
/*** IUnknown methods ***/
static FORCEINLINE HRESULT IMediaSeeking_QueryInterface(IMediaSeeking* This,REFIID riid,void **ppvObject) {
    return This->lpVtbl->QueryInterface(This,riid,ppvObject);
}
static FORCEINLINE ULONG IMediaSeeking_AddRef(IMediaSeeking* This) {
    return This->lpVtbl->AddRef(This);
}
static FORCEINLINE ULONG IMediaSeeking_Release(IMediaSeeking* This) {
    return This->lpVtbl->Release(This);
}
/*** IMediaSeeking methods ***/
static FORCEINLINE HRESULT IMediaSeeking_GetCapabilities(IMediaSeeking* This,DWORD *pCapabilities) {
    return This->lpVtbl->GetCapabilities(This,pCapabilities);
}
static FORCEINLINE HRESULT IMediaSeeking_CheckCapabilities(IMediaSeeking* This,DWORD *pCapabilities) {
    return This->lpVtbl->CheckCapabilities(This,pCapabilities);
}
static FORCEINLINE HRESULT IMediaSeeking_IsFormatSupported(IMediaSeeking* This,const GUID *pFormat) {
    return This->lpVtbl->IsFormatSupported(This,pFormat);
}
static FORCEINLINE HRESULT IMediaSeeking_QueryPreferredFormat(IMediaSeeking* This,GUID *pFormat) {
    return This->lpVtbl->QueryPreferredFormat(This,pFormat);
}
static FORCEINLINE HRESULT IMediaSeeking_GetTimeFormat(IMediaSeeking* This,GUID *pFormat) {
    return This->lpVtbl->GetTimeFormat(This,pFormat);
}
static FORCEINLINE HRESULT IMediaSeeking_IsUsingTimeFormat(IMediaSeeking* This,const GUID *pFormat) {
    return This->lpVtbl->IsUsingTimeFormat(This,pFormat);
}
static FORCEINLINE HRESULT IMediaSeeking_SetTimeFormat(IMediaSeeking* This,const GUID *pFormat) {
    return This->lpVtbl->SetTimeFormat(This,pFormat);
}
static FORCEINLINE HRESULT IMediaSeeking_GetDuration(IMediaSeeking* This,LONGLONG *pDuration) {
    return This->lpVtbl->GetDuration(This,pDuration);
}
static FORCEINLINE HRESULT IMediaSeeking_GetStopPosition(IMediaSeeking* This,LONGLONG *pStop) {
    return This->lpVtbl->GetStopPosition(This,pStop);
}
static FORCEINLINE HRESULT IMediaSeeking_GetCurrentPosition(IMediaSeeking* This,LONGLONG *pCurrent) {
    return This->lpVtbl->GetCurrentPosition(This,pCurrent);
}
static FORCEINLINE HRESULT IMediaSeeking_ConvertTimeFormat(IMediaSeeking* This,LONGLONG *pTarget,const GUID *pTargetFormat,LONGLONG Source,const GUID *pSourceFormat) {
    return This->lpVtbl->ConvertTimeFormat(This,pTarget,pTargetFormat,Source,pSourceFormat);
}
static FORCEINLINE HRESULT IMediaSeeking_SetPositions(IMediaSeeking* This,LONGLONG *pCurrent,DWORD dwCurrentFlags,LONGLONG *pStop,DWORD dwStopFlags) {
    return This->lpVtbl->SetPositions(This,pCurrent,dwCurrentFlags,pStop,dwStopFlags);
}
static FORCEINLINE HRESULT IMediaSeeking_GetPositions(IMediaSeeking* This,LONGLONG *pCurrent,LONGLONG *pStop) {
    return This->lpVtbl->GetPositions(This,pCurrent,pStop);
}
static FORCEINLINE HRESULT IMediaSeeking_GetAvailable(IMediaSeeking* This,LONGLONG *pEarliest,LONGLONG *pLatest) {
    return This->lpVtbl->GetAvailable(This,pEarliest,pLatest);
}
static FORCEINLINE HRESULT IMediaSeeking_SetRate(IMediaSeeking* This,double dRate) {
    return This->lpVtbl->SetRate(This,dRate);
}
static FORCEINLINE HRESULT IMediaSeeking_GetRate(IMediaSeeking* This,double *pdRate) {
    return This->lpVtbl->GetRate(This,pdRate);
}
static FORCEINLINE HRESULT IMediaSeeking_GetPreroll(IMediaSeeking* This,LONGLONG *pllPreroll) {
    return This->lpVtbl->GetPreroll(This,pllPreroll);
}
#endif
#endif

#endif


#endif  /* __IMediaSeeking_INTERFACE_DEFINED__ */

typedef IMediaSeeking *PMEDIASEEKING;
enum tagAM_MEDIAEVENT_FLAGS {
    AM_MEDIAEVENT_NONOTIFY = 0x1
};
enum _AMSTREAMSELECTINFOFLAGS {
    AMSTREAMSELECTINFO_ENABLED = 0x1,
    AMSTREAMSELECTINFO_EXCLUSIVE = 0x2
};
enum _AMSTREAMSELECTENABLEFLAGS {
    AMSTREAMSELECTENABLE_ENABLE = 0x1,
    AMSTREAMSELECTENABLE_ENABLEALL = 0x2
};
/*****************************************************************************
 * IAMStreamSelect interface
 */
#ifndef __IAMStreamSelect_INTERFACE_DEFINED__
#define __IAMStreamSelect_INTERFACE_DEFINED__

DEFINE_GUID(IID_IAMStreamSelect, 0xc1960960, 0x17f5, 0x11d1, 0xab,0xe1, 0x00,0xa0,0xc9,0x05,0xf3,0x75);
#if defined(__cplusplus) && !defined(CINTERFACE)
MIDL_INTERFACE("c1960960-17f5-11d1-abe1-00a0c905f375")
IAMStreamSelect : public IUnknown
{
    virtual HRESULT STDMETHODCALLTYPE Count(
        DWORD *streams) = 0;

    virtual HRESULT STDMETHODCALLTYPE Info(
        LONG index,
        AM_MEDIA_TYPE **media_type,
        DWORD *flags,
        LCID *lcid,
        DWORD *group,
        WCHAR **name,
        IUnknown **object,
        IUnknown **unknown) = 0;

    virtual HRESULT STDMETHODCALLTYPE Enable(
        LONG index,
        DWORD flags) = 0;

};
#ifdef __CRT_UUID_DECL
__CRT_UUID_DECL(IAMStreamSelect, 0xc1960960, 0x17f5, 0x11d1, 0xab,0xe1, 0x00,0xa0,0xc9,0x05,0xf3,0x75)
#endif
#else
typedef struct IAMStreamSelectVtbl {
    BEGIN_INTERFACE

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

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

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

    /*** IAMStreamSelect methods ***/
    HRESULT (STDMETHODCALLTYPE *Count)(
        IAMStreamSelect *This,
        DWORD *streams);

    HRESULT (STDMETHODCALLTYPE *Info)(
        IAMStreamSelect *This,
        LONG index,
        AM_MEDIA_TYPE **media_type,
        DWORD *flags,
        LCID *lcid,
        DWORD *group,
        WCHAR **name,
        IUnknown **object,
        IUnknown **unknown);

    HRESULT (STDMETHODCALLTYPE *Enable)(
        IAMStreamSelect *This,
        LONG index,
        DWORD flags);

    END_INTERFACE
} IAMStreamSelectVtbl;

interface IAMStreamSelect {
    CONST_VTBL IAMStreamSelectVtbl* lpVtbl;
};

#ifdef COBJMACROS
#ifndef WIDL_C_INLINE_WRAPPERS
/*** IUnknown methods ***/
#define IAMStreamSelect_QueryInterface(This,riid,ppvObject) (This)->lpVtbl->QueryInterface(This,riid,ppvObject)
#define IAMStreamSelect_AddRef(This) (This)->lpVtbl->AddRef(This)
#define IAMStreamSelect_Release(This) (This)->lpVtbl->Release(This)
/*** IAMStreamSelect methods ***/
#define IAMStreamSelect_Count(This,streams) (This)->lpVtbl->Count(This,streams)
#define IAMStreamSelect_Info(This,index,media_type,flags,lcid,group,name,object,unknown) (This)->lpVtbl->Info(This,index,media_type,flags,lcid,group,name,object,unknown)
#define IAMStreamSelect_Enable(This,index,flags) (This)->lpVtbl->Enable(This,index,flags)
#else
/*** IUnknown methods ***/
static FORCEINLINE HRESULT IAMStreamSelect_QueryInterface(IAMStreamSelect* This,REFIID riid,void **ppvObject) {
    return This->lpVtbl->QueryInterface(This,riid,ppvObject);
}
static FORCEINLINE ULONG IAMStreamSelect_AddRef(IAMStreamSelect* This) {
    return This->lpVtbl->AddRef(This);
}
static FORCEINLINE ULONG IAMStreamSelect_Release(IAMStreamSelect* This) {
    return This->lpVtbl->Release(This);
}
/*** IAMStreamSelect methods ***/
static FORCEINLINE HRESULT IAMStreamSelect_Count(IAMStreamSelect* This,DWORD *streams) {
    return This->lpVtbl->Count(This,streams);
}
static FORCEINLINE HRESULT IAMStreamSelect_Info(IAMStreamSelect* This,LONG index,AM_MEDIA_TYPE **media_type,DWORD *flags,LCID *lcid,DWORD *group,WCHAR **name,IUnknown **object,IUnknown **unknown) {
    return This->lpVtbl->Info(This,index,media_type,flags,lcid,group,name,object,unknown);
}
static FORCEINLINE HRESULT IAMStreamSelect_Enable(IAMStreamSelect* This,LONG index,DWORD flags) {
    return This->lpVtbl->Enable(This,index,flags);
}
#endif
#endif

#endif


#endif  /* __IAMStreamSelect_INTERFACE_DEFINED__ */

typedef IAMStreamSelect *PAMSTREAMSELECT;
#ifndef __IAMAnalogVideoDecoder_FWD_DEFINED__
#define __IAMAnalogVideoDecoder_FWD_DEFINED__
typedef interface IAMAnalogVideoDecoder IAMAnalogVideoDecoder;
#ifdef __cplusplus
interface IAMAnalogVideoDecoder;
#endif /* __cplusplus */
#endif

#ifndef __IAMAnalogVideoEncoder_FWD_DEFINED__
#define __IAMAnalogVideoEncoder_FWD_DEFINED__
typedef interface IAMAnalogVideoEncoder IAMAnalogVideoEncoder;
#ifdef __cplusplus
interface IAMAnalogVideoEncoder;
#endif /* __cplusplus */
#endif

#ifndef __IAMAudioInputMixer_FWD_DEFINED__
#define __IAMAudioInputMixer_FWD_DEFINED__
typedef interface IAMAudioInputMixer IAMAudioInputMixer;
#ifdef __cplusplus
interface IAMAudioInputMixer;
#endif /* __cplusplus */
#endif

#ifndef __IAMAudioRendererStats_FWD_DEFINED__
#define __IAMAudioRendererStats_FWD_DEFINED__
typedef interface IAMAudioRendererStats IAMAudioRendererStats;
#ifdef __cplusplus
interface IAMAudioRendererStats;
#endif /* __cplusplus */
#endif

#ifndef __IAMBufferNegotiation_FWD_DEFINED__
#define __IAMBufferNegotiation_FWD_DEFINED__
typedef interface IAMBufferNegotiation IAMBufferNegotiation;
#ifdef __cplusplus
interface IAMBufferNegotiation;
#endif /* __cplusplus */
#endif

#ifndef __IAMCameraControl_FWD_DEFINED__
#define __IAMCameraControl_FWD_DEFINED__
typedef interface IAMCameraControl IAMCameraControl;
#ifdef __cplusplus
interface IAMCameraControl;
#endif /* __cplusplus */
#endif

#ifndef __IAMCertifiedOutputProtection_FWD_DEFINED__
#define __IAMCertifiedOutputProtection_FWD_DEFINED__
typedef interface IAMCertifiedOutputProtection IAMCertifiedOutputProtection;
#ifdef __cplusplus
interface IAMCertifiedOutputProtection;
#endif /* __cplusplus */
#endif

#ifndef __IAMClockSlave_FWD_DEFINED__
#define __IAMClockSlave_FWD_DEFINED__
typedef interface IAMClockSlave IAMClockSlave;
#ifdef __cplusplus
interface IAMClockSlave;
#endif /* __cplusplus */
#endif

#ifndef __IAMCopyCaptureFileProgress_FWD_DEFINED__
#define __IAMCopyCaptureFileProgress_FWD_DEFINED__
typedef interface IAMCopyCaptureFileProgress IAMCopyCaptureFileProgress;
#ifdef __cplusplus
interface IAMCopyCaptureFileProgress;
#endif /* __cplusplus */
#endif

#ifndef __IAMCrossbar_FWD_DEFINED__
#define __IAMCrossbar_FWD_DEFINED__
typedef interface IAMCrossbar IAMCrossbar;
#ifdef __cplusplus
interface IAMCrossbar;
#endif /* __cplusplus */
#endif

#ifndef __IAMDevMemoryAllocator_FWD_DEFINED__
#define __IAMDevMemoryAllocator_FWD_DEFINED__
typedef interface IAMDevMemoryAllocator IAMDevMemoryAllocator;
#ifdef __cplusplus
interface IAMDevMemoryAllocator;
#endif /* __cplusplus */
#endif

#ifndef __IAMDevMemoryControl_FWD_DEFINED__
#define __IAMDevMemoryControl_FWD_DEFINED__
typedef interface IAMDevMemoryControl IAMDevMemoryControl;
#ifdef __cplusplus
interface IAMDevMemoryControl;
#endif /* __cplusplus */
#endif

#ifndef __IAMDroppedFrames_FWD_DEFINED__
#define __IAMDroppedFrames_FWD_DEFINED__
typedef interface IAMDroppedFrames IAMDroppedFrames;
#ifdef __cplusplus
interface IAMDroppedFrames;
#endif /* __cplusplus */
#endif

#ifndef __IAMExtDevice_FWD_DEFINED__
#define __IAMExtDevice_FWD_DEFINED__
typedef interface IAMExtDevice IAMExtDevice;
#ifdef __cplusplus
interface IAMExtDevice;
#endif /* __cplusplus */
#endif

#ifndef __IAMExtTransport_FWD_DEFINED__
#define __IAMExtTransport_FWD_DEFINED__
typedef interface IAMExtTransport IAMExtTransport;
#ifdef __cplusplus
interface IAMExtTransport;
#endif /* __cplusplus */
#endif

#ifndef __IAMGraphStreams_FWD_DEFINED__
#define __IAMGraphStreams_FWD_DEFINED__
typedef interface IAMGraphStreams IAMGraphStreams;
#ifdef __cplusplus
interface IAMGraphStreams;
#endif /* __cplusplus */
#endif

#ifndef __IAMLatency_FWD_DEFINED__
#define __IAMLatency_FWD_DEFINED__
typedef interface IAMLatency IAMLatency;
#ifdef __cplusplus
interface IAMLatency;
#endif /* __cplusplus */
#endif

#ifndef __IAMOpenProgress_FWD_DEFINED__
#define __IAMOpenProgress_FWD_DEFINED__
typedef interface IAMOpenProgress IAMOpenProgress;
#ifdef __cplusplus
interface IAMOpenProgress;
#endif /* __cplusplus */
#endif

#ifndef __IAMOverlayFX_FWD_DEFINED__
#define __IAMOverlayFX_FWD_DEFINED__
typedef interface IAMOverlayFX IAMOverlayFX;
#ifdef __cplusplus
interface IAMOverlayFX;
#endif /* __cplusplus */
#endif

#ifndef __IAMPhysicalPinInfo_FWD_DEFINED__
#define __IAMPhysicalPinInfo_FWD_DEFINED__
typedef interface IAMPhysicalPinInfo IAMPhysicalPinInfo;
#ifdef __cplusplus
interface IAMPhysicalPinInfo;
#endif /* __cplusplus */
#endif

#ifndef __IAMPushSource_FWD_DEFINED__
#define __IAMPushSource_FWD_DEFINED__
typedef interface IAMPushSource IAMPushSource;
#ifdef __cplusplus
interface IAMPushSource;
#endif /* __cplusplus */
#endif

#ifndef __IAMStreamConfig_FWD_DEFINED__
#define __IAMStreamConfig_FWD_DEFINED__
typedef interface IAMStreamConfig IAMStreamConfig;
#ifdef __cplusplus
interface IAMStreamConfig;
#endif /* __cplusplus */
#endif

#ifndef __IAMTimecodeDisplay_FWD_DEFINED__
#define __IAMTimecodeDisplay_FWD_DEFINED__
typedef interface IAMTimecodeDisplay IAMTimecodeDisplay;
#ifdef __cplusplus
interface IAMTimecodeDisplay;
#endif /* __cplusplus */
#endif

#ifndef __IAMTimecodeGenerator_FWD_DEFINED__
#define __IAMTimecodeGenerator_FWD_DEFINED__
typedef interface IAMTimecodeGenerator IAMTimecodeGenerator;
#ifdef __cplusplus
interface IAMTimecodeGenerator;
#endif /* __cplusplus */
#endif

#ifndef __IAMTimecodeReader_FWD_DEFINED__
#define __IAMTimecodeReader_FWD_DEFINED__
typedef interface IAMTimecodeReader IAMTimecodeReader;
#ifdef __cplusplus
interface IAMTimecodeReader;
#endif /* __cplusplus */
#endif

#ifndef __IAMTVTuner_FWD_DEFINED__
#define __IAMTVTuner_FWD_DEFINED__
typedef interface IAMTVTuner IAMTVTuner;
#ifdef __cplusplus
interface IAMTVTuner;
#endif /* __cplusplus */
#endif

#ifndef __IAMVfwCaptureDialogs_FWD_DEFINED__
#define __IAMVfwCaptureDialogs_FWD_DEFINED__
typedef interface IAMVfwCaptureDialogs IAMVfwCaptureDialogs;
#ifdef __cplusplus
interface IAMVfwCaptureDialogs;
#endif /* __cplusplus */
#endif

#ifndef __IAMVfwCompressDialogs_FWD_DEFINED__
#define __IAMVfwCompressDialogs_FWD_DEFINED__
typedef interface IAMVfwCompressDialogs IAMVfwCompressDialogs;
#ifdef __cplusplus
interface IAMVfwCompressDialogs;
#endif /* __cplusplus */
#endif

#ifndef __IAMVideoCompression_FWD_DEFINED__
#define __IAMVideoCompression_FWD_DEFINED__
typedef interface IAMVideoCompression IAMVideoCompression;
#ifdef __cplusplus
interface IAMVideoCompression;
#endif /* __cplusplus */
#endif

#ifndef __IAMVideoDecimationProperties_FWD_DEFINED__
#define __IAMVideoDecimationProperties_FWD_DEFINED__
typedef interface IAMVideoDecimationProperties IAMVideoDecimationProperties;
#ifdef __cplusplus
interface IAMVideoDecimationProperties;
#endif /* __cplusplus */
#endif

#ifndef __IAMVideoProcAmp_FWD_DEFINED__
#define __IAMVideoProcAmp_FWD_DEFINED__
typedef interface IAMVideoProcAmp IAMVideoProcAmp;
#ifdef __cplusplus
interface IAMVideoProcAmp;
#endif /* __cplusplus */
#endif

#ifndef __IAMGraphBuilderCallback_FWD_DEFINED__
#define __IAMGraphBuilderCallback_FWD_DEFINED__
typedef interface IAMGraphBuilderCallback IAMGraphBuilderCallback;
#ifdef __cplusplus
interface IAMGraphBuilderCallback;
#endif /* __cplusplus */
#endif

#ifndef __ICaptureGraphBuilder_FWD_DEFINED__
#define __ICaptureGraphBuilder_FWD_DEFINED__
typedef interface ICaptureGraphBuilder ICaptureGraphBuilder;
#ifdef __cplusplus
interface ICaptureGraphBuilder;
#endif /* __cplusplus */
#endif

#ifndef __ICaptureGraphBuilder2_FWD_DEFINED__
#define __ICaptureGraphBuilder2_FWD_DEFINED__
typedef interface ICaptureGraphBuilder2 ICaptureGraphBuilder2;
#ifdef __cplusplus
interface ICaptureGraphBuilder2;
#endif /* __cplusplus */
#endif

#ifndef __IConfigAviMux_FWD_DEFINED__
#define __IConfigAviMux_FWD_DEFINED__
typedef interface IConfigAviMux IConfigAviMux;
#ifdef __cplusplus
interface IConfigAviMux;
#endif /* __cplusplus */
#endif

#ifndef __IConfigInterleaving_FWD_DEFINED__
#define __IConfigInterleaving_FWD_DEFINED__
typedef interface IConfigInterleaving IConfigInterleaving;
#ifdef __cplusplus
interface IConfigInterleaving;
#endif /* __cplusplus */
#endif

#ifndef __IDecimateVideoImage_FWD_DEFINED__
#define __IDecimateVideoImage_FWD_DEFINED__
typedef interface IDecimateVideoImage IDecimateVideoImage;
#ifdef __cplusplus
interface IDecimateVideoImage;
#endif /* __cplusplus */
#endif

#ifndef __IDrawVideoImage_FWD_DEFINED__
#define __IDrawVideoImage_FWD_DEFINED__
typedef interface IDrawVideoImage IDrawVideoImage;
#ifdef __cplusplus
interface IDrawVideoImage;
#endif /* __cplusplus */
#endif

#ifndef __IEnumRegFilters_FWD_DEFINED__
#define __IEnumRegFilters_FWD_DEFINED__
typedef interface IEnumRegFilters IEnumRegFilters;
#ifdef __cplusplus
interface IEnumRegFilters;
#endif /* __cplusplus */
#endif

#ifndef __IEnumStreamIdMap_FWD_DEFINED__
#define __IEnumStreamIdMap_FWD_DEFINED__
typedef interface IEnumStreamIdMap IEnumStreamIdMap;
#ifdef __cplusplus
interface IEnumStreamIdMap;
#endif /* __cplusplus */
#endif

#ifndef __IFileSourceFilter_FWD_DEFINED__
#define __IFileSourceFilter_FWD_DEFINED__
typedef interface IFileSourceFilter IFileSourceFilter;
#ifdef __cplusplus
interface IFileSourceFilter;
#endif /* __cplusplus */
#endif

#ifndef __IFileSinkFilter_FWD_DEFINED__
#define __IFileSinkFilter_FWD_DEFINED__
typedef interface IFileSinkFilter IFileSinkFilter;
#ifdef __cplusplus
interface IFileSinkFilter;
#endif /* __cplusplus */
#endif

#ifndef __IFileSinkFilter2_FWD_DEFINED__
#define __IFileSinkFilter2_FWD_DEFINED__
typedef interface IFileSinkFilter2 IFileSinkFilter2;
#ifdef __cplusplus
interface IFileSinkFilter2;
#endif /* __cplusplus */
#endif

#ifndef __IFilterMapper_FWD_DEFINED__
#define __IFilterMapper_FWD_DEFINED__
typedef interface IFilterMapper IFilterMapper;
#ifdef __cplusplus
interface IFilterMapper;
#endif /* __cplusplus */
#endif

#ifndef __IFilterMapper2_FWD_DEFINED__
#define __IFilterMapper2_FWD_DEFINED__
typedef interface IFilterMapper2 IFilterMapper2;
#ifdef __cplusplus
interface IFilterMapper2;
#endif /* __cplusplus */
#endif

#ifndef __IGraphBuilder_FWD_DEFINED__
#define __IGraphBuilder_FWD_DEFINED__
typedef interface IGraphBuilder IGraphBuilder;
#ifdef __cplusplus
interface IGraphBuilder;
#endif /* __cplusplus */
#endif

#ifndef __IKsPropertySet_FWD_DEFINED__
#define __IKsPropertySet_FWD_DEFINED__
typedef interface IKsPropertySet IKsPropertySet;
#ifdef __cplusplus
interface IKsPropertySet;
#endif /* __cplusplus */
#endif

#ifndef __IMediaEventSink_FWD_DEFINED__
#define __IMediaEventSink_FWD_DEFINED__
typedef interface IMediaEventSink IMediaEventSink;
#ifdef __cplusplus
interface IMediaEventSink;
#endif /* __cplusplus */
#endif

#ifndef __IMpeg2Demultiplexer_FWD_DEFINED__
#define __IMpeg2Demultiplexer_FWD_DEFINED__
typedef interface IMpeg2Demultiplexer IMpeg2Demultiplexer;
#ifdef __cplusplus
interface IMpeg2Demultiplexer;
#endif /* __cplusplus */
#endif

#ifndef __IMPEG2StreamIdMap_FWD_DEFINED__
#define __IMPEG2StreamIdMap_FWD_DEFINED__
typedef interface IMPEG2StreamIdMap IMPEG2StreamIdMap;
#ifdef __cplusplus
interface IMPEG2StreamIdMap;
#endif /* __cplusplus */
#endif

#ifndef __IOverlay_FWD_DEFINED__
#define __IOverlay_FWD_DEFINED__
typedef interface IOverlay IOverlay;
#ifdef __cplusplus
interface IOverlay;
#endif /* __cplusplus */
#endif

#ifndef __IOverlayNotify_FWD_DEFINED__
#define __IOverlayNotify_FWD_DEFINED__
typedef interface IOverlayNotify IOverlayNotify;
#ifdef __cplusplus
interface IOverlayNotify;
#endif /* __cplusplus */
#endif

#ifndef __IOverlayNotify2_FWD_DEFINED__
#define __IOverlayNotify2_FWD_DEFINED__
typedef interface IOverlayNotify2 IOverlayNotify2;
#ifdef __cplusplus
interface IOverlayNotify2;
#endif /* __cplusplus */
#endif

#ifndef __IQualityControl_FWD_DEFINED__
#define __IQualityControl_FWD_DEFINED__
typedef interface IQualityControl IQualityControl;
#ifdef __cplusplus
interface IQualityControl;
#endif /* __cplusplus */
#endif

#ifndef __ISeekingPassThru_FWD_DEFINED__
#define __ISeekingPassThru_FWD_DEFINED__
typedef interface ISeekingPassThru ISeekingPassThru;
#ifdef __cplusplus
interface ISeekingPassThru;
#endif /* __cplusplus */
#endif

typedef struct __WIDL_strmif_generated_name_00000002 {
    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)
MIDL_INTERFACE("56a868a4-0ad4-11ce-b03a-0020af0ba770")
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;

};
#ifdef __CRT_UUID_DECL
__CRT_UUID_DECL(IEnumRegFilters, 0x56a868a4, 0x0ad4, 0x11ce, 0xb0,0x3a, 0x00,0x20,0xaf,0x0b,0xa7,0x70)
#endif
#else
typedef struct IEnumRegFiltersVtbl {
    BEGIN_INTERFACE

    /*** 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);

    END_INTERFACE
} IEnumRegFiltersVtbl;

interface IEnumRegFilters {
    CONST_VTBL IEnumRegFiltersVtbl* lpVtbl;
};

#ifdef COBJMACROS
#ifndef WIDL_C_INLINE_WRAPPERS
/*** IUnknown methods ***/
#define IEnumRegFilters_QueryInterface(This,riid,ppvObject) (This)->lpVtbl->QueryInterface(This,riid,ppvObject)
#define IEnumRegFilters_AddRef(This) (This)->lpVtbl->AddRef(This)
#define IEnumRegFilters_Release(This) (This)->lpVtbl->Release(This)
/*** IEnumRegFilters methods ***/
#define IEnumRegFilters_Next(This,cFilters,apRegFilter,pcFetched) (This)->lpVtbl->Next(This,cFilters,apRegFilter,pcFetched)
#define IEnumRegFilters_Skip(This,cFilters) (This)->lpVtbl->Skip(This,cFilters)
#define IEnumRegFilters_Reset(This) (This)->lpVtbl->Reset(This)
#define IEnumRegFilters_Clone(This,ppEnum) (This)->lpVtbl->Clone(This,ppEnum)
#else
/*** IUnknown methods ***/
static FORCEINLINE HRESULT IEnumRegFilters_QueryInterface(IEnumRegFilters* This,REFIID riid,void **ppvObject) {
    return This->lpVtbl->QueryInterface(This,riid,ppvObject);
}
static FORCEINLINE ULONG IEnumRegFilters_AddRef(IEnumRegFilters* This) {
    return This->lpVtbl->AddRef(This);
}
static FORCEINLINE ULONG IEnumRegFilters_Release(IEnumRegFilters* This) {
    return This->lpVtbl->Release(This);
}
/*** IEnumRegFilters methods ***/
static FORCEINLINE HRESULT IEnumRegFilters_Next(IEnumRegFilters* This,ULONG cFilters,REGFILTER **apRegFilter,ULONG *pcFetched) {
    return This->lpVtbl->Next(This,cFilters,apRegFilter,pcFetched);
}
static FORCEINLINE HRESULT IEnumRegFilters_Skip(IEnumRegFilters* This,ULONG cFilters) {
    return This->lpVtbl->Skip(This,cFilters);
}
static FORCEINLINE HRESULT IEnumRegFilters_Reset(IEnumRegFilters* This) {
    return This->lpVtbl->Reset(This);
}
static FORCEINLINE HRESULT IEnumRegFilters_Clone(IEnumRegFilters* This,IEnumRegFilters **ppEnum) {
    return This->lpVtbl->Clone(This,ppEnum);
}
#endif
#endif

#endif


#endif  /* __IEnumRegFilters_INTERFACE_DEFINED__ */

typedef IEnumRegFilters *PENUMREGFILTERS;
/*****************************************************************************
 * IFilterMapper interface
 */
#ifndef __IFilterMapper_INTERFACE_DEFINED__
#define __IFilterMapper_INTERFACE_DEFINED__

enum {
    MERIT_PREFERRED = 0x800000,
    MERIT_NORMAL = 0x600000,
    MERIT_UNLIKELY = 0x400000,
    MERIT_DO_NOT_USE = 0x200000,
    MERIT_SW_COMPRESSOR = 0x100000,
    MERIT_HW_COMPRESSOR = 0x100050
};
DEFINE_GUID(IID_IFilterMapper, 0x56a868a3, 0x0ad4, 0x11ce, 0xb0,0x3a, 0x00,0x20,0xaf,0x0b,0xa7,0x70);
#if defined(__cplusplus) && !defined(CINTERFACE)
MIDL_INTERFACE("56a868a3-0ad4-11ce-b03a-0020af0ba770")
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 bOutputNeeded,
        CLSID clsOutMaj,
        CLSID clsOutSub) = 0;

};
#ifdef __CRT_UUID_DECL
__CRT_UUID_DECL(IFilterMapper, 0x56a868a3, 0x0ad4, 0x11ce, 0xb0,0x3a, 0x00,0x20,0xaf,0x0b,0xa7,0x70)
#endif
#else
typedef struct IFilterMapperVtbl {
    BEGIN_INTERFACE

    /*** 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 bOutputNeeded,
        CLSID clsOutMaj,
        CLSID clsOutSub);

    END_INTERFACE
} IFilterMapperVtbl;

interface IFilterMapper {
    CONST_VTBL IFilterMapperVtbl* lpVtbl;
};

#ifdef COBJMACROS
#ifndef WIDL_C_INLINE_WRAPPERS
/*** IUnknown methods ***/
#define IFilterMapper_QueryInterface(This,riid,ppvObject) (This)->lpVtbl->QueryInterface(This,riid,ppvObject)
#define IFilterMapper_AddRef(This) (This)->lpVtbl->AddRef(This)
#define IFilterMapper_Release(This) (This)->lpVtbl->Release(This)
/*** IFilterMapper methods ***/
#define IFilterMapper_RegisterFilter(This,clsid,Name,dwMerit) (This)->lpVtbl->RegisterFilter(This,clsid,Name,dwMerit)
#define IFilterMapper_RegisterFilterInstance(This,clsid,Name,MRId) (This)->lpVtbl->RegisterFilterInstance(This,clsid,Name,MRId)
#define IFilterMapper_RegisterPin(This,Filter,Name,bRendered,bOutput,bZero,bMany,ConnectsToFilter,ConnectsToPin) (This)->lpVtbl->RegisterPin(This,Filter,Name,bRendered,bOutput,bZero,bMany,ConnectsToFilter,ConnectsToPin)
#define IFilterMapper_RegisterPinType(This,clsFilter,strName,clsMajorType,clsSubType) (This)->lpVtbl->RegisterPinType(This,clsFilter,strName,clsMajorType,clsSubType)
#define IFilterMapper_UnregisterFilter(This,Filter) (This)->lpVtbl->UnregisterFilter(This,Filter)
#define IFilterMapper_UnregisterFilterInstance(This,MRId) (This)->lpVtbl->UnregisterFilterInstance(This,MRId)
#define IFilterMapper_UnregisterPin(This,Filter,Name) (This)->lpVtbl->UnregisterPin(This,Filter,Name)
#define IFilterMapper_EnumMatchingFilters(This,ppEnum,dwMerit,bInputNeeded,clsInMaj,clsInSub,bRender,bOutputNeeded,clsOutMaj,clsOutSub) (This)->lpVtbl->EnumMatchingFilters(This,ppEnum,dwMerit,bInputNeeded,clsInMaj,clsInSub,bRender,bOutputNeeded,clsOutMaj,clsOutSub)
#else
/*** IUnknown methods ***/
static FORCEINLINE HRESULT IFilterMapper_QueryInterface(IFilterMapper* This,REFIID riid,void **ppvObject) {
    return This->lpVtbl->QueryInterface(This,riid,ppvObject);
}
static FORCEINLINE ULONG IFilterMapper_AddRef(IFilterMapper* This) {
    return This->lpVtbl->AddRef(This);
}
static FORCEINLINE ULONG IFilterMapper_Release(IFilterMapper* This) {
    return This->lpVtbl->Release(This);
}
/*** IFilterMapper methods ***/
static FORCEINLINE HRESULT IFilterMapper_RegisterFilter(IFilterMapper* This,CLSID clsid,LPCWSTR Name,DWORD dwMerit) {
    return This->lpVtbl->RegisterFilter(This,clsid,Name,dwMerit);
}
static FORCEINLINE HRESULT IFilterMapper_RegisterFilterInstance(IFilterMapper* This,CLSID clsid,LPCWSTR Name,CLSID *MRId) {
    return This->lpVtbl->RegisterFilterInstance(This,clsid,Name,MRId);
}
static FORCEINLINE HRESULT IFilterMapper_RegisterPin(IFilterMapper* This,CLSID Filter,LPCWSTR Name,BOOL bRendered,BOOL bOutput,BOOL bZero,BOOL bMany,CLSID ConnectsToFilter,LPCWSTR ConnectsToPin) {
    return This->lpVtbl->RegisterPin(This,Filter,Name,bRendered,bOutput,bZero,bMany,ConnectsToFilter,ConnectsToPin);
}
static FORCEINLINE HRESULT IFilterMapper_RegisterPinType(IFilterMapper* This,CLSID clsFilter,LPCWSTR strName,CLSID clsMajorType,CLSID clsSubType) {
    return This->lpVtbl->RegisterPinType(This,clsFilter,strName,clsMajorType,clsSubType);
}
static FORCEINLINE HRESULT IFilterMapper_UnregisterFilter(IFilterMapper* This,CLSID Filter) {
    return This->lpVtbl->UnregisterFilter(This,Filter);
}
static FORCEINLINE HRESULT IFilterMapper_UnregisterFilterInstance(IFilterMapper* This,CLSID MRId) {
    return This->lpVtbl->UnregisterFilterInstance(This,MRId);
}
static FORCEINLINE HRESULT IFilterMapper_UnregisterPin(IFilterMapper* This,CLSID Filter,LPCWSTR Name) {
    return This->lpVtbl->UnregisterPin(This,Filter,Name);
}
static FORCEINLINE HRESULT IFilterMapper_EnumMatchingFilters(IFilterMapper* This,IEnumRegFilters **ppEnum,DWORD dwMerit,BOOL bInputNeeded,CLSID clsInMaj,CLSID clsInSub,BOOL bRender,BOOL bOutputNeeded,CLSID clsOutMaj,CLSID clsOutSub) {
    return This->lpVtbl->EnumMatchingFilters(This,ppEnum,dwMerit,bInputNeeded,clsInMaj,clsInSub,bRender,bOutputNeeded,clsOutMaj,clsOutSub);
}
#endif
#endif

#endif


#endif  /* __IFilterMapper_INTERFACE_DEFINED__ */

typedef struct __WIDL_strmif_generated_name_00000003 {
    const CLSID *clsMajorType;
    const CLSID *clsMinorType;
} REGPINTYPES;
typedef struct __WIDL_strmif_generated_name_00000004 {
    LPWSTR strName;
    BOOL bRendered;
    BOOL bOutput;
    BOOL bZero;
    BOOL bMany;
    const CLSID *clsConnectsToFilter;
    const WCHAR *strConnectsToPin;
    UINT nMediaTypes;
    const REGPINTYPES *lpMediaType;
} REGFILTERPINS;
typedef struct __WIDL_strmif_generated_name_00000005 {
    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 __WIDL_strmif_generated_name_00000006 {
    DWORD dwFlags;
    UINT cInstances;
    UINT nMediaTypes;
    const REGPINTYPES *lpMediaType;
    UINT nMediums;
    const REGPINMEDIUM *lpMedium;
    const CLSID *clsPinCategory;
} REGFILTERPINS2;
typedef struct __WIDL_strmif_generated_name_00000007 {
    DWORD dwVersion;
    DWORD dwMerit;
    __C89_NAMELESS union {
        __C89_NAMELESS struct {
            ULONG cPins;
            const REGFILTERPINS *rgPins;
        } __C89_NAMELESSSTRUCTNAME1;
        __C89_NAMELESS struct {
            ULONG cPins2;
            const REGFILTERPINS2 *rgPins2;
        } __C89_NAMELESSSTRUCTNAME2;
    } __C89_NAMELESSUNIONNAME;
} 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)
MIDL_INTERFACE("b79bb0b0-33c1-11d1-abe1-00a0c905f375")
IFilterMapper2 : public IUnknown
{
    virtual HRESULT STDMETHODCALLTYPE CreateCategory(
        REFCLSID clsidCategory,
        DWORD dwCategoryMerit,
        LPCWSTR Description) = 0;

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

    virtual HRESULT STDMETHODCALLTYPE RegisterFilter(
        REFCLSID clsidFilter,
        LPCWSTR Name,
        IMoniker **ppMoniker,
        const CLSID *pclsidCategory,
        LPCOLESTR 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;

};
#ifdef __CRT_UUID_DECL
__CRT_UUID_DECL(IFilterMapper2, 0xb79bb0b0, 0x33c1, 0x11d1, 0xab,0xe1, 0x00,0xa0,0xc9,0x05,0xf3,0x75)
#endif
#else
typedef struct IFilterMapper2Vtbl {
    BEGIN_INTERFACE

    /*** 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,
        LPCOLESTR szInstance,
        REFCLSID Filter);

    HRESULT (STDMETHODCALLTYPE *RegisterFilter)(
        IFilterMapper2 *This,
        REFCLSID clsidFilter,
        LPCWSTR Name,
        IMoniker **ppMoniker,
        const CLSID *pclsidCategory,
        LPCOLESTR 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);

    END_INTERFACE
} IFilterMapper2Vtbl;

interface IFilterMapper2 {
    CONST_VTBL IFilterMapper2Vtbl* lpVtbl;
};

#ifdef COBJMACROS
#ifndef WIDL_C_INLINE_WRAPPERS
/*** IUnknown methods ***/
#define IFilterMapper2_QueryInterface(This,riid,ppvObject) (This)->lpVtbl->QueryInterface(This,riid,ppvObject)
#define IFilterMapper2_AddRef(This) (This)->lpVtbl->AddRef(This)
#define IFilterMapper2_Release(This) (This)->lpVtbl->Release(This)
/*** IFilterMapper2 methods ***/
#define IFilterMapper2_CreateCategory(This,clsidCategory,dwCategoryMerit,Description) (This)->lpVtbl->CreateCategory(This,clsidCategory,dwCategoryMerit,Description)
#define IFilterMapper2_UnregisterFilter(This,pclsidCategory,szInstance,Filter) (This)->lpVtbl->UnregisterFilter(This,pclsidCategory,szInstance,Filter)
#define IFilterMapper2_RegisterFilter(This,clsidFilter,Name,ppMoniker,pclsidCategory,szInstance,prf2) (This)->lpVtbl->RegisterFilter(This,clsidFilter,Name,ppMoniker,pclsidCategory,szInstance,prf2)
#define IFilterMapper2_EnumMatchingFilters(This,ppEnum,dwFlags,bExactMatch,dwMerit,bInputNeeded,cInputTypes,pInputTypes,pMedIn,pPinCategoryIn,bRender,bOutputNeeded,cOutputTypes,pOutputTypes,pMedOut,pPinCategoryOut) (This)->lpVtbl->EnumMatchingFilters(This,ppEnum,dwFlags,bExactMatch,dwMerit,bInputNeeded,cInputTypes,pInputTypes,pMedIn,pPinCategoryIn,bRender,bOutputNeeded,cOutputTypes,pOutputTypes,pMedOut,pPinCategoryOut)
#else
/*** IUnknown methods ***/
static FORCEINLINE HRESULT IFilterMapper2_QueryInterface(IFilterMapper2* This,REFIID riid,void **ppvObject) {
    return This->lpVtbl->QueryInterface(This,riid,ppvObject);
}
static FORCEINLINE ULONG IFilterMapper2_AddRef(IFilterMapper2* This) {
    return This->lpVtbl->AddRef(This);
}
static FORCEINLINE ULONG IFilterMapper2_Release(IFilterMapper2* This) {
    return This->lpVtbl->Release(This);
}
/*** IFilterMapper2 methods ***/
static FORCEINLINE HRESULT IFilterMapper2_CreateCategory(IFilterMapper2* This,REFCLSID clsidCategory,DWORD dwCategoryMerit,LPCWSTR Description) {
    return This->lpVtbl->CreateCategory(This,clsidCategory,dwCategoryMerit,Description);
}
static FORCEINLINE HRESULT IFilterMapper2_UnregisterFilter(IFilterMapper2* This,const CLSID *pclsidCategory,LPCOLESTR szInstance,REFCLSID Filter) {
    return This->lpVtbl->UnregisterFilter(This,pclsidCategory,szInstance,Filter);
}
static FORCEINLINE HRESULT IFilterMapper2_RegisterFilter(IFilterMapper2* This,REFCLSID clsidFilter,LPCWSTR Name,IMoniker **ppMoniker,const CLSID *pclsidCategory,LPCOLESTR szInstance,const REGFILTER2 *prf2) {
    return This->lpVtbl->RegisterFilter(This,clsidFilter,Name,ppMoniker,pclsidCategory,szInstance,prf2);
}
static FORCEINLINE HRESULT IFilterMapper2_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) {
    return This->lpVtbl->EnumMatchingFilters(This,ppEnum,dwFlags,bExactMatch,dwMerit,bInputNeeded,cInputTypes,pInputTypes,pMedIn,pPinCategoryIn,bRender,bOutputNeeded,cOutputTypes,pOutputTypes,pMedOut,pPinCategoryOut);
}
#endif
#endif

#endif


#endif  /* __IFilterMapper2_INTERFACE_DEFINED__ */

/*****************************************************************************
 * 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)
MIDL_INTERFACE("b79bb0b1-33c1-11d1-abe1-00a0c905f375")
IFilterMapper3 : public IFilterMapper2
{
    virtual HRESULT STDMETHODCALLTYPE GetICreateDevEnum(
        ICreateDevEnum **ppEnum) = 0;

};
#ifdef __CRT_UUID_DECL
__CRT_UUID_DECL(IFilterMapper3, 0xb79bb0b1, 0x33c1, 0x11d1, 0xab,0xe1, 0x00,0xa0,0xc9,0x05,0xf3,0x75)
#endif
#else
typedef struct IFilterMapper3Vtbl {
    BEGIN_INTERFACE

    /*** 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,
        LPCOLESTR szInstance,
        REFCLSID Filter);

    HRESULT (STDMETHODCALLTYPE *RegisterFilter)(
        IFilterMapper3 *This,
        REFCLSID clsidFilter,
        LPCWSTR Name,
        IMoniker **ppMoniker,
        const CLSID *pclsidCategory,
        LPCOLESTR 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);

    END_INTERFACE
} IFilterMapper3Vtbl;

interface IFilterMapper3 {
    CONST_VTBL IFilterMapper3Vtbl* lpVtbl;
};

#ifdef COBJMACROS
#ifndef WIDL_C_INLINE_WRAPPERS
/*** IUnknown methods ***/
#define IFilterMapper3_QueryInterface(This,riid,ppvObject) (This)->lpVtbl->QueryInterface(This,riid,ppvObject)
#define IFilterMapper3_AddRef(This) (This)->lpVtbl->AddRef(This)
#define IFilterMapper3_Release(This) (This)->lpVtbl->Release(This)
/*** IFilterMapper2 methods ***/
#define IFilterMapper3_CreateCategory(This,clsidCategory,dwCategoryMerit,Description) (This)->lpVtbl->CreateCategory(This,clsidCategory,dwCategoryMerit,Description)
#define IFilterMapper3_UnregisterFilter(This,pclsidCategory,szInstance,Filter) (This)->lpVtbl->UnregisterFilter(This,pclsidCategory,szInstance,Filter)
#define IFilterMapper3_RegisterFilter(This,clsidFilter,Name,ppMoniker,pclsidCategory,szInstance,prf2) (This)->lpVtbl->RegisterFilter(This,clsidFilter,Name,ppMoniker,pclsidCategory,szInstance,prf2)
#define IFilterMapper3_EnumMatchingFilters(This,ppEnum,dwFlags,bExactMatch,dwMerit,bInputNeeded,cInputTypes,pInputTypes,pMedIn,pPinCategoryIn,bRender,bOutputNeeded,cOutputTypes,pOutputTypes,pMedOut,pPinCategoryOut) (This)->lpVtbl->EnumMatchingFilters(This,ppEnum,dwFlags,bExactMatch,dwMerit,bInputNeeded,cInputTypes,pInputTypes,pMedIn,pPinCategoryIn,bRender,bOutputNeeded,cOutputTypes,pOutputTypes,pMedOut,pPinCategoryOut)
/*** IFilterMapper3 methods ***/
#define IFilterMapper3_GetICreateDevEnum(This,ppEnum) (This)->lpVtbl->GetICreateDevEnum(This,ppEnum)
#else
/*** IUnknown methods ***/
static FORCEINLINE HRESULT IFilterMapper3_QueryInterface(IFilterMapper3* This,REFIID riid,void **ppvObject) {
    return This->lpVtbl->QueryInterface(This,riid,ppvObject);
}
static FORCEINLINE ULONG IFilterMapper3_AddRef(IFilterMapper3* This) {
    return This->lpVtbl->AddRef(This);
}
static FORCEINLINE ULONG IFilterMapper3_Release(IFilterMapper3* This) {
    return This->lpVtbl->Release(This);
}
/*** IFilterMapper2 methods ***/
static FORCEINLINE HRESULT IFilterMapper3_CreateCategory(IFilterMapper3* This,REFCLSID clsidCategory,DWORD dwCategoryMerit,LPCWSTR Description) {
    return This->lpVtbl->CreateCategory(This,clsidCategory,dwCategoryMerit,Description);
}
static FORCEINLINE HRESULT IFilterMapper3_UnregisterFilter(IFilterMapper3* This,const CLSID *pclsidCategory,LPCOLESTR szInstance,REFCLSID Filter) {
    return This->lpVtbl->UnregisterFilter(This,pclsidCategory,szInstance,Filter);
}
static FORCEINLINE HRESULT IFilterMapper3_RegisterFilter(IFilterMapper3* This,REFCLSID clsidFilter,LPCWSTR Name,IMoniker **ppMoniker,const CLSID *pclsidCategory,LPCOLESTR szInstance,const REGFILTER2 *prf2) {
    return This->lpVtbl->RegisterFilter(This,clsidFilter,Name,ppMoniker,pclsidCategory,szInstance,prf2);
}
static FORCEINLINE HRESULT IFilterMapper3_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) {
    return This->lpVtbl->EnumMatchingFilters(This,ppEnum,dwFlags,bExactMatch,dwMerit,bInputNeeded,cInputTypes,pInputTypes,pMedIn,pPinCategoryIn,bRender,bOutputNeeded,cOutputTypes,pOutputTypes,pMedOut,pPinCategoryOut);
}
/*** IFilterMapper3 methods ***/
static FORCEINLINE HRESULT IFilterMapper3_GetICreateDevEnum(IFilterMapper3* This,ICreateDevEnum **ppEnum) {
    return This->lpVtbl->GetICreateDevEnum(This,ppEnum);
}
#endif
#endif

#endif


#endif  /* __IFilterMapper3_INTERFACE_DEFINED__ */

typedef enum tagQualityMessageType {
    Famine = 0,
    Flood = 1
} 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)
MIDL_INTERFACE("56a868a5-0ad4-11ce-b03a-0020af0ba770")
IQualityControl : public IUnknown
{
    virtual HRESULT STDMETHODCALLTYPE Notify(
        IBaseFilter *pSelf,
        Quality q) = 0;

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

};
#ifdef __CRT_UUID_DECL
__CRT_UUID_DECL(IQualityControl, 0x56a868a5, 0x0ad4, 0x11ce, 0xb0,0x3a, 0x00,0x20,0xaf,0x0b,0xa7,0x70)
#endif
#else
typedef struct IQualityControlVtbl {
    BEGIN_INTERFACE

    /*** 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);

    END_INTERFACE
} IQualityControlVtbl;

interface IQualityControl {
    CONST_VTBL IQualityControlVtbl* lpVtbl;
};

#ifdef COBJMACROS
#ifndef WIDL_C_INLINE_WRAPPERS
/*** IUnknown methods ***/
#define IQualityControl_QueryInterface(This,riid,ppvObject) (This)->lpVtbl->QueryInterface(This,riid,ppvObject)
#define IQualityControl_AddRef(This) (This)->lpVtbl->AddRef(This)
#define IQualityControl_Release(This) (This)->lpVtbl->Release(This)
/*** IQualityControl methods ***/
#define IQualityControl_Notify(This,pSelf,q) (This)->lpVtbl->Notify(This,pSelf,q)
#define IQualityControl_SetSink(This,piqc) (This)->lpVtbl->SetSink(This,piqc)
#else
/*** IUnknown methods ***/
static FORCEINLINE HRESULT IQualityControl_QueryInterface(IQualityControl* This,REFIID riid,void **ppvObject) {
    return This->lpVtbl->QueryInterface(This,riid,ppvObject);
}
static FORCEINLINE ULONG IQualityControl_AddRef(IQualityControl* This) {
    return This->lpVtbl->AddRef(This);
}
static FORCEINLINE ULONG IQualityControl_Release(IQualityControl* This) {
    return This->lpVtbl->Release(This);
}
/*** IQualityControl methods ***/
static FORCEINLINE HRESULT IQualityControl_Notify(IQualityControl* This,IBaseFilter *pSelf,Quality q) {
    return This->lpVtbl->Notify(This,pSelf,q);
}
static FORCEINLINE HRESULT IQualityControl_SetSink(IQualityControl* This,IQualityControl *piqc) {
    return This->lpVtbl->SetSink(This,piqc);
}
#endif
#endif

#endif


#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)
MIDL_INTERFACE("56a868a0-0ad4-11ce-b03a-0020af0ba770")
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;

};
#ifdef __CRT_UUID_DECL
__CRT_UUID_DECL(IOverlayNotify, 0x56a868a0, 0x0ad4, 0x11ce, 0xb0,0x3a, 0x00,0x20,0xaf,0x0b,0xa7,0x70)
#endif
#else
typedef struct IOverlayNotifyVtbl {
    BEGIN_INTERFACE

    /*** 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);

    END_INTERFACE
} IOverlayNotifyVtbl;

interface IOverlayNotify {
    CONST_VTBL IOverlayNotifyVtbl* lpVtbl;
};

#ifdef COBJMACROS
#ifndef WIDL_C_INLINE_WRAPPERS
/*** IUnknown methods ***/
#define IOverlayNotify_QueryInterface(This,riid,ppvObject) (This)->lpVtbl->QueryInterface(This,riid,ppvObject)
#define IOverlayNotify_AddRef(This) (This)->lpVtbl->AddRef(This)
#define IOverlayNotify_Release(This) (This)->lpVtbl->Release(This)
/*** IOverlayNotify methods ***/
#define IOverlayNotify_OnPaletteChange(This,dwColors,pPalette) (This)->lpVtbl->OnPaletteChange(This,dwColors,pPalette)
#define IOverlayNotify_OnClipChange(This,pSourceRect,pDestinationRect,pRgnData) (This)->lpVtbl->OnClipChange(This,pSourceRect,pDestinationRect,pRgnData)
#define IOverlayNotify_OnColorKeyChange(This,pColorKey) (This)->lpVtbl->OnColorKeyChange(This,pColorKey)
#define IOverlayNotify_OnPositionChange(This,pSourceRect,pDestinationRect) (This)->lpVtbl->OnPositionChange(This,pSourceRect,pDestinationRect)
#else
/*** IUnknown methods ***/
static FORCEINLINE HRESULT IOverlayNotify_QueryInterface(IOverlayNotify* This,REFIID riid,void **ppvObject) {
    return This->lpVtbl->QueryInterface(This,riid,ppvObject);
}
static FORCEINLINE ULONG IOverlayNotify_AddRef(IOverlayNotify* This) {
    return This->lpVtbl->AddRef(This);
}
static FORCEINLINE ULONG IOverlayNotify_Release(IOverlayNotify* This) {
    return This->lpVtbl->Release(This);
}
/*** IOverlayNotify methods ***/
static FORCEINLINE HRESULT IOverlayNotify_OnPaletteChange(IOverlayNotify* This,DWORD dwColors,const PALETTEENTRY *pPalette) {
    return This->lpVtbl->OnPaletteChange(This,dwColors,pPalette);
}
static FORCEINLINE HRESULT IOverlayNotify_OnClipChange(IOverlayNotify* This,const RECT *pSourceRect,const RECT *pDestinationRect,const RGNDATA *pRgnData) {
    return This->lpVtbl->OnClipChange(This,pSourceRect,pDestinationRect,pRgnData);
}
static FORCEINLINE HRESULT IOverlayNotify_OnColorKeyChange(IOverlayNotify* This,const COLORKEY *pColorKey) {
    return This->lpVtbl->OnColorKeyChange(This,pColorKey);
}
static FORCEINLINE HRESULT IOverlayNotify_OnPositionChange(IOverlayNotify* This,const RECT *pSourceRect,const RECT *pDestinationRect) {
    return This->lpVtbl->OnPositionChange(This,pSourceRect,pDestinationRect);
}
#endif
#endif

#endif


#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)
MIDL_INTERFACE("680efa10-d535-11d1-87c8-00a0c9223196")
IOverlayNotify2 : public IOverlayNotify
{
    virtual HRESULT STDMETHODCALLTYPE OnDisplayChange(
        HMONITOR hMonitor) = 0;

};
#ifdef __CRT_UUID_DECL
__CRT_UUID_DECL(IOverlayNotify2, 0x680efa10, 0xd535, 0x11d1, 0x87,0xc8, 0x00,0xa0,0xc9,0x22,0x31,0x96)
#endif
#else
typedef struct IOverlayNotify2Vtbl {
    BEGIN_INTERFACE

    /*** 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);

    END_INTERFACE
} IOverlayNotify2Vtbl;

interface IOverlayNotify2 {
    CONST_VTBL IOverlayNotify2Vtbl* lpVtbl;
};

#ifdef COBJMACROS
#ifndef WIDL_C_INLINE_WRAPPERS
/*** IUnknown methods ***/
#define IOverlayNotify2_QueryInterface(This,riid,ppvObject) (This)->lpVtbl->QueryInterface(This,riid,ppvObject)
#define IOverlayNotify2_AddRef(This) (This)->lpVtbl->AddRef(This)
#define IOverlayNotify2_Release(This) (This)->lpVtbl->Release(This)
/*** IOverlayNotify methods ***/
#define IOverlayNotify2_OnPaletteChange(This,dwColors,pPalette) (This)->lpVtbl->OnPaletteChange(This,dwColors,pPalette)
#define IOverlayNotify2_OnClipChange(This,pSourceRect,pDestinationRect,pRgnData) (This)->lpVtbl->OnClipChange(This,pSourceRect,pDestinationRect,pRgnData)
#define IOverlayNotify2_OnColorKeyChange(This,pColorKey) (This)->lpVtbl->OnColorKeyChange(This,pColorKey)
#define IOverlayNotify2_OnPositionChange(This,pSourceRect,pDestinationRect) (This)->lpVtbl->OnPositionChange(This,pSourceRect,pDestinationRect)
/*** IOverlayNotify2 methods ***/
#define IOverlayNotify2_OnDisplayChange(This,hMonitor) (This)->lpVtbl->OnDisplayChange(This,hMonitor)
#else
/*** IUnknown methods ***/
static FORCEINLINE HRESULT IOverlayNotify2_QueryInterface(IOverlayNotify2* This,REFIID riid,void **ppvObject) {
    return This->lpVtbl->QueryInterface(This,riid,ppvObject);
}
static FORCEINLINE ULONG IOverlayNotify2_AddRef(IOverlayNotify2* This) {
    return This->lpVtbl->AddRef(This);
}
static FORCEINLINE ULONG IOverlayNotify2_Release(IOverlayNotify2* This) {
    return This->lpVtbl->Release(This);
}
/*** IOverlayNotify methods ***/
static FORCEINLINE HRESULT IOverlayNotify2_OnPaletteChange(IOverlayNotify2* This,DWORD dwColors,const PALETTEENTRY *pPalette) {
    return This->lpVtbl->OnPaletteChange(This,dwColors,pPalette);
}
static FORCEINLINE HRESULT IOverlayNotify2_OnClipChange(IOverlayNotify2* This,const RECT *pSourceRect,const RECT *pDestinationRect,const RGNDATA *pRgnData) {
    return This->lpVtbl->OnClipChange(This,pSourceRect,pDestinationRect,pRgnData);
}
static FORCEINLINE HRESULT IOverlayNotify2_OnColorKeyChange(IOverlayNotify2* This,const COLORKEY *pColorKey) {
    return This->lpVtbl->OnColorKeyChange(This,pColorKey);
}
static FORCEINLINE HRESULT IOverlayNotify2_OnPositionChange(IOverlayNotify2* This,const RECT *pSourceRect,const RECT *pDestinationRect) {
    return This->lpVtbl->OnPositionChange(This,pSourceRect,pDestinationRect);
}
/*** IOverlayNotify2 methods ***/
static FORCEINLINE HRESULT IOverlayNotify2_OnDisplayChange(IOverlayNotify2* This,HMONITOR hMonitor) {
    return This->lpVtbl->OnDisplayChange(This,hMonitor);
}
#endif
#endif

#endif


#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)
MIDL_INTERFACE("56a868a1-0ad4-11ce-b03a-0020af0ba770")
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;

};
#ifdef __CRT_UUID_DECL
__CRT_UUID_DECL(IOverlay, 0x56a868a1, 0x0ad4, 0x11ce, 0xb0,0x3a, 0x00,0x20,0xaf,0x0b,0xa7,0x70)
#endif
#else
typedef struct IOverlayVtbl {
    BEGIN_INTERFACE

    /*** 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);

    END_INTERFACE
} IOverlayVtbl;

interface IOverlay {
    CONST_VTBL IOverlayVtbl* lpVtbl;
};

#ifdef COBJMACROS
#ifndef WIDL_C_INLINE_WRAPPERS
/*** IUnknown methods ***/
#define IOverlay_QueryInterface(This,riid,ppvObject) (This)->lpVtbl->QueryInterface(This,riid,ppvObject)
#define IOverlay_AddRef(This) (This)->lpVtbl->AddRef(This)
#define IOverlay_Release(This) (This)->lpVtbl->Release(This)
/*** IOverlay methods ***/
#define IOverlay_GetPalette(This,pdwColors,ppPalette) (This)->lpVtbl->GetPalette(This,pdwColors,ppPalette)
#define IOverlay_SetPalette(This,dwColors,pPalette) (This)->lpVtbl->SetPalette(This,dwColors,pPalette)
#define IOverlay_GetDefaultColorKey(This,pColorKey) (This)->lpVtbl->GetDefaultColorKey(This,pColorKey)
#define IOverlay_GetColorKey(This,pColorKey) (This)->lpVtbl->GetColorKey(This,pColorKey)
#define IOverlay_SetColorKey(This,pColorKey) (This)->lpVtbl->SetColorKey(This,pColorKey)
#define IOverlay_GetWindowHandle(This,pHwnd) (This)->lpVtbl->GetWindowHandle(This,pHwnd)
#define IOverlay_GetClipList(This,pSourceRect,pDestinationRect,ppRgnData) (This)->lpVtbl->GetClipList(This,pSourceRect,pDestinationRect,ppRgnData)
#define IOverlay_GetVideoPosition(This,pSourceRect,pDestinationRect) (This)->lpVtbl->GetVideoPosition(This,pSourceRect,pDestinationRect)
#define IOverlay_Advise(This,pOverlayNotify,dwInterests) (This)->lpVtbl->Advise(This,pOverlayNotify,dwInterests)
#define IOverlay_Unadvise(This) (This)->lpVtbl->Unadvise(This)
#else
/*** IUnknown methods ***/
static FORCEINLINE HRESULT IOverlay_QueryInterface(IOverlay* This,REFIID riid,void **ppvObject) {
    return This->lpVtbl->QueryInterface(This,riid,ppvObject);
}
static FORCEINLINE ULONG IOverlay_AddRef(IOverlay* This) {
    return This->lpVtbl->AddRef(This);
}
static FORCEINLINE ULONG IOverlay_Release(IOverlay* This) {
    return This->lpVtbl->Release(This);
}
/*** IOverlay methods ***/
static FORCEINLINE HRESULT IOverlay_GetPalette(IOverlay* This,DWORD *pdwColors,PALETTEENTRY **ppPalette) {
    return This->lpVtbl->GetPalette(This,pdwColors,ppPalette);
}
static FORCEINLINE HRESULT IOverlay_SetPalette(IOverlay* This,DWORD dwColors,PALETTEENTRY *pPalette) {
    return This->lpVtbl->SetPalette(This,dwColors,pPalette);
}
static FORCEINLINE HRESULT IOverlay_GetDefaultColorKey(IOverlay* This,COLORKEY *pColorKey) {
    return This->lpVtbl->GetDefaultColorKey(This,pColorKey);
}
static FORCEINLINE HRESULT IOverlay_GetColorKey(IOverlay* This,COLORKEY *pColorKey) {
    return This->lpVtbl->GetColorKey(This,pColorKey);
}
static FORCEINLINE HRESULT IOverlay_SetColorKey(IOverlay* This,COLORKEY *pColorKey) {
    return This->lpVtbl->SetColorKey(This,pColorKey);
}
static FORCEINLINE HRESULT IOverlay_GetWindowHandle(IOverlay* This,HWND *pHwnd) {
    return This->lpVtbl->GetWindowHandle(This,pHwnd);
}
static FORCEINLINE HRESULT IOverlay_GetClipList(IOverlay* This,RECT *pSourceRect,RECT *pDestinationRect,RGNDATA **ppRgnData) {
    return This->lpVtbl->GetClipList(This,pSourceRect,pDestinationRect,ppRgnData);
}
static FORCEINLINE HRESULT IOverlay_GetVideoPosition(IOverlay* This,RECT *pSourceRect,RECT *pDestinationRect) {
    return This->lpVtbl->GetVideoPosition(This,pSourceRect,pDestinationRect);
}
static FORCEINLINE HRESULT IOverlay_Advise(IOverlay* This,IOverlayNotify *pOverlayNotify,DWORD dwInterests) {
    return This->lpVtbl->Advise(This,pOverlayNotify,dwInterests);
}
static FORCEINLINE HRESULT IOverlay_Unadvise(IOverlay* This) {
    return This->lpVtbl->Unadvise(This);
}
#endif
#endif

#endif


#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)
MIDL_INTERFACE("56a868a2-0ad4-11ce-b03a-0020af0ba770")
IMediaEventSink : public IUnknown
{
    virtual HRESULT STDMETHODCALLTYPE Notify(
        LONG EventCode,
        LONG_PTR EventParam1,
        LONG_PTR EventParam2) = 0;

};
#ifdef __CRT_UUID_DECL
__CRT_UUID_DECL(IMediaEventSink, 0x56a868a2, 0x0ad4, 0x11ce, 0xb0,0x3a, 0x00,0x20,0xaf,0x0b,0xa7,0x70)
#endif
#else
typedef struct IMediaEventSinkVtbl {
    BEGIN_INTERFACE

    /*** 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);

    END_INTERFACE
} IMediaEventSinkVtbl;

interface IMediaEventSink {
    CONST_VTBL IMediaEventSinkVtbl* lpVtbl;
};

#ifdef COBJMACROS
#ifndef WIDL_C_INLINE_WRAPPERS
/*** IUnknown methods ***/
#define IMediaEventSink_QueryInterface(This,riid,ppvObject) (This)->lpVtbl->QueryInterface(This,riid,ppvObject)
#define IMediaEventSink_AddRef(This) (This)->lpVtbl->AddRef(This)
#define IMediaEventSink_Release(This) (This)->lpVtbl->Release(This)
/*** IMediaEventSink methods ***/
#define IMediaEventSink_Notify(This,EventCode,EventParam1,EventParam2) (This)->lpVtbl->Notify(This,EventCode,EventParam1,EventParam2)
#else
/*** IUnknown methods ***/
static FORCEINLINE HRESULT IMediaEventSink_QueryInterface(IMediaEventSink* This,REFIID riid,void **ppvObject) {
    return This->lpVtbl->QueryInterface(This,riid,ppvObject);
}
static FORCEINLINE ULONG IMediaEventSink_AddRef(IMediaEventSink* This) {
    return This->lpVtbl->AddRef(This);
}
static FORCEINLINE ULONG IMediaEventSink_Release(IMediaEventSink* This) {
    return This->lpVtbl->Release(This);
}
/*** IMediaEventSink methods ***/
static FORCEINLINE HRESULT IMediaEventSink_Notify(IMediaEventSink* This,LONG EventCode,LONG_PTR EventParam1,LONG_PTR EventParam2) {
    return This->lpVtbl->Notify(This,EventCode,EventParam1,EventParam2);
}
#endif
#endif

#endif


#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)
MIDL_INTERFACE("56a868a6-0ad4-11ce-b03a-0020af0ba770")
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;

};
#ifdef __CRT_UUID_DECL
__CRT_UUID_DECL(IFileSourceFilter, 0x56a868a6, 0x0ad4, 0x11ce, 0xb0,0x3a, 0x00,0x20,0xaf,0x0b,0xa7,0x70)
#endif
#else
typedef struct IFileSourceFilterVtbl {
    BEGIN_INTERFACE

    /*** 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);

    END_INTERFACE
} IFileSourceFilterVtbl;

interface IFileSourceFilter {
    CONST_VTBL IFileSourceFilterVtbl* lpVtbl;
};

#ifdef COBJMACROS
#ifndef WIDL_C_INLINE_WRAPPERS
/*** IUnknown methods ***/
#define IFileSourceFilter_QueryInterface(This,riid,ppvObject) (This)->lpVtbl->QueryInterface(This,riid,ppvObject)
#define IFileSourceFilter_AddRef(This) (This)->lpVtbl->AddRef(This)
#define IFileSourceFilter_Release(This) (This)->lpVtbl->Release(This)
/*** IFileSourceFilter methods ***/
#define IFileSourceFilter_Load(This,pszFileName,pmt) (This)->lpVtbl->Load(This,pszFileName,pmt)
#define IFileSourceFilter_GetCurFile(This,ppszFileName,pmt) (This)->lpVtbl->GetCurFile(This,ppszFileName,pmt)
#else
/*** IUnknown methods ***/
static FORCEINLINE HRESULT IFileSourceFilter_QueryInterface(IFileSourceFilter* This,REFIID riid,void **ppvObject) {
    return This->lpVtbl->QueryInterface(This,riid,ppvObject);
}
static FORCEINLINE ULONG IFileSourceFilter_AddRef(IFileSourceFilter* This) {
    return This->lpVtbl->AddRef(This);
}
static FORCEINLINE ULONG IFileSourceFilter_Release(IFileSourceFilter* This) {
    return This->lpVtbl->Release(This);
}
/*** IFileSourceFilter methods ***/
static FORCEINLINE HRESULT IFileSourceFilter_Load(IFileSourceFilter* This,LPCOLESTR pszFileName,const AM_MEDIA_TYPE *pmt) {
    return This->lpVtbl->Load(This,pszFileName,pmt);
}
static FORCEINLINE HRESULT IFileSourceFilter_GetCurFile(IFileSourceFilter* This,LPOLESTR *ppszFileName,AM_MEDIA_TYPE *pmt) {
    return This->lpVtbl->GetCurFile(This,ppszFileName,pmt);
}
#endif
#endif

#endif


#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)
MIDL_INTERFACE("a2104830-7c70-11cf-8bce-00aa00a3f1a6")
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;

};
#ifdef __CRT_UUID_DECL
__CRT_UUID_DECL(IFileSinkFilter, 0xa2104830, 0x7c70, 0x11cf, 0x8b,0xce, 0x00,0xaa,0x00,0xa3,0xf1,0xa6)
#endif
#else
typedef struct IFileSinkFilterVtbl {
    BEGIN_INTERFACE

    /*** 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);

    END_INTERFACE
} IFileSinkFilterVtbl;

interface IFileSinkFilter {
    CONST_VTBL IFileSinkFilterVtbl* lpVtbl;
};

#ifdef COBJMACROS
#ifndef WIDL_C_INLINE_WRAPPERS
/*** IUnknown methods ***/
#define IFileSinkFilter_QueryInterface(This,riid,ppvObject) (This)->lpVtbl->QueryInterface(This,riid,ppvObject)
#define IFileSinkFilter_AddRef(This) (This)->lpVtbl->AddRef(This)
#define IFileSinkFilter_Release(This) (This)->lpVtbl->Release(This)
/*** IFileSinkFilter methods ***/
#define IFileSinkFilter_SetFileName(This,pszFileName,pmt) (This)->lpVtbl->SetFileName(This,pszFileName,pmt)
#define IFileSinkFilter_GetCurFile(This,ppszFileName,pmt) (This)->lpVtbl->GetCurFile(This,ppszFileName,pmt)
#else
/*** IUnknown methods ***/
static FORCEINLINE HRESULT IFileSinkFilter_QueryInterface(IFileSinkFilter* This,REFIID riid,void **ppvObject) {
    return This->lpVtbl->QueryInterface(This,riid,ppvObject);
}
static FORCEINLINE ULONG IFileSinkFilter_AddRef(IFileSinkFilter* This) {
    return This->lpVtbl->AddRef(This);
}
static FORCEINLINE ULONG IFileSinkFilter_Release(IFileSinkFilter* This) {
    return This->lpVtbl->Release(This);
}
/*** IFileSinkFilter methods ***/
static FORCEINLINE HRESULT IFileSinkFilter_SetFileName(IFileSinkFilter* This,LPCOLESTR pszFileName,const AM_MEDIA_TYPE *pmt) {
    return This->lpVtbl->SetFileName(This,pszFileName,pmt);
}
static FORCEINLINE HRESULT IFileSinkFilter_GetCurFile(IFileSinkFilter* This,LPOLESTR *ppszFileName,AM_MEDIA_TYPE *pmt) {
    return This->lpVtbl->GetCurFile(This,ppszFileName,pmt);
}
#endif
#endif

#endif


#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)
MIDL_INTERFACE("00855b90-ce1b-11d0-bd4f-00a0c911ce86")
IFileSinkFilter2 : public IFileSinkFilter
{
    virtual HRESULT STDMETHODCALLTYPE SetMode(
        DWORD dwFlags) = 0;

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

};
#ifdef __CRT_UUID_DECL
__CRT_UUID_DECL(IFileSinkFilter2, 0x00855b90, 0xce1b, 0x11d0, 0xbd,0x4f, 0x00,0xa0,0xc9,0x11,0xce,0x86)
#endif
#else
typedef struct IFileSinkFilter2Vtbl {
    BEGIN_INTERFACE

    /*** 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);

    END_INTERFACE
} IFileSinkFilter2Vtbl;

interface IFileSinkFilter2 {
    CONST_VTBL IFileSinkFilter2Vtbl* lpVtbl;
};

#ifdef COBJMACROS
#ifndef WIDL_C_INLINE_WRAPPERS
/*** IUnknown methods ***/
#define IFileSinkFilter2_QueryInterface(This,riid,ppvObject) (This)->lpVtbl->QueryInterface(This,riid,ppvObject)
#define IFileSinkFilter2_AddRef(This) (This)->lpVtbl->AddRef(This)
#define IFileSinkFilter2_Release(This) (This)->lpVtbl->Release(This)
/*** IFileSinkFilter methods ***/
#define IFileSinkFilter2_SetFileName(This,pszFileName,pmt) (This)->lpVtbl->SetFileName(This,pszFileName,pmt)
#define IFileSinkFilter2_GetCurFile(This,ppszFileName,pmt) (This)->lpVtbl->GetCurFile(This,ppszFileName,pmt)
/*** IFileSinkFilter2 methods ***/
#define IFileSinkFilter2_SetMode(This,dwFlags) (This)->lpVtbl->SetMode(This,dwFlags)
#define IFileSinkFilter2_GetMode(This,pdwFlags) (This)->lpVtbl->GetMode(This,pdwFlags)
#else
/*** IUnknown methods ***/
static FORCEINLINE HRESULT IFileSinkFilter2_QueryInterface(IFileSinkFilter2* This,REFIID riid,void **ppvObject) {
    return This->lpVtbl->QueryInterface(This,riid,ppvObject);
}
static FORCEINLINE ULONG IFileSinkFilter2_AddRef(IFileSinkFilter2* This) {
    return This->lpVtbl->AddRef(This);
}
static FORCEINLINE ULONG IFileSinkFilter2_Release(IFileSinkFilter2* This) {
    return This->lpVtbl->Release(This);
}
/*** IFileSinkFilter methods ***/
static FORCEINLINE HRESULT IFileSinkFilter2_SetFileName(IFileSinkFilter2* This,LPCOLESTR pszFileName,const AM_MEDIA_TYPE *pmt) {
    return This->lpVtbl->SetFileName(This,pszFileName,pmt);
}
static FORCEINLINE HRESULT IFileSinkFilter2_GetCurFile(IFileSinkFilter2* This,LPOLESTR *ppszFileName,AM_MEDIA_TYPE *pmt) {
    return This->lpVtbl->GetCurFile(This,ppszFileName,pmt);
}
/*** IFileSinkFilter2 methods ***/
static FORCEINLINE HRESULT IFileSinkFilter2_SetMode(IFileSinkFilter2* This,DWORD dwFlags) {
    return This->lpVtbl->SetMode(This,dwFlags);
}
static FORCEINLINE HRESULT IFileSinkFilter2_GetMode(IFileSinkFilter2* This,DWORD *pdwFlags) {
    return This->lpVtbl->GetMode(This,pdwFlags);
}
#endif
#endif

#endif


#endif  /* __IFileSinkFilter2_INTERFACE_DEFINED__ */

typedef IFileSinkFilter2 *PFILESINKFILTER2;
typedef enum __WIDL_strmif_generated_name_00000008 {
    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)
MIDL_INTERFACE("56a868a9-0ad4-11ce-b03a-0020af0ba770")
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;

};
#ifdef __CRT_UUID_DECL
__CRT_UUID_DECL(IGraphBuilder, 0x56a868a9, 0x0ad4, 0x11ce, 0xb0,0x3a, 0x00,0x20,0xaf,0x0b,0xa7,0x70)
#endif
#else
typedef struct IGraphBuilderVtbl {
    BEGIN_INTERFACE

    /*** 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);

    END_INTERFACE
} IGraphBuilderVtbl;

interface IGraphBuilder {
    CONST_VTBL IGraphBuilderVtbl* lpVtbl;
};

#ifdef COBJMACROS
#ifndef WIDL_C_INLINE_WRAPPERS
/*** IUnknown methods ***/
#define IGraphBuilder_QueryInterface(This,riid,ppvObject) (This)->lpVtbl->QueryInterface(This,riid,ppvObject)
#define IGraphBuilder_AddRef(This) (This)->lpVtbl->AddRef(This)
#define IGraphBuilder_Release(This) (This)->lpVtbl->Release(This)
/*** IFilterGraph methods ***/
#define IGraphBuilder_AddFilter(This,pFilter,pName) (This)->lpVtbl->AddFilter(This,pFilter,pName)
#define IGraphBuilder_RemoveFilter(This,pFilter) (This)->lpVtbl->RemoveFilter(This,pFilter)
#define IGraphBuilder_EnumFilters(This,ppEnum) (This)->lpVtbl->EnumFilters(This,ppEnum)
#define IGraphBuilder_FindFilterByName(This,pName,ppFilter) (This)->lpVtbl->FindFilterByName(This,pName,ppFilter)
#define IGraphBuilder_ConnectDirect(This,ppinOut,ppinIn,pmt) (This)->lpVtbl->ConnectDirect(This,ppinOut,ppinIn,pmt)
#define IGraphBuilder_Reconnect(This,ppin) (This)->lpVtbl->Reconnect(This,ppin)
#define IGraphBuilder_Disconnect(This,ppin) (This)->lpVtbl->Disconnect(This,ppin)
#define IGraphBuilder_SetDefaultSyncSource(This) (This)->lpVtbl->SetDefaultSyncSource(This)
/*** IGraphBuilder methods ***/
#define IGraphBuilder_Connect(This,ppinOut,ppinIn) (This)->lpVtbl->Connect(This,ppinOut,ppinIn)
#define IGraphBuilder_Render(This,ppinOut) (This)->lpVtbl->Render(This,ppinOut)
#define IGraphBuilder_RenderFile(This,lpcwstrFile,lpcwstrPlayList) (This)->lpVtbl->RenderFile(This,lpcwstrFile,lpcwstrPlayList)
#define IGraphBuilder_AddSourceFilter(This,lpcwstrFileName,lpcwstrFilterName,ppFilter) (This)->lpVtbl->AddSourceFilter(This,lpcwstrFileName,lpcwstrFilterName,ppFilter)
#define IGraphBuilder_SetLogFile(This,hFile) (This)->lpVtbl->SetLogFile(This,hFile)
#define IGraphBuilder_Abort(This) (This)->lpVtbl->Abort(This)
#define IGraphBuilder_ShouldOperationContinue(This) (This)->lpVtbl->ShouldOperationContinue(This)
#else
/*** IUnknown methods ***/
static FORCEINLINE HRESULT IGraphBuilder_QueryInterface(IGraphBuilder* This,REFIID riid,void **ppvObject) {
    return This->lpVtbl->QueryInterface(This,riid,ppvObject);
}
static FORCEINLINE ULONG IGraphBuilder_AddRef(IGraphBuilder* This) {
    return This->lpVtbl->AddRef(This);
}
static FORCEINLINE ULONG IGraphBuilder_Release(IGraphBuilder* This) {
    return This->lpVtbl->Release(This);
}
/*** IFilterGraph methods ***/
static FORCEINLINE HRESULT IGraphBuilder_AddFilter(IGraphBuilder* This,IBaseFilter *pFilter,LPCWSTR pName) {
    return This->lpVtbl->AddFilter(This,pFilter,pName);
}
static FORCEINLINE HRESULT IGraphBuilder_RemoveFilter(IGraphBuilder* This,IBaseFilter *pFilter) {
    return This->lpVtbl->RemoveFilter(This,pFilter);
}
static FORCEINLINE HRESULT IGraphBuilder_EnumFilters(IGraphBuilder* This,IEnumFilters **ppEnum) {
    return This->lpVtbl->EnumFilters(This,ppEnum);
}
static FORCEINLINE HRESULT IGraphBuilder_FindFilterByName(IGraphBuilder* This,LPCWSTR pName,IBaseFilter **ppFilter) {
    return This->lpVtbl->FindFilterByName(This,pName,ppFilter);
}
static FORCEINLINE HRESULT IGraphBuilder_ConnectDirect(IGraphBuilder* This,IPin *ppinOut,IPin *ppinIn,const AM_MEDIA_TYPE *pmt) {
    return This->lpVtbl->ConnectDirect(This,ppinOut,ppinIn,pmt);
}
static FORCEINLINE HRESULT IGraphBuilder_Reconnect(IGraphBuilder* This,IPin *ppin) {
    return This->lpVtbl->Reconnect(This,ppin);
}
static FORCEINLINE HRESULT IGraphBuilder_Disconnect(IGraphBuilder* This,IPin *ppin) {
    return This->lpVtbl->Disconnect(This,ppin);
}
static FORCEINLINE HRESULT IGraphBuilder_SetDefaultSyncSource(IGraphBuilder* This) {
    return This->lpVtbl->SetDefaultSyncSource(This);
}
/*** IGraphBuilder methods ***/
static FORCEINLINE HRESULT IGraphBuilder_Connect(IGraphBuilder* This,IPin *ppinOut,IPin *ppinIn) {
    return This->lpVtbl->Connect(This,ppinOut,ppinIn);
}
static FORCEINLINE HRESULT IGraphBuilder_Render(IGraphBuilder* This,IPin *ppinOut) {
    return This->lpVtbl->Render(This,ppinOut);
}
static FORCEINLINE HRESULT IGraphBuilder_RenderFile(IGraphBuilder* This,LPCWSTR lpcwstrFile,LPCWSTR lpcwstrPlayList) {
    return This->lpVtbl->RenderFile(This,lpcwstrFile,lpcwstrPlayList);
}
static FORCEINLINE HRESULT IGraphBuilder_AddSourceFilter(IGraphBuilder* This,LPCWSTR lpcwstrFileName,LPCWSTR lpcwstrFilterName,IBaseFilter **ppFilter) {
    return This->lpVtbl->AddSourceFilter(This,lpcwstrFileName,lpcwstrFilterName,ppFilter);
}
static FORCEINLINE HRESULT IGraphBuilder_SetLogFile(IGraphBuilder* This,DWORD_PTR hFile) {
    return This->lpVtbl->SetLogFile(This,hFile);
}
static FORCEINLINE HRESULT IGraphBuilder_Abort(IGraphBuilder* This) {
    return This->lpVtbl->Abort(This);
}
static FORCEINLINE HRESULT IGraphBuilder_ShouldOperationContinue(IGraphBuilder* This) {
    return This->lpVtbl->ShouldOperationContinue(This);
}
#endif
#endif

#endif


#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)
MIDL_INTERFACE("bf87b6e0-8c27-11d0-b3f0-00aa003761c5")
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;

};
#ifdef __CRT_UUID_DECL
__CRT_UUID_DECL(ICaptureGraphBuilder, 0xbf87b6e0, 0x8c27, 0x11d0, 0xb3,0xf0, 0x00,0xaa,0x00,0x37,0x61,0xc5)
#endif
#else
typedef struct ICaptureGraphBuilderVtbl {
    BEGIN_INTERFACE

    /*** 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);

    END_INTERFACE
} ICaptureGraphBuilderVtbl;

interface ICaptureGraphBuilder {
    CONST_VTBL ICaptureGraphBuilderVtbl* lpVtbl;
};

#ifdef COBJMACROS
#ifndef WIDL_C_INLINE_WRAPPERS
/*** IUnknown methods ***/
#define ICaptureGraphBuilder_QueryInterface(This,riid,ppvObject) (This)->lpVtbl->QueryInterface(This,riid,ppvObject)
#define ICaptureGraphBuilder_AddRef(This) (This)->lpVtbl->AddRef(This)
#define ICaptureGraphBuilder_Release(This) (This)->lpVtbl->Release(This)
/*** ICaptureGraphBuilder methods ***/
#define ICaptureGraphBuilder_SetFiltergraph(This,pfg) (This)->lpVtbl->SetFiltergraph(This,pfg)
#define ICaptureGraphBuilder_GetFiltergraph(This,ppfg) (This)->lpVtbl->GetFiltergraph(This,ppfg)
#define ICaptureGraphBuilder_SetOutputFileName(This,pType,lpstrFile,ppf,ppSink) (This)->lpVtbl->SetOutputFileName(This,pType,lpstrFile,ppf,ppSink)
#define ICaptureGraphBuilder_FindInterface(This,pCategory,pf,riid,ppint) (This)->lpVtbl->FindInterface(This,pCategory,pf,riid,ppint)
#define ICaptureGraphBuilder_RenderStream(This,pCategory,pSource,pfCompressor,pfRenderer) (This)->lpVtbl->RenderStream(This,pCategory,pSource,pfCompressor,pfRenderer)
#define ICaptureGraphBuilder_ControlStream(This,pCategory,pFilter,pstart,pstop,wStartCookie,wStopCookie) (This)->lpVtbl->ControlStream(This,pCategory,pFilter,pstart,pstop,wStartCookie,wStopCookie)
#define ICaptureGraphBuilder_AllocCapFile(This,lpstr,dwlSize) (This)->lpVtbl->AllocCapFile(This,lpstr,dwlSize)
#define ICaptureGraphBuilder_CopyCaptureFile(This,lpwstrOld,lpwstrNew,fAllowEscAbort,pCallback) (This)->lpVtbl->CopyCaptureFile(This,lpwstrOld,lpwstrNew,fAllowEscAbort,pCallback)
#else
/*** IUnknown methods ***/
static FORCEINLINE HRESULT ICaptureGraphBuilder_QueryInterface(ICaptureGraphBuilder* This,REFIID riid,void **ppvObject) {
    return This->lpVtbl->QueryInterface(This,riid,ppvObject);
}
static FORCEINLINE ULONG ICaptureGraphBuilder_AddRef(ICaptureGraphBuilder* This) {
    return This->lpVtbl->AddRef(This);
}
static FORCEINLINE ULONG ICaptureGraphBuilder_Release(ICaptureGraphBuilder* This) {
    return This->lpVtbl->Release(This);
}
/*** ICaptureGraphBuilder methods ***/
static FORCEINLINE HRESULT ICaptureGraphBuilder_SetFiltergraph(ICaptureGraphBuilder* This,IGraphBuilder *pfg) {
    return This->lpVtbl->SetFiltergraph(This,pfg);
}
static FORCEINLINE HRESULT ICaptureGraphBuilder_GetFiltergraph(ICaptureGraphBuilder* This,IGraphBuilder **ppfg) {
    return This->lpVtbl->GetFiltergraph(This,ppfg);
}
static FORCEINLINE HRESULT ICaptureGraphBuilder_SetOutputFileName(ICaptureGraphBuilder* This,const GUID *pType,LPCOLESTR lpstrFile,IBaseFilter **ppf,IFileSinkFilter **ppSink) {
    return This->lpVtbl->SetOutputFileName(This,pType,lpstrFile,ppf,ppSink);
}
static FORCEINLINE HRESULT ICaptureGraphBuilder_FindInterface(ICaptureGraphBuilder* This,const GUID *pCategory,IBaseFilter *pf,REFIID riid,void **ppint) {
    return This->lpVtbl->FindInterface(This,pCategory,pf,riid,ppint);
}
static FORCEINLINE HRESULT ICaptureGraphBuilder_RenderStream(ICaptureGraphBuilder* This,const GUID *pCategory,IUnknown *pSource,IBaseFilter *pfCompressor,IBaseFilter *pfRenderer) {
    return This->lpVtbl->RenderStream(This,pCategory,pSource,pfCompressor,pfRenderer);
}
static FORCEINLINE HRESULT ICaptureGraphBuilder_ControlStream(ICaptureGraphBuilder* This,const GUID *pCategory,IBaseFilter *pFilter,REFERENCE_TIME *pstart,REFERENCE_TIME *pstop,WORD wStartCookie,WORD wStopCookie) {
    return This->lpVtbl->ControlStream(This,pCategory,pFilter,pstart,pstop,wStartCookie,wStopCookie);
}
static FORCEINLINE HRESULT ICaptureGraphBuilder_AllocCapFile(ICaptureGraphBuilder* This,LPCOLESTR lpstr,DWORDLONG dwlSize) {
    return This->lpVtbl->AllocCapFile(This,lpstr,dwlSize);
}
static FORCEINLINE HRESULT ICaptureGraphBuilder_CopyCaptureFile(ICaptureGraphBuilder* This,LPOLESTR lpwstrOld,LPOLESTR lpwstrNew,int fAllowEscAbort,IAMCopyCaptureFileProgress *pCallback) {
    return This->lpVtbl->CopyCaptureFile(This,lpwstrOld,lpwstrNew,fAllowEscAbort,pCallback);
}
#endif
#endif

#endif

HRESULT STDMETHODCALLTYPE ICaptureGraphBuilder_RemoteFindInterface_Proxy(
    ICaptureGraphBuilder* This,
    const GUID *pCategory,
    IBaseFilter *pf,
    REFIID riid,
    IUnknown **ppint);
void __RPC_STUB ICaptureGraphBuilder_RemoteFindInterface_Stub(
    IRpcStubBuffer* This,
    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);

#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)
MIDL_INTERFACE("670d1d20-a068-11d0-b3f0-00aa003761c5")
IAMCopyCaptureFileProgress : public IUnknown
{
    virtual HRESULT STDMETHODCALLTYPE Progress(
        int iProgress) = 0;

};
#ifdef __CRT_UUID_DECL
__CRT_UUID_DECL(IAMCopyCaptureFileProgress, 0x670d1d20, 0xa068, 0x11d0, 0xb3,0xf0, 0x00,0xaa,0x00,0x37,0x61,0xc5)
#endif
#else
typedef struct IAMCopyCaptureFileProgressVtbl {
    BEGIN_INTERFACE

    /*** 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);

    END_INTERFACE
} IAMCopyCaptureFileProgressVtbl;

interface IAMCopyCaptureFileProgress {
    CONST_VTBL IAMCopyCaptureFileProgressVtbl* lpVtbl;
};

#ifdef COBJMACROS
#ifndef WIDL_C_INLINE_WRAPPERS
/*** IUnknown methods ***/
#define IAMCopyCaptureFileProgress_QueryInterface(This,riid,ppvObject) (This)->lpVtbl->QueryInterface(This,riid,ppvObject)
#define IAMCopyCaptureFileProgress_AddRef(This) (This)->lpVtbl->AddRef(This)
#define IAMCopyCaptureFileProgress_Release(This) (This)->lpVtbl->Release(This)
/*** IAMCopyCaptureFileProgress methods ***/
#define IAMCopyCaptureFileProgress_Progress(This,iProgress) (This)->lpVtbl->Progress(This,iProgress)
#else
/*** IUnknown methods ***/
static FORCEINLINE HRESULT IAMCopyCaptureFileProgress_QueryInterface(IAMCopyCaptureFileProgress* This,REFIID riid,void **ppvObject) {
    return This->lpVtbl->QueryInterface(This,riid,ppvObject);
}
static FORCEINLINE ULONG IAMCopyCaptureFileProgress_AddRef(IAMCopyCaptureFileProgress* This) {
    return This->lpVtbl->AddRef(This);
}
static FORCEINLINE ULONG IAMCopyCaptureFileProgress_Release(IAMCopyCaptureFileProgress* This) {
    return This->lpVtbl->Release(This);
}
/*** IAMCopyCaptureFileProgress methods ***/
static FORCEINLINE HRESULT IAMCopyCaptureFileProgress_Progress(IAMCopyCaptureFileProgress* This,int iProgress) {
    return This->lpVtbl->Progress(This,iProgress);
}
#endif
#endif

#endif


#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)
MIDL_INTERFACE("93e5a4e0-2d50-11d2-abfa-00a0c9c6e38d")
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;

};
#ifdef __CRT_UUID_DECL
__CRT_UUID_DECL(ICaptureGraphBuilder2, 0x93e5a4e0, 0x2d50, 0x11d2, 0xab,0xfa, 0x00,0xa0,0xc9,0xc6,0xe3,0x8d)
#endif
#else
typedef struct ICaptureGraphBuilder2Vtbl {
    BEGIN_INTERFACE

    /*** 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);

    END_INTERFACE
} ICaptureGraphBuilder2Vtbl;

interface ICaptureGraphBuilder2 {
    CONST_VTBL ICaptureGraphBuilder2Vtbl* lpVtbl;
};

#ifdef COBJMACROS
#ifndef WIDL_C_INLINE_WRAPPERS
/*** IUnknown methods ***/
#define ICaptureGraphBuilder2_QueryInterface(This,riid,ppvObject) (This)->lpVtbl->QueryInterface(This,riid,ppvObject)
#define ICaptureGraphBuilder2_AddRef(This) (This)->lpVtbl->AddRef(This)
#define ICaptureGraphBuilder2_Release(This) (This)->lpVtbl->Release(This)
/*** ICaptureGraphBuilder2 methods ***/
#define ICaptureGraphBuilder2_SetFiltergraph(This,pfg) (This)->lpVtbl->SetFiltergraph(This,pfg)
#define ICaptureGraphBuilder2_GetFiltergraph(This,ppfg) (This)->lpVtbl->GetFiltergraph(This,ppfg)
#define ICaptureGraphBuilder2_SetOutputFileName(This,pType,lpstrFile,ppf,ppSink) (This)->lpVtbl->SetOutputFileName(This,pType,lpstrFile,ppf,ppSink)
#define ICaptureGraphBuilder2_FindInterface(This,pCategory,pType,pf,riid,ppint) (This)->lpVtbl->FindInterface(This,pCategory,pType,pf,riid,ppint)
#define ICaptureGraphBuilder2_RenderStream(This,pCategory,pType,pSource,pfCompressor,pfRenderer) (This)->lpVtbl->RenderStream(This,pCategory,pType,pSource,pfCompressor,pfRenderer)
#define ICaptureGraphBuilder2_ControlStream(This,pCategory,pType,pFilter,pstart,pstop,wStartCookie,wStopCookie) (This)->lpVtbl->ControlStream(This,pCategory,pType,pFilter,pstart,pstop,wStartCookie,wStopCookie)
#define ICaptureGraphBuilder2_AllocCapFile(This,lpstr,dwlSize) (This)->lpVtbl->AllocCapFile(This,lpstr,dwlSize)
#define ICaptureGraphBuilder2_CopyCaptureFile(This,lpwstrOld,lpwstrNew,fAllowEscAbort,pCallback) (This)->lpVtbl->CopyCaptureFile(This,lpwstrOld,lpwstrNew,fAllowEscAbort,pCallback)
#define ICaptureGraphBuilder2_FindPin(This,pSource,pindir,pCategory,pType,fUnconnected,num,ppPin) (This)->lpVtbl->FindPin(This,pSource,pindir,pCategory,pType,fUnconnected,num,ppPin)
#else
/*** IUnknown methods ***/
static FORCEINLINE HRESULT ICaptureGraphBuilder2_QueryInterface(ICaptureGraphBuilder2* This,REFIID riid,void **ppvObject) {
    return This->lpVtbl->QueryInterface(This,riid,ppvObject);
}
static FORCEINLINE ULONG ICaptureGraphBuilder2_AddRef(ICaptureGraphBuilder2* This) {
    return This->lpVtbl->AddRef(This);
}
static FORCEINLINE ULONG ICaptureGraphBuilder2_Release(ICaptureGraphBuilder2* This) {
    return This->lpVtbl->Release(This);
}
/*** ICaptureGraphBuilder2 methods ***/
static FORCEINLINE HRESULT ICaptureGraphBuilder2_SetFiltergraph(ICaptureGraphBuilder2* This,IGraphBuilder *pfg) {
    return This->lpVtbl->SetFiltergraph(This,pfg);
}
static FORCEINLINE HRESULT ICaptureGraphBuilder2_GetFiltergraph(ICaptureGraphBuilder2* This,IGraphBuilder **ppfg) {
    return This->lpVtbl->GetFiltergraph(This,ppfg);
}
static FORCEINLINE HRESULT ICaptureGraphBuilder2_SetOutputFileName(ICaptureGraphBuilder2* This,const GUID *pType,LPCOLESTR lpstrFile,IBaseFilter **ppf,IFileSinkFilter **ppSink) {
    return This->lpVtbl->SetOutputFileName(This,pType,lpstrFile,ppf,ppSink);
}
static FORCEINLINE HRESULT ICaptureGraphBuilder2_FindInterface(ICaptureGraphBuilder2* This,const GUID *pCategory,const GUID *pType,IBaseFilter *pf,REFIID riid,void **ppint) {
    return This->lpVtbl->FindInterface(This,pCategory,pType,pf,riid,ppint);
}
static FORCEINLINE HRESULT ICaptureGraphBuilder2_RenderStream(ICaptureGraphBuilder2* This,const GUID *pCategory,const GUID *pType,IUnknown *pSource,IBaseFilter *pfCompressor,IBaseFilter *pfRenderer) {
    return This->lpVtbl->RenderStream(This,pCategory,pType,pSource,pfCompressor,pfRenderer);
}
static FORCEINLINE HRESULT ICaptureGraphBuilder2_ControlStream(ICaptureGraphBuilder2* This,const GUID *pCategory,const GUID *pType,IBaseFilter *pFilter,REFERENCE_TIME *pstart,REFERENCE_TIME *pstop,WORD wStartCookie,WORD wStopCookie) {
    return This->lpVtbl->ControlStream(This,pCategory,pType,pFilter,pstart,pstop,wStartCookie,wStopCookie);
}
static FORCEINLINE HRESULT ICaptureGraphBuilder2_AllocCapFile(ICaptureGraphBuilder2* This,LPCOLESTR lpstr,DWORDLONG dwlSize) {
    return This->lpVtbl->AllocCapFile(This,lpstr,dwlSize);
}
static FORCEINLINE HRESULT ICaptureGraphBuilder2_CopyCaptureFile(ICaptureGraphBuilder2* This,LPOLESTR lpwstrOld,LPOLESTR lpwstrNew,int fAllowEscAbort,IAMCopyCaptureFileProgress *pCallback) {
    return This->lpVtbl->CopyCaptureFile(This,lpwstrOld,lpwstrNew,fAllowEscAbort,pCallback);
}
static FORCEINLINE HRESULT ICaptureGraphBuilder2_FindPin(ICaptureGraphBuilder2* This,IUnknown *pSource,PIN_DIRECTION pindir,const GUID *pCategory,const GUID *pType,BOOL fUnconnected,int num,IPin **ppPin) {
    return This->lpVtbl->FindPin(This,pSource,pindir,pCategory,pType,fUnconnected,num,ppPin);
}
#endif
#endif

#endif

HRESULT STDMETHODCALLTYPE ICaptureGraphBuilder2_RemoteFindInterface_Proxy(
    ICaptureGraphBuilder2* This,
    const GUID *pCategory,
    const GUID *pType,
    IBaseFilter *pf,
    REFIID riid,
    IUnknown **ppint);
void __RPC_STUB ICaptureGraphBuilder2_RemoteFindInterface_Stub(
    IRpcStubBuffer* This,
    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);

#endif  /* __ICaptureGraphBuilder2_INTERFACE_DEFINED__ */

/*****************************************************************************
 * IConfigAviMux interface
 */
#ifndef __IConfigAviMux_INTERFACE_DEFINED__
#define __IConfigAviMux_INTERFACE_DEFINED__

DEFINE_GUID(IID_IConfigAviMux, 0x5acd6aa0, 0xf482, 0x11ce, 0x8b,0x67, 0x00,0xaa,0x00,0xa3,0xf1,0xa6);
#if defined(__cplusplus) && !defined(CINTERFACE)
MIDL_INTERFACE("5acd6aa0-f482-11ce-8b67-00aa00a3f1a6")
IConfigAviMux : public IUnknown
{
    virtual HRESULT STDMETHODCALLTYPE SetMasterStream(
        LONG iStream) = 0;

    virtual HRESULT STDMETHODCALLTYPE GetMasterStream(
        LONG *pStream) = 0;

    virtual HRESULT STDMETHODCALLTYPE SetOutputCompatibilityIndex(
        BOOL fOldIndex) = 0;

    virtual HRESULT STDMETHODCALLTYPE GetOutputCompatibilityIndex(
        BOOL *pfOldIndex) = 0;

};
#ifdef __CRT_UUID_DECL
__CRT_UUID_DECL(IConfigAviMux, 0x5acd6aa0, 0xf482, 0x11ce, 0x8b,0x67, 0x00,0xaa,0x00,0xa3,0xf1,0xa6)
#endif
#else
typedef struct IConfigAviMuxVtbl {
    BEGIN_INTERFACE

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

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

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

    /*** IConfigAviMux methods ***/
    HRESULT (STDMETHODCALLTYPE *SetMasterStream)(
        IConfigAviMux *This,
        LONG iStream);

    HRESULT (STDMETHODCALLTYPE *GetMasterStream)(
        IConfigAviMux *This,
        LONG *pStream);

    HRESULT (STDMETHODCALLTYPE *SetOutputCompatibilityIndex)(
        IConfigAviMux *This,
        BOOL fOldIndex);

    HRESULT (STDMETHODCALLTYPE *GetOutputCompatibilityIndex)(
        IConfigAviMux *This,
        BOOL *pfOldIndex);

    END_INTERFACE
} IConfigAviMuxVtbl;

interface IConfigAviMux {
    CONST_VTBL IConfigAviMuxVtbl* lpVtbl;
};

#ifdef COBJMACROS
#ifndef WIDL_C_INLINE_WRAPPERS
/*** IUnknown methods ***/
#define IConfigAviMux_QueryInterface(This,riid,ppvObject) (This)->lpVtbl->QueryInterface(This,riid,ppvObject)
#define IConfigAviMux_AddRef(This) (This)->lpVtbl->AddRef(This)
#define IConfigAviMux_Release(This) (This)->lpVtbl->Release(This)
/*** IConfigAviMux methods ***/
#define IConfigAviMux_SetMasterStream(This,iStream) (This)->lpVtbl->SetMasterStream(This,iStream)
#define IConfigAviMux_GetMasterStream(This,pStream) (This)->lpVtbl->GetMasterStream(This,pStream)
#define IConfigAviMux_SetOutputCompatibilityIndex(This,fOldIndex) (This)->lpVtbl->SetOutputCompatibilityIndex(This,fOldIndex)
#define IConfigAviMux_GetOutputCompatibilityIndex(This,pfOldIndex) (This)->lpVtbl->GetOutputCompatibilityIndex(This,pfOldIndex)
#else
/*** IUnknown methods ***/
static FORCEINLINE HRESULT IConfigAviMux_QueryInterface(IConfigAviMux* This,REFIID riid,void **ppvObject) {
    return This->lpVtbl->QueryInterface(This,riid,ppvObject);
}
static FORCEINLINE ULONG IConfigAviMux_AddRef(IConfigAviMux* This) {
    return This->lpVtbl->AddRef(This);
}
static FORCEINLINE ULONG IConfigAviMux_Release(IConfigAviMux* This) {
    return This->lpVtbl->Release(This);
}
/*** IConfigAviMux methods ***/
static FORCEINLINE HRESULT IConfigAviMux_SetMasterStream(IConfigAviMux* This,LONG iStream) {
    return This->lpVtbl->SetMasterStream(This,iStream);
}
static FORCEINLINE HRESULT IConfigAviMux_GetMasterStream(IConfigAviMux* This,LONG *pStream) {
    return This->lpVtbl->GetMasterStream(This,pStream);
}
static FORCEINLINE HRESULT IConfigAviMux_SetOutputCompatibilityIndex(IConfigAviMux* This,BOOL fOldIndex) {
    return This->lpVtbl->SetOutputCompatibilityIndex(This,fOldIndex);
}
static FORCEINLINE HRESULT IConfigAviMux_GetOutputCompatibilityIndex(IConfigAviMux* This,BOOL *pfOldIndex) {
    return This->lpVtbl->GetOutputCompatibilityIndex(This,pfOldIndex);
}
#endif
#endif

#endif


#endif  /* __IConfigAviMux_INTERFACE_DEFINED__ */

/*****************************************************************************
 * IConfigInterleaving interface
 */
#ifndef __IConfigInterleaving_INTERFACE_DEFINED__
#define __IConfigInterleaving_INTERFACE_DEFINED__

typedef enum InterleavingMode {
    INTERLEAVE_NONE = 0,
    INTERLEAVE_CAPTURE = 1,
    INTERLEAVE_FULL = 2,
    INTERLEAVE_NONE_BUFFERED = 3
} InterleavingMode;
DEFINE_GUID(IID_IConfigInterleaving, 0xbee3d220, 0x157b, 0x11d0, 0xbd,0x23, 0x00,0xa0,0xc9,0x11,0xce,0x86);
#if defined(__cplusplus) && !defined(CINTERFACE)
MIDL_INTERFACE("bee3d220-157b-11d0-bd23-00a0c911ce86")
IConfigInterleaving : public IUnknown
{
    virtual HRESULT STDMETHODCALLTYPE put_Mode(
        InterleavingMode mode) = 0;

    virtual HRESULT STDMETHODCALLTYPE get_Mode(
        InterleavingMode *pMode) = 0;

    virtual HRESULT STDMETHODCALLTYPE put_Interleaving(
        const REFERENCE_TIME *prtInterleave,
        const REFERENCE_TIME *prtPreroll) = 0;

    virtual HRESULT STDMETHODCALLTYPE get_Interleaving(
        REFERENCE_TIME *prtInterleave,
        REFERENCE_TIME *prtPreroll) = 0;

};
#ifdef __CRT_UUID_DECL
__CRT_UUID_DECL(IConfigInterleaving, 0xbee3d220, 0x157b, 0x11d0, 0xbd,0x23, 0x00,0xa0,0xc9,0x11,0xce,0x86)
#endif
#else
typedef struct IConfigInterleavingVtbl {
    BEGIN_INTERFACE

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

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

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

    /*** IConfigInterleaving methods ***/
    HRESULT (STDMETHODCALLTYPE *put_Mode)(
        IConfigInterleaving *This,
        InterleavingMode mode);

    HRESULT (STDMETHODCALLTYPE *get_Mode)(
        IConfigInterleaving *This,
        InterleavingMode *pMode);

    HRESULT (STDMETHODCALLTYPE *put_Interleaving)(
        IConfigInterleaving *This,
        const REFERENCE_TIME *prtInterleave,
        const REFERENCE_TIME *prtPreroll);

    HRESULT (STDMETHODCALLTYPE *get_Interleaving)(
        IConfigInterleaving *This,
        REFERENCE_TIME *prtInterleave,
        REFERENCE_TIME *prtPreroll);

    END_INTERFACE
} IConfigInterleavingVtbl;

interface IConfigInterleaving {
    CONST_VTBL IConfigInterleavingVtbl* lpVtbl;
};

#ifdef COBJMACROS
#ifndef WIDL_C_INLINE_WRAPPERS
/*** IUnknown methods ***/
#define IConfigInterleaving_QueryInterface(This,riid,ppvObject) (This)->lpVtbl->QueryInterface(This,riid,ppvObject)
#define IConfigInterleaving_AddRef(This) (This)->lpVtbl->AddRef(This)
#define IConfigInterleaving_Release(This) (This)->lpVtbl->Release(This)
/*** IConfigInterleaving methods ***/
#define IConfigInterleaving_put_Mode(This,mode) (This)->lpVtbl->put_Mode(This,mode)
#define IConfigInterleaving_get_Mode(This,pMode) (This)->lpVtbl->get_Mode(This,pMode)
#define IConfigInterleaving_put_Interleaving(This,prtInterleave,prtPreroll) (This)->lpVtbl->put_Interleaving(This,prtInterleave,prtPreroll)
#define IConfigInterleaving_get_Interleaving(This,prtInterleave,prtPreroll) (This)->lpVtbl->get_Interleaving(This,prtInterleave,prtPreroll)
#else
/*** IUnknown methods ***/
static FORCEINLINE HRESULT IConfigInterleaving_QueryInterface(IConfigInterleaving* This,REFIID riid,void **ppvObject) {
    return This->lpVtbl->QueryInterface(This,riid,ppvObject);
}
static FORCEINLINE ULONG IConfigInterleaving_AddRef(IConfigInterleaving* This) {
    return This->lpVtbl->AddRef(This);
}
static FORCEINLINE ULONG IConfigInterleaving_Release(IConfigInterleaving* This) {
    return This->lpVtbl->Release(This);
}
/*** IConfigInterleaving methods ***/
static FORCEINLINE HRESULT IConfigInterleaving_put_Mode(IConfigInterleaving* This,InterleavingMode mode) {
    return This->lpVtbl->put_Mode(This,mode);
}
static FORCEINLINE HRESULT IConfigInterleaving_get_Mode(IConfigInterleaving* This,InterleavingMode *pMode) {
    return This->lpVtbl->get_Mode(This,pMode);
}
static FORCEINLINE HRESULT IConfigInterleaving_put_Interleaving(IConfigInterleaving* This,const REFERENCE_TIME *prtInterleave,const REFERENCE_TIME *prtPreroll) {
    return This->lpVtbl->put_Interleaving(This,prtInterleave,prtPreroll);
}
static FORCEINLINE HRESULT IConfigInterleaving_get_Interleaving(IConfigInterleaving* This,REFERENCE_TIME *prtInterleave,REFERENCE_TIME *prtPreroll) {
    return This->lpVtbl->get_Interleaving(This,prtInterleave,prtPreroll);
}
#endif
#endif

#endif


#endif  /* __IConfigInterleaving_INTERFACE_DEFINED__ */

/*****************************************************************************
 * IAMClockSlave interface
 */
#ifndef __IAMClockSlave_INTERFACE_DEFINED__
#define __IAMClockSlave_INTERFACE_DEFINED__

DEFINE_GUID(IID_IAMClockSlave, 0x9fd52741, 0x176d, 0x4b36, 0x8f,0x51, 0xca,0x8f,0x93,0x32,0x23,0xbe);
#if defined(__cplusplus) && !defined(CINTERFACE)
MIDL_INTERFACE("9fd52741-176d-4b36-8f51-ca8f933223be")
IAMClockSlave : public IUnknown
{
    virtual HRESULT STDMETHODCALLTYPE SetErrorTolerance(
        DWORD dwTolerance) = 0;

    virtual HRESULT STDMETHODCALLTYPE GetErrorTolerance(
        DWORD *pdwTolerance) = 0;

};
#ifdef __CRT_UUID_DECL
__CRT_UUID_DECL(IAMClockSlave, 0x9fd52741, 0x176d, 0x4b36, 0x8f,0x51, 0xca,0x8f,0x93,0x32,0x23,0xbe)
#endif
#else
typedef struct IAMClockSlaveVtbl {
    BEGIN_INTERFACE

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

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

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

    /*** IAMClockSlave methods ***/
    HRESULT (STDMETHODCALLTYPE *SetErrorTolerance)(
        IAMClockSlave *This,
        DWORD dwTolerance);

    HRESULT (STDMETHODCALLTYPE *GetErrorTolerance)(
        IAMClockSlave *This,
        DWORD *pdwTolerance);

    END_INTERFACE
} IAMClockSlaveVtbl;

interface IAMClockSlave {
    CONST_VTBL IAMClockSlaveVtbl* lpVtbl;
};

#ifdef COBJMACROS
#ifndef WIDL_C_INLINE_WRAPPERS
/*** IUnknown methods ***/
#define IAMClockSlave_QueryInterface(This,riid,ppvObject) (This)->lpVtbl->QueryInterface(This,riid,ppvObject)
#define IAMClockSlave_AddRef(This) (This)->lpVtbl->AddRef(This)
#define IAMClockSlave_Release(This) (This)->lpVtbl->Release(This)
/*** IAMClockSlave methods ***/
#define IAMClockSlave_SetErrorTolerance(This,dwTolerance) (This)->lpVtbl->SetErrorTolerance(This,dwTolerance)
#define IAMClockSlave_GetErrorTolerance(This,pdwTolerance) (This)->lpVtbl->GetErrorTolerance(This,pdwTolerance)
#else
/*** IUnknown methods ***/
static FORCEINLINE HRESULT IAMClockSlave_QueryInterface(IAMClockSlave* This,REFIID riid,void **ppvObject) {
    return This->lpVtbl->QueryInterface(This,riid,ppvObject);
}
static FORCEINLINE ULONG IAMClockSlave_AddRef(IAMClockSlave* This) {
    return This->lpVtbl->AddRef(This);
}
static FORCEINLINE ULONG IAMClockSlave_Release(IAMClockSlave* This) {
    return This->lpVtbl->Release(This);
}
/*** IAMClockSlave methods ***/
static FORCEINLINE HRESULT IAMClockSlave_SetErrorTolerance(IAMClockSlave* This,DWORD dwTolerance) {
    return This->lpVtbl->SetErrorTolerance(This,dwTolerance);
}
static FORCEINLINE HRESULT IAMClockSlave_GetErrorTolerance(IAMClockSlave* This,DWORD *pdwTolerance) {
    return This->lpVtbl->GetErrorTolerance(This,pdwTolerance);
}
#endif
#endif

#endif


#endif  /* __IAMClockSlave_INTERFACE_DEFINED__ */

typedef struct _AMCOPPSignature {
    BYTE Signature[256];
} AMCOPPSignature;
typedef struct _AMCOPPCommand {
    GUID macKDI;
    GUID guidCommandID;
    DWORD dwSequence;
    DWORD bSizeData;
    BYTE CommandData[4056];
} AMCOPPCommand;
typedef struct _AMCOPPCommand *LPAMCOPPCommand;
typedef struct _AMCOPPStatusInput {
    GUID rApp;
    GUID guidStatusRequestID;
    DWORD dwSequence;
    DWORD cbSizeData;
    BYTE StatusData[4056];
} AMCOPPStatusInput;
typedef struct _AMCOPPStatusInput *LPAMCOPPStatusInput;
typedef struct _AMCOPPStatusOutput {
    GUID macKDI;
    DWORD cbSizeData;
    BYTE COPPStatus[4076];
} AMCOPPStatusOutput;
typedef struct _AMCOPPStatusOutput *LPAMCOPPStatusOutput;
/*****************************************************************************
 * IAMCertifiedOutputProtection interface
 */
#ifndef __IAMCertifiedOutputProtection_INTERFACE_DEFINED__
#define __IAMCertifiedOutputProtection_INTERFACE_DEFINED__

DEFINE_GUID(IID_IAMCertifiedOutputProtection, 0x6feded3e, 0x0ff1, 0x4901, 0xa2,0xf1, 0x43,0xf7,0x01,0x2c,0x85,0x15);
#if defined(__cplusplus) && !defined(CINTERFACE)
MIDL_INTERFACE("6feded3e-0ff1-4901-a2f1-43f7012c8515")
IAMCertifiedOutputProtection : public IUnknown
{
    virtual HRESULT STDMETHODCALLTYPE KeyExchange(
        GUID *pRandom,
        BYTE **VarLenCertGH,
        DWORD *pdwLengthCertGH) = 0;

    virtual HRESULT STDMETHODCALLTYPE SessionSequenceStart(
        AMCOPPSignature *pSig) = 0;

    virtual HRESULT STDMETHODCALLTYPE ProtectionCommand(
        const AMCOPPCommand *cmd) = 0;

    virtual HRESULT STDMETHODCALLTYPE ProtectionStatus(
        const AMCOPPStatusInput *pStatusInput,
        AMCOPPStatusOutput *pStatusOutput) = 0;

};
#ifdef __CRT_UUID_DECL
__CRT_UUID_DECL(IAMCertifiedOutputProtection, 0x6feded3e, 0x0ff1, 0x4901, 0xa2,0xf1, 0x43,0xf7,0x01,0x2c,0x85,0x15)
#endif
#else
typedef struct IAMCertifiedOutputProtectionVtbl {
    BEGIN_INTERFACE

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

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

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

    /*** IAMCertifiedOutputProtection methods ***/
    HRESULT (STDMETHODCALLTYPE *KeyExchange)(
        IAMCertifiedOutputProtection *This,
        GUID *pRandom,
        BYTE **VarLenCertGH,
        DWORD *pdwLengthCertGH);

    HRESULT (STDMETHODCALLTYPE *SessionSequenceStart)(
        IAMCertifiedOutputProtection *This,
        AMCOPPSignature *pSig);

    HRESULT (STDMETHODCALLTYPE *ProtectionCommand)(
        IAMCertifiedOutputProtection *This,
        const AMCOPPCommand *cmd);

    HRESULT (STDMETHODCALLTYPE *ProtectionStatus)(
        IAMCertifiedOutputProtection *This,
        const AMCOPPStatusInput *pStatusInput,
        AMCOPPStatusOutput *pStatusOutput);

    END_INTERFACE
} IAMCertifiedOutputProtectionVtbl;

interface IAMCertifiedOutputProtection {
    CONST_VTBL IAMCertifiedOutputProtectionVtbl* lpVtbl;
};

#ifdef COBJMACROS
#ifndef WIDL_C_INLINE_WRAPPERS
/*** IUnknown methods ***/
#define IAMCertifiedOutputProtection_QueryInterface(This,riid,ppvObject) (This)->lpVtbl->QueryInterface(This,riid,ppvObject)
#define IAMCertifiedOutputProtection_AddRef(This) (This)->lpVtbl->AddRef(This)
#define IAMCertifiedOutputProtection_Release(This) (This)->lpVtbl->Release(This)
/*** IAMCertifiedOutputProtection methods ***/
#define IAMCertifiedOutputProtection_KeyExchange(This,pRandom,VarLenCertGH,pdwLengthCertGH) (This)->lpVtbl->KeyExchange(This,pRandom,VarLenCertGH,pdwLengthCertGH)
#define IAMCertifiedOutputProtection_SessionSequenceStart(This,pSig) (This)->lpVtbl->SessionSequenceStart(This,pSig)
#define IAMCertifiedOutputProtection_ProtectionCommand(This,cmd) (This)->lpVtbl->ProtectionCommand(This,cmd)
#define IAMCertifiedOutputProtection_ProtectionStatus(This,pStatusInput,pStatusOutput) (This)->lpVtbl->ProtectionStatus(This,pStatusInput,pStatusOutput)
#else
/*** IUnknown methods ***/
static FORCEINLINE HRESULT IAMCertifiedOutputProtection_QueryInterface(IAMCertifiedOutputProtection* This,REFIID riid,void **ppvObject) {
    return This->lpVtbl->QueryInterface(This,riid,ppvObject);
}
static FORCEINLINE ULONG IAMCertifiedOutputProtection_AddRef(IAMCertifiedOutputProtection* This) {
    return This->lpVtbl->AddRef(This);
}
static FORCEINLINE ULONG IAMCertifiedOutputProtection_Release(IAMCertifiedOutputProtection* This) {
    return This->lpVtbl->Release(This);
}
/*** IAMCertifiedOutputProtection methods ***/
static FORCEINLINE HRESULT IAMCertifiedOutputProtection_KeyExchange(IAMCertifiedOutputProtection* This,GUID *pRandom,BYTE **VarLenCertGH,DWORD *pdwLengthCertGH) {
    return This->lpVtbl->KeyExchange(This,pRandom,VarLenCertGH,pdwLengthCertGH);
}
static FORCEINLINE HRESULT IAMCertifiedOutputProtection_SessionSequenceStart(IAMCertifiedOutputProtection* This,AMCOPPSignature *pSig) {
    return This->lpVtbl->SessionSequenceStart(This,pSig);
}
static FORCEINLINE HRESULT IAMCertifiedOutputProtection_ProtectionCommand(IAMCertifiedOutputProtection* This,const AMCOPPCommand *cmd) {
    return This->lpVtbl->ProtectionCommand(This,cmd);
}
static FORCEINLINE HRESULT IAMCertifiedOutputProtection_ProtectionStatus(IAMCertifiedOutputProtection* This,const AMCOPPStatusInput *pStatusInput,AMCOPPStatusOutput *pStatusOutput) {
    return This->lpVtbl->ProtectionStatus(This,pStatusInput,pStatusOutput);
}
#endif
#endif

#endif


#endif  /* __IAMCertifiedOutputProtection_INTERFACE_DEFINED__ */

enum _AM_RENSDEREXFLAGS {
    AM_RENDEREX_RENDERTOEXISTINGRENDERERS = 0x1
};
/*****************************************************************************
 * 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)
MIDL_INTERFACE("36b73882-c2c8-11cf-8b46-00805f6cef60")
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;

};
#ifdef __CRT_UUID_DECL
__CRT_UUID_DECL(IFilterGraph2, 0x36b73882, 0xc2c8, 0x11cf, 0x8b,0x46, 0x00,0x80,0x5f,0x6c,0xef,0x60)
#endif
#else
typedef struct IFilterGraph2Vtbl {
    BEGIN_INTERFACE

    /*** 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);

    END_INTERFACE
} IFilterGraph2Vtbl;

interface IFilterGraph2 {
    CONST_VTBL IFilterGraph2Vtbl* lpVtbl;
};

#ifdef COBJMACROS
#ifndef WIDL_C_INLINE_WRAPPERS
/*** IUnknown methods ***/
#define IFilterGraph2_QueryInterface(This,riid,ppvObject) (This)->lpVtbl->QueryInterface(This,riid,ppvObject)
#define IFilterGraph2_AddRef(This) (This)->lpVtbl->AddRef(This)
#define IFilterGraph2_Release(This) (This)->lpVtbl->Release(This)
/*** IFilterGraph methods ***/
#define IFilterGraph2_AddFilter(This,pFilter,pName) (This)->lpVtbl->AddFilter(This,pFilter,pName)
#define IFilterGraph2_RemoveFilter(This,pFilter) (This)->lpVtbl->RemoveFilter(This,pFilter)
#define IFilterGraph2_EnumFilters(This,ppEnum) (This)->lpVtbl->EnumFilters(This,ppEnum)
#define IFilterGraph2_FindFilterByName(This,pName,ppFilter) (This)->lpVtbl->FindFilterByName(This,pName,ppFilter)
#define IFilterGraph2_ConnectDirect(This,ppinOut,ppinIn,pmt) (This)->lpVtbl->ConnectDirect(This,ppinOut,ppinIn,pmt)
#define IFilterGraph2_Reconnect(This,ppin) (This)->lpVtbl->Reconnect(This,ppin)
#define IFilterGraph2_Disconnect(This,ppin) (This)->lpVtbl->Disconnect(This,ppin)
#define IFilterGraph2_SetDefaultSyncSource(This) (This)->lpVtbl->SetDefaultSyncSource(This)
/*** IGraphBuilder methods ***/
#define IFilterGraph2_Connect(This,ppinOut,ppinIn) (This)->lpVtbl->Connect(This,ppinOut,ppinIn)
#define IFilterGraph2_Render(This,ppinOut) (This)->lpVtbl->Render(This,ppinOut)
#define IFilterGraph2_RenderFile(This,lpcwstrFile,lpcwstrPlayList) (This)->lpVtbl->RenderFile(This,lpcwstrFile,lpcwstrPlayList)
#define IFilterGraph2_AddSourceFilter(This,lpcwstrFileName,lpcwstrFilterName,ppFilter) (This)->lpVtbl->AddSourceFilter(This,lpcwstrFileName,lpcwstrFilterName,ppFilter)
#define IFilterGraph2_SetLogFile(This,hFile) (This)->lpVtbl->SetLogFile(This,hFile)
#define IFilterGraph2_Abort(This) (This)->lpVtbl->Abort(This)
#define IFilterGraph2_ShouldOperationContinue(This) (This)->lpVtbl->ShouldOperationContinue(This)
/*** IFilterGraph2 methods ***/
#define IFilterGraph2_AddSourceFilterForMoniker(This,pMoniker,pCtx,lpcwstrFilterName,ppFilter) (This)->lpVtbl->AddSourceFilterForMoniker(This,pMoniker,pCtx,lpcwstrFilterName,ppFilter)
#define IFilterGraph2_ReconnectEx(This,ppin,pmt) (This)->lpVtbl->ReconnectEx(This,ppin,pmt)
#define IFilterGraph2_RenderEx(This,pPinOut,dwFlags,pvContext) (This)->lpVtbl->RenderEx(This,pPinOut,dwFlags,pvContext)
#else
/*** IUnknown methods ***/
static FORCEINLINE HRESULT IFilterGraph2_QueryInterface(IFilterGraph2* This,REFIID riid,void **ppvObject) {
    return This->lpVtbl->QueryInterface(This,riid,ppvObject);
}
static FORCEINLINE ULONG IFilterGraph2_AddRef(IFilterGraph2* This) {
    return This->lpVtbl->AddRef(This);
}
static FORCEINLINE ULONG IFilterGraph2_Release(IFilterGraph2* This) {
    return This->lpVtbl->Release(This);
}
/*** IFilterGraph methods ***/
static FORCEINLINE HRESULT IFilterGraph2_AddFilter(IFilterGraph2* This,IBaseFilter *pFilter,LPCWSTR pName) {
    return This->lpVtbl->AddFilter(This,pFilter,pName);
}
static FORCEINLINE HRESULT IFilterGraph2_RemoveFilter(IFilterGraph2* This,IBaseFilter *pFilter) {
    return This->lpVtbl->RemoveFilter(This,pFilter);
}
static FORCEINLINE HRESULT IFilterGraph2_EnumFilters(IFilterGraph2* This,IEnumFilters **ppEnum) {
    return This->lpVtbl->EnumFilters(This,ppEnum);
}
static FORCEINLINE HRESULT IFilterGraph2_FindFilterByName(IFilterGraph2* This,LPCWSTR pName,IBaseFilter **ppFilter) {
    return This->lpVtbl->FindFilterByName(This,pName,ppFilter);
}
static FORCEINLINE HRESULT IFilterGraph2_ConnectDirect(IFilterGraph2* This,IPin *ppinOut,IPin *ppinIn,const AM_MEDIA_TYPE *pmt) {
    return This->lpVtbl->ConnectDirect(This,ppinOut,ppinIn,pmt);
}
static FORCEINLINE HRESULT IFilterGraph2_Reconnect(IFilterGraph2* This,IPin *ppin) {
    return This->lpVtbl->Reconnect(This,ppin);
}
static FORCEINLINE HRESULT IFilterGraph2_Disconnect(IFilterGraph2* This,IPin *ppin) {
    return This->lpVtbl->Disconnect(This,ppin);
}
static FORCEINLINE HRESULT IFilterGraph2_SetDefaultSyncSource(IFilterGraph2* This) {
    return This->lpVtbl->SetDefaultSyncSource(This);
}
/*** IGraphBuilder methods ***/
static FORCEINLINE HRESULT IFilterGraph2_Connect(IFilterGraph2* This,IPin *ppinOut,IPin *ppinIn) {
    return This->lpVtbl->Connect(This,ppinOut,ppinIn);
}
static FORCEINLINE HRESULT IFilterGraph2_Render(IFilterGraph2* This,IPin *ppinOut) {
    return This->lpVtbl->Render(This,ppinOut);
}
static FORCEINLINE HRESULT IFilterGraph2_RenderFile(IFilterGraph2* This,LPCWSTR lpcwstrFile,LPCWSTR lpcwstrPlayList) {
    return This->lpVtbl->RenderFile(This,lpcwstrFile,lpcwstrPlayList);
}
static FORCEINLINE HRESULT IFilterGraph2_AddSourceFilter(IFilterGraph2* This,LPCWSTR lpcwstrFileName,LPCWSTR lpcwstrFilterName,IBaseFilter **ppFilter) {
    return This->lpVtbl->AddSourceFilter(This,lpcwstrFileName,lpcwstrFilterName,ppFilter);
}
static FORCEINLINE HRESULT IFilterGraph2_SetLogFile(IFilterGraph2* This,DWORD_PTR hFile) {
    return This->lpVtbl->SetLogFile(This,hFile);
}
static FORCEINLINE HRESULT IFilterGraph2_Abort(IFilterGraph2* This) {
    return This->lpVtbl->Abort(This);
}
static FORCEINLINE HRESULT IFilterGraph2_ShouldOperationContinue(IFilterGraph2* This) {
    return This->lpVtbl->ShouldOperationContinue(This);
}
/*** IFilterGraph2 methods ***/
static FORCEINLINE HRESULT IFilterGraph2_AddSourceFilterForMoniker(IFilterGraph2* This,IMoniker *pMoniker,IBindCtx *pCtx,LPCWSTR lpcwstrFilterName,IBaseFilter **ppFilter) {
    return This->lpVtbl->AddSourceFilterForMoniker(This,pMoniker,pCtx,lpcwstrFilterName,ppFilter);
}
static FORCEINLINE HRESULT IFilterGraph2_ReconnectEx(IFilterGraph2* This,IPin *ppin,const AM_MEDIA_TYPE *pmt) {
    return This->lpVtbl->ReconnectEx(This,ppin,pmt);
}
static FORCEINLINE HRESULT IFilterGraph2_RenderEx(IFilterGraph2* This,IPin *pPinOut,DWORD dwFlags,DWORD *pvContext) {
    return This->lpVtbl->RenderEx(This,pPinOut,dwFlags,pvContext);
}
#endif
#endif

#endif


#endif  /* __IFilterGraph2_INTERFACE_DEFINED__ */

/*****************************************************************************
 * 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)
MIDL_INTERFACE("56a868bf-0ad4-11ce-b03a-0020af0ba770")
IStreamBuilder : public IUnknown
{
    virtual HRESULT STDMETHODCALLTYPE Render(
        IPin *ppinOut,
        IGraphBuilder *pGraph) = 0;

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

};
#ifdef __CRT_UUID_DECL
__CRT_UUID_DECL(IStreamBuilder, 0x56a868bf, 0x0ad4, 0x11ce, 0xb0,0x3a, 0x00,0x20,0xaf,0x0b,0xa7,0x70)
#endif
#else
typedef struct IStreamBuilderVtbl {
    BEGIN_INTERFACE

    /*** 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);

    END_INTERFACE
} IStreamBuilderVtbl;

interface IStreamBuilder {
    CONST_VTBL IStreamBuilderVtbl* lpVtbl;
};

#ifdef COBJMACROS
#ifndef WIDL_C_INLINE_WRAPPERS
/*** IUnknown methods ***/
#define IStreamBuilder_QueryInterface(This,riid,ppvObject) (This)->lpVtbl->QueryInterface(This,riid,ppvObject)
#define IStreamBuilder_AddRef(This) (This)->lpVtbl->AddRef(This)
#define IStreamBuilder_Release(This) (This)->lpVtbl->Release(This)
/*** IStreamBuilder methods ***/
#define IStreamBuilder_Render(This,ppinOut,pGraph) (This)->lpVtbl->Render(This,ppinOut,pGraph)
#define IStreamBuilder_Backout(This,ppinOut,pGraph) (This)->lpVtbl->Backout(This,ppinOut,pGraph)
#else
/*** IUnknown methods ***/
static FORCEINLINE HRESULT IStreamBuilder_QueryInterface(IStreamBuilder* This,REFIID riid,void **ppvObject) {
    return This->lpVtbl->QueryInterface(This,riid,ppvObject);
}
static FORCEINLINE ULONG IStreamBuilder_AddRef(IStreamBuilder* This) {
    return This->lpVtbl->AddRef(This);
}
static FORCEINLINE ULONG IStreamBuilder_Release(IStreamBuilder* This) {
    return This->lpVtbl->Release(This);
}
/*** IStreamBuilder methods ***/
static FORCEINLINE HRESULT IStreamBuilder_Render(IStreamBuilder* This,IPin *ppinOut,IGraphBuilder *pGraph) {
    return This->lpVtbl->Render(This,ppinOut,pGraph);
}
static FORCEINLINE HRESULT IStreamBuilder_Backout(IStreamBuilder* This,IPin *ppinOut,IGraphBuilder *pGraph) {
    return This->lpVtbl->Backout(This,ppinOut,pGraph);
}
#endif
#endif

#endif


#endif  /* __IStreamBuilder_INTERFACE_DEFINED__ */

/*****************************************************************************
 * IAMStreamConfig interface
 */
#ifndef __IAMStreamConfig_INTERFACE_DEFINED__
#define __IAMStreamConfig_INTERFACE_DEFINED__

typedef struct _VIDEO_STREAM_CONFIG_CAPS {
    GUID guid;
    ULONG VideoStandard;
    SIZE InputSize;
    SIZE MinCroppingSize;
    SIZE MaxCroppingSize;
    int CropGranularityX;
    int CropGranularityY;
    int CropAlignX;
    int CropAlignY;
    SIZE MinOutputSize;
    SIZE MaxOutputSize;
    int OutputGranularityX;
    int OutputGranularityY;
    int StretchTapsX;
    int StretchTapsY;
    int ShrinkTapsX;
    int ShrinkTapsY;
    LONGLONG MinFrameInterval;
    LONGLONG MaxFrameInterval;
    LONG MinBitsPerSecond;
    LONG MaxBitsPerSecond;
} VIDEO_STREAM_CONFIG_CAPS;
typedef struct _AUDIO_STREAM_CONFIG_CAPS {
    GUID guid;
    ULONG MinimumChannels;
    ULONG MaximumChannels;
    ULONG ChannelsGranularity;
    ULONG MinimumBitsPerSample;
    ULONG MaximumBitsPerSample;
    ULONG BitsPerSampleGranularity;
    ULONG MinimumSampleFrequency;
    ULONG MaximumSampleFrequency;
    ULONG SampleFrequencyGranularity;
} AUDIO_STREAM_CONFIG_CAPS;
DEFINE_GUID(IID_IAMStreamConfig, 0xc6e13340, 0x30ac, 0x11d0, 0xa1,0x8c, 0x00,0xa0,0xc9,0x11,0x89,0x56);
#if defined(__cplusplus) && !defined(CINTERFACE)
MIDL_INTERFACE("c6e13340-30ac-11d0-a18c-00a0c9118956")
IAMStreamConfig : public IUnknown
{
    virtual HRESULT STDMETHODCALLTYPE SetFormat(
        AM_MEDIA_TYPE *pmt) = 0;

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

    virtual HRESULT STDMETHODCALLTYPE GetNumberOfCapabilities(
        int *piCount,
        int *piSize) = 0;

    virtual HRESULT STDMETHODCALLTYPE GetStreamCaps(
        int iIndex,
        AM_MEDIA_TYPE **pmt,
        BYTE *pSCC) = 0;

};
#ifdef __CRT_UUID_DECL
__CRT_UUID_DECL(IAMStreamConfig, 0xc6e13340, 0x30ac, 0x11d0, 0xa1,0x8c, 0x00,0xa0,0xc9,0x11,0x89,0x56)
#endif
#else
typedef struct IAMStreamConfigVtbl {
    BEGIN_INTERFACE

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

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

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

    /*** IAMStreamConfig methods ***/
    HRESULT (STDMETHODCALLTYPE *SetFormat)(
        IAMStreamConfig *This,
        AM_MEDIA_TYPE *pmt);

    HRESULT (STDMETHODCALLTYPE *GetFormat)(
        IAMStreamConfig *This,
        AM_MEDIA_TYPE **pmt);

    HRESULT (STDMETHODCALLTYPE *GetNumberOfCapabilities)(
        IAMStreamConfig *This,
        int *piCount,
        int *piSize);

    HRESULT (STDMETHODCALLTYPE *GetStreamCaps)(
        IAMStreamConfig *This,
        int iIndex,
        AM_MEDIA_TYPE **pmt,
        BYTE *pSCC);

    END_INTERFACE
} IAMStreamConfigVtbl;

interface IAMStreamConfig {
    CONST_VTBL IAMStreamConfigVtbl* lpVtbl;
};

#ifdef COBJMACROS
#ifndef WIDL_C_INLINE_WRAPPERS
/*** IUnknown methods ***/
#define IAMStreamConfig_QueryInterface(This,riid,ppvObject) (This)->lpVtbl->QueryInterface(This,riid,ppvObject)
#define IAMStreamConfig_AddRef(This) (This)->lpVtbl->AddRef(This)
#define IAMStreamConfig_Release(This) (This)->lpVtbl->Release(This)
/*** IAMStreamConfig methods ***/
#define IAMStreamConfig_SetFormat(This,pmt) (This)->lpVtbl->SetFormat(This,pmt)
#define IAMStreamConfig_GetFormat(This,pmt) (This)->lpVtbl->GetFormat(This,pmt)
#define IAMStreamConfig_GetNumberOfCapabilities(This,piCount,piSize) (This)->lpVtbl->GetNumberOfCapabilities(This,piCount,piSize)
#define IAMStreamConfig_GetStreamCaps(This,iIndex,pmt,pSCC) (This)->lpVtbl->GetStreamCaps(This,iIndex,pmt,pSCC)
#else
/*** IUnknown methods ***/
static FORCEINLINE HRESULT IAMStreamConfig_QueryInterface(IAMStreamConfig* This,REFIID riid,void **ppvObject) {
    return This->lpVtbl->QueryInterface(This,riid,ppvObject);
}
static FORCEINLINE ULONG IAMStreamConfig_AddRef(IAMStreamConfig* This) {
    return This->lpVtbl->AddRef(This);
}
static FORCEINLINE ULONG IAMStreamConfig_Release(IAMStreamConfig* This) {
    return This->lpVtbl->Release(This);
}
/*** IAMStreamConfig methods ***/
static FORCEINLINE HRESULT IAMStreamConfig_SetFormat(IAMStreamConfig* This,AM_MEDIA_TYPE *pmt) {
    return This->lpVtbl->SetFormat(This,pmt);
}
static FORCEINLINE HRESULT IAMStreamConfig_GetFormat(IAMStreamConfig* This,AM_MEDIA_TYPE **pmt) {
    return This->lpVtbl->GetFormat(This,pmt);
}
static FORCEINLINE HRESULT IAMStreamConfig_GetNumberOfCapabilities(IAMStreamConfig* This,int *piCount,int *piSize) {
    return This->lpVtbl->GetNumberOfCapabilities(This,piCount,piSize);
}
static FORCEINLINE HRESULT IAMStreamConfig_GetStreamCaps(IAMStreamConfig* This,int iIndex,AM_MEDIA_TYPE **pmt,BYTE *pSCC) {
    return This->lpVtbl->GetStreamCaps(This,iIndex,pmt,pSCC);
}
#endif
#endif

#endif


#endif  /* __IAMStreamConfig_INTERFACE_DEFINED__ */

typedef enum tagVideoProcAmpProperty {
    VideoProcAmp_Brightness = 0,
    VideoProcAmp_Contrast = 1,
    VideoProcAmp_Hue = 2,
    VideoProcAmp_Saturation = 3,
    VideoProcAmp_Sharpness = 4,
    VideoProcAmp_Gamma = 5,
    VideoProcAmp_ColorEnable = 6,
    VideoProcAmp_WhiteBalance = 7,
    VideoProcAmp_BacklightCompensation = 8,
    VideoProcAmp_Gain = 9
} VideoProcAmpProperty;
typedef enum tagVideoProcAmpFlags {
    VideoProcAmp_Flags_Auto = 0x1,
    VideoProcAmp_Flags_Manual = 0x2
} VideoProcAmpFlags;
/*****************************************************************************
 * IAMVideoProcAmp interface
 */
#ifndef __IAMVideoProcAmp_INTERFACE_DEFINED__
#define __IAMVideoProcAmp_INTERFACE_DEFINED__

DEFINE_GUID(IID_IAMVideoProcAmp, 0xc6e13360, 0x30ac, 0x11d0, 0xa1,0x8c, 0x00,0xa0,0xc9,0x11,0x89,0x56);
#if defined(__cplusplus) && !defined(CINTERFACE)
MIDL_INTERFACE("c6e13360-30ac-11d0-a18c-00a0c9118956")
IAMVideoProcAmp : public IUnknown
{
    virtual HRESULT STDMETHODCALLTYPE GetRange(
        LONG Property,
        LONG *pMin,
        LONG *pMax,
        LONG *pSteppingDelta,
        LONG *pDefault,
        LONG *pCapsFlags) = 0;

    virtual HRESULT STDMETHODCALLTYPE Set(
        LONG Property,
        LONG lValue,
        LONG Flags) = 0;

    virtual HRESULT STDMETHODCALLTYPE Get(
        LONG Property,
        LONG *lValue,
        LONG *Flags) = 0;

};
#ifdef __CRT_UUID_DECL
__CRT_UUID_DECL(IAMVideoProcAmp, 0xc6e13360, 0x30ac, 0x11d0, 0xa1,0x8c, 0x00,0xa0,0xc9,0x11,0x89,0x56)
#endif
#else
typedef struct IAMVideoProcAmpVtbl {
    BEGIN_INTERFACE

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

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

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

    /*** IAMVideoProcAmp methods ***/
    HRESULT (STDMETHODCALLTYPE *GetRange)(
        IAMVideoProcAmp *This,
        LONG Property,
        LONG *pMin,
        LONG *pMax,
        LONG *pSteppingDelta,
        LONG *pDefault,
        LONG *pCapsFlags);

    HRESULT (STDMETHODCALLTYPE *Set)(
        IAMVideoProcAmp *This,
        LONG Property,
        LONG lValue,
        LONG Flags);

    HRESULT (STDMETHODCALLTYPE *Get)(
        IAMVideoProcAmp *This,
        LONG Property,
        LONG *lValue,
        LONG *Flags);

    END_INTERFACE
} IAMVideoProcAmpVtbl;

interface IAMVideoProcAmp {
    CONST_VTBL IAMVideoProcAmpVtbl* lpVtbl;
};

#ifdef COBJMACROS
#ifndef WIDL_C_INLINE_WRAPPERS
/*** IUnknown methods ***/
#define IAMVideoProcAmp_QueryInterface(This,riid,ppvObject) (This)->lpVtbl->QueryInterface(This,riid,ppvObject)
#define IAMVideoProcAmp_AddRef(This) (This)->lpVtbl->AddRef(This)
#define IAMVideoProcAmp_Release(This) (This)->lpVtbl->Release(This)
/*** IAMVideoProcAmp methods ***/
#define IAMVideoProcAmp_GetRange(This,Property,pMin,pMax,pSteppingDelta,pDefault,pCapsFlags) (This)->lpVtbl->GetRange(This,Property,pMin,pMax,pSteppingDelta,pDefault,pCapsFlags)
#define IAMVideoProcAmp_Set(This,Property,lValue,Flags) (This)->lpVtbl->Set(This,Property,lValue,Flags)
#define IAMVideoProcAmp_Get(This,Property,lValue,Flags) (This)->lpVtbl->Get(This,Property,lValue,Flags)
#else
/*** IUnknown methods ***/
static FORCEINLINE HRESULT IAMVideoProcAmp_QueryInterface(IAMVideoProcAmp* This,REFIID riid,void **ppvObject) {
    return This->lpVtbl->QueryInterface(This,riid,ppvObject);
}
static FORCEINLINE ULONG IAMVideoProcAmp_AddRef(IAMVideoProcAmp* This) {
    return This->lpVtbl->AddRef(This);
}
static FORCEINLINE ULONG IAMVideoProcAmp_Release(IAMVideoProcAmp* This) {
    return This->lpVtbl->Release(This);
}
/*** IAMVideoProcAmp methods ***/
static FORCEINLINE HRESULT IAMVideoProcAmp_GetRange(IAMVideoProcAmp* This,LONG Property,LONG *pMin,LONG *pMax,LONG *pSteppingDelta,LONG *pDefault,LONG *pCapsFlags) {
    return This->lpVtbl->GetRange(This,Property,pMin,pMax,pSteppingDelta,pDefault,pCapsFlags);
}
static FORCEINLINE HRESULT IAMVideoProcAmp_Set(IAMVideoProcAmp* This,LONG Property,LONG lValue,LONG Flags) {
    return This->lpVtbl->Set(This,Property,lValue,Flags);
}
static FORCEINLINE HRESULT IAMVideoProcAmp_Get(IAMVideoProcAmp* This,LONG Property,LONG *lValue,LONG *Flags) {
    return This->lpVtbl->Get(This,Property,lValue,Flags);
}
#endif
#endif

#endif


#endif  /* __IAMVideoProcAmp_INTERFACE_DEFINED__ */

/*****************************************************************************
 * 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)
MIDL_INTERFACE("56a868aa-0ad4-11ce-b03a-0020af0ba770")
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;

};
#ifdef __CRT_UUID_DECL
__CRT_UUID_DECL(IAsyncReader, 0x56a868aa, 0x0ad4, 0x11ce, 0xb0,0x3a, 0x00,0x20,0xaf,0x0b,0xa7,0x70)
#endif
#else
typedef struct IAsyncReaderVtbl {
    BEGIN_INTERFACE

    /*** 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);

    END_INTERFACE
} IAsyncReaderVtbl;

interface IAsyncReader {
    CONST_VTBL IAsyncReaderVtbl* lpVtbl;
};

#ifdef COBJMACROS
#ifndef WIDL_C_INLINE_WRAPPERS
/*** IUnknown methods ***/
#define IAsyncReader_QueryInterface(This,riid,ppvObject) (This)->lpVtbl->QueryInterface(This,riid,ppvObject)
#define IAsyncReader_AddRef(This) (This)->lpVtbl->AddRef(This)
#define IAsyncReader_Release(This) (This)->lpVtbl->Release(This)
/*** IAsyncReader methods ***/
#define IAsyncReader_RequestAllocator(This,pPreferred,pProps,ppActual) (This)->lpVtbl->RequestAllocator(This,pPreferred,pProps,ppActual)
#define IAsyncReader_Request(This,pSample,dwUser) (This)->lpVtbl->Request(This,pSample,dwUser)
#define IAsyncReader_WaitForNext(This,dwTimeout,ppSample,pdwUser) (This)->lpVtbl->WaitForNext(This,dwTimeout,ppSample,pdwUser)
#define IAsyncReader_SyncReadAligned(This,pSample) (This)->lpVtbl->SyncReadAligned(This,pSample)
#define IAsyncReader_SyncRead(This,llPosition,lLength,pBuffer) (This)->lpVtbl->SyncRead(This,llPosition,lLength,pBuffer)
#define IAsyncReader_Length(This,pTotal,pAvailable) (This)->lpVtbl->Length(This,pTotal,pAvailable)
#define IAsyncReader_BeginFlush(This) (This)->lpVtbl->BeginFlush(This)
#define IAsyncReader_EndFlush(This) (This)->lpVtbl->EndFlush(This)
#else
/*** IUnknown methods ***/
static FORCEINLINE HRESULT IAsyncReader_QueryInterface(IAsyncReader* This,REFIID riid,void **ppvObject) {
    return This->lpVtbl->QueryInterface(This,riid,ppvObject);
}
static FORCEINLINE ULONG IAsyncReader_AddRef(IAsyncReader* This) {
    return This->lpVtbl->AddRef(This);
}
static FORCEINLINE ULONG IAsyncReader_Release(IAsyncReader* This) {
    return This->lpVtbl->Release(This);
}
/*** IAsyncReader methods ***/
static FORCEINLINE HRESULT IAsyncReader_RequestAllocator(IAsyncReader* This,IMemAllocator *pPreferred,ALLOCATOR_PROPERTIES *pProps,IMemAllocator **ppActual) {
    return This->lpVtbl->RequestAllocator(This,pPreferred,pProps,ppActual);
}
static FORCEINLINE HRESULT IAsyncReader_Request(IAsyncReader* This,IMediaSample *pSample,DWORD_PTR dwUser) {
    return This->lpVtbl->Request(This,pSample,dwUser);
}
static FORCEINLINE HRESULT IAsyncReader_WaitForNext(IAsyncReader* This,DWORD dwTimeout,IMediaSample **ppSample,DWORD_PTR *pdwUser) {
    return This->lpVtbl->WaitForNext(This,dwTimeout,ppSample,pdwUser);
}
static FORCEINLINE HRESULT IAsyncReader_SyncReadAligned(IAsyncReader* This,IMediaSample *pSample) {
    return This->lpVtbl->SyncReadAligned(This,pSample);
}
static FORCEINLINE HRESULT IAsyncReader_SyncRead(IAsyncReader* This,LONGLONG llPosition,LONG lLength,BYTE *pBuffer) {
    return This->lpVtbl->SyncRead(This,llPosition,lLength,pBuffer);
}
static FORCEINLINE HRESULT IAsyncReader_Length(IAsyncReader* This,LONGLONG *pTotal,LONGLONG *pAvailable) {
    return This->lpVtbl->Length(This,pTotal,pAvailable);
}
static FORCEINLINE HRESULT IAsyncReader_BeginFlush(IAsyncReader* This) {
    return This->lpVtbl->BeginFlush(This);
}
static FORCEINLINE HRESULT IAsyncReader_EndFlush(IAsyncReader* This) {
    return This->lpVtbl->EndFlush(This);
}
#endif
#endif

#endif


#endif  /* __IAsyncReader_INTERFACE_DEFINED__ */

/*****************************************************************************
 * 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)
MIDL_INTERFACE("56a868ab-0ad4-11ce-b03a-0020af0ba770")
IGraphVersion : public IUnknown
{
    virtual HRESULT STDMETHODCALLTYPE QueryVersion(
        LONG *pVersion) = 0;

};
#ifdef __CRT_UUID_DECL
__CRT_UUID_DECL(IGraphVersion, 0x56a868ab, 0x0ad4, 0x11ce, 0xb0,0x3a, 0x00,0x20,0xaf,0x0b,0xa7,0x70)
#endif
#else
typedef struct IGraphVersionVtbl {
    BEGIN_INTERFACE

    /*** 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);

    END_INTERFACE
} IGraphVersionVtbl;

interface IGraphVersion {
    CONST_VTBL IGraphVersionVtbl* lpVtbl;
};

#ifdef COBJMACROS
#ifndef WIDL_C_INLINE_WRAPPERS
/*** IUnknown methods ***/
#define IGraphVersion_QueryInterface(This,riid,ppvObject) (This)->lpVtbl->QueryInterface(This,riid,ppvObject)
#define IGraphVersion_AddRef(This) (This)->lpVtbl->AddRef(This)
#define IGraphVersion_Release(This) (This)->lpVtbl->Release(This)
/*** IGraphVersion methods ***/
#define IGraphVersion_QueryVersion(This,pVersion) (This)->lpVtbl->QueryVersion(This,pVersion)
#else
/*** IUnknown methods ***/
static FORCEINLINE HRESULT IGraphVersion_QueryInterface(IGraphVersion* This,REFIID riid,void **ppvObject) {
    return This->lpVtbl->QueryInterface(This,riid,ppvObject);
}
static FORCEINLINE ULONG IGraphVersion_AddRef(IGraphVersion* This) {
    return This->lpVtbl->AddRef(This);
}
static FORCEINLINE ULONG IGraphVersion_Release(IGraphVersion* This) {
    return This->lpVtbl->Release(This);
}
/*** IGraphVersion methods ***/
static FORCEINLINE HRESULT IGraphVersion_QueryVersion(IGraphVersion* This,LONG *pVersion) {
    return This->lpVtbl->QueryVersion(This,pVersion);
}
#endif
#endif

#endif


#endif  /* __IGraphVersion_INTERFACE_DEFINED__ */

/*****************************************************************************
 * 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)
MIDL_INTERFACE("56a868ad-0ad4-11ce-b03a-0020af0ba770")
IResourceConsumer : public IUnknown
{
    virtual HRESULT STDMETHODCALLTYPE AcquireResource(
        LONG idResource) = 0;

    virtual HRESULT STDMETHODCALLTYPE ReleaseResource(
        LONG idResource) = 0;

};
#ifdef __CRT_UUID_DECL
__CRT_UUID_DECL(IResourceConsumer, 0x56a868ad, 0x0ad4, 0x11ce, 0xb0,0x3a, 0x00,0x20,0xaf,0x0b,0xa7,0x70)
#endif
#else
typedef struct IResourceConsumerVtbl {
    BEGIN_INTERFACE

    /*** 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);

    END_INTERFACE
} IResourceConsumerVtbl;

interface IResourceConsumer {
    CONST_VTBL IResourceConsumerVtbl* lpVtbl;
};

#ifdef COBJMACROS
#ifndef WIDL_C_INLINE_WRAPPERS
/*** IUnknown methods ***/
#define IResourceConsumer_QueryInterface(This,riid,ppvObject) (This)->lpVtbl->QueryInterface(This,riid,ppvObject)
#define IResourceConsumer_AddRef(This) (This)->lpVtbl->AddRef(This)
#define IResourceConsumer_Release(This) (This)->lpVtbl->Release(This)
/*** IResourceConsumer methods ***/
#define IResourceConsumer_AcquireResource(This,idResource) (This)->lpVtbl->AcquireResource(This,idResource)
#define IResourceConsumer_ReleaseResource(This,idResource) (This)->lpVtbl->ReleaseResource(This,idResource)
#else
/*** IUnknown methods ***/
static FORCEINLINE HRESULT IResourceConsumer_QueryInterface(IResourceConsumer* This,REFIID riid,void **ppvObject) {
    return This->lpVtbl->QueryInterface(This,riid,ppvObject);
}
static FORCEINLINE ULONG IResourceConsumer_AddRef(IResourceConsumer* This) {
    return This->lpVtbl->AddRef(This);
}
static FORCEINLINE ULONG IResourceConsumer_Release(IResourceConsumer* This) {
    return This->lpVtbl->Release(This);
}
/*** IResourceConsumer methods ***/
static FORCEINLINE HRESULT IResourceConsumer_AcquireResource(IResourceConsumer* This,LONG idResource) {
    return This->lpVtbl->AcquireResource(This,idResource);
}
static FORCEINLINE HRESULT IResourceConsumer_ReleaseResource(IResourceConsumer* This,LONG idResource) {
    return This->lpVtbl->ReleaseResource(This,idResource);
}
#endif
#endif

#endif


#endif  /* __IResourceConsumer_INTERFACE_DEFINED__ */

/*****************************************************************************
 * 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)
MIDL_INTERFACE("56a868ac-0ad4-11ce-b03a-0020af0ba770")
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;

};
#ifdef __CRT_UUID_DECL
__CRT_UUID_DECL(IResourceManager, 0x56a868ac, 0x0ad4, 0x11ce, 0xb0,0x3a, 0x00,0x20,0xaf,0x0b,0xa7,0x70)
#endif
#else
typedef struct IResourceManagerVtbl {
    BEGIN_INTERFACE

    /*** 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);

    END_INTERFACE
} IResourceManagerVtbl;

interface IResourceManager {
    CONST_VTBL IResourceManagerVtbl* lpVtbl;
};

#ifdef COBJMACROS
#ifndef WIDL_C_INLINE_WRAPPERS
/*** IUnknown methods ***/
#define IResourceManager_QueryInterface(This,riid,ppvObject) (This)->lpVtbl->QueryInterface(This,riid,ppvObject)
#define IResourceManager_AddRef(This) (This)->lpVtbl->AddRef(This)
#define IResourceManager_Release(This) (This)->lpVtbl->Release(This)
/*** IResourceManager methods ***/
#define IResourceManager_Register(This,pName,cResource,plToken) (This)->lpVtbl->Register(This,pName,cResource,plToken)
#define IResourceManager_RegisterGroup(This,pName,cResource,palTokens,plToken) (This)->lpVtbl->RegisterGroup(This,pName,cResource,palTokens,plToken)
#define IResourceManager_RequestResource(This,idResource,pFocusObject,pConsumer) (This)->lpVtbl->RequestResource(This,idResource,pFocusObject,pConsumer)
#define IResourceManager_NotifyAcquire(This,idResource,pConsumer,hr) (This)->lpVtbl->NotifyAcquire(This,idResource,pConsumer,hr)
#define IResourceManager_NotifyRelease(This,idResource,pConsumer,bStillWant) (This)->lpVtbl->NotifyRelease(This,idResource,pConsumer,bStillWant)
#define IResourceManager_CancelRequest(This,idResource,pConsumer) (This)->lpVtbl->CancelRequest(This,idResource,pConsumer)
#define IResourceManager_SetFocus(This,pFocusObject) (This)->lpVtbl->SetFocus(This,pFocusObject)
#define IResourceManager_ReleaseFocus(This,pFocusObject) (This)->lpVtbl->ReleaseFocus(This,pFocusObject)
#else
/*** IUnknown methods ***/
static FORCEINLINE HRESULT IResourceManager_QueryInterface(IResourceManager* This,REFIID riid,void **ppvObject) {
    return This->lpVtbl->QueryInterface(This,riid,ppvObject);
}
static FORCEINLINE ULONG IResourceManager_AddRef(IResourceManager* This) {
    return This->lpVtbl->AddRef(This);
}
static FORCEINLINE ULONG IResourceManager_Release(IResourceManager* This) {
    return This->lpVtbl->Release(This);
}
/*** IResourceManager methods ***/
static FORCEINLINE HRESULT IResourceManager_Register(IResourceManager* This,LPCWSTR pName,LONG cResource,LONG *plToken) {
    return This->lpVtbl->Register(This,pName,cResource,plToken);
}
static FORCEINLINE HRESULT IResourceManager_RegisterGroup(IResourceManager* This,LPCWSTR pName,LONG cResource,LONG *palTokens,LONG *plToken) {
    return This->lpVtbl->RegisterGroup(This,pName,cResource,palTokens,plToken);
}
static FORCEINLINE HRESULT IResourceManager_RequestResource(IResourceManager* This,LONG idResource,IUnknown *pFocusObject,IResourceConsumer *pConsumer) {
    return This->lpVtbl->RequestResource(This,idResource,pFocusObject,pConsumer);
}
static FORCEINLINE HRESULT IResourceManager_NotifyAcquire(IResourceManager* This,LONG idResource,IResourceConsumer *pConsumer,HRESULT hr) {
    return This->lpVtbl->NotifyAcquire(This,idResource,pConsumer,hr);
}
static FORCEINLINE HRESULT IResourceManager_NotifyRelease(IResourceManager* This,LONG idResource,IResourceConsumer *pConsumer,BOOL bStillWant) {
    return This->lpVtbl->NotifyRelease(This,idResource,pConsumer,bStillWant);
}
static FORCEINLINE HRESULT IResourceManager_CancelRequest(IResourceManager* This,LONG idResource,IResourceConsumer *pConsumer) {
    return This->lpVtbl->CancelRequest(This,idResource,pConsumer);
}
static FORCEINLINE HRESULT IResourceManager_SetFocus(IResourceManager* This,IUnknown *pFocusObject) {
    return This->lpVtbl->SetFocus(This,pFocusObject);
}
static FORCEINLINE HRESULT IResourceManager_ReleaseFocus(IResourceManager* This,IUnknown *pFocusObject) {
    return This->lpVtbl->ReleaseFocus(This,pFocusObject);
}
#endif
#endif

#endif


#endif  /* __IResourceManager_INTERFACE_DEFINED__ */

typedef enum AM_STREAM_INFO_FLAGS {
    AM_STREAM_INFO_START_DEFINED = 0x1,
    AM_STREAM_INFO_STOP_DEFINED = 0x2,
    AM_STREAM_INFO_DISCARDING = 0x4,
    AM_STREAM_INFO_STOP_SEND_EXTRA = 0x10
} AM_STREAM_INFO_FLAGS;
typedef struct AM_STREAM_INFO {
    REFERENCE_TIME tStart;
    REFERENCE_TIME tStop;
    DWORD dwStartCookie;
    DWORD dwStopCookie;
    DWORD dwFlags;
} AM_STREAM_INFO;
/*****************************************************************************
 * IAMStreamControl interface
 */
#ifndef __IAMStreamControl_INTERFACE_DEFINED__
#define __IAMStreamControl_INTERFACE_DEFINED__

DEFINE_GUID(IID_IAMStreamControl, 0x36b73881, 0xc2c8, 0x11cf, 0x8b,0x46, 0x00,0x80,0x5f,0x6c,0xef,0x60);
#if defined(__cplusplus) && !defined(CINTERFACE)
MIDL_INTERFACE("36b73881-c2c8-11cf-8b46-00805f6cef60")
IAMStreamControl : public IUnknown
{
    virtual HRESULT STDMETHODCALLTYPE StartAt(
        const REFERENCE_TIME *ptStart,
        DWORD dwCookie) = 0;

    virtual HRESULT STDMETHODCALLTYPE StopAt(
        const REFERENCE_TIME *ptStop,
        BOOL bSendExtra,
        DWORD dwCookie) = 0;

    virtual HRESULT STDMETHODCALLTYPE GetInfo(
        AM_STREAM_INFO *pInfo) = 0;

};
#ifdef __CRT_UUID_DECL
__CRT_UUID_DECL(IAMStreamControl, 0x36b73881, 0xc2c8, 0x11cf, 0x8b,0x46, 0x00,0x80,0x5f,0x6c,0xef,0x60)
#endif
#else
typedef struct IAMStreamControlVtbl {
    BEGIN_INTERFACE

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

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

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

    /*** IAMStreamControl methods ***/
    HRESULT (STDMETHODCALLTYPE *StartAt)(
        IAMStreamControl *This,
        const REFERENCE_TIME *ptStart,
        DWORD dwCookie);

    HRESULT (STDMETHODCALLTYPE *StopAt)(
        IAMStreamControl *This,
        const REFERENCE_TIME *ptStop,
        BOOL bSendExtra,
        DWORD dwCookie);

    HRESULT (STDMETHODCALLTYPE *GetInfo)(
        IAMStreamControl *This,
        AM_STREAM_INFO *pInfo);

    END_INTERFACE
} IAMStreamControlVtbl;

interface IAMStreamControl {
    CONST_VTBL IAMStreamControlVtbl* lpVtbl;
};

#ifdef COBJMACROS
#ifndef WIDL_C_INLINE_WRAPPERS
/*** IUnknown methods ***/
#define IAMStreamControl_QueryInterface(This,riid,ppvObject) (This)->lpVtbl->QueryInterface(This,riid,ppvObject)
#define IAMStreamControl_AddRef(This) (This)->lpVtbl->AddRef(This)
#define IAMStreamControl_Release(This) (This)->lpVtbl->Release(This)
/*** IAMStreamControl methods ***/
#define IAMStreamControl_StartAt(This,ptStart,dwCookie) (This)->lpVtbl->StartAt(This,ptStart,dwCookie)
#define IAMStreamControl_StopAt(This,ptStop,bSendExtra,dwCookie) (This)->lpVtbl->StopAt(This,ptStop,bSendExtra,dwCookie)
#define IAMStreamControl_GetInfo(This,pInfo) (This)->lpVtbl->GetInfo(This,pInfo)
#else
/*** IUnknown methods ***/
static FORCEINLINE HRESULT IAMStreamControl_QueryInterface(IAMStreamControl* This,REFIID riid,void **ppvObject) {
    return This->lpVtbl->QueryInterface(This,riid,ppvObject);
}
static FORCEINLINE ULONG IAMStreamControl_AddRef(IAMStreamControl* This) {
    return This->lpVtbl->AddRef(This);
}
static FORCEINLINE ULONG IAMStreamControl_Release(IAMStreamControl* This) {
    return This->lpVtbl->Release(This);
}
/*** IAMStreamControl methods ***/
static FORCEINLINE HRESULT IAMStreamControl_StartAt(IAMStreamControl* This,const REFERENCE_TIME *ptStart,DWORD dwCookie) {
    return This->lpVtbl->StartAt(This,ptStart,dwCookie);
}
static FORCEINLINE HRESULT IAMStreamControl_StopAt(IAMStreamControl* This,const REFERENCE_TIME *ptStop,BOOL bSendExtra,DWORD dwCookie) {
    return This->lpVtbl->StopAt(This,ptStop,bSendExtra,dwCookie);
}
static FORCEINLINE HRESULT IAMStreamControl_GetInfo(IAMStreamControl* This,AM_STREAM_INFO *pInfo) {
    return This->lpVtbl->GetInfo(This,pInfo);
}
#endif
#endif

#endif


#endif  /* __IAMStreamControl_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)
MIDL_INTERFACE("31efac30-515c-11d0-a9aa-00aa0061be93")
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;

};
#ifdef __CRT_UUID_DECL
__CRT_UUID_DECL(IKsPropertySet, 0x31efac30, 0x515c, 0x11d0, 0xa9,0xaa, 0x00,0xaa,0x00,0x61,0xbe,0x93)
#endif
#else
typedef struct IKsPropertySetVtbl {
    BEGIN_INTERFACE

    /*** 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);

    END_INTERFACE
} IKsPropertySetVtbl;

interface IKsPropertySet {
    CONST_VTBL IKsPropertySetVtbl* lpVtbl;
};

#ifdef COBJMACROS
#ifndef WIDL_C_INLINE_WRAPPERS
/*** IUnknown methods ***/
#define IKsPropertySet_QueryInterface(This,riid,ppvObject) (This)->lpVtbl->QueryInterface(This,riid,ppvObject)
#define IKsPropertySet_AddRef(This) (This)->lpVtbl->AddRef(This)
#define IKsPropertySet_Release(This) (This)->lpVtbl->Release(This)
/*** IKsPropertySet methods ***/
#define IKsPropertySet_Set(This,guidPropSet,dwPropID,pInstanceData,cbInstanceData,pPropData,cbPropData) (This)->lpVtbl->Set(This,guidPropSet,dwPropID,pInstanceData,cbInstanceData,pPropData,cbPropData)
#define IKsPropertySet_Get(This,guidPropSet,dwPropID,pInstanceData,cbInstanceData,pPropData,cbPropData,pcbReturned) (This)->lpVtbl->Get(This,guidPropSet,dwPropID,pInstanceData,cbInstanceData,pPropData,cbPropData,pcbReturned)
#define IKsPropertySet_QuerySupported(This,guidPropSet,dwPropID,pTypeSupport) (This)->lpVtbl->QuerySupported(This,guidPropSet,dwPropID,pTypeSupport)
#else
/*** IUnknown methods ***/
static FORCEINLINE HRESULT IKsPropertySet_QueryInterface(IKsPropertySet* This,REFIID riid,void **ppvObject) {
    return This->lpVtbl->QueryInterface(This,riid,ppvObject);
}
static FORCEINLINE ULONG IKsPropertySet_AddRef(IKsPropertySet* This) {
    return This->lpVtbl->AddRef(This);
}
static FORCEINLINE ULONG IKsPropertySet_Release(IKsPropertySet* This) {
    return This->lpVtbl->Release(This);
}
/*** IKsPropertySet methods ***/
static FORCEINLINE HRESULT IKsPropertySet_Set(IKsPropertySet* This,REFGUID guidPropSet,DWORD dwPropID,LPVOID pInstanceData,DWORD cbInstanceData,LPVOID pPropData,DWORD cbPropData) {
    return This->lpVtbl->Set(This,guidPropSet,dwPropID,pInstanceData,cbInstanceData,pPropData,cbPropData);
}
static FORCEINLINE HRESULT IKsPropertySet_Get(IKsPropertySet* This,REFGUID guidPropSet,DWORD dwPropID,LPVOID pInstanceData,DWORD cbInstanceData,LPVOID pPropData,DWORD cbPropData,DWORD *pcbReturned) {
    return This->lpVtbl->Get(This,guidPropSet,dwPropID,pInstanceData,cbInstanceData,pPropData,cbPropData,pcbReturned);
}
static FORCEINLINE HRESULT IKsPropertySet_QuerySupported(IKsPropertySet* This,REFGUID guidPropSet,DWORD dwPropID,DWORD *pTypeSupport) {
    return This->lpVtbl->QuerySupported(This,guidPropSet,dwPropID,pTypeSupport);
}
#endif
#endif

#endif


#endif  /* __IKsPropertySet_INTERFACE_DEFINED__ */

#endif /* _IKsPropertySet_ */
/*****************************************************************************
 * IMediaPropertyBag interface
 */
#ifndef __IMediaPropertyBag_INTERFACE_DEFINED__
#define __IMediaPropertyBag_INTERFACE_DEFINED__

typedef IMediaPropertyBag *LPMEDIAPROPERTYBAG;
DEFINE_GUID(IID_IMediaPropertyBag, 0x6025a880, 0xc0d5, 0x11d0, 0xbd,0x4e, 0x00,0xa0,0xc9,0x11,0xce,0x86);
#if defined(__cplusplus) && !defined(CINTERFACE)
MIDL_INTERFACE("6025a880-c0d5-11d0-bd4e-00a0c911ce86")
IMediaPropertyBag : public IPropertyBag
{
    virtual HRESULT STDMETHODCALLTYPE EnumProperty(
        ULONG iProperty,
        VARIANT *pvarPropertyName,
        VARIANT *pvarPropertyValue) = 0;

};
#ifdef __CRT_UUID_DECL
__CRT_UUID_DECL(IMediaPropertyBag, 0x6025a880, 0xc0d5, 0x11d0, 0xbd,0x4e, 0x00,0xa0,0xc9,0x11,0xce,0x86)
#endif
#else
typedef struct IMediaPropertyBagVtbl {
    BEGIN_INTERFACE

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

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

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

    /*** IPropertyBag methods ***/
    HRESULT (STDMETHODCALLTYPE *Read)(
        IMediaPropertyBag *This,
        LPCOLESTR pszPropName,
        VARIANT *pVar,
        IErrorLog *pErrorLog);

    HRESULT (STDMETHODCALLTYPE *Write)(
        IMediaPropertyBag *This,
        LPCOLESTR pszPropName,
        VARIANT *pVar);

    /*** IMediaPropertyBag methods ***/
    HRESULT (STDMETHODCALLTYPE *EnumProperty)(
        IMediaPropertyBag *This,
        ULONG iProperty,
        VARIANT *pvarPropertyName,
        VARIANT *pvarPropertyValue);

    END_INTERFACE
} IMediaPropertyBagVtbl;

interface IMediaPropertyBag {
    CONST_VTBL IMediaPropertyBagVtbl* lpVtbl;
};

#ifdef COBJMACROS
#ifndef WIDL_C_INLINE_WRAPPERS
/*** IUnknown methods ***/
#define IMediaPropertyBag_QueryInterface(This,riid,ppvObject) (This)->lpVtbl->QueryInterface(This,riid,ppvObject)
#define IMediaPropertyBag_AddRef(This) (This)->lpVtbl->AddRef(This)
#define IMediaPropertyBag_Release(This) (This)->lpVtbl->Release(This)
/*** IPropertyBag methods ***/
#define IMediaPropertyBag_Read(This,pszPropName,pVar,pErrorLog) (This)->lpVtbl->Read(This,pszPropName,pVar,pErrorLog)
#define IMediaPropertyBag_Write(This,pszPropName,pVar) (This)->lpVtbl->Write(This,pszPropName,pVar)
/*** IMediaPropertyBag methods ***/
#define IMediaPropertyBag_EnumProperty(This,iProperty,pvarPropertyName,pvarPropertyValue) (This)->lpVtbl->EnumProperty(This,iProperty,pvarPropertyName,pvarPropertyValue)
#else
/*** IUnknown methods ***/
static FORCEINLINE HRESULT IMediaPropertyBag_QueryInterface(IMediaPropertyBag* This,REFIID riid,void **ppvObject) {
    return This->lpVtbl->QueryInterface(This,riid,ppvObject);
}
static FORCEINLINE ULONG IMediaPropertyBag_AddRef(IMediaPropertyBag* This) {
    return This->lpVtbl->AddRef(This);
}
static FORCEINLINE ULONG IMediaPropertyBag_Release(IMediaPropertyBag* This) {
    return This->lpVtbl->Release(This);
}
/*** IPropertyBag methods ***/
static FORCEINLINE HRESULT IMediaPropertyBag_Read(IMediaPropertyBag* This,LPCOLESTR pszPropName,VARIANT *pVar,IErrorLog *pErrorLog) {
    return This->lpVtbl->Read(This,pszPropName,pVar,pErrorLog);
}
static FORCEINLINE HRESULT IMediaPropertyBag_Write(IMediaPropertyBag* This,LPCOLESTR pszPropName,VARIANT *pVar) {
    return This->lpVtbl->Write(This,pszPropName,pVar);
}
/*** IMediaPropertyBag methods ***/
static FORCEINLINE HRESULT IMediaPropertyBag_EnumProperty(IMediaPropertyBag* This,ULONG iProperty,VARIANT *pvarPropertyName,VARIANT *pvarPropertyValue) {
    return This->lpVtbl->EnumProperty(This,iProperty,pvarPropertyName,pvarPropertyValue);
}
#endif
#endif

#endif


#endif  /* __IMediaPropertyBag_INTERFACE_DEFINED__ */

/*****************************************************************************
 * IPersistMediaPropertyBag interface
 */
#ifndef __IPersistMediaPropertyBag_INTERFACE_DEFINED__
#define __IPersistMediaPropertyBag_INTERFACE_DEFINED__

typedef IPersistMediaPropertyBag *LPPERSISTMEDIAPROPERTYBAG;
DEFINE_GUID(IID_IPersistMediaPropertyBag, 0x5738e040, 0xb67f, 0x11d0, 0xbd,0x4d, 0x00,0xa0,0xc9,0x11,0xce,0x86);
#if defined(__cplusplus) && !defined(CINTERFACE)
MIDL_INTERFACE("5738e040-b67f-11d0-bd4d-00a0c911ce86")
IPersistMediaPropertyBag : public IPersist
{
    virtual HRESULT STDMETHODCALLTYPE InitNew(
        ) = 0;

    virtual HRESULT STDMETHODCALLTYPE Load(
        IMediaPropertyBag *pPropBag,
        IErrorLog *pErrorLog) = 0;

    virtual HRESULT STDMETHODCALLTYPE Save(
        IMediaPropertyBag *pPropBag,
        BOOL fClearDirty,
        BOOL fSaveAllProperties) = 0;

};
#ifdef __CRT_UUID_DECL
__CRT_UUID_DECL(IPersistMediaPropertyBag, 0x5738e040, 0xb67f, 0x11d0, 0xbd,0x4d, 0x00,0xa0,0xc9,0x11,0xce,0x86)
#endif
#else
typedef struct IPersistMediaPropertyBagVtbl {
    BEGIN_INTERFACE

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

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

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

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

    /*** IPersistMediaPropertyBag methods ***/
    HRESULT (STDMETHODCALLTYPE *InitNew)(
        IPersistMediaPropertyBag *This);

    HRESULT (STDMETHODCALLTYPE *Load)(
        IPersistMediaPropertyBag *This,
        IMediaPropertyBag *pPropBag,
        IErrorLog *pErrorLog);

    HRESULT (STDMETHODCALLTYPE *Save)(
        IPersistMediaPropertyBag *This,
        IMediaPropertyBag *pPropBag,
        BOOL fClearDirty,
        BOOL fSaveAllProperties);

    END_INTERFACE
} IPersistMediaPropertyBagVtbl;

interface IPersistMediaPropertyBag {
    CONST_VTBL IPersistMediaPropertyBagVtbl* lpVtbl;
};

#ifdef COBJMACROS
#ifndef WIDL_C_INLINE_WRAPPERS
/*** IUnknown methods ***/
#define IPersistMediaPropertyBag_QueryInterface(This,riid,ppvObject) (This)->lpVtbl->QueryInterface(This,riid,ppvObject)
#define IPersistMediaPropertyBag_AddRef(This) (This)->lpVtbl->AddRef(This)
#define IPersistMediaPropertyBag_Release(This) (This)->lpVtbl->Release(This)
/*** IPersist methods ***/
#define IPersistMediaPropertyBag_GetClassID(This,pClassID) (This)->lpVtbl->GetClassID(This,pClassID)
/*** IPersistMediaPropertyBag methods ***/
#define IPersistMediaPropertyBag_InitNew(This) (This)->lpVtbl->InitNew(This)
#define IPersistMediaPropertyBag_Load(This,pPropBag,pErrorLog) (This)->lpVtbl->Load(This,pPropBag,pErrorLog)
#define IPersistMediaPropertyBag_Save(This,pPropBag,fClearDirty,fSaveAllProperties) (This)->lpVtbl->Save(This,pPropBag,fClearDirty,fSaveAllProperties)
#else
/*** IUnknown methods ***/
static FORCEINLINE HRESULT IPersistMediaPropertyBag_QueryInterface(IPersistMediaPropertyBag* This,REFIID riid,void **ppvObject) {
    return This->lpVtbl->QueryInterface(This,riid,ppvObject);
}
static FORCEINLINE ULONG IPersistMediaPropertyBag_AddRef(IPersistMediaPropertyBag* This) {
    return This->lpVtbl->AddRef(This);
}
static FORCEINLINE ULONG IPersistMediaPropertyBag_Release(IPersistMediaPropertyBag* This) {
    return This->lpVtbl->Release(This);
}
/*** IPersist methods ***/
static FORCEINLINE HRESULT IPersistMediaPropertyBag_GetClassID(IPersistMediaPropertyBag* This,CLSID *pClassID) {
    return This->lpVtbl->GetClassID(This,pClassID);
}
/*** IPersistMediaPropertyBag methods ***/
static FORCEINLINE HRESULT IPersistMediaPropertyBag_InitNew(IPersistMediaPropertyBag* This) {
    return This->lpVtbl->InitNew(This);
}
static FORCEINLINE HRESULT IPersistMediaPropertyBag_Load(IPersistMediaPropertyBag* This,IMediaPropertyBag *pPropBag,IErrorLog *pErrorLog) {
    return This->lpVtbl->Load(This,pPropBag,pErrorLog);
}
static FORCEINLINE HRESULT IPersistMediaPropertyBag_Save(IPersistMediaPropertyBag* This,IMediaPropertyBag *pPropBag,BOOL fClearDirty,BOOL fSaveAllProperties) {
    return This->lpVtbl->Save(This,pPropBag,fClearDirty,fSaveAllProperties);
}
#endif
#endif

#endif


#endif  /* __IPersistMediaPropertyBag_INTERFACE_DEFINED__ */

/*****************************************************************************
 * ISeekingPassThru interface
 */
#ifndef __ISeekingPassThru_INTERFACE_DEFINED__
#define __ISeekingPassThru_INTERFACE_DEFINED__

DEFINE_GUID(IID_ISeekingPassThru, 0x36b73883, 0xc2c8, 0x11cf, 0x8b,0x46, 0x00,0x80,0x5f,0x6c,0xef,0x60);
#if defined(__cplusplus) && !defined(CINTERFACE)
MIDL_INTERFACE("36b73883-c2c8-11cf-8b46-00805f6cef60")
ISeekingPassThru : public IUnknown
{
    virtual HRESULT STDMETHODCALLTYPE Init(
        BOOL bSupportRendering,
        IPin *pPin) = 0;

};
#ifdef __CRT_UUID_DECL
__CRT_UUID_DECL(ISeekingPassThru, 0x36b73883, 0xc2c8, 0x11cf, 0x8b,0x46, 0x00,0x80,0x5f,0x6c,0xef,0x60)
#endif
#else
typedef struct ISeekingPassThruVtbl {
    BEGIN_INTERFACE

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

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

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

    /*** ISeekingPassThru methods ***/
    HRESULT (STDMETHODCALLTYPE *Init)(
        ISeekingPassThru *This,
        BOOL bSupportRendering,
        IPin *pPin);

    END_INTERFACE
} ISeekingPassThruVtbl;

interface ISeekingPassThru {
    CONST_VTBL ISeekingPassThruVtbl* lpVtbl;
};

#ifdef COBJMACROS
#ifndef WIDL_C_INLINE_WRAPPERS
/*** IUnknown methods ***/
#define ISeekingPassThru_QueryInterface(This,riid,ppvObject) (This)->lpVtbl->QueryInterface(This,riid,ppvObject)
#define ISeekingPassThru_AddRef(This) (This)->lpVtbl->AddRef(This)
#define ISeekingPassThru_Release(This) (This)->lpVtbl->Release(This)
/*** ISeekingPassThru methods ***/
#define ISeekingPassThru_Init(This,bSupportRendering,pPin) (This)->lpVtbl->Init(This,bSupportRendering,pPin)
#else
/*** IUnknown methods ***/
static FORCEINLINE HRESULT ISeekingPassThru_QueryInterface(ISeekingPassThru* This,REFIID riid,void **ppvObject) {
    return This->lpVtbl->QueryInterface(This,riid,ppvObject);
}
static FORCEINLINE ULONG ISeekingPassThru_AddRef(ISeekingPassThru* This) {
    return This->lpVtbl->AddRef(This);
}
static FORCEINLINE ULONG ISeekingPassThru_Release(ISeekingPassThru* This) {
    return This->lpVtbl->Release(This);
}
/*** ISeekingPassThru methods ***/
static FORCEINLINE HRESULT ISeekingPassThru_Init(ISeekingPassThru* This,BOOL bSupportRendering,IPin *pPin) {
    return This->lpVtbl->Init(This,bSupportRendering,pPin);
}
#endif
#endif

#endif


#endif  /* __ISeekingPassThru_INTERFACE_DEFINED__ */

enum _AM_FILTER_MISC_FLAGS {
    AM_FILTER_MISC_FLAGS_IS_RENDERER = 0x1,
    AM_FILTER_MISC_FLAGS_IS_SOURCE = 0x2
};
/*****************************************************************************
 * IAMFilterMiscFlags interface
 */
#ifndef __IAMFilterMiscFlags_INTERFACE_DEFINED__
#define __IAMFilterMiscFlags_INTERFACE_DEFINED__

DEFINE_GUID(IID_IAMFilterMiscFlags, 0x2dd74950, 0xa890, 0x11d1, 0xab,0xe8, 0x00,0xa0,0xc9,0x05,0xf3,0x75);
#if defined(__cplusplus) && !defined(CINTERFACE)
MIDL_INTERFACE("2dd74950-a890-11d1-abe8-00a0c905f375")
IAMFilterMiscFlags : public IUnknown
{
    virtual ULONG STDMETHODCALLTYPE GetMiscFlags(
        ) = 0;

};
#ifdef __CRT_UUID_DECL
__CRT_UUID_DECL(IAMFilterMiscFlags, 0x2dd74950, 0xa890, 0x11d1, 0xab,0xe8, 0x00,0xa0,0xc9,0x05,0xf3,0x75)
#endif
#else
typedef struct IAMFilterMiscFlagsVtbl {
    BEGIN_INTERFACE

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

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

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

    /*** IAMFilterMiscFlags methods ***/
    ULONG (STDMETHODCALLTYPE *GetMiscFlags)(
        IAMFilterMiscFlags *This);

    END_INTERFACE
} IAMFilterMiscFlagsVtbl;

interface IAMFilterMiscFlags {
    CONST_VTBL IAMFilterMiscFlagsVtbl* lpVtbl;
};

#ifdef COBJMACROS
#ifndef WIDL_C_INLINE_WRAPPERS
/*** IUnknown methods ***/
#define IAMFilterMiscFlags_QueryInterface(This,riid,ppvObject) (This)->lpVtbl->QueryInterface(This,riid,ppvObject)
#define IAMFilterMiscFlags_AddRef(This) (This)->lpVtbl->AddRef(This)
#define IAMFilterMiscFlags_Release(This) (This)->lpVtbl->Release(This)
/*** IAMFilterMiscFlags methods ***/
#define IAMFilterMiscFlags_GetMiscFlags(This) (This)->lpVtbl->GetMiscFlags(This)
#else
/*** IUnknown methods ***/
static FORCEINLINE HRESULT IAMFilterMiscFlags_QueryInterface(IAMFilterMiscFlags* This,REFIID riid,void **ppvObject) {
    return This->lpVtbl->QueryInterface(This,riid,ppvObject);
}
static FORCEINLINE ULONG IAMFilterMiscFlags_AddRef(IAMFilterMiscFlags* This) {
    return This->lpVtbl->AddRef(This);
}
static FORCEINLINE ULONG IAMFilterMiscFlags_Release(IAMFilterMiscFlags* This) {
    return This->lpVtbl->Release(This);
}
/*** IAMFilterMiscFlags methods ***/
static FORCEINLINE ULONG IAMFilterMiscFlags_GetMiscFlags(IAMFilterMiscFlags* This) {
    return This->lpVtbl->GetMiscFlags(This);
}
#endif
#endif

#endif


#endif  /* __IAMFilterMiscFlags_INTERFACE_DEFINED__ */

/*****************************************************************************
 * IAMGraphBuilderCallback interface
 */
#ifndef __IAMGraphBuilderCallback_INTERFACE_DEFINED__
#define __IAMGraphBuilderCallback_INTERFACE_DEFINED__

DEFINE_GUID(IID_IAMGraphBuilderCallback, 0x4995f511, 0x9ddb, 0x4f12, 0xbd,0x3b, 0xf0,0x46,0x11,0x80,0x7b,0x79);
#if defined(__cplusplus) && !defined(CINTERFACE)
MIDL_INTERFACE("4995f511-9ddb-4f12-bd3b-f04611807b79")
IAMGraphBuilderCallback : public IUnknown
{
    virtual HRESULT STDMETHODCALLTYPE SelectedFilter(
        IMoniker *pMon) = 0;

    virtual HRESULT STDMETHODCALLTYPE CreatedFilter(
        IBaseFilter *pFil) = 0;

};
#ifdef __CRT_UUID_DECL
__CRT_UUID_DECL(IAMGraphBuilderCallback, 0x4995f511, 0x9ddb, 0x4f12, 0xbd,0x3b, 0xf0,0x46,0x11,0x80,0x7b,0x79)
#endif
#else
typedef struct IAMGraphBuilderCallbackVtbl {
    BEGIN_INTERFACE

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

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

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

    /*** IAMGraphBuilderCallback methods ***/
    HRESULT (STDMETHODCALLTYPE *SelectedFilter)(
        IAMGraphBuilderCallback *This,
        IMoniker *pMon);

    HRESULT (STDMETHODCALLTYPE *CreatedFilter)(
        IAMGraphBuilderCallback *This,
        IBaseFilter *pFil);

    END_INTERFACE
} IAMGraphBuilderCallbackVtbl;

interface IAMGraphBuilderCallback {
    CONST_VTBL IAMGraphBuilderCallbackVtbl* lpVtbl;
};

#ifdef COBJMACROS
#ifndef WIDL_C_INLINE_WRAPPERS
/*** IUnknown methods ***/
#define IAMGraphBuilderCallback_QueryInterface(This,riid,ppvObject) (This)->lpVtbl->QueryInterface(This,riid,ppvObject)
#define IAMGraphBuilderCallback_AddRef(This) (This)->lpVtbl->AddRef(This)
#define IAMGraphBuilderCallback_Release(This) (This)->lpVtbl->Release(This)
/*** IAMGraphBuilderCallback methods ***/
#define IAMGraphBuilderCallback_SelectedFilter(This,pMon) (This)->lpVtbl->SelectedFilter(This,pMon)
#define IAMGraphBuilderCallback_CreatedFilter(This,pFil) (This)->lpVtbl->CreatedFilter(This,pFil)
#else
/*** IUnknown methods ***/
static FORCEINLINE HRESULT IAMGraphBuilderCallback_QueryInterface(IAMGraphBuilderCallback* This,REFIID riid,void **ppvObject) {
    return This->lpVtbl->QueryInterface(This,riid,ppvObject);
}
static FORCEINLINE ULONG IAMGraphBuilderCallback_AddRef(IAMGraphBuilderCallback* This) {
    return This->lpVtbl->AddRef(This);
}
static FORCEINLINE ULONG IAMGraphBuilderCallback_Release(IAMGraphBuilderCallback* This) {
    return This->lpVtbl->Release(This);
}
/*** IAMGraphBuilderCallback methods ***/
static FORCEINLINE HRESULT IAMGraphBuilderCallback_SelectedFilter(IAMGraphBuilderCallback* This,IMoniker *pMon) {
    return This->lpVtbl->SelectedFilter(This,pMon);
}
static FORCEINLINE HRESULT IAMGraphBuilderCallback_CreatedFilter(IAMGraphBuilderCallback* This,IBaseFilter *pFil) {
    return This->lpVtbl->CreatedFilter(This,pFil);
}
#endif
#endif

#endif


#endif  /* __IAMGraphBuilderCallback_INTERFACE_DEFINED__ */

/*****************************************************************************
 * IAMVfwCaptureDialogs interface
 */
#ifndef __IAMVfwCaptureDialogs_INTERFACE_DEFINED__
#define __IAMVfwCaptureDialogs_INTERFACE_DEFINED__

DEFINE_GUID(IID_IAMVfwCaptureDialogs, 0xd8d715a0, 0x6e5e, 0x11d0, 0xb3,0xf0, 0x00,0xaa,0x00,0x37,0x61,0xc5);
#if defined(__cplusplus) && !defined(CINTERFACE)
MIDL_INTERFACE("d8d715a0-6e5e-11d0-b3f0-00aa003761c5")
IAMVfwCaptureDialogs : public IUnknown
{
    virtual HRESULT STDMETHODCALLTYPE HasDialog(
        int dialog) = 0;

    virtual HRESULT STDMETHODCALLTYPE ShowDialog(
        int dialog,
        HWND hwnd) = 0;

    virtual HRESULT STDMETHODCALLTYPE SendDriverMessage(
        int dialog,
        int msg,
        LONG data1,
        LONG data2) = 0;

};
#ifdef __CRT_UUID_DECL
__CRT_UUID_DECL(IAMVfwCaptureDialogs, 0xd8d715a0, 0x6e5e, 0x11d0, 0xb3,0xf0, 0x00,0xaa,0x00,0x37,0x61,0xc5)
#endif
#else
typedef struct IAMVfwCaptureDialogsVtbl {
    BEGIN_INTERFACE

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

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

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

    /*** IAMVfwCaptureDialogs methods ***/
    HRESULT (STDMETHODCALLTYPE *HasDialog)(
        IAMVfwCaptureDialogs *This,
        int dialog);

    HRESULT (STDMETHODCALLTYPE *ShowDialog)(
        IAMVfwCaptureDialogs *This,
        int dialog,
        HWND hwnd);

    HRESULT (STDMETHODCALLTYPE *SendDriverMessage)(
        IAMVfwCaptureDialogs *This,
        int dialog,
        int msg,
        LONG data1,
        LONG data2);

    END_INTERFACE
} IAMVfwCaptureDialogsVtbl;

interface IAMVfwCaptureDialogs {
    CONST_VTBL IAMVfwCaptureDialogsVtbl* lpVtbl;
};

#ifdef COBJMACROS
#ifndef WIDL_C_INLINE_WRAPPERS
/*** IUnknown methods ***/
#define IAMVfwCaptureDialogs_QueryInterface(This,riid,ppvObject) (This)->lpVtbl->QueryInterface(This,riid,ppvObject)
#define IAMVfwCaptureDialogs_AddRef(This) (This)->lpVtbl->AddRef(This)
#define IAMVfwCaptureDialogs_Release(This) (This)->lpVtbl->Release(This)
/*** IAMVfwCaptureDialogs methods ***/
#define IAMVfwCaptureDialogs_HasDialog(This,dialog) (This)->lpVtbl->HasDialog(This,dialog)
#define IAMVfwCaptureDialogs_ShowDialog(This,dialog,hwnd) (This)->lpVtbl->ShowDialog(This,dialog,hwnd)
#define IAMVfwCaptureDialogs_SendDriverMessage(This,dialog,msg,data1,data2) (This)->lpVtbl->SendDriverMessage(This,dialog,msg,data1,data2)
#else
/*** IUnknown methods ***/
static FORCEINLINE HRESULT IAMVfwCaptureDialogs_QueryInterface(IAMVfwCaptureDialogs* This,REFIID riid,void **ppvObject) {
    return This->lpVtbl->QueryInterface(This,riid,ppvObject);
}
static FORCEINLINE ULONG IAMVfwCaptureDialogs_AddRef(IAMVfwCaptureDialogs* This) {
    return This->lpVtbl->AddRef(This);
}
static FORCEINLINE ULONG IAMVfwCaptureDialogs_Release(IAMVfwCaptureDialogs* This) {
    return This->lpVtbl->Release(This);
}
/*** IAMVfwCaptureDialogs methods ***/
static FORCEINLINE HRESULT IAMVfwCaptureDialogs_HasDialog(IAMVfwCaptureDialogs* This,int dialog) {
    return This->lpVtbl->HasDialog(This,dialog);
}
static FORCEINLINE HRESULT IAMVfwCaptureDialogs_ShowDialog(IAMVfwCaptureDialogs* This,int dialog,HWND hwnd) {
    return This->lpVtbl->ShowDialog(This,dialog,hwnd);
}
static FORCEINLINE HRESULT IAMVfwCaptureDialogs_SendDriverMessage(IAMVfwCaptureDialogs* This,int dialog,int msg,LONG data1,LONG data2) {
    return This->lpVtbl->SendDriverMessage(This,dialog,msg,data1,data2);
}
#endif
#endif

#endif


#endif  /* __IAMVfwCaptureDialogs_INTERFACE_DEFINED__ */

#ifndef __IPinConnection_FWD_DEFINED__
#define __IPinConnection_FWD_DEFINED__
typedef interface IPinConnection IPinConnection;
#ifdef __cplusplus
interface IPinConnection;
#endif /* __cplusplus */
#endif

#ifndef __IPinFlowControl_FWD_DEFINED__
#define __IPinFlowControl_FWD_DEFINED__
typedef interface IPinFlowControl IPinFlowControl;
#ifdef __cplusplus
interface IPinFlowControl;
#endif /* __cplusplus */
#endif

#ifndef __IGraphConfig_FWD_DEFINED__
#define __IGraphConfig_FWD_DEFINED__
typedef interface IGraphConfig IGraphConfig;
#ifdef __cplusplus
interface IGraphConfig;
#endif /* __cplusplus */
#endif

#ifndef __IGraphConfigCallback_FWD_DEFINED__
#define __IGraphConfigCallback_FWD_DEFINED__
typedef interface IGraphConfigCallback IGraphConfigCallback;
#ifdef __cplusplus
interface IGraphConfigCallback;
#endif /* __cplusplus */
#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)
MIDL_INTERFACE("4a9a62d3-27d4-403d-91e9-89f540e55534")
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;

};
#ifdef __CRT_UUID_DECL
__CRT_UUID_DECL(IPinConnection, 0x4a9a62d3, 0x27d4, 0x403d, 0x91,0xe9, 0x89,0xf5,0x40,0xe5,0x55,0x34)
#endif
#else
typedef struct IPinConnectionVtbl {
    BEGIN_INTERFACE

    /*** 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);

    END_INTERFACE
} IPinConnectionVtbl;

interface IPinConnection {
    CONST_VTBL IPinConnectionVtbl* lpVtbl;
};

#ifdef COBJMACROS
#ifndef WIDL_C_INLINE_WRAPPERS
/*** IUnknown methods ***/
#define IPinConnection_QueryInterface(This,riid,ppvObject) (This)->lpVtbl->QueryInterface(This,riid,ppvObject)
#define IPinConnection_AddRef(This) (This)->lpVtbl->AddRef(This)
#define IPinConnection_Release(This) (This)->lpVtbl->Release(This)
/*** IPinConnection methods ***/
#define IPinConnection_DynamicQueryAccept(This,pmt) (This)->lpVtbl->DynamicQueryAccept(This,pmt)
#define IPinConnection_NotifyEndOfStream(This,hNotifyEvent) (This)->lpVtbl->NotifyEndOfStream(This,hNotifyEvent)
#define IPinConnection_IsEndPin(This) (This)->lpVtbl->IsEndPin(This)
#define IPinConnection_DynamicDisconnect(This) (This)->lpVtbl->DynamicDisconnect(This)
#else
/*** IUnknown methods ***/
static FORCEINLINE HRESULT IPinConnection_QueryInterface(IPinConnection* This,REFIID riid,void **ppvObject) {
    return This->lpVtbl->QueryInterface(This,riid,ppvObject);
}
static FORCEINLINE ULONG IPinConnection_AddRef(IPinConnection* This) {
    return This->lpVtbl->AddRef(This);
}
static FORCEINLINE ULONG IPinConnection_Release(IPinConnection* This) {
    return This->lpVtbl->Release(This);
}
/*** IPinConnection methods ***/
static FORCEINLINE HRESULT IPinConnection_DynamicQueryAccept(IPinConnection* This,const AM_MEDIA_TYPE *pmt) {
    return This->lpVtbl->DynamicQueryAccept(This,pmt);
}
static FORCEINLINE HRESULT IPinConnection_NotifyEndOfStream(IPinConnection* This,HANDLE hNotifyEvent) {
    return This->lpVtbl->NotifyEndOfStream(This,hNotifyEvent);
}
static FORCEINLINE HRESULT IPinConnection_IsEndPin(IPinConnection* This) {
    return This->lpVtbl->IsEndPin(This);
}
static FORCEINLINE HRESULT IPinConnection_DynamicDisconnect(IPinConnection* This) {
    return This->lpVtbl->DynamicDisconnect(This);
}
#endif
#endif

#endif


#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)
MIDL_INTERFACE("c56e9858-dbf3-4f6b-8119-384af2060deb")
IPinFlowControl : public IUnknown
{
    virtual HRESULT STDMETHODCALLTYPE Block(
        DWORD dwBlockFlags,
        HANDLE hEvent) = 0;

};
#ifdef __CRT_UUID_DECL
__CRT_UUID_DECL(IPinFlowControl, 0xc56e9858, 0xdbf3, 0x4f6b, 0x81,0x19, 0x38,0x4a,0xf2,0x06,0x0d,0xeb)
#endif
#else
typedef struct IPinFlowControlVtbl {
    BEGIN_INTERFACE

    /*** 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);

    END_INTERFACE
} IPinFlowControlVtbl;

interface IPinFlowControl {
    CONST_VTBL IPinFlowControlVtbl* lpVtbl;
};

#ifdef COBJMACROS
#ifndef WIDL_C_INLINE_WRAPPERS
/*** IUnknown methods ***/
#define IPinFlowControl_QueryInterface(This,riid,ppvObject) (This)->lpVtbl->QueryInterface(This,riid,ppvObject)
#define IPinFlowControl_AddRef(This) (This)->lpVtbl->AddRef(This)
#define IPinFlowControl_Release(This) (This)->lpVtbl->Release(This)
/*** IPinFlowControl methods ***/
#define IPinFlowControl_Block(This,dwBlockFlags,hEvent) (This)->lpVtbl->Block(This,dwBlockFlags,hEvent)
#else
/*** IUnknown methods ***/
static FORCEINLINE HRESULT IPinFlowControl_QueryInterface(IPinFlowControl* This,REFIID riid,void **ppvObject) {
    return This->lpVtbl->QueryInterface(This,riid,ppvObject);
}
static FORCEINLINE ULONG IPinFlowControl_AddRef(IPinFlowControl* This) {
    return This->lpVtbl->AddRef(This);
}
static FORCEINLINE ULONG IPinFlowControl_Release(IPinFlowControl* This) {
    return This->lpVtbl->Release(This);
}
/*** IPinFlowControl methods ***/
static FORCEINLINE HRESULT IPinFlowControl_Block(IPinFlowControl* This,DWORD dwBlockFlags,HANDLE hEvent) {
    return This->lpVtbl->Block(This,dwBlockFlags,hEvent);
}
#endif
#endif

#endif


#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)
MIDL_INTERFACE("03a1eb8e-32bf-4245-8502-114d08a9cb88")
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;

};
#ifdef __CRT_UUID_DECL
__CRT_UUID_DECL(IGraphConfig, 0x03a1eb8e, 0x32bf, 0x4245, 0x85,0x02, 0x11,0x4d,0x08,0xa9,0xcb,0x88)
#endif
#else
typedef struct IGraphConfigVtbl {
    BEGIN_INTERFACE

    /*** 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);

    END_INTERFACE
} IGraphConfigVtbl;

interface IGraphConfig {
    CONST_VTBL IGraphConfigVtbl* lpVtbl;
};

#ifdef COBJMACROS
#ifndef WIDL_C_INLINE_WRAPPERS
/*** IUnknown methods ***/
#define IGraphConfig_QueryInterface(This,riid,ppvObject) (This)->lpVtbl->QueryInterface(This,riid,ppvObject)
#define IGraphConfig_AddRef(This) (This)->lpVtbl->AddRef(This)
#define IGraphConfig_Release(This) (This)->lpVtbl->Release(This)
/*** IGraphConfig methods ***/
#define IGraphConfig_Reconnect(This,pOutputPin,pInputPin,pmtFirstConnection,pUsingFilter,hAbortEvent,dwFlags) (This)->lpVtbl->Reconnect(This,pOutputPin,pInputPin,pmtFirstConnection,pUsingFilter,hAbortEvent,dwFlags)
#define IGraphConfig_Reconfigure(This,pCallback,pvContext,dwFlags,hAbortEvent) (This)->lpVtbl->Reconfigure(This,pCallback,pvContext,dwFlags,hAbortEvent)
#define IGraphConfig_AddFilterToCache(This,pFilter) (This)->lpVtbl->AddFilterToCache(This,pFilter)
#define IGraphConfig_EnumCacheFilter(This,pEnum) (This)->lpVtbl->EnumCacheFilter(This,pEnum)
#define IGraphConfig_RemoveFilterFromCache(This,pFilter) (This)->lpVtbl->RemoveFilterFromCache(This,pFilter)
#define IGraphConfig_GetStartTime(This,prtStart) (This)->lpVtbl->GetStartTime(This,prtStart)
#define IGraphConfig_PushThroughData(This,pOutputPin,pConnection,hEventAbort) (This)->lpVtbl->PushThroughData(This,pOutputPin,pConnection,hEventAbort)
#define IGraphConfig_SetFilterFlags(This,pFilter,dwFlags) (This)->lpVtbl->SetFilterFlags(This,pFilter,dwFlags)
#define IGraphConfig_GetFilterFlags(This,pFilter,pdwFlags) (This)->lpVtbl->GetFilterFlags(This,pFilter,pdwFlags)
#define IGraphConfig_RemoveFilterEx(This,pFilter,Flags) (This)->lpVtbl->RemoveFilterEx(This,pFilter,Flags)
#else
/*** IUnknown methods ***/
static FORCEINLINE HRESULT IGraphConfig_QueryInterface(IGraphConfig* This,REFIID riid,void **ppvObject) {
    return This->lpVtbl->QueryInterface(This,riid,ppvObject);
}
static FORCEINLINE ULONG IGraphConfig_AddRef(IGraphConfig* This) {
    return This->lpVtbl->AddRef(This);
}
static FORCEINLINE ULONG IGraphConfig_Release(IGraphConfig* This) {
    return This->lpVtbl->Release(This);
}
/*** IGraphConfig methods ***/
static FORCEINLINE HRESULT IGraphConfig_Reconnect(IGraphConfig* This,IPin *pOutputPin,IPin *pInputPin,const AM_MEDIA_TYPE *pmtFirstConnection,IBaseFilter *pUsingFilter,HANDLE hAbortEvent,DWORD dwFlags) {
    return This->lpVtbl->Reconnect(This,pOutputPin,pInputPin,pmtFirstConnection,pUsingFilter,hAbortEvent,dwFlags);
}
static FORCEINLINE HRESULT IGraphConfig_Reconfigure(IGraphConfig* This,IGraphConfigCallback *pCallback,PVOID pvContext,DWORD dwFlags,HANDLE hAbortEvent) {
    return This->lpVtbl->Reconfigure(This,pCallback,pvContext,dwFlags,hAbortEvent);
}
static FORCEINLINE HRESULT IGraphConfig_AddFilterToCache(IGraphConfig* This,IBaseFilter *pFilter) {
    return This->lpVtbl->AddFilterToCache(This,pFilter);
}
static FORCEINLINE HRESULT IGraphConfig_EnumCacheFilter(IGraphConfig* This,IEnumFilters **pEnum) {
    return This->lpVtbl->EnumCacheFilter(This,pEnum);
}
static FORCEINLINE HRESULT IGraphConfig_RemoveFilterFromCache(IGraphConfig* This,IBaseFilter *pFilter) {
    return This->lpVtbl->RemoveFilterFromCache(This,pFilter);
}
static FORCEINLINE HRESULT IGraphConfig_GetStartTime(IGraphConfig* This,REFERENCE_TIME *prtStart) {
    return This->lpVtbl->GetStartTime(This,prtStart);
}
static FORCEINLINE HRESULT IGraphConfig_PushThroughData(IGraphConfig* This,IPin *pOutputPin,IPinConnection *pConnection,HANDLE hEventAbort) {
    return This->lpVtbl->PushThroughData(This,pOutputPin,pConnection,hEventAbort);
}
static FORCEINLINE HRESULT IGraphConfig_SetFilterFlags(IGraphConfig* This,IBaseFilter *pFilter,DWORD dwFlags) {
    return This->lpVtbl->SetFilterFlags(This,pFilter,dwFlags);
}
static FORCEINLINE HRESULT IGraphConfig_GetFilterFlags(IGraphConfig* This,IBaseFilter *pFilter,DWORD *pdwFlags) {
    return This->lpVtbl->GetFilterFlags(This,pFilter,pdwFlags);
}
static FORCEINLINE HRESULT IGraphConfig_RemoveFilterEx(IGraphConfig* This,IBaseFilter *pFilter,DWORD Flags) {
    return This->lpVtbl->RemoveFilterEx(This,pFilter,Flags);
}
#endif
#endif

#endif


#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)
MIDL_INTERFACE("ade0fd60-d19d-11d2-abf6-00a0c905f375")
IGraphConfigCallback : public IUnknown
{
    virtual HRESULT STDMETHODCALLTYPE Reconfigure(
        PVOID pvContext,
        DWORD dwFlags) = 0;

};
#ifdef __CRT_UUID_DECL
__CRT_UUID_DECL(IGraphConfigCallback, 0xade0fd60, 0xd19d, 0x11d2, 0xab,0xf6, 0x00,0xa0,0xc9,0x05,0xf3,0x75)
#endif
#else
typedef struct IGraphConfigCallbackVtbl {
    BEGIN_INTERFACE

    /*** 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);

    END_INTERFACE
} IGraphConfigCallbackVtbl;

interface IGraphConfigCallback {
    CONST_VTBL IGraphConfigCallbackVtbl* lpVtbl;
};

#ifdef COBJMACROS
#ifndef WIDL_C_INLINE_WRAPPERS
/*** IUnknown methods ***/
#define IGraphConfigCallback_QueryInterface(This,riid,ppvObject) (This)->lpVtbl->QueryInterface(This,riid,ppvObject)
#define IGraphConfigCallback_AddRef(This) (This)->lpVtbl->AddRef(This)
#define IGraphConfigCallback_Release(This) (This)->lpVtbl->Release(This)
/*** IGraphConfigCallback methods ***/
#define IGraphConfigCallback_Reconfigure(This,pvContext,dwFlags) (This)->lpVtbl->Reconfigure(This,pvContext,dwFlags)
#else
/*** IUnknown methods ***/
static FORCEINLINE HRESULT IGraphConfigCallback_QueryInterface(IGraphConfigCallback* This,REFIID riid,void **ppvObject) {
    return This->lpVtbl->QueryInterface(This,riid,ppvObject);
}
static FORCEINLINE ULONG IGraphConfigCallback_AddRef(IGraphConfigCallback* This) {
    return This->lpVtbl->AddRef(This);
}
static FORCEINLINE ULONG IGraphConfigCallback_Release(IGraphConfigCallback* This) {
    return This->lpVtbl->Release(This);
}
/*** IGraphConfigCallback methods ***/
static FORCEINLINE HRESULT IGraphConfigCallback_Reconfigure(IGraphConfigCallback* This,PVOID pvContext,DWORD dwFlags) {
    return This->lpVtbl->Reconfigure(This,pvContext,dwFlags);
}
#endif
#endif

#endif


#endif  /* __IGraphConfigCallback_INTERFACE_DEFINED__ */

/*****************************************************************************
 * 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)
MIDL_INTERFACE("dcfbdcf6-0dc2-45f5-9ab2-7c330ea09c29")
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;

};
#ifdef __CRT_UUID_DECL
__CRT_UUID_DECL(IFilterChain, 0xdcfbdcf6, 0x0dc2, 0x45f5, 0x9a,0xb2, 0x7c,0x33,0x0e,0xa0,0x9c,0x29)
#endif
#else
typedef struct IFilterChainVtbl {
    BEGIN_INTERFACE

    /*** 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);

    END_INTERFACE
} IFilterChainVtbl;

interface IFilterChain {
    CONST_VTBL IFilterChainVtbl* lpVtbl;
};

#ifdef COBJMACROS
#ifndef WIDL_C_INLINE_WRAPPERS
/*** IUnknown methods ***/
#define IFilterChain_QueryInterface(This,riid,ppvObject) (This)->lpVtbl->QueryInterface(This,riid,ppvObject)
#define IFilterChain_AddRef(This) (This)->lpVtbl->AddRef(This)
#define IFilterChain_Release(This) (This)->lpVtbl->Release(This)
/*** IFilterChain methods ***/
#define IFilterChain_StartChain(This,pStartFilter,pEndFilter) (This)->lpVtbl->StartChain(This,pStartFilter,pEndFilter)
#define IFilterChain_PauseChain(This,pStartFilter,pEndFilter) (This)->lpVtbl->PauseChain(This,pStartFilter,pEndFilter)
#define IFilterChain_StopChain(This,pStartFilter,pEndFilter) (This)->lpVtbl->StopChain(This,pStartFilter,pEndFilter)
#define IFilterChain_RemoveChain(This,pStartFilter,pEndFilter) (This)->lpVtbl->RemoveChain(This,pStartFilter,pEndFilter)
#else
/*** IUnknown methods ***/
static FORCEINLINE HRESULT IFilterChain_QueryInterface(IFilterChain* This,REFIID riid,void **ppvObject) {
    return This->lpVtbl->QueryInterface(This,riid,ppvObject);
}
static FORCEINLINE ULONG IFilterChain_AddRef(IFilterChain* This) {
    return This->lpVtbl->AddRef(This);
}
static FORCEINLINE ULONG IFilterChain_Release(IFilterChain* This) {
    return This->lpVtbl->Release(This);
}
/*** IFilterChain methods ***/
static FORCEINLINE HRESULT IFilterChain_StartChain(IFilterChain* This,IBaseFilter *pStartFilter,IBaseFilter *pEndFilter) {
    return This->lpVtbl->StartChain(This,pStartFilter,pEndFilter);
}
static FORCEINLINE HRESULT IFilterChain_PauseChain(IFilterChain* This,IBaseFilter *pStartFilter,IBaseFilter *pEndFilter) {
    return This->lpVtbl->PauseChain(This,pStartFilter,pEndFilter);
}
static FORCEINLINE HRESULT IFilterChain_StopChain(IFilterChain* This,IBaseFilter *pStartFilter,IBaseFilter *pEndFilter) {
    return This->lpVtbl->StopChain(This,pStartFilter,pEndFilter);
}
static FORCEINLINE HRESULT IFilterChain_RemoveChain(IFilterChain* This,IBaseFilter *pStartFilter,IBaseFilter *pEndFilter) {
    return This->lpVtbl->RemoveChain(This,pStartFilter,pEndFilter);
}
#endif
#endif

#endif


#endif  /* __IFilterChain_INTERFACE_DEFINED__ */

#if 0
typedef DWORD IDirectDrawSurface7;
typedef DWORD IDirectDraw7;
typedef DWORD *LPBITMAPINFOHEADER;
typedef DWORD *LPDDPIXELFORMAT;
typedef struct __WIDL_strmif_generated_name_00000009 {
    DWORD dw1;
    DWORD dw2;
} DDCOLORKEY;
#endif
#include <ddraw.h>
#ifndef __IVMRSurface_FWD_DEFINED__
#define __IVMRSurface_FWD_DEFINED__
typedef interface IVMRSurface IVMRSurface;
#ifdef __cplusplus
interface IVMRSurface;
#endif /* __cplusplus */
#endif

#ifndef __IVMRSurfaceAllocator_FWD_DEFINED__
#define __IVMRSurfaceAllocator_FWD_DEFINED__
typedef interface IVMRSurfaceAllocator IVMRSurfaceAllocator;
#ifdef __cplusplus
interface IVMRSurfaceAllocator;
#endif /* __cplusplus */
#endif

#ifndef __IVMRSurfaceAllocatorNotify_FWD_DEFINED__
#define __IVMRSurfaceAllocatorNotify_FWD_DEFINED__
typedef interface IVMRSurfaceAllocatorNotify IVMRSurfaceAllocatorNotify;
#ifdef __cplusplus
interface IVMRSurfaceAllocatorNotify;
#endif /* __cplusplus */
#endif

#ifndef __IVMRImagePresenter_FWD_DEFINED__
#define __IVMRImagePresenter_FWD_DEFINED__
typedef interface IVMRImagePresenter IVMRImagePresenter;
#ifdef __cplusplus
interface IVMRImagePresenter;
#endif /* __cplusplus */
#endif

#ifndef __IVMRImagePresenterNotify_FWD_DEFINED__
#define __IVMRImagePresenterNotify_FWD_DEFINED__
typedef interface IVMRImagePresenterNotify IVMRImagePresenterNotify;
#ifdef __cplusplus
interface IVMRImagePresenterNotify;
#endif /* __cplusplus */
#endif

#ifndef __IVMRWindowlessControl_FWD_DEFINED__
#define __IVMRWindowlessControl_FWD_DEFINED__
typedef interface IVMRWindowlessControl IVMRWindowlessControl;
#ifdef __cplusplus
interface IVMRWindowlessControl;
#endif /* __cplusplus */
#endif

#ifndef __IVMRMixerControl_FWD_DEFINED__
#define __IVMRMixerControl_FWD_DEFINED__
typedef interface IVMRMixerControl IVMRMixerControl;
#ifdef __cplusplus
interface IVMRMixerControl;
#endif /* __cplusplus */
#endif

#ifndef __IVMRMixerBitmap_FWD_DEFINED__
#define __IVMRMixerBitmap_FWD_DEFINED__
typedef interface IVMRMixerBitmap IVMRMixerBitmap;
#ifdef __cplusplus
interface IVMRMixerBitmap;
#endif /* __cplusplus */
#endif

#ifndef __IVMRFilterConfig_FWD_DEFINED__
#define __IVMRFilterConfig_FWD_DEFINED__
typedef interface IVMRFilterConfig IVMRFilterConfig;
#ifdef __cplusplus
interface IVMRFilterConfig;
#endif /* __cplusplus */
#endif

#ifndef __IVMRAspectRatioControl_FWD_DEFINED__
#define __IVMRAspectRatioControl_FWD_DEFINED__
typedef interface IVMRAspectRatioControl IVMRAspectRatioControl;
#ifdef __cplusplus
interface IVMRAspectRatioControl;
#endif /* __cplusplus */
#endif

#ifndef __IVMRDeinterlaceControl_FWD_DEFINED__
#define __IVMRDeinterlaceControl_FWD_DEFINED__
typedef interface IVMRDeinterlaceControl IVMRDeinterlaceControl;
#ifdef __cplusplus
interface IVMRDeinterlaceControl;
#endif /* __cplusplus */
#endif

#ifndef __IVMRMonitorConfig_FWD_DEFINED__
#define __IVMRMonitorConfig_FWD_DEFINED__
typedef interface IVMRMonitorConfig IVMRMonitorConfig;
#ifdef __cplusplus
interface IVMRMonitorConfig;
#endif /* __cplusplus */
#endif

#ifndef __IVMRImageCompositor_FWD_DEFINED__
#define __IVMRImageCompositor_FWD_DEFINED__
typedef interface IVMRImageCompositor IVMRImageCompositor;
#ifdef __cplusplus
interface IVMRImageCompositor;
#endif /* __cplusplus */
#endif

#ifndef __IVMRVideoStreamControl_FWD_DEFINED__
#define __IVMRVideoStreamControl_FWD_DEFINED__
typedef interface IVMRVideoStreamControl IVMRVideoStreamControl;
#ifdef __cplusplus
interface IVMRVideoStreamControl;
#endif /* __cplusplus */
#endif

typedef enum _VMRPresentationFlags {
    VMRSample_SyncPoint = 0x1,
    VMRSample_Preroll = 0x2,
    VMRSample_Discontinuity = 0x4,
    VMRSample_TimeValid = 0x8,
    VMRSample_SrcDstRectsValid = 0x10
} VMRPresentationFlags;
typedef struct tagVMRPRESENTATIONINFO {
    DWORD dwFlags;
    IDirectDrawSurface7 *lpSurf;
    REFERENCE_TIME rtStart;
    REFERENCE_TIME rtEnd;
    SIZE szAspectRatio;
    RECT rcSrc;
    RECT rcDst;
    DWORD dwTypeSpecificFlags;
    DWORD dwInterlaceFlags;
} VMRPRESENTATIONINFO;
/*****************************************************************************
 * IVMRImagePresenter interface
 */
#ifndef __IVMRImagePresenter_INTERFACE_DEFINED__
#define __IVMRImagePresenter_INTERFACE_DEFINED__

DEFINE_GUID(IID_IVMRImagePresenter, 0xce704fe7, 0xe71e, 0x41fb, 0xba,0xa2, 0xc4,0x40,0x3e,0x11,0x82,0xf5);
#if defined(__cplusplus) && !defined(CINTERFACE)
MIDL_INTERFACE("ce704fe7-e71e-41fb-baa2-c4403e1182f5")
IVMRImagePresenter : public IUnknown
{
    virtual HRESULT STDMETHODCALLTYPE StartPresenting(
        DWORD_PTR id) = 0;

    virtual HRESULT STDMETHODCALLTYPE StopPresenting(
        DWORD_PTR id) = 0;

    virtual HRESULT STDMETHODCALLTYPE PresentImage(
        DWORD_PTR id,
        VMRPRESENTATIONINFO *info) = 0;

};
#ifdef __CRT_UUID_DECL
__CRT_UUID_DECL(IVMRImagePresenter, 0xce704fe7, 0xe71e, 0x41fb, 0xba,0xa2, 0xc4,0x40,0x3e,0x11,0x82,0xf5)
#endif
#else
typedef struct IVMRImagePresenterVtbl {
    BEGIN_INTERFACE

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

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

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

    /*** IVMRImagePresenter methods ***/
    HRESULT (STDMETHODCALLTYPE *StartPresenting)(
        IVMRImagePresenter *This,
        DWORD_PTR id);

    HRESULT (STDMETHODCALLTYPE *StopPresenting)(
        IVMRImagePresenter *This,
        DWORD_PTR id);

    HRESULT (STDMETHODCALLTYPE *PresentImage)(
        IVMRImagePresenter *This,
        DWORD_PTR id,
        VMRPRESENTATIONINFO *info);

    END_INTERFACE
} IVMRImagePresenterVtbl;

interface IVMRImagePresenter {
    CONST_VTBL IVMRImagePresenterVtbl* lpVtbl;
};

#ifdef COBJMACROS
#ifndef WIDL_C_INLINE_WRAPPERS
/*** IUnknown methods ***/
#define IVMRImagePresenter_QueryInterface(This,riid,ppvObject) (This)->lpVtbl->QueryInterface(This,riid,ppvObject)
#define IVMRImagePresenter_AddRef(This) (This)->lpVtbl->AddRef(This)
#define IVMRImagePresenter_Release(This) (This)->lpVtbl->Release(This)
/*** IVMRImagePresenter methods ***/
#define IVMRImagePresenter_StartPresenting(This,id) (This)->lpVtbl->StartPresenting(This,id)
#define IVMRImagePresenter_StopPresenting(This,id) (This)->lpVtbl->StopPresenting(This,id)
#define IVMRImagePresenter_PresentImage(This,id,info) (This)->lpVtbl->PresentImage(This,id,info)
#else
/*** IUnknown methods ***/
static FORCEINLINE HRESULT IVMRImagePresenter_QueryInterface(IVMRImagePresenter* This,REFIID riid,void **ppvObject) {
    return This->lpVtbl->QueryInterface(This,riid,ppvObject);
}
static FORCEINLINE ULONG IVMRImagePresenter_AddRef(IVMRImagePresenter* This) {
    return This->lpVtbl->AddRef(This);
}
static FORCEINLINE ULONG IVMRImagePresenter_Release(IVMRImagePresenter* This) {
    return This->lpVtbl->Release(This);
}
/*** IVMRImagePresenter methods ***/
static FORCEINLINE HRESULT IVMRImagePresenter_StartPresenting(IVMRImagePresenter* This,DWORD_PTR id) {
    return This->lpVtbl->StartPresenting(This,id);
}
static FORCEINLINE HRESULT IVMRImagePresenter_StopPresenting(IVMRImagePresenter* This,DWORD_PTR id) {
    return This->lpVtbl->StopPresenting(This,id);
}
static FORCEINLINE HRESULT IVMRImagePresenter_PresentImage(IVMRImagePresenter* This,DWORD_PTR id,VMRPRESENTATIONINFO *info) {
    return This->lpVtbl->PresentImage(This,id,info);
}
#endif
#endif

#endif


#endif  /* __IVMRImagePresenter_INTERFACE_DEFINED__ */

typedef enum _VMRSurfaceAllocationFlags {
    AMAP_PIXELFORMAT_VALID = 0x1,
    AMAP_3D_TARGET = 0x2,
    AMAP_ALLOW_SYSMEM = 0x4,
    AMAP_FORCE_SYSMEM = 0x8,
    AMAP_DIRECTED_FLIP = 0x10,
    AMAP_DXVA_TARGET = 0x20
} VMRSurfaceAllocationFlags;
typedef struct tagVMRALLOCATIONINFO {
    DWORD dwFlags;
    LPBITMAPINFOHEADER lpHdr;
    LPDDPIXELFORMAT lpPixFmt;
    SIZE szAspectRatio;
    DWORD dwMinBuffers;
    DWORD dwMaxBuffers;
    DWORD dwInterlaceFlags;
    SIZE szNativeSize;
} VMRALLOCATIONINFO;
/*****************************************************************************
 * IVMRSurfaceAllocator interface
 */
#ifndef __IVMRSurfaceAllocator_INTERFACE_DEFINED__
#define __IVMRSurfaceAllocator_INTERFACE_DEFINED__

DEFINE_GUID(IID_IVMRSurfaceAllocator, 0x31ce832e, 0x4484, 0x458b, 0x8c,0xca, 0xf4,0xd7,0xe3,0xdb,0x0b,0x52);
#if defined(__cplusplus) && !defined(CINTERFACE)
MIDL_INTERFACE("31ce832e-4484-458b-8cca-f4d7e3db0b52")
IVMRSurfaceAllocator : public IUnknown
{
    virtual HRESULT STDMETHODCALLTYPE AllocateSurface(
        DWORD_PTR id,
        VMRALLOCATIONINFO *allocinfo,
        DWORD *buffers,
        IDirectDrawSurface7 **surface) = 0;

    virtual HRESULT STDMETHODCALLTYPE FreeSurface(
        DWORD_PTR id) = 0;

    virtual HRESULT STDMETHODCALLTYPE PrepareSurface(
        DWORD_PTR id,
        IDirectDrawSurface7 *surface,
        DWORD dwSurfaceFlags) = 0;

    virtual HRESULT STDMETHODCALLTYPE AdviseNotify(
        IVMRSurfaceAllocatorNotify *notify) = 0;

};
#ifdef __CRT_UUID_DECL
__CRT_UUID_DECL(IVMRSurfaceAllocator, 0x31ce832e, 0x4484, 0x458b, 0x8c,0xca, 0xf4,0xd7,0xe3,0xdb,0x0b,0x52)
#endif
#else
typedef struct IVMRSurfaceAllocatorVtbl {
    BEGIN_INTERFACE

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

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

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

    /*** IVMRSurfaceAllocator methods ***/
    HRESULT (STDMETHODCALLTYPE *AllocateSurface)(
        IVMRSurfaceAllocator *This,
        DWORD_PTR id,
        VMRALLOCATIONINFO *allocinfo,
        DWORD *buffers,
        IDirectDrawSurface7 **surface);

    HRESULT (STDMETHODCALLTYPE *FreeSurface)(
        IVMRSurfaceAllocator *This,
        DWORD_PTR id);

    HRESULT (STDMETHODCALLTYPE *PrepareSurface)(
        IVMRSurfaceAllocator *This,
        DWORD_PTR id,
        IDirectDrawSurface7 *surface,
        DWORD dwSurfaceFlags);

    HRESULT (STDMETHODCALLTYPE *AdviseNotify)(
        IVMRSurfaceAllocator *This,
        IVMRSurfaceAllocatorNotify *notify);

    END_INTERFACE
} IVMRSurfaceAllocatorVtbl;

interface IVMRSurfaceAllocator {
    CONST_VTBL IVMRSurfaceAllocatorVtbl* lpVtbl;
};

#ifdef COBJMACROS
#ifndef WIDL_C_INLINE_WRAPPERS
/*** IUnknown methods ***/
#define IVMRSurfaceAllocator_QueryInterface(This,riid,ppvObject) (This)->lpVtbl->QueryInterface(This,riid,ppvObject)
#define IVMRSurfaceAllocator_AddRef(This) (This)->lpVtbl->AddRef(This)
#define IVMRSurfaceAllocator_Release(This) (This)->lpVtbl->Release(This)
/*** IVMRSurfaceAllocator methods ***/
#define IVMRSurfaceAllocator_AllocateSurface(This,id,allocinfo,buffers,surface) (This)->lpVtbl->AllocateSurface(This,id,allocinfo,buffers,surface)
#define IVMRSurfaceAllocator_FreeSurface(This,id) (This)->lpVtbl->FreeSurface(This,id)
#define IVMRSurfaceAllocator_PrepareSurface(This,id,surface,dwSurfaceFlags) (This)->lpVtbl->PrepareSurface(This,id,surface,dwSurfaceFlags)
#define IVMRSurfaceAllocator_AdviseNotify(This,notify) (This)->lpVtbl->AdviseNotify(This,notify)
#else
/*** IUnknown methods ***/
static FORCEINLINE HRESULT IVMRSurfaceAllocator_QueryInterface(IVMRSurfaceAllocator* This,REFIID riid,void **ppvObject) {
    return This->lpVtbl->QueryInterface(This,riid,ppvObject);
}
static FORCEINLINE ULONG IVMRSurfaceAllocator_AddRef(IVMRSurfaceAllocator* This) {
    return This->lpVtbl->AddRef(This);
}
static FORCEINLINE ULONG IVMRSurfaceAllocator_Release(IVMRSurfaceAllocator* This) {
    return This->lpVtbl->Release(This);
}
/*** IVMRSurfaceAllocator methods ***/
static FORCEINLINE HRESULT IVMRSurfaceAllocator_AllocateSurface(IVMRSurfaceAllocator* This,DWORD_PTR id,VMRALLOCATIONINFO *allocinfo,DWORD *buffers,IDirectDrawSurface7 **surface) {
    return This->lpVtbl->AllocateSurface(This,id,allocinfo,buffers,surface);
}
static FORCEINLINE HRESULT IVMRSurfaceAllocator_FreeSurface(IVMRSurfaceAllocator* This,DWORD_PTR id) {
    return This->lpVtbl->FreeSurface(This,id);
}
static FORCEINLINE HRESULT IVMRSurfaceAllocator_PrepareSurface(IVMRSurfaceAllocator* This,DWORD_PTR id,IDirectDrawSurface7 *surface,DWORD dwSurfaceFlags) {
    return This->lpVtbl->PrepareSurface(This,id,surface,dwSurfaceFlags);
}
static FORCEINLINE HRESULT IVMRSurfaceAllocator_AdviseNotify(IVMRSurfaceAllocator* This,IVMRSurfaceAllocatorNotify *notify) {
    return This->lpVtbl->AdviseNotify(This,notify);
}
#endif
#endif

#endif


#endif  /* __IVMRSurfaceAllocator_INTERFACE_DEFINED__ */

/*****************************************************************************
 * IVMRSurfaceAllocatorNotify interface
 */
#ifndef __IVMRSurfaceAllocatorNotify_INTERFACE_DEFINED__
#define __IVMRSurfaceAllocatorNotify_INTERFACE_DEFINED__

DEFINE_GUID(IID_IVMRSurfaceAllocatorNotify, 0xaada05a8, 0x5a4e, 0x4729, 0xaf,0x0b, 0xce,0xa2,0x7a,0xed,0x51,0xe2);
#if defined(__cplusplus) && !defined(CINTERFACE)
MIDL_INTERFACE("aada05a8-5a4e-4729-af0b-cea27aed51e2")
IVMRSurfaceAllocatorNotify : public IUnknown
{
    virtual HRESULT STDMETHODCALLTYPE AdviseSurfaceAllocator(
        DWORD_PTR id,
        IVMRSurfaceAllocator *allocator) = 0;

    virtual HRESULT STDMETHODCALLTYPE SetDDrawDevice(
        IDirectDraw7 *device,
        HMONITOR monitor) = 0;

    virtual HRESULT STDMETHODCALLTYPE ChangeDDrawDevice(
        IDirectDraw7 *device,
        HMONITOR monitor) = 0;

    virtual HRESULT STDMETHODCALLTYPE RestoreDDrawSurfaces(
        ) = 0;

    virtual HRESULT STDMETHODCALLTYPE NotifyEvent(
        LONG EventCode,
        LONG_PTR p1,
        LONG_PTR p2) = 0;

    virtual HRESULT STDMETHODCALLTYPE SetBorderColor(
        COLORREF border) = 0;

};
#ifdef __CRT_UUID_DECL
__CRT_UUID_DECL(IVMRSurfaceAllocatorNotify, 0xaada05a8, 0x5a4e, 0x4729, 0xaf,0x0b, 0xce,0xa2,0x7a,0xed,0x51,0xe2)
#endif
#else
typedef struct IVMRSurfaceAllocatorNotifyVtbl {
    BEGIN_INTERFACE

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

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

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

    /*** IVMRSurfaceAllocatorNotify methods ***/
    HRESULT (STDMETHODCALLTYPE *AdviseSurfaceAllocator)(
        IVMRSurfaceAllocatorNotify *This,
        DWORD_PTR id,
        IVMRSurfaceAllocator *allocator);

    HRESULT (STDMETHODCALLTYPE *SetDDrawDevice)(
        IVMRSurfaceAllocatorNotify *This,
        IDirectDraw7 *device,
        HMONITOR monitor);

    HRESULT (STDMETHODCALLTYPE *ChangeDDrawDevice)(
        IVMRSurfaceAllocatorNotify *This,
        IDirectDraw7 *device,
        HMONITOR monitor);

    HRESULT (STDMETHODCALLTYPE *RestoreDDrawSurfaces)(
        IVMRSurfaceAllocatorNotify *This);

    HRESULT (STDMETHODCALLTYPE *NotifyEvent)(
        IVMRSurfaceAllocatorNotify *This,
        LONG EventCode,
        LONG_PTR p1,
        LONG_PTR p2);

    HRESULT (STDMETHODCALLTYPE *SetBorderColor)(
        IVMRSurfaceAllocatorNotify *This,
        COLORREF border);

    END_INTERFACE
} IVMRSurfaceAllocatorNotifyVtbl;

interface IVMRSurfaceAllocatorNotify {
    CONST_VTBL IVMRSurfaceAllocatorNotifyVtbl* lpVtbl;
};

#ifdef COBJMACROS
#ifndef WIDL_C_INLINE_WRAPPERS
/*** IUnknown methods ***/
#define IVMRSurfaceAllocatorNotify_QueryInterface(This,riid,ppvObject) (This)->lpVtbl->QueryInterface(This,riid,ppvObject)
#define IVMRSurfaceAllocatorNotify_AddRef(This) (This)->lpVtbl->AddRef(This)
#define IVMRSurfaceAllocatorNotify_Release(This) (This)->lpVtbl->Release(This)
/*** IVMRSurfaceAllocatorNotify methods ***/
#define IVMRSurfaceAllocatorNotify_AdviseSurfaceAllocator(This,id,allocator) (This)->lpVtbl->AdviseSurfaceAllocator(This,id,allocator)
#define IVMRSurfaceAllocatorNotify_SetDDrawDevice(This,device,monitor) (This)->lpVtbl->SetDDrawDevice(This,device,monitor)
#define IVMRSurfaceAllocatorNotify_ChangeDDrawDevice(This,device,monitor) (This)->lpVtbl->ChangeDDrawDevice(This,device,monitor)
#define IVMRSurfaceAllocatorNotify_RestoreDDrawSurfaces(This) (This)->lpVtbl->RestoreDDrawSurfaces(This)
#define IVMRSurfaceAllocatorNotify_NotifyEvent(This,EventCode,p1,p2) (This)->lpVtbl->NotifyEvent(This,EventCode,p1,p2)
#define IVMRSurfaceAllocatorNotify_SetBorderColor(This,border) (This)->lpVtbl->SetBorderColor(This,border)
#else
/*** IUnknown methods ***/
static FORCEINLINE HRESULT IVMRSurfaceAllocatorNotify_QueryInterface(IVMRSurfaceAllocatorNotify* This,REFIID riid,void **ppvObject) {
    return This->lpVtbl->QueryInterface(This,riid,ppvObject);
}
static FORCEINLINE ULONG IVMRSurfaceAllocatorNotify_AddRef(IVMRSurfaceAllocatorNotify* This) {
    return This->lpVtbl->AddRef(This);
}
static FORCEINLINE ULONG IVMRSurfaceAllocatorNotify_Release(IVMRSurfaceAllocatorNotify* This) {
    return This->lpVtbl->Release(This);
}
/*** IVMRSurfaceAllocatorNotify methods ***/
static FORCEINLINE HRESULT IVMRSurfaceAllocatorNotify_AdviseSurfaceAllocator(IVMRSurfaceAllocatorNotify* This,DWORD_PTR id,IVMRSurfaceAllocator *allocator) {
    return This->lpVtbl->AdviseSurfaceAllocator(This,id,allocator);
}
static FORCEINLINE HRESULT IVMRSurfaceAllocatorNotify_SetDDrawDevice(IVMRSurfaceAllocatorNotify* This,IDirectDraw7 *device,HMONITOR monitor) {
    return This->lpVtbl->SetDDrawDevice(This,device,monitor);
}
static FORCEINLINE HRESULT IVMRSurfaceAllocatorNotify_ChangeDDrawDevice(IVMRSurfaceAllocatorNotify* This,IDirectDraw7 *device,HMONITOR monitor) {
    return This->lpVtbl->ChangeDDrawDevice(This,device,monitor);
}
static FORCEINLINE HRESULT IVMRSurfaceAllocatorNotify_RestoreDDrawSurfaces(IVMRSurfaceAllocatorNotify* This) {
    return This->lpVtbl->RestoreDDrawSurfaces(This);
}
static FORCEINLINE HRESULT IVMRSurfaceAllocatorNotify_NotifyEvent(IVMRSurfaceAllocatorNotify* This,LONG EventCode,LONG_PTR p1,LONG_PTR p2) {
    return This->lpVtbl->NotifyEvent(This,EventCode,p1,p2);
}
static FORCEINLINE HRESULT IVMRSurfaceAllocatorNotify_SetBorderColor(IVMRSurfaceAllocatorNotify* This,COLORREF border) {
    return This->lpVtbl->SetBorderColor(This,border);
}
#endif
#endif

#endif


#endif  /* __IVMRSurfaceAllocatorNotify_INTERFACE_DEFINED__ */

typedef enum _VMR_ASPECT_RATIO_MODE {
    VMR_ARMODE_NONE = 0,
    VMR_ARMODE_LETTER_BOX = 1
} VMR_ASPECT_RATIO_MODE;
/*****************************************************************************
 * IVMRWindowlessControl interface
 */
#ifndef __IVMRWindowlessControl_INTERFACE_DEFINED__
#define __IVMRWindowlessControl_INTERFACE_DEFINED__

DEFINE_GUID(IID_IVMRWindowlessControl, 0x0eb1088c, 0x4dcd, 0x46f0, 0x87,0x8f, 0x39,0xda,0xe8,0x6a,0x51,0xb7);
#if defined(__cplusplus) && !defined(CINTERFACE)
MIDL_INTERFACE("0eb1088c-4dcd-46f0-878f-39dae86a51b7")
IVMRWindowlessControl : public IUnknown
{
    virtual HRESULT STDMETHODCALLTYPE GetNativeVideoSize(
        LONG *width,
        LONG *height,
        LONG *ar_width,
        LONG *ar_height) = 0;

    virtual HRESULT STDMETHODCALLTYPE GetMinIdealVideoSize(
        LONG *width,
        LONG *height) = 0;

    virtual HRESULT STDMETHODCALLTYPE GetMaxIdealVideoSize(
        LONG *width,
        LONG *height) = 0;

    virtual HRESULT STDMETHODCALLTYPE SetVideoPosition(
        const RECT *src_rect,
        const RECT *dst_rect) = 0;

    virtual HRESULT STDMETHODCALLTYPE GetVideoPosition(
        RECT *src_rect,
        RECT *dst_rect) = 0;

    virtual HRESULT STDMETHODCALLTYPE GetAspectRatioMode(
        DWORD *mode) = 0;

    virtual HRESULT STDMETHODCALLTYPE SetAspectRatioMode(
        DWORD mode) = 0;

    virtual HRESULT STDMETHODCALLTYPE SetVideoClippingWindow(
        HWND hwnd) = 0;

    virtual HRESULT STDMETHODCALLTYPE RepaintVideo(
        HWND hwnd,
        HDC hdc) = 0;

    virtual HRESULT STDMETHODCALLTYPE DisplayModeChanged(
        ) = 0;

    virtual HRESULT STDMETHODCALLTYPE GetCurrentImage(
        BYTE **data) = 0;

    virtual HRESULT STDMETHODCALLTYPE SetBorderColor(
        COLORREF border) = 0;

    virtual HRESULT STDMETHODCALLTYPE GetBorderColor(
        COLORREF *border) = 0;

    virtual HRESULT STDMETHODCALLTYPE SetColorKey(
        COLORREF key) = 0;

    virtual HRESULT STDMETHODCALLTYPE GetColorKey(
        COLORREF *key) = 0;

};
#ifdef __CRT_UUID_DECL
__CRT_UUID_DECL(IVMRWindowlessControl, 0x0eb1088c, 0x4dcd, 0x46f0, 0x87,0x8f, 0x39,0xda,0xe8,0x6a,0x51,0xb7)
#endif
#else
typedef struct IVMRWindowlessControlVtbl {
    BEGIN_INTERFACE

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

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

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

    /*** IVMRWindowlessControl methods ***/
    HRESULT (STDMETHODCALLTYPE *GetNativeVideoSize)(
        IVMRWindowlessControl *This,
        LONG *width,
        LONG *height,
        LONG *ar_width,
        LONG *ar_height);

    HRESULT (STDMETHODCALLTYPE *GetMinIdealVideoSize)(
        IVMRWindowlessControl *This,
        LONG *width,
        LONG *height);

    HRESULT (STDMETHODCALLTYPE *GetMaxIdealVideoSize)(
        IVMRWindowlessControl *This,
        LONG *width,
        LONG *height);

    HRESULT (STDMETHODCALLTYPE *SetVideoPosition)(
        IVMRWindowlessControl *This,
        const RECT *src_rect,
        const RECT *dst_rect);

    HRESULT (STDMETHODCALLTYPE *GetVideoPosition)(
        IVMRWindowlessControl *This,
        RECT *src_rect,
        RECT *dst_rect);

    HRESULT (STDMETHODCALLTYPE *GetAspectRatioMode)(
        IVMRWindowlessControl *This,
        DWORD *mode);

    HRESULT (STDMETHODCALLTYPE *SetAspectRatioMode)(
        IVMRWindowlessControl *This,
        DWORD mode);

    HRESULT (STDMETHODCALLTYPE *SetVideoClippingWindow)(
        IVMRWindowlessControl *This,
        HWND hwnd);

    HRESULT (STDMETHODCALLTYPE *RepaintVideo)(
        IVMRWindowlessControl *This,
        HWND hwnd,
        HDC hdc);

    HRESULT (STDMETHODCALLTYPE *DisplayModeChanged)(
        IVMRWindowlessControl *This);

    HRESULT (STDMETHODCALLTYPE *GetCurrentImage)(
        IVMRWindowlessControl *This,
        BYTE **data);

    HRESULT (STDMETHODCALLTYPE *SetBorderColor)(
        IVMRWindowlessControl *This,
        COLORREF border);

    HRESULT (STDMETHODCALLTYPE *GetBorderColor)(
        IVMRWindowlessControl *This,
        COLORREF *border);

    HRESULT (STDMETHODCALLTYPE *SetColorKey)(
        IVMRWindowlessControl *This,
        COLORREF key);

    HRESULT (STDMETHODCALLTYPE *GetColorKey)(
        IVMRWindowlessControl *This,
        COLORREF *key);

    END_INTERFACE
} IVMRWindowlessControlVtbl;

interface IVMRWindowlessControl {
    CONST_VTBL IVMRWindowlessControlVtbl* lpVtbl;
};

#ifdef COBJMACROS
#ifndef WIDL_C_INLINE_WRAPPERS
/*** IUnknown methods ***/
#define IVMRWindowlessControl_QueryInterface(This,riid,ppvObject) (This)->lpVtbl->QueryInterface(This,riid,ppvObject)
#define IVMRWindowlessControl_AddRef(This) (This)->lpVtbl->AddRef(This)
#define IVMRWindowlessControl_Release(This) (This)->lpVtbl->Release(This)
/*** IVMRWindowlessControl methods ***/
#define IVMRWindowlessControl_GetNativeVideoSize(This,width,height,ar_width,ar_height) (This)->lpVtbl->GetNativeVideoSize(This,width,height,ar_width,ar_height)
#define IVMRWindowlessControl_GetMinIdealVideoSize(This,width,height) (This)->lpVtbl->GetMinIdealVideoSize(This,width,height)
#define IVMRWindowlessControl_GetMaxIdealVideoSize(This,width,height) (This)->lpVtbl->GetMaxIdealVideoSize(This,width,height)
#define IVMRWindowlessControl_SetVideoPosition(This,src_rect,dst_rect) (This)->lpVtbl->SetVideoPosition(This,src_rect,dst_rect)
#define IVMRWindowlessControl_GetVideoPosition(This,src_rect,dst_rect) (This)->lpVtbl->GetVideoPosition(This,src_rect,dst_rect)
#define IVMRWindowlessControl_GetAspectRatioMode(This,mode) (This)->lpVtbl->GetAspectRatioMode(This,mode)
#define IVMRWindowlessControl_SetAspectRatioMode(This,mode) (This)->lpVtbl->SetAspectRatioMode(This,mode)
#define IVMRWindowlessControl_SetVideoClippingWindow(This,hwnd) (This)->lpVtbl->SetVideoClippingWindow(This,hwnd)
#define IVMRWindowlessControl_RepaintVideo(This,hwnd,hdc) (This)->lpVtbl->RepaintVideo(This,hwnd,hdc)
#define IVMRWindowlessControl_DisplayModeChanged(This) (This)->lpVtbl->DisplayModeChanged(This)
#define IVMRWindowlessControl_GetCurrentImage(This,data) (This)->lpVtbl->GetCurrentImage(This,data)
#define IVMRWindowlessControl_SetBorderColor(This,border) (This)->lpVtbl->SetBorderColor(This,border)
#define IVMRWindowlessControl_GetBorderColor(This,border) (This)->lpVtbl->GetBorderColor(This,border)
#define IVMRWindowlessControl_SetColorKey(This,key) (This)->lpVtbl->SetColorKey(This,key)
#define IVMRWindowlessControl_GetColorKey(This,key) (This)->lpVtbl->GetColorKey(This,key)
#else
/*** IUnknown methods ***/
static FORCEINLINE HRESULT IVMRWindowlessControl_QueryInterface(IVMRWindowlessControl* This,REFIID riid,void **ppvObject) {
    return This->lpVtbl->QueryInterface(This,riid,ppvObject);
}
static FORCEINLINE ULONG IVMRWindowlessControl_AddRef(IVMRWindowlessControl* This) {
    return This->lpVtbl->AddRef(This);
}
static FORCEINLINE ULONG IVMRWindowlessControl_Release(IVMRWindowlessControl* This) {
    return This->lpVtbl->Release(This);
}
/*** IVMRWindowlessControl methods ***/
static FORCEINLINE HRESULT IVMRWindowlessControl_GetNativeVideoSize(IVMRWindowlessControl* This,LONG *width,LONG *height,LONG *ar_width,LONG *ar_height) {
    return This->lpVtbl->GetNativeVideoSize(This,width,height,ar_width,ar_height);
}
static FORCEINLINE HRESULT IVMRWindowlessControl_GetMinIdealVideoSize(IVMRWindowlessControl* This,LONG *width,LONG *height) {
    return This->lpVtbl->GetMinIdealVideoSize(This,width,height);
}
static FORCEINLINE HRESULT IVMRWindowlessControl_GetMaxIdealVideoSize(IVMRWindowlessControl* This,LONG *width,LONG *height) {
    return This->lpVtbl->GetMaxIdealVideoSize(This,width,height);
}
static FORCEINLINE HRESULT IVMRWindowlessControl_SetVideoPosition(IVMRWindowlessControl* This,const RECT *src_rect,const RECT *dst_rect) {
    return This->lpVtbl->SetVideoPosition(This,src_rect,dst_rect);
}
static FORCEINLINE HRESULT IVMRWindowlessControl_GetVideoPosition(IVMRWindowlessControl* This,RECT *src_rect,RECT *dst_rect) {
    return This->lpVtbl->GetVideoPosition(This,src_rect,dst_rect);
}
static FORCEINLINE HRESULT IVMRWindowlessControl_GetAspectRatioMode(IVMRWindowlessControl* This,DWORD *mode) {
    return This->lpVtbl->GetAspectRatioMode(This,mode);
}
static FORCEINLINE HRESULT IVMRWindowlessControl_SetAspectRatioMode(IVMRWindowlessControl* This,DWORD mode) {
    return This->lpVtbl->SetAspectRatioMode(This,mode);
}
static FORCEINLINE HRESULT IVMRWindowlessControl_SetVideoClippingWindow(IVMRWindowlessControl* This,HWND hwnd) {
    return This->lpVtbl->SetVideoClippingWindow(This,hwnd);
}
static FORCEINLINE HRESULT IVMRWindowlessControl_RepaintVideo(IVMRWindowlessControl* This,HWND hwnd,HDC hdc) {
    return This->lpVtbl->RepaintVideo(This,hwnd,hdc);
}
static FORCEINLINE HRESULT IVMRWindowlessControl_DisplayModeChanged(IVMRWindowlessControl* This) {
    return This->lpVtbl->DisplayModeChanged(This);
}
static FORCEINLINE HRESULT IVMRWindowlessControl_GetCurrentImage(IVMRWindowlessControl* This,BYTE **data) {
    return This->lpVtbl->GetCurrentImage(This,data);
}
static FORCEINLINE HRESULT IVMRWindowlessControl_SetBorderColor(IVMRWindowlessControl* This,COLORREF border) {
    return This->lpVtbl->SetBorderColor(This,border);
}
static FORCEINLINE HRESULT IVMRWindowlessControl_GetBorderColor(IVMRWindowlessControl* This,COLORREF *border) {
    return This->lpVtbl->GetBorderColor(This,border);
}
static FORCEINLINE HRESULT IVMRWindowlessControl_SetColorKey(IVMRWindowlessControl* This,COLORREF key) {
    return This->lpVtbl->SetColorKey(This,key);
}
static FORCEINLINE HRESULT IVMRWindowlessControl_GetColorKey(IVMRWindowlessControl* This,COLORREF *key) {
    return This->lpVtbl->GetColorKey(This,key);
}
#endif
#endif

#endif


#endif  /* __IVMRWindowlessControl_INTERFACE_DEFINED__ */

typedef enum _VMRMixerPrefs {
    MixerPref_NoDecimation = 0x1,
    MixerPref_DecimateOutput = 0x2,
    MixerPref_ARAdjustXorY = 0x4,
    MixerPref_DecimationReserved = 0x8,
    MixerPref_DecimateMask = 0xf,
    MixerPref_BiLinearFiltering = 0x10,
    MixerPref_PointFiltering = 0x20,
    MixerPref_FinteringMask = 0xf0,
    MixerPref_RenderTargetRGB = 0x100,
    MixerPref_RenderTargetYUV = 0x1000,
    MixerPref_RenderTargetYUV420 = 0x200,
    MixerPref_RenderTargetYUV422 = 0x400,
    MixerPref_RenderTargetYUV444 = 0x800,
    MixerPref_RenderTargetReserved = 0xe000,
    MixerPref_RenderTargetMask = 0xff00,
    MixerPref_DynamicSwitchToBOB = 0x10000,
    MixerPref_DynamicDecimateBy2 = 0x20000,
    MixerPref_DynamicReserved = 0xc0000,
    MixerPref_DynamicMask = 0xf0000
} VMRMixerPrefs;
typedef struct _NORMALIZEDRECT {
    FLOAT left;
    FLOAT top;
    FLOAT right;
    FLOAT bottom;
} NORMALIZEDRECT;
/*****************************************************************************
 * IVMRMixerControl interface
 */
#ifndef __IVMRMixerControl_INTERFACE_DEFINED__
#define __IVMRMixerControl_INTERFACE_DEFINED__

DEFINE_GUID(IID_IVMRMixerControl, 0x1c1a17b0, 0xbed0, 0x415d, 0x97,0x4b, 0xdc,0x66,0x96,0x13,0x15,0x99);
#if defined(__cplusplus) && !defined(CINTERFACE)
MIDL_INTERFACE("1c1a17b0-bed0-415d-974b-dc6696131599")
IVMRMixerControl : public IUnknown
{
    virtual HRESULT STDMETHODCALLTYPE SetAlpha(
        DWORD id,
        FLOAT alpha) = 0;

    virtual HRESULT STDMETHODCALLTYPE GetAlpha(
        DWORD id,
        FLOAT *alpha) = 0;

    virtual HRESULT STDMETHODCALLTYPE SetZOrder(
        DWORD id,
        DWORD z) = 0;

    virtual HRESULT STDMETHODCALLTYPE GetZOrder(
        DWORD id,
        DWORD *z) = 0;

    virtual HRESULT STDMETHODCALLTYPE SetOutputRect(
        DWORD id,
        const NORMALIZEDRECT *rect) = 0;

    virtual HRESULT STDMETHODCALLTYPE SetBackgroundClr(
        COLORREF background) = 0;

    virtual HRESULT STDMETHODCALLTYPE GetBackgroundClr(
        COLORREF *background) = 0;

    virtual HRESULT STDMETHODCALLTYPE SetMixingPrefs(
        DWORD prefs) = 0;

    virtual HRESULT STDMETHODCALLTYPE GetMixingPrefs(
        DWORD *prefs) = 0;

};
#ifdef __CRT_UUID_DECL
__CRT_UUID_DECL(IVMRMixerControl, 0x1c1a17b0, 0xbed0, 0x415d, 0x97,0x4b, 0xdc,0x66,0x96,0x13,0x15,0x99)
#endif
#else
typedef struct IVMRMixerControlVtbl {
    BEGIN_INTERFACE

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

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

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

    /*** IVMRMixerControl methods ***/
    HRESULT (STDMETHODCALLTYPE *SetAlpha)(
        IVMRMixerControl *This,
        DWORD id,
        FLOAT alpha);

    HRESULT (STDMETHODCALLTYPE *GetAlpha)(
        IVMRMixerControl *This,
        DWORD id,
        FLOAT *alpha);

    HRESULT (STDMETHODCALLTYPE *SetZOrder)(
        IVMRMixerControl *This,
        DWORD id,
        DWORD z);

    HRESULT (STDMETHODCALLTYPE *GetZOrder)(
        IVMRMixerControl *This,
        DWORD id,
        DWORD *z);

    HRESULT (STDMETHODCALLTYPE *SetOutputRect)(
        IVMRMixerControl *This,
        DWORD id,
        const NORMALIZEDRECT *rect);

    HRESULT (STDMETHODCALLTYPE *SetBackgroundClr)(
        IVMRMixerControl *This,
        COLORREF background);

    HRESULT (STDMETHODCALLTYPE *GetBackgroundClr)(
        IVMRMixerControl *This,
        COLORREF *background);

    HRESULT (STDMETHODCALLTYPE *SetMixingPrefs)(
        IVMRMixerControl *This,
        DWORD prefs);

    HRESULT (STDMETHODCALLTYPE *GetMixingPrefs)(
        IVMRMixerControl *This,
        DWORD *prefs);

    END_INTERFACE
} IVMRMixerControlVtbl;

interface IVMRMixerControl {
    CONST_VTBL IVMRMixerControlVtbl* lpVtbl;
};

#ifdef COBJMACROS
#ifndef WIDL_C_INLINE_WRAPPERS
/*** IUnknown methods ***/
#define IVMRMixerControl_QueryInterface(This,riid,ppvObject) (This)->lpVtbl->QueryInterface(This,riid,ppvObject)
#define IVMRMixerControl_AddRef(This) (This)->lpVtbl->AddRef(This)
#define IVMRMixerControl_Release(This) (This)->lpVtbl->Release(This)
/*** IVMRMixerControl methods ***/
#define IVMRMixerControl_SetAlpha(This,id,alpha) (This)->lpVtbl->SetAlpha(This,id,alpha)
#define IVMRMixerControl_GetAlpha(This,id,alpha) (This)->lpVtbl->GetAlpha(This,id,alpha)
#define IVMRMixerControl_SetZOrder(This,id,z) (This)->lpVtbl->SetZOrder(This,id,z)
#define IVMRMixerControl_GetZOrder(This,id,z) (This)->lpVtbl->GetZOrder(This,id,z)
#define IVMRMixerControl_SetOutputRect(This,id,rect) (This)->lpVtbl->SetOutputRect(This,id,rect)
#define IVMRMixerControl_SetBackgroundClr(This,background) (This)->lpVtbl->SetBackgroundClr(This,background)
#define IVMRMixerControl_GetBackgroundClr(This,background) (This)->lpVtbl->GetBackgroundClr(This,background)
#define IVMRMixerControl_SetMixingPrefs(This,prefs) (This)->lpVtbl->SetMixingPrefs(This,prefs)
#define IVMRMixerControl_GetMixingPrefs(This,prefs) (This)->lpVtbl->GetMixingPrefs(This,prefs)
#else
/*** IUnknown methods ***/
static FORCEINLINE HRESULT IVMRMixerControl_QueryInterface(IVMRMixerControl* This,REFIID riid,void **ppvObject) {
    return This->lpVtbl->QueryInterface(This,riid,ppvObject);
}
static FORCEINLINE ULONG IVMRMixerControl_AddRef(IVMRMixerControl* This) {
    return This->lpVtbl->AddRef(This);
}
static FORCEINLINE ULONG IVMRMixerControl_Release(IVMRMixerControl* This) {
    return This->lpVtbl->Release(This);
}
/*** IVMRMixerControl methods ***/
static FORCEINLINE HRESULT IVMRMixerControl_SetAlpha(IVMRMixerControl* This,DWORD id,FLOAT alpha) {
    return This->lpVtbl->SetAlpha(This,id,alpha);
}
static FORCEINLINE HRESULT IVMRMixerControl_GetAlpha(IVMRMixerControl* This,DWORD id,FLOAT *alpha) {
    return This->lpVtbl->GetAlpha(This,id,alpha);
}
static FORCEINLINE HRESULT IVMRMixerControl_SetZOrder(IVMRMixerControl* This,DWORD id,DWORD z) {
    return This->lpVtbl->SetZOrder(This,id,z);
}
static FORCEINLINE HRESULT IVMRMixerControl_GetZOrder(IVMRMixerControl* This,DWORD id,DWORD *z) {
    return This->lpVtbl->GetZOrder(This,id,z);
}
static FORCEINLINE HRESULT IVMRMixerControl_SetOutputRect(IVMRMixerControl* This,DWORD id,const NORMALIZEDRECT *rect) {
    return This->lpVtbl->SetOutputRect(This,id,rect);
}
static FORCEINLINE HRESULT IVMRMixerControl_SetBackgroundClr(IVMRMixerControl* This,COLORREF background) {
    return This->lpVtbl->SetBackgroundClr(This,background);
}
static FORCEINLINE HRESULT IVMRMixerControl_GetBackgroundClr(IVMRMixerControl* This,COLORREF *background) {
    return This->lpVtbl->GetBackgroundClr(This,background);
}
static FORCEINLINE HRESULT IVMRMixerControl_SetMixingPrefs(IVMRMixerControl* This,DWORD prefs) {
    return This->lpVtbl->SetMixingPrefs(This,prefs);
}
static FORCEINLINE HRESULT IVMRMixerControl_GetMixingPrefs(IVMRMixerControl* This,DWORD *prefs) {
    return This->lpVtbl->GetMixingPrefs(This,prefs);
}
#endif
#endif

#endif


#endif  /* __IVMRMixerControl_INTERFACE_DEFINED__ */

typedef struct tagVMRGUID {
    struct _GUID *pGUID;
    struct _GUID GUID;
} VMRGUID;
typedef struct tagVMRMONITORINFO {
    VMRGUID guid;
    RECT rcMonitor;
    HMONITOR hMon;
    DWORD dwFlags;
    WCHAR szDevice[32];
    WCHAR szDescription[256];
    LARGE_INTEGER liDriverVersion;
    DWORD dwVendorId;
    DWORD dwDeviceId;
    DWORD dwSubSysId;
    DWORD dwRevision;
} VMRMONITORINFO;
/*****************************************************************************
 * IVMRMonitorConfig interface
 */
#ifndef __IVMRMonitorConfig_INTERFACE_DEFINED__
#define __IVMRMonitorConfig_INTERFACE_DEFINED__

DEFINE_GUID(IID_IVMRMonitorConfig, 0x9cf0b1b6, 0xfbaa, 0x4b7f, 0x88,0xcf, 0xcf,0x1f,0x13,0x0a,0x0d,0xce);
#if defined(__cplusplus) && !defined(CINTERFACE)
MIDL_INTERFACE("9cf0b1b6-fbaa-4b7f-88cf-cf1f130a0dce")
IVMRMonitorConfig : public IUnknown
{
    virtual HRESULT STDMETHODCALLTYPE SetMonitor(
        const VMRGUID *vmrguid) = 0;

    virtual HRESULT STDMETHODCALLTYPE GetMonitor(
        VMRGUID *vmrguid) = 0;

    virtual HRESULT STDMETHODCALLTYPE SetDefaultMonitor(
        const VMRGUID *vmrguid) = 0;

    virtual HRESULT STDMETHODCALLTYPE GetDefaultMonitor(
        VMRGUID *vmrguid) = 0;

    virtual HRESULT STDMETHODCALLTYPE GetAvailableMonitors(
        VMRMONITORINFO *info,
        DWORD array_size,
        DWORD *retrieved) = 0;

};
#ifdef __CRT_UUID_DECL
__CRT_UUID_DECL(IVMRMonitorConfig, 0x9cf0b1b6, 0xfbaa, 0x4b7f, 0x88,0xcf, 0xcf,0x1f,0x13,0x0a,0x0d,0xce)
#endif
#else
typedef struct IVMRMonitorConfigVtbl {
    BEGIN_INTERFACE

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

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

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

    /*** IVMRMonitorConfig methods ***/
    HRESULT (STDMETHODCALLTYPE *SetMonitor)(
        IVMRMonitorConfig *This,
        const VMRGUID *vmrguid);

    HRESULT (STDMETHODCALLTYPE *GetMonitor)(
        IVMRMonitorConfig *This,
        VMRGUID *vmrguid);

    HRESULT (STDMETHODCALLTYPE *SetDefaultMonitor)(
        IVMRMonitorConfig *This,
        const VMRGUID *vmrguid);

    HRESULT (STDMETHODCALLTYPE *GetDefaultMonitor)(
        IVMRMonitorConfig *This,
        VMRGUID *vmrguid);

    HRESULT (STDMETHODCALLTYPE *GetAvailableMonitors)(
        IVMRMonitorConfig *This,
        VMRMONITORINFO *info,
        DWORD array_size,
        DWORD *retrieved);

    END_INTERFACE
} IVMRMonitorConfigVtbl;

interface IVMRMonitorConfig {
    CONST_VTBL IVMRMonitorConfigVtbl* lpVtbl;
};

#ifdef COBJMACROS
#ifndef WIDL_C_INLINE_WRAPPERS
/*** IUnknown methods ***/
#define IVMRMonitorConfig_QueryInterface(This,riid,ppvObject) (This)->lpVtbl->QueryInterface(This,riid,ppvObject)
#define IVMRMonitorConfig_AddRef(This) (This)->lpVtbl->AddRef(This)
#define IVMRMonitorConfig_Release(This) (This)->lpVtbl->Release(This)
/*** IVMRMonitorConfig methods ***/
#define IVMRMonitorConfig_SetMonitor(This,vmrguid) (This)->lpVtbl->SetMonitor(This,vmrguid)
#define IVMRMonitorConfig_GetMonitor(This,vmrguid) (This)->lpVtbl->GetMonitor(This,vmrguid)
#define IVMRMonitorConfig_SetDefaultMonitor(This,vmrguid) (This)->lpVtbl->SetDefaultMonitor(This,vmrguid)
#define IVMRMonitorConfig_GetDefaultMonitor(This,vmrguid) (This)->lpVtbl->GetDefaultMonitor(This,vmrguid)
#define IVMRMonitorConfig_GetAvailableMonitors(This,info,array_size,retrieved) (This)->lpVtbl->GetAvailableMonitors(This,info,array_size,retrieved)
#else
/*** IUnknown methods ***/
static FORCEINLINE HRESULT IVMRMonitorConfig_QueryInterface(IVMRMonitorConfig* This,REFIID riid,void **ppvObject) {
    return This->lpVtbl->QueryInterface(This,riid,ppvObject);
}
static FORCEINLINE ULONG IVMRMonitorConfig_AddRef(IVMRMonitorConfig* This) {
    return This->lpVtbl->AddRef(This);
}
static FORCEINLINE ULONG IVMRMonitorConfig_Release(IVMRMonitorConfig* This) {
    return This->lpVtbl->Release(This);
}
/*** IVMRMonitorConfig methods ***/
static FORCEINLINE HRESULT IVMRMonitorConfig_SetMonitor(IVMRMonitorConfig* This,const VMRGUID *vmrguid) {
    return This->lpVtbl->SetMonitor(This,vmrguid);
}
static FORCEINLINE HRESULT IVMRMonitorConfig_GetMonitor(IVMRMonitorConfig* This,VMRGUID *vmrguid) {
    return This->lpVtbl->GetMonitor(This,vmrguid);
}
static FORCEINLINE HRESULT IVMRMonitorConfig_SetDefaultMonitor(IVMRMonitorConfig* This,const VMRGUID *vmrguid) {
    return This->lpVtbl->SetDefaultMonitor(This,vmrguid);
}
static FORCEINLINE HRESULT IVMRMonitorConfig_GetDefaultMonitor(IVMRMonitorConfig* This,VMRGUID *vmrguid) {
    return This->lpVtbl->GetDefaultMonitor(This,vmrguid);
}
static FORCEINLINE HRESULT IVMRMonitorConfig_GetAvailableMonitors(IVMRMonitorConfig* This,VMRMONITORINFO *info,DWORD array_size,DWORD *retrieved) {
    return This->lpVtbl->GetAvailableMonitors(This,info,array_size,retrieved);
}
#endif
#endif

#endif


#endif  /* __IVMRMonitorConfig_INTERFACE_DEFINED__ */

typedef enum _VMRRenderPrefs {
    RenderPrefs_RestrictToInitialMonitor = 0x0,
    RenderPrefs_ForceOffScreen = 0x1,
    RenderPrefs_ForceOverlays = 0x2,
    RenderPrefs_AllowOverlays = 0x0,
    RenderPrefs_AllowOffscreen = 0x0,
    RenderPrefs_DoNotRenderColorKeyAndBorder = 0x8,
    RenderPrefs_Reserved = 0x10,
    RenderPrefs_PreferAGPMemWhenMixing = 0x20,
    RenderPrefs_Mask = 0x3f
} VMRRenderPrefs;
typedef enum _VMRMode {
    VMRMode_Windowed = 0x1,
    VMRMode_Windowless = 0x2,
    VMRMode_Renderless = 0x4,
    VMRMode_Mask = 0x7
} VMRMode;
enum {
    MAX_NUMBER_OF_STREAMS = 16
};
/*****************************************************************************
 * IVMRFilterConfig interface
 */
#ifndef __IVMRFilterConfig_INTERFACE_DEFINED__
#define __IVMRFilterConfig_INTERFACE_DEFINED__

DEFINE_GUID(IID_IVMRFilterConfig, 0x9e5530c5, 0x7034, 0x48b4, 0xbb,0x46, 0x0b,0x8a,0x6e,0xfc,0x8e,0x36);
#if defined(__cplusplus) && !defined(CINTERFACE)
MIDL_INTERFACE("9e5530c5-7034-48b4-bb46-0b8a6efc8e36")
IVMRFilterConfig : public IUnknown
{
    virtual HRESULT STDMETHODCALLTYPE SetImageCompositor(
        IVMRImageCompositor *compositor) = 0;

    virtual HRESULT STDMETHODCALLTYPE SetNumberOfStreams(
        DWORD streams) = 0;

    virtual HRESULT STDMETHODCALLTYPE GetNumberOfStreams(
        DWORD *streams) = 0;

    virtual HRESULT STDMETHODCALLTYPE SetRenderingPrefs(
        DWORD prefs) = 0;

    virtual HRESULT STDMETHODCALLTYPE GetRenderingPrefs(
        DWORD *prefs) = 0;

    virtual HRESULT STDMETHODCALLTYPE SetRenderingMode(
        DWORD mode) = 0;

    virtual HRESULT STDMETHODCALLTYPE GetRenderingMode(
        DWORD *mode) = 0;

};
#ifdef __CRT_UUID_DECL
__CRT_UUID_DECL(IVMRFilterConfig, 0x9e5530c5, 0x7034, 0x48b4, 0xbb,0x46, 0x0b,0x8a,0x6e,0xfc,0x8e,0x36)
#endif
#else
typedef struct IVMRFilterConfigVtbl {
    BEGIN_INTERFACE

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

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

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

    /*** IVMRFilterConfig methods ***/
    HRESULT (STDMETHODCALLTYPE *SetImageCompositor)(
        IVMRFilterConfig *This,
        IVMRImageCompositor *compositor);

    HRESULT (STDMETHODCALLTYPE *SetNumberOfStreams)(
        IVMRFilterConfig *This,
        DWORD streams);

    HRESULT (STDMETHODCALLTYPE *GetNumberOfStreams)(
        IVMRFilterConfig *This,
        DWORD *streams);

    HRESULT (STDMETHODCALLTYPE *SetRenderingPrefs)(
        IVMRFilterConfig *This,
        DWORD prefs);

    HRESULT (STDMETHODCALLTYPE *GetRenderingPrefs)(
        IVMRFilterConfig *This,
        DWORD *prefs);

    HRESULT (STDMETHODCALLTYPE *SetRenderingMode)(
        IVMRFilterConfig *This,
        DWORD mode);

    HRESULT (STDMETHODCALLTYPE *GetRenderingMode)(
        IVMRFilterConfig *This,
        DWORD *mode);

    END_INTERFACE
} IVMRFilterConfigVtbl;

interface IVMRFilterConfig {
    CONST_VTBL IVMRFilterConfigVtbl* lpVtbl;
};

#ifdef COBJMACROS
#ifndef WIDL_C_INLINE_WRAPPERS
/*** IUnknown methods ***/
#define IVMRFilterConfig_QueryInterface(This,riid,ppvObject) (This)->lpVtbl->QueryInterface(This,riid,ppvObject)
#define IVMRFilterConfig_AddRef(This) (This)->lpVtbl->AddRef(This)
#define IVMRFilterConfig_Release(This) (This)->lpVtbl->Release(This)
/*** IVMRFilterConfig methods ***/
#define IVMRFilterConfig_SetImageCompositor(This,compositor) (This)->lpVtbl->SetImageCompositor(This,compositor)
#define IVMRFilterConfig_SetNumberOfStreams(This,streams) (This)->lpVtbl->SetNumberOfStreams(This,streams)
#define IVMRFilterConfig_GetNumberOfStreams(This,streams) (This)->lpVtbl->GetNumberOfStreams(This,streams)
#define IVMRFilterConfig_SetRenderingPrefs(This,prefs) (This)->lpVtbl->SetRenderingPrefs(This,prefs)
#define IVMRFilterConfig_GetRenderingPrefs(This,prefs) (This)->lpVtbl->GetRenderingPrefs(This,prefs)
#define IVMRFilterConfig_SetRenderingMode(This,mode) (This)->lpVtbl->SetRenderingMode(This,mode)
#define IVMRFilterConfig_GetRenderingMode(This,mode) (This)->lpVtbl->GetRenderingMode(This,mode)
#else
/*** IUnknown methods ***/
static FORCEINLINE HRESULT IVMRFilterConfig_QueryInterface(IVMRFilterConfig* This,REFIID riid,void **ppvObject) {
    return This->lpVtbl->QueryInterface(This,riid,ppvObject);
}
static FORCEINLINE ULONG IVMRFilterConfig_AddRef(IVMRFilterConfig* This) {
    return This->lpVtbl->AddRef(This);
}
static FORCEINLINE ULONG IVMRFilterConfig_Release(IVMRFilterConfig* This) {
    return This->lpVtbl->Release(This);
}
/*** IVMRFilterConfig methods ***/
static FORCEINLINE HRESULT IVMRFilterConfig_SetImageCompositor(IVMRFilterConfig* This,IVMRImageCompositor *compositor) {
    return This->lpVtbl->SetImageCompositor(This,compositor);
}
static FORCEINLINE HRESULT IVMRFilterConfig_SetNumberOfStreams(IVMRFilterConfig* This,DWORD streams) {
    return This->lpVtbl->SetNumberOfStreams(This,streams);
}
static FORCEINLINE HRESULT IVMRFilterConfig_GetNumberOfStreams(IVMRFilterConfig* This,DWORD *streams) {
    return This->lpVtbl->GetNumberOfStreams(This,streams);
}
static FORCEINLINE HRESULT IVMRFilterConfig_SetRenderingPrefs(IVMRFilterConfig* This,DWORD prefs) {
    return This->lpVtbl->SetRenderingPrefs(This,prefs);
}
static FORCEINLINE HRESULT IVMRFilterConfig_GetRenderingPrefs(IVMRFilterConfig* This,DWORD *prefs) {
    return This->lpVtbl->GetRenderingPrefs(This,prefs);
}
static FORCEINLINE HRESULT IVMRFilterConfig_SetRenderingMode(IVMRFilterConfig* This,DWORD mode) {
    return This->lpVtbl->SetRenderingMode(This,mode);
}
static FORCEINLINE HRESULT IVMRFilterConfig_GetRenderingMode(IVMRFilterConfig* This,DWORD *mode) {
    return This->lpVtbl->GetRenderingMode(This,mode);
}
#endif
#endif

#endif


#endif  /* __IVMRFilterConfig_INTERFACE_DEFINED__ */

/*****************************************************************************
 * IVMRAspectRatioControl interface
 */
#ifndef __IVMRAspectRatioControl_INTERFACE_DEFINED__
#define __IVMRAspectRatioControl_INTERFACE_DEFINED__

DEFINE_GUID(IID_IVMRAspectRatioControl, 0xede80b5c, 0xbad6, 0x4623, 0xb5,0x37, 0x65,0x58,0x6c,0x9f,0x8d,0xfd);
#if defined(__cplusplus) && !defined(CINTERFACE)
MIDL_INTERFACE("ede80b5c-bad6-4623-b537-65586c9f8dfd")
IVMRAspectRatioControl : public IUnknown
{
    virtual HRESULT STDMETHODCALLTYPE GetAspectRatioMode(
        DWORD *armode) = 0;

    virtual HRESULT STDMETHODCALLTYPE SetAspectRatioMode(
        DWORD armode) = 0;

};
#ifdef __CRT_UUID_DECL
__CRT_UUID_DECL(IVMRAspectRatioControl, 0xede80b5c, 0xbad6, 0x4623, 0xb5,0x37, 0x65,0x58,0x6c,0x9f,0x8d,0xfd)
#endif
#else
typedef struct IVMRAspectRatioControlVtbl {
    BEGIN_INTERFACE

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

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

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

    /*** IVMRAspectRatioControl methods ***/
    HRESULT (STDMETHODCALLTYPE *GetAspectRatioMode)(
        IVMRAspectRatioControl *This,
        DWORD *armode);

    HRESULT (STDMETHODCALLTYPE *SetAspectRatioMode)(
        IVMRAspectRatioControl *This,
        DWORD armode);

    END_INTERFACE
} IVMRAspectRatioControlVtbl;

interface IVMRAspectRatioControl {
    CONST_VTBL IVMRAspectRatioControlVtbl* lpVtbl;
};

#ifdef COBJMACROS
#ifndef WIDL_C_INLINE_WRAPPERS
/*** IUnknown methods ***/
#define IVMRAspectRatioControl_QueryInterface(This,riid,ppvObject) (This)->lpVtbl->QueryInterface(This,riid,ppvObject)
#define IVMRAspectRatioControl_AddRef(This) (This)->lpVtbl->AddRef(This)
#define IVMRAspectRatioControl_Release(This) (This)->lpVtbl->Release(This)
/*** IVMRAspectRatioControl methods ***/
#define IVMRAspectRatioControl_GetAspectRatioMode(This,armode) (This)->lpVtbl->GetAspectRatioMode(This,armode)
#define IVMRAspectRatioControl_SetAspectRatioMode(This,armode) (This)->lpVtbl->SetAspectRatioMode(This,armode)
#else
/*** IUnknown methods ***/
static FORCEINLINE HRESULT IVMRAspectRatioControl_QueryInterface(IVMRAspectRatioControl* This,REFIID riid,void **ppvObject) {
    return This->lpVtbl->QueryInterface(This,riid,ppvObject);
}
static FORCEINLINE ULONG IVMRAspectRatioControl_AddRef(IVMRAspectRatioControl* This) {
    return This->lpVtbl->AddRef(This);
}
static FORCEINLINE ULONG IVMRAspectRatioControl_Release(IVMRAspectRatioControl* This) {
    return This->lpVtbl->Release(This);
}
/*** IVMRAspectRatioControl methods ***/
static FORCEINLINE HRESULT IVMRAspectRatioControl_GetAspectRatioMode(IVMRAspectRatioControl* This,DWORD *armode) {
    return This->lpVtbl->GetAspectRatioMode(This,armode);
}
static FORCEINLINE HRESULT IVMRAspectRatioControl_SetAspectRatioMode(IVMRAspectRatioControl* This,DWORD armode) {
    return This->lpVtbl->SetAspectRatioMode(This,armode);
}
#endif
#endif

#endif


#endif  /* __IVMRAspectRatioControl_INTERFACE_DEFINED__ */

typedef enum _VMRDeinterlacePrefs {
    DeinterlacePref_NextBest = 0x1,
    DeinterlacePref_BOB = 0x2,
    DeinterlacePref_Weave = 0x4,
    DeinterlacePref_Mask = 0x7
} VMRDeinterlacePrefs;
typedef enum _VMRDeinterlaceTech {
    DeinterlaceTech_Unknown = 0x0,
    DeinterlaceTech_BOBLineReplicate = 0x1,
    DeinterlaceTech_BOBVerticalStretch = 0x2,
    DeinterlaceTech_MedianFiltering = 0x4,
    DeinterlaceTech_EdgeFiltering = 0x8,
    DeinterlaceTech_FieldAdaptive = 0x10,
    DeinterlaceTech_PixelAdaptive = 0x20,
    DeinterlaceTech_MotionVectorSteered = 0x80
} VMRDeinterlaceTech;
typedef struct _VMRFrequency {
    DWORD dwNumerator;
    DWORD dwDenominator;
} VMRFrequency;
typedef struct _VMRVideoDesc {
    DWORD dwSize;
    DWORD dwSampleWidth;
    DWORD dwSampleHeight;
    BOOL SingleFieldPerSample;
    DWORD dwFourCC;
    VMRFrequency InputSampleFreq;
    VMRFrequency OutputFrameFreq;
} VMRVideoDesc;
typedef struct _VMRDeinterlaceCaps {
    DWORD dwSize;
    DWORD dwNumPreviousOutputFrames;
    DWORD dwNumForwardRefSamples;
    DWORD dwNumBackwardRefSamples;
    VMRDeinterlaceTech DeinterlaceTechnology;
} VMRDeinterlaceCaps;
/*****************************************************************************
 * IVMRDeinterlaceControl interface
 */
#ifndef __IVMRDeinterlaceControl_INTERFACE_DEFINED__
#define __IVMRDeinterlaceControl_INTERFACE_DEFINED__

DEFINE_GUID(IID_IVMRDeinterlaceControl, 0xbb057577, 0x0db8, 0x4e6a, 0x87,0xa7, 0x1a,0x8c,0x9a,0x50,0x5a,0x0f);
#if defined(__cplusplus) && !defined(CINTERFACE)
MIDL_INTERFACE("bb057577-0db8-4e6a-87a7-1a8c9a505a0f")
IVMRDeinterlaceControl : public IUnknown
{
    virtual HRESULT STDMETHODCALLTYPE GetNumberOfDeinterlaceModes(
        VMRVideoDesc *desc,
        DWORD *num_modes,
        GUID *modes) = 0;

    virtual HRESULT STDMETHODCALLTYPE GetDeinterlaceModeCaps(
        GUID *mode,
        VMRVideoDesc *desc,
        VMRDeinterlaceCaps *caps) = 0;

    virtual HRESULT STDMETHODCALLTYPE GetDeinterlaceMode(
        DWORD id,
        GUID *mode) = 0;

    virtual HRESULT STDMETHODCALLTYPE SetDeinterlaceMode(
        DWORD id,
        GUID *mode) = 0;

    virtual HRESULT STDMETHODCALLTYPE GetDeinterlacePrefs(
        DWORD *prefs) = 0;

    virtual HRESULT STDMETHODCALLTYPE SetDeinterlacePrefs(
        DWORD prefs) = 0;

    virtual HRESULT STDMETHODCALLTYPE GetActualDeinterlaceMode(
        DWORD id,
        GUID *mode) = 0;

};
#ifdef __CRT_UUID_DECL
__CRT_UUID_DECL(IVMRDeinterlaceControl, 0xbb057577, 0x0db8, 0x4e6a, 0x87,0xa7, 0x1a,0x8c,0x9a,0x50,0x5a,0x0f)
#endif
#else
typedef struct IVMRDeinterlaceControlVtbl {
    BEGIN_INTERFACE

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

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

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

    /*** IVMRDeinterlaceControl methods ***/
    HRESULT (STDMETHODCALLTYPE *GetNumberOfDeinterlaceModes)(
        IVMRDeinterlaceControl *This,
        VMRVideoDesc *desc,
        DWORD *num_modes,
        GUID *modes);

    HRESULT (STDMETHODCALLTYPE *GetDeinterlaceModeCaps)(
        IVMRDeinterlaceControl *This,
        GUID *mode,
        VMRVideoDesc *desc,
        VMRDeinterlaceCaps *caps);

    HRESULT (STDMETHODCALLTYPE *GetDeinterlaceMode)(
        IVMRDeinterlaceControl *This,
        DWORD id,
        GUID *mode);

    HRESULT (STDMETHODCALLTYPE *SetDeinterlaceMode)(
        IVMRDeinterlaceControl *This,
        DWORD id,
        GUID *mode);

    HRESULT (STDMETHODCALLTYPE *GetDeinterlacePrefs)(
        IVMRDeinterlaceControl *This,
        DWORD *prefs);

    HRESULT (STDMETHODCALLTYPE *SetDeinterlacePrefs)(
        IVMRDeinterlaceControl *This,
        DWORD prefs);

    HRESULT (STDMETHODCALLTYPE *GetActualDeinterlaceMode)(
        IVMRDeinterlaceControl *This,
        DWORD id,
        GUID *mode);

    END_INTERFACE
} IVMRDeinterlaceControlVtbl;

interface IVMRDeinterlaceControl {
    CONST_VTBL IVMRDeinterlaceControlVtbl* lpVtbl;
};

#ifdef COBJMACROS
#ifndef WIDL_C_INLINE_WRAPPERS
/*** IUnknown methods ***/
#define IVMRDeinterlaceControl_QueryInterface(This,riid,ppvObject) (This)->lpVtbl->QueryInterface(This,riid,ppvObject)
#define IVMRDeinterlaceControl_AddRef(This) (This)->lpVtbl->AddRef(This)
#define IVMRDeinterlaceControl_Release(This) (This)->lpVtbl->Release(This)
/*** IVMRDeinterlaceControl methods ***/
#define IVMRDeinterlaceControl_GetNumberOfDeinterlaceModes(This,desc,num_modes,modes) (This)->lpVtbl->GetNumberOfDeinterlaceModes(This,desc,num_modes,modes)
#define IVMRDeinterlaceControl_GetDeinterlaceModeCaps(This,mode,desc,caps) (This)->lpVtbl->GetDeinterlaceModeCaps(This,mode,desc,caps)
#define IVMRDeinterlaceControl_GetDeinterlaceMode(This,id,mode) (This)->lpVtbl->GetDeinterlaceMode(This,id,mode)
#define IVMRDeinterlaceControl_SetDeinterlaceMode(This,id,mode) (This)->lpVtbl->SetDeinterlaceMode(This,id,mode)
#define IVMRDeinterlaceControl_GetDeinterlacePrefs(This,prefs) (This)->lpVtbl->GetDeinterlacePrefs(This,prefs)
#define IVMRDeinterlaceControl_SetDeinterlacePrefs(This,prefs) (This)->lpVtbl->SetDeinterlacePrefs(This,prefs)
#define IVMRDeinterlaceControl_GetActualDeinterlaceMode(This,id,mode) (This)->lpVtbl->GetActualDeinterlaceMode(This,id,mode)
#else
/*** IUnknown methods ***/
static FORCEINLINE HRESULT IVMRDeinterlaceControl_QueryInterface(IVMRDeinterlaceControl* This,REFIID riid,void **ppvObject) {
    return This->lpVtbl->QueryInterface(This,riid,ppvObject);
}
static FORCEINLINE ULONG IVMRDeinterlaceControl_AddRef(IVMRDeinterlaceControl* This) {
    return This->lpVtbl->AddRef(This);
}
static FORCEINLINE ULONG IVMRDeinterlaceControl_Release(IVMRDeinterlaceControl* This) {
    return This->lpVtbl->Release(This);
}
/*** IVMRDeinterlaceControl methods ***/
static FORCEINLINE HRESULT IVMRDeinterlaceControl_GetNumberOfDeinterlaceModes(IVMRDeinterlaceControl* This,VMRVideoDesc *desc,DWORD *num_modes,GUID *modes) {
    return This->lpVtbl->GetNumberOfDeinterlaceModes(This,desc,num_modes,modes);
}
static FORCEINLINE HRESULT IVMRDeinterlaceControl_GetDeinterlaceModeCaps(IVMRDeinterlaceControl* This,GUID *mode,VMRVideoDesc *desc,VMRDeinterlaceCaps *caps) {
    return This->lpVtbl->GetDeinterlaceModeCaps(This,mode,desc,caps);
}
static FORCEINLINE HRESULT IVMRDeinterlaceControl_GetDeinterlaceMode(IVMRDeinterlaceControl* This,DWORD id,GUID *mode) {
    return This->lpVtbl->GetDeinterlaceMode(This,id,mode);
}
static FORCEINLINE HRESULT IVMRDeinterlaceControl_SetDeinterlaceMode(IVMRDeinterlaceControl* This,DWORD id,GUID *mode) {
    return This->lpVtbl->SetDeinterlaceMode(This,id,mode);
}
static FORCEINLINE HRESULT IVMRDeinterlaceControl_GetDeinterlacePrefs(IVMRDeinterlaceControl* This,DWORD *prefs) {
    return This->lpVtbl->GetDeinterlacePrefs(This,prefs);
}
static FORCEINLINE HRESULT IVMRDeinterlaceControl_SetDeinterlacePrefs(IVMRDeinterlaceControl* This,DWORD prefs) {
    return This->lpVtbl->SetDeinterlacePrefs(This,prefs);
}
static FORCEINLINE HRESULT IVMRDeinterlaceControl_GetActualDeinterlaceMode(IVMRDeinterlaceControl* This,DWORD id,GUID *mode) {
    return This->lpVtbl->GetActualDeinterlaceMode(This,id,mode);
}
#endif
#endif

#endif


#endif  /* __IVMRDeinterlaceControl_INTERFACE_DEFINED__ */

typedef struct _VMRALPHABITMAP {
    DWORD dwFlags;
    HDC hdc;
    IDirectDrawSurface7 *pDDS;
    RECT rSrc;
    RECT rDest;
    FLOAT fAlpha;
    COLORREF clrSrcKey;
} VMRALPHABITMAP;
typedef struct _VMRALPHABITMAP *PVMRALPHABITMAP;
#define VMRBITMAP_DISABLE (0x01)
#define VMRBITMAP_HDC (0x02)
#define VMRBITMAP_ENTIREDDS (0x04)
#define VMRBITMAP_SRCCOLORKEY (0x08)
#define VMRBITMAP_SRCRECT (0x10)
/*****************************************************************************
 * IVMRMixerBitmap interface
 */
#ifndef __IVMRMixerBitmap_INTERFACE_DEFINED__
#define __IVMRMixerBitmap_INTERFACE_DEFINED__

DEFINE_GUID(IID_IVMRMixerBitmap, 0x1e673275, 0x0257, 0x40aa, 0xaf,0x20, 0x7c,0x60,0x8d,0x4a,0x04,0x28);
#if defined(__cplusplus) && !defined(CINTERFACE)
MIDL_INTERFACE("1e673275-0257-40aa-af20-7c608d4a0428")
IVMRMixerBitmap : public IUnknown
{
    virtual HRESULT STDMETHODCALLTYPE SetAlphaBitmap(
        const VMRALPHABITMAP *params) = 0;

    virtual HRESULT STDMETHODCALLTYPE UpdateAlphaBitmapParameters(
        VMRALPHABITMAP *params) = 0;

    virtual HRESULT STDMETHODCALLTYPE GetAlphaBitmapParameters(
        VMRALPHABITMAP *params) = 0;

};
#ifdef __CRT_UUID_DECL
__CRT_UUID_DECL(IVMRMixerBitmap, 0x1e673275, 0x0257, 0x40aa, 0xaf,0x20, 0x7c,0x60,0x8d,0x4a,0x04,0x28)
#endif
#else
typedef struct IVMRMixerBitmapVtbl {
    BEGIN_INTERFACE

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

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

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

    /*** IVMRMixerBitmap methods ***/
    HRESULT (STDMETHODCALLTYPE *SetAlphaBitmap)(
        IVMRMixerBitmap *This,
        const VMRALPHABITMAP *params);

    HRESULT (STDMETHODCALLTYPE *UpdateAlphaBitmapParameters)(
        IVMRMixerBitmap *This,
        VMRALPHABITMAP *params);

    HRESULT (STDMETHODCALLTYPE *GetAlphaBitmapParameters)(
        IVMRMixerBitmap *This,
        VMRALPHABITMAP *params);

    END_INTERFACE
} IVMRMixerBitmapVtbl;

interface IVMRMixerBitmap {
    CONST_VTBL IVMRMixerBitmapVtbl* lpVtbl;
};

#ifdef COBJMACROS
#ifndef WIDL_C_INLINE_WRAPPERS
/*** IUnknown methods ***/
#define IVMRMixerBitmap_QueryInterface(This,riid,ppvObject) (This)->lpVtbl->QueryInterface(This,riid,ppvObject)
#define IVMRMixerBitmap_AddRef(This) (This)->lpVtbl->AddRef(This)
#define IVMRMixerBitmap_Release(This) (This)->lpVtbl->Release(This)
/*** IVMRMixerBitmap methods ***/
#define IVMRMixerBitmap_SetAlphaBitmap(This,params) (This)->lpVtbl->SetAlphaBitmap(This,params)
#define IVMRMixerBitmap_UpdateAlphaBitmapParameters(This,params) (This)->lpVtbl->UpdateAlphaBitmapParameters(This,params)
#define IVMRMixerBitmap_GetAlphaBitmapParameters(This,params) (This)->lpVtbl->GetAlphaBitmapParameters(This,params)
#else
/*** IUnknown methods ***/
static FORCEINLINE HRESULT IVMRMixerBitmap_QueryInterface(IVMRMixerBitmap* This,REFIID riid,void **ppvObject) {
    return This->lpVtbl->QueryInterface(This,riid,ppvObject);
}
static FORCEINLINE ULONG IVMRMixerBitmap_AddRef(IVMRMixerBitmap* This) {
    return This->lpVtbl->AddRef(This);
}
static FORCEINLINE ULONG IVMRMixerBitmap_Release(IVMRMixerBitmap* This) {
    return This->lpVtbl->Release(This);
}
/*** IVMRMixerBitmap methods ***/
static FORCEINLINE HRESULT IVMRMixerBitmap_SetAlphaBitmap(IVMRMixerBitmap* This,const VMRALPHABITMAP *params) {
    return This->lpVtbl->SetAlphaBitmap(This,params);
}
static FORCEINLINE HRESULT IVMRMixerBitmap_UpdateAlphaBitmapParameters(IVMRMixerBitmap* This,VMRALPHABITMAP *params) {
    return This->lpVtbl->UpdateAlphaBitmapParameters(This,params);
}
static FORCEINLINE HRESULT IVMRMixerBitmap_GetAlphaBitmapParameters(IVMRMixerBitmap* This,VMRALPHABITMAP *params) {
    return This->lpVtbl->GetAlphaBitmapParameters(This,params);
}
#endif
#endif

#endif


#endif  /* __IVMRMixerBitmap_INTERFACE_DEFINED__ */

typedef struct _VMRVIDEOSTREAMINFO {
    IDirectDrawSurface7 *pddsVideoSurface;
    DWORD dwWidth;
    DWORD dwHeight;
    DWORD dwStrmID;
    FLOAT fAlpha;
    DDCOLORKEY ddClrKey;
    NORMALIZEDRECT rNormal;
} VMRVIDEOSTREAMINFO;
/*****************************************************************************
 * IVMRImageCompositor interface
 */
#ifndef __IVMRImageCompositor_INTERFACE_DEFINED__
#define __IVMRImageCompositor_INTERFACE_DEFINED__

DEFINE_GUID(IID_IVMRImageCompositor, 0x7a4fb5af, 0x479f, 0x4074, 0xbb,0x40, 0xce,0x67,0x22,0xe4,0x3c,0x82);
#if defined(__cplusplus) && !defined(CINTERFACE)
MIDL_INTERFACE("7a4fb5af-479f-4074-bb40-ce6722e43c82")
IVMRImageCompositor : public IUnknown
{
    virtual HRESULT STDMETHODCALLTYPE InitCompositionTarget(
        IUnknown *d3ddev,
        IDirectDrawSurface7 *rendertarget) = 0;

    virtual HRESULT STDMETHODCALLTYPE TermCompositionTarget(
        IUnknown *d3ddev,
        IDirectDrawSurface7 *rendertarget) = 0;

    virtual HRESULT STDMETHODCALLTYPE SetStreamMediaType(
        DWORD id,
        AM_MEDIA_TYPE *pmt,
        BOOL texture) = 0;

    virtual HRESULT STDMETHODCALLTYPE CompositeImage(
        IUnknown *d3ddev,
        IDirectDrawSurface7 *rendertarget,
        AM_MEDIA_TYPE *pmt,
        REFERENCE_TIME start,
        REFERENCE_TIME stop,
        DWORD backgrnd,
        VMRVIDEOSTREAMINFO *info,
        UINT streams) = 0;

};
#ifdef __CRT_UUID_DECL
__CRT_UUID_DECL(IVMRImageCompositor, 0x7a4fb5af, 0x479f, 0x4074, 0xbb,0x40, 0xce,0x67,0x22,0xe4,0x3c,0x82)
#endif
#else
typedef struct IVMRImageCompositorVtbl {
    BEGIN_INTERFACE

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

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

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

    /*** IVMRImageCompositor methods ***/
    HRESULT (STDMETHODCALLTYPE *InitCompositionTarget)(
        IVMRImageCompositor *This,
        IUnknown *d3ddev,
        IDirectDrawSurface7 *rendertarget);

    HRESULT (STDMETHODCALLTYPE *TermCompositionTarget)(
        IVMRImageCompositor *This,
        IUnknown *d3ddev,
        IDirectDrawSurface7 *rendertarget);

    HRESULT (STDMETHODCALLTYPE *SetStreamMediaType)(
        IVMRImageCompositor *This,
        DWORD id,
        AM_MEDIA_TYPE *pmt,
        BOOL texture);

    HRESULT (STDMETHODCALLTYPE *CompositeImage)(
        IVMRImageCompositor *This,
        IUnknown *d3ddev,
        IDirectDrawSurface7 *rendertarget,
        AM_MEDIA_TYPE *pmt,
        REFERENCE_TIME start,
        REFERENCE_TIME stop,
        DWORD backgrnd,
        VMRVIDEOSTREAMINFO *info,
        UINT streams);

    END_INTERFACE
} IVMRImageCompositorVtbl;

interface IVMRImageCompositor {
    CONST_VTBL IVMRImageCompositorVtbl* lpVtbl;
};

#ifdef COBJMACROS
#ifndef WIDL_C_INLINE_WRAPPERS
/*** IUnknown methods ***/
#define IVMRImageCompositor_QueryInterface(This,riid,ppvObject) (This)->lpVtbl->QueryInterface(This,riid,ppvObject)
#define IVMRImageCompositor_AddRef(This) (This)->lpVtbl->AddRef(This)
#define IVMRImageCompositor_Release(This) (This)->lpVtbl->Release(This)
/*** IVMRImageCompositor methods ***/
#define IVMRImageCompositor_InitCompositionTarget(This,d3ddev,rendertarget) (This)->lpVtbl->InitCompositionTarget(This,d3ddev,rendertarget)
#define IVMRImageCompositor_TermCompositionTarget(This,d3ddev,rendertarget) (This)->lpVtbl->TermCompositionTarget(This,d3ddev,rendertarget)
#define IVMRImageCompositor_SetStreamMediaType(This,id,pmt,texture) (This)->lpVtbl->SetStreamMediaType(This,id,pmt,texture)
#define IVMRImageCompositor_CompositeImage(This,d3ddev,rendertarget,pmt,start,stop,backgrnd,info,streams) (This)->lpVtbl->CompositeImage(This,d3ddev,rendertarget,pmt,start,stop,backgrnd,info,streams)
#else
/*** IUnknown methods ***/
static FORCEINLINE HRESULT IVMRImageCompositor_QueryInterface(IVMRImageCompositor* This,REFIID riid,void **ppvObject) {
    return This->lpVtbl->QueryInterface(This,riid,ppvObject);
}
static FORCEINLINE ULONG IVMRImageCompositor_AddRef(IVMRImageCompositor* This) {
    return This->lpVtbl->AddRef(This);
}
static FORCEINLINE ULONG IVMRImageCompositor_Release(IVMRImageCompositor* This) {
    return This->lpVtbl->Release(This);
}
/*** IVMRImageCompositor methods ***/
static FORCEINLINE HRESULT IVMRImageCompositor_InitCompositionTarget(IVMRImageCompositor* This,IUnknown *d3ddev,IDirectDrawSurface7 *rendertarget) {
    return This->lpVtbl->InitCompositionTarget(This,d3ddev,rendertarget);
}
static FORCEINLINE HRESULT IVMRImageCompositor_TermCompositionTarget(IVMRImageCompositor* This,IUnknown *d3ddev,IDirectDrawSurface7 *rendertarget) {
    return This->lpVtbl->TermCompositionTarget(This,d3ddev,rendertarget);
}
static FORCEINLINE HRESULT IVMRImageCompositor_SetStreamMediaType(IVMRImageCompositor* This,DWORD id,AM_MEDIA_TYPE *pmt,BOOL texture) {
    return This->lpVtbl->SetStreamMediaType(This,id,pmt,texture);
}
static FORCEINLINE HRESULT IVMRImageCompositor_CompositeImage(IVMRImageCompositor* This,IUnknown *d3ddev,IDirectDrawSurface7 *rendertarget,AM_MEDIA_TYPE *pmt,REFERENCE_TIME start,REFERENCE_TIME stop,DWORD backgrnd,VMRVIDEOSTREAMINFO *info,UINT streams) {
    return This->lpVtbl->CompositeImage(This,d3ddev,rendertarget,pmt,start,stop,backgrnd,info,streams);
}
#endif
#endif

#endif


#endif  /* __IVMRImageCompositor_INTERFACE_DEFINED__ */

/*****************************************************************************
 * IVMRVideoStreamControl interface
 */
#ifndef __IVMRVideoStreamControl_INTERFACE_DEFINED__
#define __IVMRVideoStreamControl_INTERFACE_DEFINED__

DEFINE_GUID(IID_IVMRVideoStreamControl, 0x058d1f11, 0x2a54, 0x4bef, 0xbd,0x54, 0xdf,0x70,0x66,0x26,0xb7,0x27);
#if defined(__cplusplus) && !defined(CINTERFACE)
MIDL_INTERFACE("058d1f11-2a54-4bef-bd54-df706626b727")
IVMRVideoStreamControl : public IUnknown
{
    virtual HRESULT STDMETHODCALLTYPE SetColorKey(
        DDCOLORKEY *key) = 0;

    virtual HRESULT STDMETHODCALLTYPE GetColorKey(
        DDCOLORKEY *key) = 0;

    virtual HRESULT STDMETHODCALLTYPE SetStreamActiveState(
        BOOL active) = 0;

    virtual HRESULT STDMETHODCALLTYPE GetStreamActiveState(
        BOOL *active) = 0;

};
#ifdef __CRT_UUID_DECL
__CRT_UUID_DECL(IVMRVideoStreamControl, 0x058d1f11, 0x2a54, 0x4bef, 0xbd,0x54, 0xdf,0x70,0x66,0x26,0xb7,0x27)
#endif
#else
typedef struct IVMRVideoStreamControlVtbl {
    BEGIN_INTERFACE

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

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

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

    /*** IVMRVideoStreamControl methods ***/
    HRESULT (STDMETHODCALLTYPE *SetColorKey)(
        IVMRVideoStreamControl *This,
        DDCOLORKEY *key);

    HRESULT (STDMETHODCALLTYPE *GetColorKey)(
        IVMRVideoStreamControl *This,
        DDCOLORKEY *key);

    HRESULT (STDMETHODCALLTYPE *SetStreamActiveState)(
        IVMRVideoStreamControl *This,
        BOOL active);

    HRESULT (STDMETHODCALLTYPE *GetStreamActiveState)(
        IVMRVideoStreamControl *This,
        BOOL *active);

    END_INTERFACE
} IVMRVideoStreamControlVtbl;

interface IVMRVideoStreamControl {
    CONST_VTBL IVMRVideoStreamControlVtbl* lpVtbl;
};

#ifdef COBJMACROS
#ifndef WIDL_C_INLINE_WRAPPERS
/*** IUnknown methods ***/
#define IVMRVideoStreamControl_QueryInterface(This,riid,ppvObject) (This)->lpVtbl->QueryInterface(This,riid,ppvObject)
#define IVMRVideoStreamControl_AddRef(This) (This)->lpVtbl->AddRef(This)
#define IVMRVideoStreamControl_Release(This) (This)->lpVtbl->Release(This)
/*** IVMRVideoStreamControl methods ***/
#define IVMRVideoStreamControl_SetColorKey(This,key) (This)->lpVtbl->SetColorKey(This,key)
#define IVMRVideoStreamControl_GetColorKey(This,key) (This)->lpVtbl->GetColorKey(This,key)
#define IVMRVideoStreamControl_SetStreamActiveState(This,active) (This)->lpVtbl->SetStreamActiveState(This,active)
#define IVMRVideoStreamControl_GetStreamActiveState(This,active) (This)->lpVtbl->GetStreamActiveState(This,active)
#else
/*** IUnknown methods ***/
static FORCEINLINE HRESULT IVMRVideoStreamControl_QueryInterface(IVMRVideoStreamControl* This,REFIID riid,void **ppvObject) {
    return This->lpVtbl->QueryInterface(This,riid,ppvObject);
}
static FORCEINLINE ULONG IVMRVideoStreamControl_AddRef(IVMRVideoStreamControl* This) {
    return This->lpVtbl->AddRef(This);
}
static FORCEINLINE ULONG IVMRVideoStreamControl_Release(IVMRVideoStreamControl* This) {
    return This->lpVtbl->Release(This);
}
/*** IVMRVideoStreamControl methods ***/
static FORCEINLINE HRESULT IVMRVideoStreamControl_SetColorKey(IVMRVideoStreamControl* This,DDCOLORKEY *key) {
    return This->lpVtbl->SetColorKey(This,key);
}
static FORCEINLINE HRESULT IVMRVideoStreamControl_GetColorKey(IVMRVideoStreamControl* This,DDCOLORKEY *key) {
    return This->lpVtbl->GetColorKey(This,key);
}
static FORCEINLINE HRESULT IVMRVideoStreamControl_SetStreamActiveState(IVMRVideoStreamControl* This,BOOL active) {
    return This->lpVtbl->SetStreamActiveState(This,active);
}
static FORCEINLINE HRESULT IVMRVideoStreamControl_GetStreamActiveState(IVMRVideoStreamControl* This,BOOL *active) {
    return This->lpVtbl->GetStreamActiveState(This,active);
}
#endif
#endif

#endif


#endif  /* __IVMRVideoStreamControl_INTERFACE_DEFINED__ */

/*****************************************************************************
 * IVMRImagePresenterConfig interface
 */
#ifndef __IVMRImagePresenterConfig_INTERFACE_DEFINED__
#define __IVMRImagePresenterConfig_INTERFACE_DEFINED__

DEFINE_GUID(IID_IVMRImagePresenterConfig, 0x9f3a1c85, 0x8555, 0x49ba, 0x93,0x5f, 0xbe,0x5b,0x5b,0x29,0xd1,0x78);
#if defined(__cplusplus) && !defined(CINTERFACE)
MIDL_INTERFACE("9f3a1c85-8555-49ba-935f-be5b5b29d178")
IVMRImagePresenterConfig : public IUnknown
{
    virtual HRESULT STDMETHODCALLTYPE SetRenderingPrefs(
        DWORD prefs) = 0;

    virtual HRESULT STDMETHODCALLTYPE GetRenderingPrefs(
        DWORD *prefs) = 0;

};
#ifdef __CRT_UUID_DECL
__CRT_UUID_DECL(IVMRImagePresenterConfig, 0x9f3a1c85, 0x8555, 0x49ba, 0x93,0x5f, 0xbe,0x5b,0x5b,0x29,0xd1,0x78)
#endif
#else
typedef struct IVMRImagePresenterConfigVtbl {
    BEGIN_INTERFACE

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

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

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

    /*** IVMRImagePresenterConfig methods ***/
    HRESULT (STDMETHODCALLTYPE *SetRenderingPrefs)(
        IVMRImagePresenterConfig *This,
        DWORD prefs);

    HRESULT (STDMETHODCALLTYPE *GetRenderingPrefs)(
        IVMRImagePresenterConfig *This,
        DWORD *prefs);

    END_INTERFACE
} IVMRImagePresenterConfigVtbl;

interface IVMRImagePresenterConfig {
    CONST_VTBL IVMRImagePresenterConfigVtbl* lpVtbl;
};

#ifdef COBJMACROS
#ifndef WIDL_C_INLINE_WRAPPERS
/*** IUnknown methods ***/
#define IVMRImagePresenterConfig_QueryInterface(This,riid,ppvObject) (This)->lpVtbl->QueryInterface(This,riid,ppvObject)
#define IVMRImagePresenterConfig_AddRef(This) (This)->lpVtbl->AddRef(This)
#define IVMRImagePresenterConfig_Release(This) (This)->lpVtbl->Release(This)
/*** IVMRImagePresenterConfig methods ***/
#define IVMRImagePresenterConfig_SetRenderingPrefs(This,prefs) (This)->lpVtbl->SetRenderingPrefs(This,prefs)
#define IVMRImagePresenterConfig_GetRenderingPrefs(This,prefs) (This)->lpVtbl->GetRenderingPrefs(This,prefs)
#else
/*** IUnknown methods ***/
static FORCEINLINE HRESULT IVMRImagePresenterConfig_QueryInterface(IVMRImagePresenterConfig* This,REFIID riid,void **ppvObject) {
    return This->lpVtbl->QueryInterface(This,riid,ppvObject);
}
static FORCEINLINE ULONG IVMRImagePresenterConfig_AddRef(IVMRImagePresenterConfig* This) {
    return This->lpVtbl->AddRef(This);
}
static FORCEINLINE ULONG IVMRImagePresenterConfig_Release(IVMRImagePresenterConfig* This) {
    return This->lpVtbl->Release(This);
}
/*** IVMRImagePresenterConfig methods ***/
static FORCEINLINE HRESULT IVMRImagePresenterConfig_SetRenderingPrefs(IVMRImagePresenterConfig* This,DWORD prefs) {
    return This->lpVtbl->SetRenderingPrefs(This,prefs);
}
static FORCEINLINE HRESULT IVMRImagePresenterConfig_GetRenderingPrefs(IVMRImagePresenterConfig* This,DWORD *prefs) {
    return This->lpVtbl->GetRenderingPrefs(This,prefs);
}
#endif
#endif

#endif


#endif  /* __IVMRImagePresenterConfig_INTERFACE_DEFINED__ */

/*****************************************************************************
 * IVMRImagePresenterExclModeConfig interface
 */
#ifndef __IVMRImagePresenterExclModeConfig_INTERFACE_DEFINED__
#define __IVMRImagePresenterExclModeConfig_INTERFACE_DEFINED__

DEFINE_GUID(IID_IVMRImagePresenterExclModeConfig, 0xe6f7ce40, 0x4673, 0x44f1, 0x8f,0x77, 0x54,0x99,0xd6,0x8c,0xb4,0xea);
#if defined(__cplusplus) && !defined(CINTERFACE)
MIDL_INTERFACE("e6f7ce40-4673-44f1-8f77-5499d68cb4ea")
IVMRImagePresenterExclModeConfig : public IVMRImagePresenterConfig
{
    virtual HRESULT STDMETHODCALLTYPE SetXlcModeDDObjAndPrimarySurface(
        IDirectDraw7 *dddev,
        IDirectDrawSurface7 *ddsurface) = 0;

    virtual HRESULT STDMETHODCALLTYPE GetXlcModeDDObjAndPrimarySurface(
        IDirectDraw7 **dddev,
        IDirectDrawSurface7 **ddsurface) = 0;

};
#ifdef __CRT_UUID_DECL
__CRT_UUID_DECL(IVMRImagePresenterExclModeConfig, 0xe6f7ce40, 0x4673, 0x44f1, 0x8f,0x77, 0x54,0x99,0xd6,0x8c,0xb4,0xea)
#endif
#else
typedef struct IVMRImagePresenterExclModeConfigVtbl {
    BEGIN_INTERFACE

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

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

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

    /*** IVMRImagePresenterConfig methods ***/
    HRESULT (STDMETHODCALLTYPE *SetRenderingPrefs)(
        IVMRImagePresenterExclModeConfig *This,
        DWORD prefs);

    HRESULT (STDMETHODCALLTYPE *GetRenderingPrefs)(
        IVMRImagePresenterExclModeConfig *This,
        DWORD *prefs);

    /*** IVMRImagePresenterExclModeConfig methods ***/
    HRESULT (STDMETHODCALLTYPE *SetXlcModeDDObjAndPrimarySurface)(
        IVMRImagePresenterExclModeConfig *This,
        IDirectDraw7 *dddev,
        IDirectDrawSurface7 *ddsurface);

    HRESULT (STDMETHODCALLTYPE *GetXlcModeDDObjAndPrimarySurface)(
        IVMRImagePresenterExclModeConfig *This,
        IDirectDraw7 **dddev,
        IDirectDrawSurface7 **ddsurface);

    END_INTERFACE
} IVMRImagePresenterExclModeConfigVtbl;

interface IVMRImagePresenterExclModeConfig {
    CONST_VTBL IVMRImagePresenterExclModeConfigVtbl* lpVtbl;
};

#ifdef COBJMACROS
#ifndef WIDL_C_INLINE_WRAPPERS
/*** IUnknown methods ***/
#define IVMRImagePresenterExclModeConfig_QueryInterface(This,riid,ppvObject) (This)->lpVtbl->QueryInterface(This,riid,ppvObject)
#define IVMRImagePresenterExclModeConfig_AddRef(This) (This)->lpVtbl->AddRef(This)
#define IVMRImagePresenterExclModeConfig_Release(This) (This)->lpVtbl->Release(This)
/*** IVMRImagePresenterConfig methods ***/
#define IVMRImagePresenterExclModeConfig_SetRenderingPrefs(This,prefs) (This)->lpVtbl->SetRenderingPrefs(This,prefs)
#define IVMRImagePresenterExclModeConfig_GetRenderingPrefs(This,prefs) (This)->lpVtbl->GetRenderingPrefs(This,prefs)
/*** IVMRImagePresenterExclModeConfig methods ***/
#define IVMRImagePresenterExclModeConfig_SetXlcModeDDObjAndPrimarySurface(This,dddev,ddsurface) (This)->lpVtbl->SetXlcModeDDObjAndPrimarySurface(This,dddev,ddsurface)
#define IVMRImagePresenterExclModeConfig_GetXlcModeDDObjAndPrimarySurface(This,dddev,ddsurface) (This)->lpVtbl->GetXlcModeDDObjAndPrimarySurface(This,dddev,ddsurface)
#else
/*** IUnknown methods ***/
static FORCEINLINE HRESULT IVMRImagePresenterExclModeConfig_QueryInterface(IVMRImagePresenterExclModeConfig* This,REFIID riid,void **ppvObject) {
    return This->lpVtbl->QueryInterface(This,riid,ppvObject);
}
static FORCEINLINE ULONG IVMRImagePresenterExclModeConfig_AddRef(IVMRImagePresenterExclModeConfig* This) {
    return This->lpVtbl->AddRef(This);
}
static FORCEINLINE ULONG IVMRImagePresenterExclModeConfig_Release(IVMRImagePresenterExclModeConfig* This) {
    return This->lpVtbl->Release(This);
}
/*** IVMRImagePresenterConfig methods ***/
static FORCEINLINE HRESULT IVMRImagePresenterExclModeConfig_SetRenderingPrefs(IVMRImagePresenterExclModeConfig* This,DWORD prefs) {
    return This->lpVtbl->SetRenderingPrefs(This,prefs);
}
static FORCEINLINE HRESULT IVMRImagePresenterExclModeConfig_GetRenderingPrefs(IVMRImagePresenterExclModeConfig* This,DWORD *prefs) {
    return This->lpVtbl->GetRenderingPrefs(This,prefs);
}
/*** IVMRImagePresenterExclModeConfig methods ***/
static FORCEINLINE HRESULT IVMRImagePresenterExclModeConfig_SetXlcModeDDObjAndPrimarySurface(IVMRImagePresenterExclModeConfig* This,IDirectDraw7 *dddev,IDirectDrawSurface7 *ddsurface) {
    return This->lpVtbl->SetXlcModeDDObjAndPrimarySurface(This,dddev,ddsurface);
}
static FORCEINLINE HRESULT IVMRImagePresenterExclModeConfig_GetXlcModeDDObjAndPrimarySurface(IVMRImagePresenterExclModeConfig* This,IDirectDraw7 **dddev,IDirectDrawSurface7 **ddsurface) {
    return This->lpVtbl->GetXlcModeDDObjAndPrimarySurface(This,dddev,ddsurface);
}
#endif
#endif

#endif


#endif  /* __IVMRImagePresenterExclModeConfig_INTERFACE_DEFINED__ */

/*****************************************************************************
 * IVPManager interface
 */
#ifndef __IVPManager_INTERFACE_DEFINED__
#define __IVPManager_INTERFACE_DEFINED__

DEFINE_GUID(IID_IVPManager, 0xaac18c18, 0xe186, 0x46d2, 0x82,0x5d, 0xa1,0xf8,0xdc,0x8e,0x39,0x5a);
#if defined(__cplusplus) && !defined(CINTERFACE)
MIDL_INTERFACE("aac18c18-e186-46d2-825d-a1f8dc8e395a")
IVPManager : public IUnknown
{
    virtual HRESULT STDMETHODCALLTYPE SetVideoPortIndex(
        DWORD index) = 0;

    virtual HRESULT STDMETHODCALLTYPE GetVideoPortIndex(
        DWORD *index) = 0;

};
#ifdef __CRT_UUID_DECL
__CRT_UUID_DECL(IVPManager, 0xaac18c18, 0xe186, 0x46d2, 0x82,0x5d, 0xa1,0xf8,0xdc,0x8e,0x39,0x5a)
#endif
#else
typedef struct IVPManagerVtbl {
    BEGIN_INTERFACE

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

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

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

    /*** IVPManager methods ***/
    HRESULT (STDMETHODCALLTYPE *SetVideoPortIndex)(
        IVPManager *This,
        DWORD index);

    HRESULT (STDMETHODCALLTYPE *GetVideoPortIndex)(
        IVPManager *This,
        DWORD *index);

    END_INTERFACE
} IVPManagerVtbl;

interface IVPManager {
    CONST_VTBL IVPManagerVtbl* lpVtbl;
};

#ifdef COBJMACROS
#ifndef WIDL_C_INLINE_WRAPPERS
/*** IUnknown methods ***/
#define IVPManager_QueryInterface(This,riid,ppvObject) (This)->lpVtbl->QueryInterface(This,riid,ppvObject)
#define IVPManager_AddRef(This) (This)->lpVtbl->AddRef(This)
#define IVPManager_Release(This) (This)->lpVtbl->Release(This)
/*** IVPManager methods ***/
#define IVPManager_SetVideoPortIndex(This,index) (This)->lpVtbl->SetVideoPortIndex(This,index)
#define IVPManager_GetVideoPortIndex(This,index) (This)->lpVtbl->GetVideoPortIndex(This,index)
#else
/*** IUnknown methods ***/
static FORCEINLINE HRESULT IVPManager_QueryInterface(IVPManager* This,REFIID riid,void **ppvObject) {
    return This->lpVtbl->QueryInterface(This,riid,ppvObject);
}
static FORCEINLINE ULONG IVPManager_AddRef(IVPManager* This) {
    return This->lpVtbl->AddRef(This);
}
static FORCEINLINE ULONG IVPManager_Release(IVPManager* This) {
    return This->lpVtbl->Release(This);
}
/*** IVPManager methods ***/
static FORCEINLINE HRESULT IVPManager_SetVideoPortIndex(IVPManager* This,DWORD index) {
    return This->lpVtbl->SetVideoPortIndex(This,index);
}
static FORCEINLINE HRESULT IVPManager_GetVideoPortIndex(IVPManager* This,DWORD *index) {
    return This->lpVtbl->GetVideoPortIndex(This,index);
}
#endif
#endif

#endif


#endif  /* __IVPManager_INTERFACE_DEFINED__ */

/* Begin additional prototypes for all interfaces */


/* End additional prototypes */

#ifdef __cplusplus
}
#endif

#endif /* __strmif_h__ */
