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

#ifdef _WIN32
#ifndef __REQUIRED_RPCNDR_H_VERSION__
#define __REQUIRED_RPCNDR_H_VERSION__ 475
#endif
#include <rpc.h>
#include <rpcndr.h>
#endif

#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 __IAMVideoControl_FWD_DEFINED__
#define __IAMVideoControl_FWD_DEFINED__
typedef interface IAMVideoControl IAMVideoControl;
#ifdef __cplusplus
interface IAMVideoControl;
#endif /* __cplusplus */
#endif

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

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

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

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

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

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

#ifndef __IAMTunerNotification_FWD_DEFINED__
#define __IAMTunerNotification_FWD_DEFINED__
typedef interface IAMTunerNotification IAMTunerNotification;
#ifdef __cplusplus
interface IAMTunerNotification;
#endif /* __cplusplus */
#endif

#ifndef __IAMTuner_FWD_DEFINED__
#define __IAMTuner_FWD_DEFINED__
typedef interface IAMTuner IAMTuner;
#ifdef __cplusplus
interface IAMTuner;
#endif /* __cplusplus */
#endif

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

#ifndef __IVideoFrameStep_FWD_DEFINED__
#define __IVideoFrameStep_FWD_DEFINED__
typedef interface IVideoFrameStep IVideoFrameStep;
#ifdef __cplusplus
interface IVideoFrameStep;
#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

#ifndef __IDvdControl_FWD_DEFINED__
#define __IDvdControl_FWD_DEFINED__
typedef interface IDvdControl IDvdControl;
#ifdef __cplusplus
interface IDvdControl;
#endif /* __cplusplus */
#endif

#ifndef __IDvdInfo_FWD_DEFINED__
#define __IDvdInfo_FWD_DEFINED__
typedef interface IDvdInfo IDvdInfo;
#ifdef __cplusplus
interface IDvdInfo;
#endif /* __cplusplus */
#endif

#ifndef __IDvdCmd_FWD_DEFINED__
#define __IDvdCmd_FWD_DEFINED__
typedef interface IDvdCmd IDvdCmd;
#ifdef __cplusplus
interface IDvdCmd;
#endif /* __cplusplus */
#endif

#ifndef __IDvdState_FWD_DEFINED__
#define __IDvdState_FWD_DEFINED__
typedef interface IDvdState IDvdState;
#ifdef __cplusplus
interface IDvdState;
#endif /* __cplusplus */
#endif

#ifndef __IDvdControl2_FWD_DEFINED__
#define __IDvdControl2_FWD_DEFINED__
typedef interface IDvdControl2 IDvdControl2;
#ifdef __cplusplus
interface IDvdControl2;
#endif /* __cplusplus */
#endif

#ifndef __IDvdInfo2_FWD_DEFINED__
#define __IDvdInfo2_FWD_DEFINED__
typedef interface IDvdInfo2 IDvdInfo2;
#ifdef __cplusplus
interface IDvdInfo2;
#endif /* __cplusplus */
#endif

#ifndef __IDvdGraphBuilder_FWD_DEFINED__
#define __IDvdGraphBuilder_FWD_DEFINED__
typedef interface IDvdGraphBuilder IDvdGraphBuilder;
#ifdef __cplusplus
interface IDvdGraphBuilder;
#endif /* __cplusplus */
#endif

/* Headers for imported files */

#include <unknwn.h>
#include <objidl.h>
#include <oaidl.h>
#include <unknwn.h>
#include <objidl.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;
typedef enum tagTunerInputType {
    TunerInputCable = 0,
    TunerInputAntenna = 1
} TunerInputType;
#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_0000000E {
    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_0000000F {
    const CLSID *clsMajorType;
    const CLSID *clsMinorType;
} REGPINTYPES;
typedef struct __WIDL_strmif_generated_name_00000010 {
    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_00000011 {
    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_00000012 {
    DWORD dwFlags;
    UINT cInstances;
    UINT nMediaTypes;
    const REGPINTYPES *lpMediaType;
    UINT nMediums;
    const REGPINMEDIUM *lpMedium;
    const CLSID *clsPinCategory;
} REGFILTERPINS2;
typedef struct __WIDL_strmif_generated_name_00000013 {
    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_00000014 {
    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
typedef enum AMPROPERTY_PIN {
    AMPROPERTY_PIN_CATEGORY = 0,
    AMPROPERTY_PIN_MEDIUM = 1
} AMPROPERTY_PIN;
/*****************************************************************************
 * 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__ */

/*****************************************************************************
 * IAMVideoControl interface
 */
#ifndef __IAMVideoControl_INTERFACE_DEFINED__
#define __IAMVideoControl_INTERFACE_DEFINED__

DEFINE_GUID(IID_IAMVideoControl, 0x6a2e0670, 0x28e4, 0x11d0, 0xa1,0x8c, 0x00,0xa0,0xc9,0x11,0x89,0x56);
#if defined(__cplusplus) && !defined(CINTERFACE)
MIDL_INTERFACE("6a2e0670-28e4-11d0-a18c-00a0c9118956")
IAMVideoControl : public IUnknown
{
    virtual HRESULT STDMETHODCALLTYPE GetCaps(
        IPin *pin,
        LONG *flags) = 0;

    virtual HRESULT STDMETHODCALLTYPE SetMode(
        IPin *pin,
        LONG mode) = 0;

    virtual HRESULT STDMETHODCALLTYPE GetMode(
        IPin *pin,
        LONG *mode) = 0;

    virtual HRESULT STDMETHODCALLTYPE GetCurrentActualFrameRate(
        IPin *pin,
        LONGLONG *frame_rate) = 0;

    virtual HRESULT STDMETHODCALLTYPE GetMaxAvailableFrameRate(
        IPin *pin,
        LONG index,
        SIZE dimensions,
        LONGLONG *frame_rate) = 0;

    virtual HRESULT STDMETHODCALLTYPE GetFrameRateList(
        IPin *pin,
        LONG index,
        SIZE dimensions,
        LONG *list_size,
        LONGLONG **frame_rate) = 0;

};
#ifdef __CRT_UUID_DECL
__CRT_UUID_DECL(IAMVideoControl, 0x6a2e0670, 0x28e4, 0x11d0, 0xa1,0x8c, 0x00,0xa0,0xc9,0x11,0x89,0x56)
#endif
#else
typedef struct IAMVideoControlVtbl {
    BEGIN_INTERFACE

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

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

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

    /*** IAMVideoControl methods ***/
    HRESULT (STDMETHODCALLTYPE *GetCaps)(
        IAMVideoControl *This,
        IPin *pin,
        LONG *flags);

    HRESULT (STDMETHODCALLTYPE *SetMode)(
        IAMVideoControl *This,
        IPin *pin,
        LONG mode);

    HRESULT (STDMETHODCALLTYPE *GetMode)(
        IAMVideoControl *This,
        IPin *pin,
        LONG *mode);

    HRESULT (STDMETHODCALLTYPE *GetCurrentActualFrameRate)(
        IAMVideoControl *This,
        IPin *pin,
        LONGLONG *frame_rate);

    HRESULT (STDMETHODCALLTYPE *GetMaxAvailableFrameRate)(
        IAMVideoControl *This,
        IPin *pin,
        LONG index,
        SIZE dimensions,
        LONGLONG *frame_rate);

    HRESULT (STDMETHODCALLTYPE *GetFrameRateList)(
        IAMVideoControl *This,
        IPin *pin,
        LONG index,
        SIZE dimensions,
        LONG *list_size,
        LONGLONG **frame_rate);

    END_INTERFACE
} IAMVideoControlVtbl;

interface IAMVideoControl {
    CONST_VTBL IAMVideoControlVtbl* lpVtbl;
};

#ifdef COBJMACROS
#ifndef WIDL_C_INLINE_WRAPPERS
/*** IUnknown methods ***/
#define IAMVideoControl_QueryInterface(This,riid,ppvObject) (This)->lpVtbl->QueryInterface(This,riid,ppvObject)
#define IAMVideoControl_AddRef(This) (This)->lpVtbl->AddRef(This)
#define IAMVideoControl_Release(This) (This)->lpVtbl->Release(This)
/*** IAMVideoControl methods ***/
#define IAMVideoControl_GetCaps(This,pin,flags) (This)->lpVtbl->GetCaps(This,pin,flags)
#define IAMVideoControl_SetMode(This,pin,mode) (This)->lpVtbl->SetMode(This,pin,mode)
#define IAMVideoControl_GetMode(This,pin,mode) (This)->lpVtbl->GetMode(This,pin,mode)
#define IAMVideoControl_GetCurrentActualFrameRate(This,pin,frame_rate) (This)->lpVtbl->GetCurrentActualFrameRate(This,pin,frame_rate)
#define IAMVideoControl_GetMaxAvailableFrameRate(This,pin,index,dimensions,frame_rate) (This)->lpVtbl->GetMaxAvailableFrameRate(This,pin,index,dimensions,frame_rate)
#define IAMVideoControl_GetFrameRateList(This,pin,index,dimensions,list_size,frame_rate) (This)->lpVtbl->GetFrameRateList(This,pin,index,dimensions,list_size,frame_rate)
#else
/*** IUnknown methods ***/
static FORCEINLINE HRESULT IAMVideoControl_QueryInterface(IAMVideoControl* This,REFIID riid,void **ppvObject) {
    return This->lpVtbl->QueryInterface(This,riid,ppvObject);
}
static FORCEINLINE ULONG IAMVideoControl_AddRef(IAMVideoControl* This) {
    return This->lpVtbl->AddRef(This);
}
static FORCEINLINE ULONG IAMVideoControl_Release(IAMVideoControl* This) {
    return This->lpVtbl->Release(This);
}
/*** IAMVideoControl methods ***/
static FORCEINLINE HRESULT IAMVideoControl_GetCaps(IAMVideoControl* This,IPin *pin,LONG *flags) {
    return This->lpVtbl->GetCaps(This,pin,flags);
}
static FORCEINLINE HRESULT IAMVideoControl_SetMode(IAMVideoControl* This,IPin *pin,LONG mode) {
    return This->lpVtbl->SetMode(This,pin,mode);
}
static FORCEINLINE HRESULT IAMVideoControl_GetMode(IAMVideoControl* This,IPin *pin,LONG *mode) {
    return This->lpVtbl->GetMode(This,pin,mode);
}
static FORCEINLINE HRESULT IAMVideoControl_GetCurrentActualFrameRate(IAMVideoControl* This,IPin *pin,LONGLONG *frame_rate) {
    return This->lpVtbl->GetCurrentActualFrameRate(This,pin,frame_rate);
}
static FORCEINLINE HRESULT IAMVideoControl_GetMaxAvailableFrameRate(IAMVideoControl* This,IPin *pin,LONG index,SIZE dimensions,LONGLONG *frame_rate) {
    return This->lpVtbl->GetMaxAvailableFrameRate(This,pin,index,dimensions,frame_rate);
}
static FORCEINLINE HRESULT IAMVideoControl_GetFrameRateList(IAMVideoControl* This,IPin *pin,LONG index,SIZE dimensions,LONG *list_size,LONGLONG **frame_rate) {
    return This->lpVtbl->GetFrameRateList(This,pin,index,dimensions,list_size,frame_rate);
}
#endif
#endif

#endif


#endif  /* __IAMVideoControl_INTERFACE_DEFINED__ */

/*****************************************************************************
 * IAMBufferNegotiation interface
 */
#ifndef __IAMBufferNegotiation_INTERFACE_DEFINED__
#define __IAMBufferNegotiation_INTERFACE_DEFINED__

DEFINE_GUID(IID_IAMBufferNegotiation, 0x56ed71a0, 0xaf5f, 0x11d0, 0xb3,0xf0, 0x00,0xaa,0x00,0x37,0x61,0xc5);
#if defined(__cplusplus) && !defined(CINTERFACE)
MIDL_INTERFACE("56ed71a0-af5f-11d0-b3f0-00aa003761c5")
IAMBufferNegotiation : public IUnknown
{
    virtual HRESULT STDMETHODCALLTYPE SuggestAllocatorProperties(
        const ALLOCATOR_PROPERTIES *prop) = 0;

    virtual HRESULT STDMETHODCALLTYPE GetAllocatorProperties(
        ALLOCATOR_PROPERTIES *prop) = 0;

};
#ifdef __CRT_UUID_DECL
__CRT_UUID_DECL(IAMBufferNegotiation, 0x56ed71a0, 0xaf5f, 0x11d0, 0xb3,0xf0, 0x00,0xaa,0x00,0x37,0x61,0xc5)
#endif
#else
typedef struct IAMBufferNegotiationVtbl {
    BEGIN_INTERFACE

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

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

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

    /*** IAMBufferNegotiation methods ***/
    HRESULT (STDMETHODCALLTYPE *SuggestAllocatorProperties)(
        IAMBufferNegotiation *This,
        const ALLOCATOR_PROPERTIES *prop);

    HRESULT (STDMETHODCALLTYPE *GetAllocatorProperties)(
        IAMBufferNegotiation *This,
        ALLOCATOR_PROPERTIES *prop);

    END_INTERFACE
} IAMBufferNegotiationVtbl;

interface IAMBufferNegotiation {
    CONST_VTBL IAMBufferNegotiationVtbl* lpVtbl;
};

#ifdef COBJMACROS
#ifndef WIDL_C_INLINE_WRAPPERS
/*** IUnknown methods ***/
#define IAMBufferNegotiation_QueryInterface(This,riid,ppvObject) (This)->lpVtbl->QueryInterface(This,riid,ppvObject)
#define IAMBufferNegotiation_AddRef(This) (This)->lpVtbl->AddRef(This)
#define IAMBufferNegotiation_Release(This) (This)->lpVtbl->Release(This)
/*** IAMBufferNegotiation methods ***/
#define IAMBufferNegotiation_SuggestAllocatorProperties(This,prop) (This)->lpVtbl->SuggestAllocatorProperties(This,prop)
#define IAMBufferNegotiation_GetAllocatorProperties(This,prop) (This)->lpVtbl->GetAllocatorProperties(This,prop)
#else
/*** IUnknown methods ***/
static FORCEINLINE HRESULT IAMBufferNegotiation_QueryInterface(IAMBufferNegotiation* This,REFIID riid,void **ppvObject) {
    return This->lpVtbl->QueryInterface(This,riid,ppvObject);
}
static FORCEINLINE ULONG IAMBufferNegotiation_AddRef(IAMBufferNegotiation* This) {
    return This->lpVtbl->AddRef(This);
}
static FORCEINLINE ULONG IAMBufferNegotiation_Release(IAMBufferNegotiation* This) {
    return This->lpVtbl->Release(This);
}
/*** IAMBufferNegotiation methods ***/
static FORCEINLINE HRESULT IAMBufferNegotiation_SuggestAllocatorProperties(IAMBufferNegotiation* This,const ALLOCATOR_PROPERTIES *prop) {
    return This->lpVtbl->SuggestAllocatorProperties(This,prop);
}
static FORCEINLINE HRESULT IAMBufferNegotiation_GetAllocatorProperties(IAMBufferNegotiation* This,ALLOCATOR_PROPERTIES *prop) {
    return This->lpVtbl->GetAllocatorProperties(This,prop);
}
#endif
#endif

#endif


#endif  /* __IAMBufferNegotiation_INTERFACE_DEFINED__ */

/*****************************************************************************
 * IAMDroppedFrames interface
 */
#ifndef __IAMDroppedFrames_INTERFACE_DEFINED__
#define __IAMDroppedFrames_INTERFACE_DEFINED__

DEFINE_GUID(IID_IAMDroppedFrames, 0xc6e13344, 0x30ac, 0x11d0, 0xa1,0x8c, 0x00,0xa0,0xc9,0x11,0x89,0x56);
#if defined(__cplusplus) && !defined(CINTERFACE)
MIDL_INTERFACE("c6e13344-30ac-11d0-a18c-00a0c9118956")
IAMDroppedFrames : public IUnknown
{
    virtual HRESULT STDMETHODCALLTYPE GetNumDropped(
        LONG *number) = 0;

    virtual HRESULT STDMETHODCALLTYPE GetNumNotDropped(
        LONG *number) = 0;

    virtual HRESULT STDMETHODCALLTYPE GetDroppedInfo(
        LONG size,
        LONG *array,
        LONG *copied) = 0;

    virtual HRESULT STDMETHODCALLTYPE GetAverageFrameSize(
        LONG *size) = 0;

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

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

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

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

    /*** IAMDroppedFrames methods ***/
    HRESULT (STDMETHODCALLTYPE *GetNumDropped)(
        IAMDroppedFrames *This,
        LONG *number);

    HRESULT (STDMETHODCALLTYPE *GetNumNotDropped)(
        IAMDroppedFrames *This,
        LONG *number);

    HRESULT (STDMETHODCALLTYPE *GetDroppedInfo)(
        IAMDroppedFrames *This,
        LONG size,
        LONG *array,
        LONG *copied);

    HRESULT (STDMETHODCALLTYPE *GetAverageFrameSize)(
        IAMDroppedFrames *This,
        LONG *size);

    END_INTERFACE
} IAMDroppedFramesVtbl;

interface IAMDroppedFrames {
    CONST_VTBL IAMDroppedFramesVtbl* lpVtbl;
};

#ifdef COBJMACROS
#ifndef WIDL_C_INLINE_WRAPPERS
/*** IUnknown methods ***/
#define IAMDroppedFrames_QueryInterface(This,riid,ppvObject) (This)->lpVtbl->QueryInterface(This,riid,ppvObject)
#define IAMDroppedFrames_AddRef(This) (This)->lpVtbl->AddRef(This)
#define IAMDroppedFrames_Release(This) (This)->lpVtbl->Release(This)
/*** IAMDroppedFrames methods ***/
#define IAMDroppedFrames_GetNumDropped(This,number) (This)->lpVtbl->GetNumDropped(This,number)
#define IAMDroppedFrames_GetNumNotDropped(This,number) (This)->lpVtbl->GetNumNotDropped(This,number)
#define IAMDroppedFrames_GetDroppedInfo(This,size,array,copied) (This)->lpVtbl->GetDroppedInfo(This,size,array,copied)
#define IAMDroppedFrames_GetAverageFrameSize(This,size) (This)->lpVtbl->GetAverageFrameSize(This,size)
#else
/*** IUnknown methods ***/
static FORCEINLINE HRESULT IAMDroppedFrames_QueryInterface(IAMDroppedFrames* This,REFIID riid,void **ppvObject) {
    return This->lpVtbl->QueryInterface(This,riid,ppvObject);
}
static FORCEINLINE ULONG IAMDroppedFrames_AddRef(IAMDroppedFrames* This) {
    return This->lpVtbl->AddRef(This);
}
static FORCEINLINE ULONG IAMDroppedFrames_Release(IAMDroppedFrames* This) {
    return This->lpVtbl->Release(This);
}
/*** IAMDroppedFrames methods ***/
static FORCEINLINE HRESULT IAMDroppedFrames_GetNumDropped(IAMDroppedFrames* This,LONG *number) {
    return This->lpVtbl->GetNumDropped(This,number);
}
static FORCEINLINE HRESULT IAMDroppedFrames_GetNumNotDropped(IAMDroppedFrames* This,LONG *number) {
    return This->lpVtbl->GetNumNotDropped(This,number);
}
static FORCEINLINE HRESULT IAMDroppedFrames_GetDroppedInfo(IAMDroppedFrames* This,LONG size,LONG *array,LONG *copied) {
    return This->lpVtbl->GetDroppedInfo(This,size,array,copied);
}
static FORCEINLINE HRESULT IAMDroppedFrames_GetAverageFrameSize(IAMDroppedFrames* This,LONG *size) {
    return This->lpVtbl->GetAverageFrameSize(This,size);
}
#endif
#endif

#endif


#endif  /* __IAMDroppedFrames_INTERFACE_DEFINED__ */

/*****************************************************************************
 * IAMLatency interface
 */
#ifndef __IAMLatency_INTERFACE_DEFINED__
#define __IAMLatency_INTERFACE_DEFINED__

DEFINE_GUID(IID_IAMLatency, 0x62ea93ba, 0xec62, 0x11d2, 0xb7,0x70, 0x00,0xc0,0x4f,0xb6,0xbd,0x3d);
#if defined(__cplusplus) && !defined(CINTERFACE)
MIDL_INTERFACE("62ea93ba-ec62-11d2-b770-00c04fb6bd3d")
IAMLatency : public IUnknown
{
    virtual HRESULT STDMETHODCALLTYPE GetLatency(
        REFERENCE_TIME *latency) = 0;

};
#ifdef __CRT_UUID_DECL
__CRT_UUID_DECL(IAMLatency, 0x62ea93ba, 0xec62, 0x11d2, 0xb7,0x70, 0x00,0xc0,0x4f,0xb6,0xbd,0x3d)
#endif
#else
typedef struct IAMLatencyVtbl {
    BEGIN_INTERFACE

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

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

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

    /*** IAMLatency methods ***/
    HRESULT (STDMETHODCALLTYPE *GetLatency)(
        IAMLatency *This,
        REFERENCE_TIME *latency);

    END_INTERFACE
} IAMLatencyVtbl;

interface IAMLatency {
    CONST_VTBL IAMLatencyVtbl* lpVtbl;
};

#ifdef COBJMACROS
#ifndef WIDL_C_INLINE_WRAPPERS
/*** IUnknown methods ***/
#define IAMLatency_QueryInterface(This,riid,ppvObject) (This)->lpVtbl->QueryInterface(This,riid,ppvObject)
#define IAMLatency_AddRef(This) (This)->lpVtbl->AddRef(This)
#define IAMLatency_Release(This) (This)->lpVtbl->Release(This)
/*** IAMLatency methods ***/
#define IAMLatency_GetLatency(This,latency) (This)->lpVtbl->GetLatency(This,latency)
#else
/*** IUnknown methods ***/
static FORCEINLINE HRESULT IAMLatency_QueryInterface(IAMLatency* This,REFIID riid,void **ppvObject) {
    return This->lpVtbl->QueryInterface(This,riid,ppvObject);
}
static FORCEINLINE ULONG IAMLatency_AddRef(IAMLatency* This) {
    return This->lpVtbl->AddRef(This);
}
static FORCEINLINE ULONG IAMLatency_Release(IAMLatency* This) {
    return This->lpVtbl->Release(This);
}
/*** IAMLatency methods ***/
static FORCEINLINE HRESULT IAMLatency_GetLatency(IAMLatency* This,REFERENCE_TIME *latency) {
    return This->lpVtbl->GetLatency(This,latency);
}
#endif
#endif

#endif


#endif  /* __IAMLatency_INTERFACE_DEFINED__ */

/*****************************************************************************
 * IAMPushSource interface
 */
#ifndef __IAMPushSource_INTERFACE_DEFINED__
#define __IAMPushSource_INTERFACE_DEFINED__

DEFINE_GUID(IID_IAMPushSource, 0xf185fe76, 0xe64e, 0x11d2, 0xb7,0x6e, 0x00,0xc0,0x4f,0xb6,0xbd,0x3d);
#if defined(__cplusplus) && !defined(CINTERFACE)
MIDL_INTERFACE("f185fe76-e64e-11d2-b76e-00c04fb6bd3d")
IAMPushSource : public IAMLatency
{
    virtual HRESULT STDMETHODCALLTYPE GetPushSourceFlags(
        ULONG *flags) = 0;

    virtual HRESULT STDMETHODCALLTYPE SetPushSourceFlags(
        ULONG flags) = 0;

    virtual HRESULT STDMETHODCALLTYPE SetStreamOffset(
        REFERENCE_TIME offset) = 0;

    virtual HRESULT STDMETHODCALLTYPE GetStreamOffset(
        REFERENCE_TIME *offset) = 0;

    virtual HRESULT STDMETHODCALLTYPE GetMaxStreamOffset(
        REFERENCE_TIME *offset) = 0;

    virtual HRESULT STDMETHODCALLTYPE SetMaxStreamOffset(
        REFERENCE_TIME offset) = 0;

};
#ifdef __CRT_UUID_DECL
__CRT_UUID_DECL(IAMPushSource, 0xf185fe76, 0xe64e, 0x11d2, 0xb7,0x6e, 0x00,0xc0,0x4f,0xb6,0xbd,0x3d)
#endif
#else
typedef struct IAMPushSourceVtbl {
    BEGIN_INTERFACE

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

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

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

    /*** IAMLatency methods ***/
    HRESULT (STDMETHODCALLTYPE *GetLatency)(
        IAMPushSource *This,
        REFERENCE_TIME *latency);

    /*** IAMPushSource methods ***/
    HRESULT (STDMETHODCALLTYPE *GetPushSourceFlags)(
        IAMPushSource *This,
        ULONG *flags);

    HRESULT (STDMETHODCALLTYPE *SetPushSourceFlags)(
        IAMPushSource *This,
        ULONG flags);

    HRESULT (STDMETHODCALLTYPE *SetStreamOffset)(
        IAMPushSource *This,
        REFERENCE_TIME offset);

    HRESULT (STDMETHODCALLTYPE *GetStreamOffset)(
        IAMPushSource *This,
        REFERENCE_TIME *offset);

    HRESULT (STDMETHODCALLTYPE *GetMaxStreamOffset)(
        IAMPushSource *This,
        REFERENCE_TIME *offset);

    HRESULT (STDMETHODCALLTYPE *SetMaxStreamOffset)(
        IAMPushSource *This,
        REFERENCE_TIME offset);

    END_INTERFACE
} IAMPushSourceVtbl;

interface IAMPushSource {
    CONST_VTBL IAMPushSourceVtbl* lpVtbl;
};

#ifdef COBJMACROS
#ifndef WIDL_C_INLINE_WRAPPERS
/*** IUnknown methods ***/
#define IAMPushSource_QueryInterface(This,riid,ppvObject) (This)->lpVtbl->QueryInterface(This,riid,ppvObject)
#define IAMPushSource_AddRef(This) (This)->lpVtbl->AddRef(This)
#define IAMPushSource_Release(This) (This)->lpVtbl->Release(This)
/*** IAMLatency methods ***/
#define IAMPushSource_GetLatency(This,latency) (This)->lpVtbl->GetLatency(This,latency)
/*** IAMPushSource methods ***/
#define IAMPushSource_GetPushSourceFlags(This,flags) (This)->lpVtbl->GetPushSourceFlags(This,flags)
#define IAMPushSource_SetPushSourceFlags(This,flags) (This)->lpVtbl->SetPushSourceFlags(This,flags)
#define IAMPushSource_SetStreamOffset(This,offset) (This)->lpVtbl->SetStreamOffset(This,offset)
#define IAMPushSource_GetStreamOffset(This,offset) (This)->lpVtbl->GetStreamOffset(This,offset)
#define IAMPushSource_GetMaxStreamOffset(This,offset) (This)->lpVtbl->GetMaxStreamOffset(This,offset)
#define IAMPushSource_SetMaxStreamOffset(This,offset) (This)->lpVtbl->SetMaxStreamOffset(This,offset)
#else
/*** IUnknown methods ***/
static FORCEINLINE HRESULT IAMPushSource_QueryInterface(IAMPushSource* This,REFIID riid,void **ppvObject) {
    return This->lpVtbl->QueryInterface(This,riid,ppvObject);
}
static FORCEINLINE ULONG IAMPushSource_AddRef(IAMPushSource* This) {
    return This->lpVtbl->AddRef(This);
}
static FORCEINLINE ULONG IAMPushSource_Release(IAMPushSource* This) {
    return This->lpVtbl->Release(This);
}
/*** IAMLatency methods ***/
static FORCEINLINE HRESULT IAMPushSource_GetLatency(IAMPushSource* This,REFERENCE_TIME *latency) {
    return This->lpVtbl->GetLatency(This,latency);
}
/*** IAMPushSource methods ***/
static FORCEINLINE HRESULT IAMPushSource_GetPushSourceFlags(IAMPushSource* This,ULONG *flags) {
    return This->lpVtbl->GetPushSourceFlags(This,flags);
}
static FORCEINLINE HRESULT IAMPushSource_SetPushSourceFlags(IAMPushSource* This,ULONG flags) {
    return This->lpVtbl->SetPushSourceFlags(This,flags);
}
static FORCEINLINE HRESULT IAMPushSource_SetStreamOffset(IAMPushSource* This,REFERENCE_TIME offset) {
    return This->lpVtbl->SetStreamOffset(This,offset);
}
static FORCEINLINE HRESULT IAMPushSource_GetStreamOffset(IAMPushSource* This,REFERENCE_TIME *offset) {
    return This->lpVtbl->GetStreamOffset(This,offset);
}
static FORCEINLINE HRESULT IAMPushSource_GetMaxStreamOffset(IAMPushSource* This,REFERENCE_TIME *offset) {
    return This->lpVtbl->GetMaxStreamOffset(This,offset);
}
static FORCEINLINE HRESULT IAMPushSource_SetMaxStreamOffset(IAMPushSource* This,REFERENCE_TIME offset) {
    return This->lpVtbl->SetMaxStreamOffset(This,offset);
}
#endif
#endif

#endif


#endif  /* __IAMPushSource_INTERFACE_DEFINED__ */

/*****************************************************************************
 * IAMVideoCompression interface
 */
#ifndef __IAMVideoCompression_INTERFACE_DEFINED__
#define __IAMVideoCompression_INTERFACE_DEFINED__

DEFINE_GUID(IID_IAMVideoCompression, 0xc6e13343, 0x30ac, 0x11d0, 0xa1,0x8c, 0x00,0xa0,0xc9,0x11,0x89,0x56);
#if defined(__cplusplus) && !defined(CINTERFACE)
MIDL_INTERFACE("c6e13343-30ac-11d0-a18c-00a0c9118956")
IAMVideoCompression : public IUnknown
{
    virtual HRESULT STDMETHODCALLTYPE put_KeyFrameRate(
        LONG frame_rate) = 0;

    virtual HRESULT STDMETHODCALLTYPE get_KeyFrameRate(
        LONG *frame_rate) = 0;

    virtual HRESULT STDMETHODCALLTYPE put_PFramesPerKeyFrame(
        LONG frame) = 0;

    virtual HRESULT STDMETHODCALLTYPE get_PFramesPerKeyFrame(
        LONG *frame) = 0;

    virtual HRESULT STDMETHODCALLTYPE put_Quality(
        double quality) = 0;

    virtual HRESULT STDMETHODCALLTYPE get_Quality(
        double *quality) = 0;

    virtual HRESULT STDMETHODCALLTYPE put_WindowSize(
        DWORDLONG size) = 0;

    virtual HRESULT STDMETHODCALLTYPE get_WindowSize(
        DWORDLONG *size) = 0;

    virtual HRESULT STDMETHODCALLTYPE GetInfo(
        LPWSTR version,
        int *version_size,
        LPWSTR description,
        int *description_size,
        LONG *frame_rate,
        LONG *key,
        double *quality,
        LONG *capabilities) = 0;

    virtual HRESULT STDMETHODCALLTYPE OverrideKeyFrame(
        LONG number) = 0;

    virtual HRESULT STDMETHODCALLTYPE OverrideFrameSize(
        LONG number,
        LONG size) = 0;

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

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

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

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

    /*** IAMVideoCompression methods ***/
    HRESULT (STDMETHODCALLTYPE *put_KeyFrameRate)(
        IAMVideoCompression *This,
        LONG frame_rate);

    HRESULT (STDMETHODCALLTYPE *get_KeyFrameRate)(
        IAMVideoCompression *This,
        LONG *frame_rate);

    HRESULT (STDMETHODCALLTYPE *put_PFramesPerKeyFrame)(
        IAMVideoCompression *This,
        LONG frame);

    HRESULT (STDMETHODCALLTYPE *get_PFramesPerKeyFrame)(
        IAMVideoCompression *This,
        LONG *frame);

    HRESULT (STDMETHODCALLTYPE *put_Quality)(
        IAMVideoCompression *This,
        double quality);

    HRESULT (STDMETHODCALLTYPE *get_Quality)(
        IAMVideoCompression *This,
        double *quality);

    HRESULT (STDMETHODCALLTYPE *put_WindowSize)(
        IAMVideoCompression *This,
        DWORDLONG size);

    HRESULT (STDMETHODCALLTYPE *get_WindowSize)(
        IAMVideoCompression *This,
        DWORDLONG *size);

    HRESULT (STDMETHODCALLTYPE *GetInfo)(
        IAMVideoCompression *This,
        LPWSTR version,
        int *version_size,
        LPWSTR description,
        int *description_size,
        LONG *frame_rate,
        LONG *key,
        double *quality,
        LONG *capabilities);

    HRESULT (STDMETHODCALLTYPE *OverrideKeyFrame)(
        IAMVideoCompression *This,
        LONG number);

    HRESULT (STDMETHODCALLTYPE *OverrideFrameSize)(
        IAMVideoCompression *This,
        LONG number,
        LONG size);

    END_INTERFACE
} IAMVideoCompressionVtbl;

interface IAMVideoCompression {
    CONST_VTBL IAMVideoCompressionVtbl* lpVtbl;
};

#ifdef COBJMACROS
#ifndef WIDL_C_INLINE_WRAPPERS
/*** IUnknown methods ***/
#define IAMVideoCompression_QueryInterface(This,riid,ppvObject) (This)->lpVtbl->QueryInterface(This,riid,ppvObject)
#define IAMVideoCompression_AddRef(This) (This)->lpVtbl->AddRef(This)
#define IAMVideoCompression_Release(This) (This)->lpVtbl->Release(This)
/*** IAMVideoCompression methods ***/
#define IAMVideoCompression_put_KeyFrameRate(This,frame_rate) (This)->lpVtbl->put_KeyFrameRate(This,frame_rate)
#define IAMVideoCompression_get_KeyFrameRate(This,frame_rate) (This)->lpVtbl->get_KeyFrameRate(This,frame_rate)
#define IAMVideoCompression_put_PFramesPerKeyFrame(This,frame) (This)->lpVtbl->put_PFramesPerKeyFrame(This,frame)
#define IAMVideoCompression_get_PFramesPerKeyFrame(This,frame) (This)->lpVtbl->get_PFramesPerKeyFrame(This,frame)
#define IAMVideoCompression_put_Quality(This,quality) (This)->lpVtbl->put_Quality(This,quality)
#define IAMVideoCompression_get_Quality(This,quality) (This)->lpVtbl->get_Quality(This,quality)
#define IAMVideoCompression_put_WindowSize(This,size) (This)->lpVtbl->put_WindowSize(This,size)
#define IAMVideoCompression_get_WindowSize(This,size) (This)->lpVtbl->get_WindowSize(This,size)
#define IAMVideoCompression_GetInfo(This,version,version_size,description,description_size,frame_rate,key,quality,capabilities) (This)->lpVtbl->GetInfo(This,version,version_size,description,description_size,frame_rate,key,quality,capabilities)
#define IAMVideoCompression_OverrideKeyFrame(This,number) (This)->lpVtbl->OverrideKeyFrame(This,number)
#define IAMVideoCompression_OverrideFrameSize(This,number,size) (This)->lpVtbl->OverrideFrameSize(This,number,size)
#else
/*** IUnknown methods ***/
static FORCEINLINE HRESULT IAMVideoCompression_QueryInterface(IAMVideoCompression* This,REFIID riid,void **ppvObject) {
    return This->lpVtbl->QueryInterface(This,riid,ppvObject);
}
static FORCEINLINE ULONG IAMVideoCompression_AddRef(IAMVideoCompression* This) {
    return This->lpVtbl->AddRef(This);
}
static FORCEINLINE ULONG IAMVideoCompression_Release(IAMVideoCompression* This) {
    return This->lpVtbl->Release(This);
}
/*** IAMVideoCompression methods ***/
static FORCEINLINE HRESULT IAMVideoCompression_put_KeyFrameRate(IAMVideoCompression* This,LONG frame_rate) {
    return This->lpVtbl->put_KeyFrameRate(This,frame_rate);
}
static FORCEINLINE HRESULT IAMVideoCompression_get_KeyFrameRate(IAMVideoCompression* This,LONG *frame_rate) {
    return This->lpVtbl->get_KeyFrameRate(This,frame_rate);
}
static FORCEINLINE HRESULT IAMVideoCompression_put_PFramesPerKeyFrame(IAMVideoCompression* This,LONG frame) {
    return This->lpVtbl->put_PFramesPerKeyFrame(This,frame);
}
static FORCEINLINE HRESULT IAMVideoCompression_get_PFramesPerKeyFrame(IAMVideoCompression* This,LONG *frame) {
    return This->lpVtbl->get_PFramesPerKeyFrame(This,frame);
}
static FORCEINLINE HRESULT IAMVideoCompression_put_Quality(IAMVideoCompression* This,double quality) {
    return This->lpVtbl->put_Quality(This,quality);
}
static FORCEINLINE HRESULT IAMVideoCompression_get_Quality(IAMVideoCompression* This,double *quality) {
    return This->lpVtbl->get_Quality(This,quality);
}
static FORCEINLINE HRESULT IAMVideoCompression_put_WindowSize(IAMVideoCompression* This,DWORDLONG size) {
    return This->lpVtbl->put_WindowSize(This,size);
}
static FORCEINLINE HRESULT IAMVideoCompression_get_WindowSize(IAMVideoCompression* This,DWORDLONG *size) {
    return This->lpVtbl->get_WindowSize(This,size);
}
static FORCEINLINE HRESULT IAMVideoCompression_GetInfo(IAMVideoCompression* This,LPWSTR version,int *version_size,LPWSTR description,int *description_size,LONG *frame_rate,LONG *key,double *quality,LONG *capabilities) {
    return This->lpVtbl->GetInfo(This,version,version_size,description,description_size,frame_rate,key,quality,capabilities);
}
static FORCEINLINE HRESULT IAMVideoCompression_OverrideKeyFrame(IAMVideoCompression* This,LONG number) {
    return This->lpVtbl->OverrideKeyFrame(This,number);
}
static FORCEINLINE HRESULT IAMVideoCompression_OverrideFrameSize(IAMVideoCompression* This,LONG number,LONG size) {
    return This->lpVtbl->OverrideFrameSize(This,number,size);
}
#endif
#endif

#endif


#endif  /* __IAMVideoCompression_INTERFACE_DEFINED__ */

/*****************************************************************************
 * IAMCrossbar interface
 */
#ifndef __IAMCrossbar_INTERFACE_DEFINED__
#define __IAMCrossbar_INTERFACE_DEFINED__

DEFINE_GUID(IID_IAMCrossbar, 0xc6e13380, 0x30ac, 0x11d0, 0xa1,0x8c, 0x00,0xa0,0xc9,0x11,0x89,0x56);
#if defined(__cplusplus) && !defined(CINTERFACE)
MIDL_INTERFACE("c6e13380-30ac-11d0-a18c-00a0c9118956")
IAMCrossbar : public IUnknown
{
    virtual HRESULT STDMETHODCALLTYPE get_PinCounts(
        LONG *output,
        LONG *intput) = 0;

    virtual HRESULT STDMETHODCALLTYPE CanRoute(
        LONG output,
        LONG input) = 0;

    virtual HRESULT STDMETHODCALLTYPE Route(
        LONG output,
        LONG input) = 0;

    virtual HRESULT STDMETHODCALLTYPE get_IsRoutedTo(
        LONG output,
        LONG *input) = 0;

    virtual HRESULT STDMETHODCALLTYPE get_CrossbarPinInfo(
        BOOL is_input,
        LONG index,
        LONG *related,
        LONG *type) = 0;

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

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

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

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

    /*** IAMCrossbar methods ***/
    HRESULT (STDMETHODCALLTYPE *get_PinCounts)(
        IAMCrossbar *This,
        LONG *output,
        LONG *intput);

    HRESULT (STDMETHODCALLTYPE *CanRoute)(
        IAMCrossbar *This,
        LONG output,
        LONG input);

    HRESULT (STDMETHODCALLTYPE *Route)(
        IAMCrossbar *This,
        LONG output,
        LONG input);

    HRESULT (STDMETHODCALLTYPE *get_IsRoutedTo)(
        IAMCrossbar *This,
        LONG output,
        LONG *input);

    HRESULT (STDMETHODCALLTYPE *get_CrossbarPinInfo)(
        IAMCrossbar *This,
        BOOL is_input,
        LONG index,
        LONG *related,
        LONG *type);

    END_INTERFACE
} IAMCrossbarVtbl;

interface IAMCrossbar {
    CONST_VTBL IAMCrossbarVtbl* lpVtbl;
};

#ifdef COBJMACROS
#ifndef WIDL_C_INLINE_WRAPPERS
/*** IUnknown methods ***/
#define IAMCrossbar_QueryInterface(This,riid,ppvObject) (This)->lpVtbl->QueryInterface(This,riid,ppvObject)
#define IAMCrossbar_AddRef(This) (This)->lpVtbl->AddRef(This)
#define IAMCrossbar_Release(This) (This)->lpVtbl->Release(This)
/*** IAMCrossbar methods ***/
#define IAMCrossbar_get_PinCounts(This,output,intput) (This)->lpVtbl->get_PinCounts(This,output,intput)
#define IAMCrossbar_CanRoute(This,output,input) (This)->lpVtbl->CanRoute(This,output,input)
#define IAMCrossbar_Route(This,output,input) (This)->lpVtbl->Route(This,output,input)
#define IAMCrossbar_get_IsRoutedTo(This,output,input) (This)->lpVtbl->get_IsRoutedTo(This,output,input)
#define IAMCrossbar_get_CrossbarPinInfo(This,is_input,index,related,type) (This)->lpVtbl->get_CrossbarPinInfo(This,is_input,index,related,type)
#else
/*** IUnknown methods ***/
static FORCEINLINE HRESULT IAMCrossbar_QueryInterface(IAMCrossbar* This,REFIID riid,void **ppvObject) {
    return This->lpVtbl->QueryInterface(This,riid,ppvObject);
}
static FORCEINLINE ULONG IAMCrossbar_AddRef(IAMCrossbar* This) {
    return This->lpVtbl->AddRef(This);
}
static FORCEINLINE ULONG IAMCrossbar_Release(IAMCrossbar* This) {
    return This->lpVtbl->Release(This);
}
/*** IAMCrossbar methods ***/
static FORCEINLINE HRESULT IAMCrossbar_get_PinCounts(IAMCrossbar* This,LONG *output,LONG *intput) {
    return This->lpVtbl->get_PinCounts(This,output,intput);
}
static FORCEINLINE HRESULT IAMCrossbar_CanRoute(IAMCrossbar* This,LONG output,LONG input) {
    return This->lpVtbl->CanRoute(This,output,input);
}
static FORCEINLINE HRESULT IAMCrossbar_Route(IAMCrossbar* This,LONG output,LONG input) {
    return This->lpVtbl->Route(This,output,input);
}
static FORCEINLINE HRESULT IAMCrossbar_get_IsRoutedTo(IAMCrossbar* This,LONG output,LONG *input) {
    return This->lpVtbl->get_IsRoutedTo(This,output,input);
}
static FORCEINLINE HRESULT IAMCrossbar_get_CrossbarPinInfo(IAMCrossbar* This,BOOL is_input,LONG index,LONG *related,LONG *type) {
    return This->lpVtbl->get_CrossbarPinInfo(This,is_input,index,related,type);
}
#endif
#endif

#endif


#endif  /* __IAMCrossbar_INTERFACE_DEFINED__ */

typedef enum tagAMTunerEventType {
    AMTUNER_EVENT_CHANGED = 0x1
} AMTunerEventType;
/*****************************************************************************
 * IAMTunerNotification interface
 */
#ifndef __IAMTunerNotification_INTERFACE_DEFINED__
#define __IAMTunerNotification_INTERFACE_DEFINED__

DEFINE_GUID(IID_IAMTunerNotification, 0x211a8760, 0x03ac, 0x11d1, 0x8d,0x13, 0x00,0xaa,0x00,0xbd,0x83,0x39);
#if defined(__cplusplus) && !defined(CINTERFACE)
MIDL_INTERFACE("211a8760-03ac-11d1-8d13-00aa00bd8339")
IAMTunerNotification : public IUnknown
{
    virtual HRESULT STDMETHODCALLTYPE OnEvent(
        AMTunerEventType event) = 0;

};
#ifdef __CRT_UUID_DECL
__CRT_UUID_DECL(IAMTunerNotification, 0x211a8760, 0x03ac, 0x11d1, 0x8d,0x13, 0x00,0xaa,0x00,0xbd,0x83,0x39)
#endif
#else
typedef struct IAMTunerNotificationVtbl {
    BEGIN_INTERFACE

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

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

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

    /*** IAMTunerNotification methods ***/
    HRESULT (STDMETHODCALLTYPE *OnEvent)(
        IAMTunerNotification *This,
        AMTunerEventType event);

    END_INTERFACE
} IAMTunerNotificationVtbl;

interface IAMTunerNotification {
    CONST_VTBL IAMTunerNotificationVtbl* lpVtbl;
};

#ifdef COBJMACROS
#ifndef WIDL_C_INLINE_WRAPPERS
/*** IUnknown methods ***/
#define IAMTunerNotification_QueryInterface(This,riid,ppvObject) (This)->lpVtbl->QueryInterface(This,riid,ppvObject)
#define IAMTunerNotification_AddRef(This) (This)->lpVtbl->AddRef(This)
#define IAMTunerNotification_Release(This) (This)->lpVtbl->Release(This)
/*** IAMTunerNotification methods ***/
#define IAMTunerNotification_OnEvent(This,event) (This)->lpVtbl->OnEvent(This,event)
#else
/*** IUnknown methods ***/
static FORCEINLINE HRESULT IAMTunerNotification_QueryInterface(IAMTunerNotification* This,REFIID riid,void **ppvObject) {
    return This->lpVtbl->QueryInterface(This,riid,ppvObject);
}
static FORCEINLINE ULONG IAMTunerNotification_AddRef(IAMTunerNotification* This) {
    return This->lpVtbl->AddRef(This);
}
static FORCEINLINE ULONG IAMTunerNotification_Release(IAMTunerNotification* This) {
    return This->lpVtbl->Release(This);
}
/*** IAMTunerNotification methods ***/
static FORCEINLINE HRESULT IAMTunerNotification_OnEvent(IAMTunerNotification* This,AMTunerEventType event) {
    return This->lpVtbl->OnEvent(This,event);
}
#endif
#endif

#endif


#endif  /* __IAMTunerNotification_INTERFACE_DEFINED__ */

typedef enum tagAMTunerModeType {
    AMTUNER_MODE_DEFAULT = 0x0,
    AMTUNER_MODE_TV = 0x1,
    AMTUNER_MODE_FM_RADIO = 0x2,
    AMTUNER_MODE_AM_RADIO = 0x4,
    AMTUNER_MODE_DSS = 0x8
} AMTunerModeType;
/*****************************************************************************
 * IAMTuner interface
 */
#ifndef __IAMTuner_INTERFACE_DEFINED__
#define __IAMTuner_INTERFACE_DEFINED__

DEFINE_GUID(IID_IAMTuner, 0x211a8761, 0x03ac, 0x11d1, 0x8d,0x13, 0x00,0xaa,0x00,0xbd,0x83,0x39);
#if defined(__cplusplus) && !defined(CINTERFACE)
MIDL_INTERFACE("211a8761-03ac-11d1-8d13-00aa00bd8339")
IAMTuner : public IUnknown
{
    virtual HRESULT STDMETHODCALLTYPE put_Channel(
        LONG channel,
        LONG video,
        LONG audio) = 0;

    virtual HRESULT STDMETHODCALLTYPE get_Channel(
        LONG *channel,
        LONG *video,
        LONG *audio) = 0;

    virtual HRESULT STDMETHODCALLTYPE ChannelMinMax(
        LONG *min,
        LONG *max) = 0;

    virtual HRESULT STDMETHODCALLTYPE put_CountryCode(
        LONG country) = 0;

    virtual HRESULT STDMETHODCALLTYPE get_CountryCode(
        LONG *country) = 0;

    virtual HRESULT STDMETHODCALLTYPE put_TuningSpace(
        LONG tuning_space) = 0;

    virtual HRESULT STDMETHODCALLTYPE get_TuningSpace(
        LONG *tuning_space) = 0;

    virtual HRESULT STDMETHODCALLTYPE Logon(
        HANDLE user) = 0;

    virtual HRESULT STDMETHODCALLTYPE Logout(
        ) = 0;

    virtual HRESULT STDMETHODCALLTYPE SignalPresent(
        LONG *signal_strength) = 0;

    virtual HRESULT STDMETHODCALLTYPE put_Mode(
        AMTunerModeType mode) = 0;

    virtual HRESULT STDMETHODCALLTYPE get_Mode(
        AMTunerModeType *mode) = 0;

    virtual HRESULT STDMETHODCALLTYPE GetAvailableModes(
        LONG *modes) = 0;

    virtual HRESULT STDMETHODCALLTYPE RegisterNotificationCallBack(
        IAMTunerNotification *notify,
        LONG events) = 0;

    virtual HRESULT STDMETHODCALLTYPE UnRegisterNotificationCallBack(
        IAMTunerNotification *notify) = 0;

};
#ifdef __CRT_UUID_DECL
__CRT_UUID_DECL(IAMTuner, 0x211a8761, 0x03ac, 0x11d1, 0x8d,0x13, 0x00,0xaa,0x00,0xbd,0x83,0x39)
#endif
#else
typedef struct IAMTunerVtbl {
    BEGIN_INTERFACE

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

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

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

    /*** IAMTuner methods ***/
    HRESULT (STDMETHODCALLTYPE *put_Channel)(
        IAMTuner *This,
        LONG channel,
        LONG video,
        LONG audio);

    HRESULT (STDMETHODCALLTYPE *get_Channel)(
        IAMTuner *This,
        LONG *channel,
        LONG *video,
        LONG *audio);

    HRESULT (STDMETHODCALLTYPE *ChannelMinMax)(
        IAMTuner *This,
        LONG *min,
        LONG *max);

    HRESULT (STDMETHODCALLTYPE *put_CountryCode)(
        IAMTuner *This,
        LONG country);

    HRESULT (STDMETHODCALLTYPE *get_CountryCode)(
        IAMTuner *This,
        LONG *country);

    HRESULT (STDMETHODCALLTYPE *put_TuningSpace)(
        IAMTuner *This,
        LONG tuning_space);

    HRESULT (STDMETHODCALLTYPE *get_TuningSpace)(
        IAMTuner *This,
        LONG *tuning_space);

    HRESULT (STDMETHODCALLTYPE *Logon)(
        IAMTuner *This,
        HANDLE user);

    HRESULT (STDMETHODCALLTYPE *Logout)(
        IAMTuner *This);

    HRESULT (STDMETHODCALLTYPE *SignalPresent)(
        IAMTuner *This,
        LONG *signal_strength);

    HRESULT (STDMETHODCALLTYPE *put_Mode)(
        IAMTuner *This,
        AMTunerModeType mode);

    HRESULT (STDMETHODCALLTYPE *get_Mode)(
        IAMTuner *This,
        AMTunerModeType *mode);

    HRESULT (STDMETHODCALLTYPE *GetAvailableModes)(
        IAMTuner *This,
        LONG *modes);

    HRESULT (STDMETHODCALLTYPE *RegisterNotificationCallBack)(
        IAMTuner *This,
        IAMTunerNotification *notify,
        LONG events);

    HRESULT (STDMETHODCALLTYPE *UnRegisterNotificationCallBack)(
        IAMTuner *This,
        IAMTunerNotification *notify);

    END_INTERFACE
} IAMTunerVtbl;

interface IAMTuner {
    CONST_VTBL IAMTunerVtbl* lpVtbl;
};

#ifdef COBJMACROS
#ifndef WIDL_C_INLINE_WRAPPERS
/*** IUnknown methods ***/
#define IAMTuner_QueryInterface(This,riid,ppvObject) (This)->lpVtbl->QueryInterface(This,riid,ppvObject)
#define IAMTuner_AddRef(This) (This)->lpVtbl->AddRef(This)
#define IAMTuner_Release(This) (This)->lpVtbl->Release(This)
/*** IAMTuner methods ***/
#define IAMTuner_put_Channel(This,channel,video,audio) (This)->lpVtbl->put_Channel(This,channel,video,audio)
#define IAMTuner_get_Channel(This,channel,video,audio) (This)->lpVtbl->get_Channel(This,channel,video,audio)
#define IAMTuner_ChannelMinMax(This,min,max) (This)->lpVtbl->ChannelMinMax(This,min,max)
#define IAMTuner_put_CountryCode(This,country) (This)->lpVtbl->put_CountryCode(This,country)
#define IAMTuner_get_CountryCode(This,country) (This)->lpVtbl->get_CountryCode(This,country)
#define IAMTuner_put_TuningSpace(This,tuning_space) (This)->lpVtbl->put_TuningSpace(This,tuning_space)
#define IAMTuner_get_TuningSpace(This,tuning_space) (This)->lpVtbl->get_TuningSpace(This,tuning_space)
#define IAMTuner_Logon(This,user) (This)->lpVtbl->Logon(This,user)
#define IAMTuner_Logout(This) (This)->lpVtbl->Logout(This)
#define IAMTuner_SignalPresent(This,signal_strength) (This)->lpVtbl->SignalPresent(This,signal_strength)
#define IAMTuner_put_Mode(This,mode) (This)->lpVtbl->put_Mode(This,mode)
#define IAMTuner_get_Mode(This,mode) (This)->lpVtbl->get_Mode(This,mode)
#define IAMTuner_GetAvailableModes(This,modes) (This)->lpVtbl->GetAvailableModes(This,modes)
#define IAMTuner_RegisterNotificationCallBack(This,notify,events) (This)->lpVtbl->RegisterNotificationCallBack(This,notify,events)
#define IAMTuner_UnRegisterNotificationCallBack(This,notify) (This)->lpVtbl->UnRegisterNotificationCallBack(This,notify)
#else
/*** IUnknown methods ***/
static FORCEINLINE HRESULT IAMTuner_QueryInterface(IAMTuner* This,REFIID riid,void **ppvObject) {
    return This->lpVtbl->QueryInterface(This,riid,ppvObject);
}
static FORCEINLINE ULONG IAMTuner_AddRef(IAMTuner* This) {
    return This->lpVtbl->AddRef(This);
}
static FORCEINLINE ULONG IAMTuner_Release(IAMTuner* This) {
    return This->lpVtbl->Release(This);
}
/*** IAMTuner methods ***/
static FORCEINLINE HRESULT IAMTuner_put_Channel(IAMTuner* This,LONG channel,LONG video,LONG audio) {
    return This->lpVtbl->put_Channel(This,channel,video,audio);
}
static FORCEINLINE HRESULT IAMTuner_get_Channel(IAMTuner* This,LONG *channel,LONG *video,LONG *audio) {
    return This->lpVtbl->get_Channel(This,channel,video,audio);
}
static FORCEINLINE HRESULT IAMTuner_ChannelMinMax(IAMTuner* This,LONG *min,LONG *max) {
    return This->lpVtbl->ChannelMinMax(This,min,max);
}
static FORCEINLINE HRESULT IAMTuner_put_CountryCode(IAMTuner* This,LONG country) {
    return This->lpVtbl->put_CountryCode(This,country);
}
static FORCEINLINE HRESULT IAMTuner_get_CountryCode(IAMTuner* This,LONG *country) {
    return This->lpVtbl->get_CountryCode(This,country);
}
static FORCEINLINE HRESULT IAMTuner_put_TuningSpace(IAMTuner* This,LONG tuning_space) {
    return This->lpVtbl->put_TuningSpace(This,tuning_space);
}
static FORCEINLINE HRESULT IAMTuner_get_TuningSpace(IAMTuner* This,LONG *tuning_space) {
    return This->lpVtbl->get_TuningSpace(This,tuning_space);
}
static FORCEINLINE HRESULT IAMTuner_Logon(IAMTuner* This,HANDLE user) {
    return This->lpVtbl->Logon(This,user);
}
static FORCEINLINE HRESULT IAMTuner_Logout(IAMTuner* This) {
    return This->lpVtbl->Logout(This);
}
static FORCEINLINE HRESULT IAMTuner_SignalPresent(IAMTuner* This,LONG *signal_strength) {
    return This->lpVtbl->SignalPresent(This,signal_strength);
}
static FORCEINLINE HRESULT IAMTuner_put_Mode(IAMTuner* This,AMTunerModeType mode) {
    return This->lpVtbl->put_Mode(This,mode);
}
static FORCEINLINE HRESULT IAMTuner_get_Mode(IAMTuner* This,AMTunerModeType *mode) {
    return This->lpVtbl->get_Mode(This,mode);
}
static FORCEINLINE HRESULT IAMTuner_GetAvailableModes(IAMTuner* This,LONG *modes) {
    return This->lpVtbl->GetAvailableModes(This,modes);
}
static FORCEINLINE HRESULT IAMTuner_RegisterNotificationCallBack(IAMTuner* This,IAMTunerNotification *notify,LONG events) {
    return This->lpVtbl->RegisterNotificationCallBack(This,notify,events);
}
static FORCEINLINE HRESULT IAMTuner_UnRegisterNotificationCallBack(IAMTuner* This,IAMTunerNotification *notify) {
    return This->lpVtbl->UnRegisterNotificationCallBack(This,notify);
}
#endif
#endif

#endif


#endif  /* __IAMTuner_INTERFACE_DEFINED__ */

/*****************************************************************************
 * IAMTVTuner interface
 */
#ifndef __IAMTVTuner_INTERFACE_DEFINED__
#define __IAMTVTuner_INTERFACE_DEFINED__

DEFINE_GUID(IID_IAMTVTuner, 0x211a8766, 0x03ac, 0x11d1, 0x8d,0x13, 0x00,0xaa,0x00,0xbd,0x83,0x39);
#if defined(__cplusplus) && !defined(CINTERFACE)
MIDL_INTERFACE("211a8766-03ac-11d1-8d13-00aa00bd8339")
IAMTVTuner : public IAMTuner
{
    virtual HRESULT STDMETHODCALLTYPE get_AvailableTVFormats(
        LONG *standard) = 0;

    virtual HRESULT STDMETHODCALLTYPE get_TVFormat(
        LONG *standard) = 0;

    virtual HRESULT STDMETHODCALLTYPE AutoTune(
        LONG channel,
        LONG *signal) = 0;

    virtual HRESULT STDMETHODCALLTYPE StoreAutoTune(
        ) = 0;

    virtual HRESULT STDMETHODCALLTYPE get_NumInputConnections(
        LONG *number) = 0;

    virtual HRESULT STDMETHODCALLTYPE put_InputType(
        LONG index,
        TunerInputType type) = 0;

    virtual HRESULT STDMETHODCALLTYPE get_InputType(
        LONG index,
        TunerInputType *type) = 0;

    virtual HRESULT STDMETHODCALLTYPE put_ConnectInput(
        LONG index) = 0;

    virtual HRESULT STDMETHODCALLTYPE get_ConnectInput(
        LONG *index) = 0;

    virtual HRESULT STDMETHODCALLTYPE get_VideoFrequency(
        LONG *freq) = 0;

    virtual HRESULT STDMETHODCALLTYPE get_AudioFrequency(
        LONG *freq) = 0;

};
#ifdef __CRT_UUID_DECL
__CRT_UUID_DECL(IAMTVTuner, 0x211a8766, 0x03ac, 0x11d1, 0x8d,0x13, 0x00,0xaa,0x00,0xbd,0x83,0x39)
#endif
#else
typedef struct IAMTVTunerVtbl {
    BEGIN_INTERFACE

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

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

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

    /*** IAMTuner methods ***/
    HRESULT (STDMETHODCALLTYPE *put_Channel)(
        IAMTVTuner *This,
        LONG channel,
        LONG video,
        LONG audio);

    HRESULT (STDMETHODCALLTYPE *get_Channel)(
        IAMTVTuner *This,
        LONG *channel,
        LONG *video,
        LONG *audio);

    HRESULT (STDMETHODCALLTYPE *ChannelMinMax)(
        IAMTVTuner *This,
        LONG *min,
        LONG *max);

    HRESULT (STDMETHODCALLTYPE *put_CountryCode)(
        IAMTVTuner *This,
        LONG country);

    HRESULT (STDMETHODCALLTYPE *get_CountryCode)(
        IAMTVTuner *This,
        LONG *country);

    HRESULT (STDMETHODCALLTYPE *put_TuningSpace)(
        IAMTVTuner *This,
        LONG tuning_space);

    HRESULT (STDMETHODCALLTYPE *get_TuningSpace)(
        IAMTVTuner *This,
        LONG *tuning_space);

    HRESULT (STDMETHODCALLTYPE *Logon)(
        IAMTVTuner *This,
        HANDLE user);

    HRESULT (STDMETHODCALLTYPE *Logout)(
        IAMTVTuner *This);

    HRESULT (STDMETHODCALLTYPE *SignalPresent)(
        IAMTVTuner *This,
        LONG *signal_strength);

    HRESULT (STDMETHODCALLTYPE *put_Mode)(
        IAMTVTuner *This,
        AMTunerModeType mode);

    HRESULT (STDMETHODCALLTYPE *get_Mode)(
        IAMTVTuner *This,
        AMTunerModeType *mode);

    HRESULT (STDMETHODCALLTYPE *GetAvailableModes)(
        IAMTVTuner *This,
        LONG *modes);

    HRESULT (STDMETHODCALLTYPE *RegisterNotificationCallBack)(
        IAMTVTuner *This,
        IAMTunerNotification *notify,
        LONG events);

    HRESULT (STDMETHODCALLTYPE *UnRegisterNotificationCallBack)(
        IAMTVTuner *This,
        IAMTunerNotification *notify);

    /*** IAMTVTuner methods ***/
    HRESULT (STDMETHODCALLTYPE *get_AvailableTVFormats)(
        IAMTVTuner *This,
        LONG *standard);

    HRESULT (STDMETHODCALLTYPE *get_TVFormat)(
        IAMTVTuner *This,
        LONG *standard);

    HRESULT (STDMETHODCALLTYPE *AutoTune)(
        IAMTVTuner *This,
        LONG channel,
        LONG *signal);

    HRESULT (STDMETHODCALLTYPE *StoreAutoTune)(
        IAMTVTuner *This);

    HRESULT (STDMETHODCALLTYPE *get_NumInputConnections)(
        IAMTVTuner *This,
        LONG *number);

    HRESULT (STDMETHODCALLTYPE *put_InputType)(
        IAMTVTuner *This,
        LONG index,
        TunerInputType type);

    HRESULT (STDMETHODCALLTYPE *get_InputType)(
        IAMTVTuner *This,
        LONG index,
        TunerInputType *type);

    HRESULT (STDMETHODCALLTYPE *put_ConnectInput)(
        IAMTVTuner *This,
        LONG index);

    HRESULT (STDMETHODCALLTYPE *get_ConnectInput)(
        IAMTVTuner *This,
        LONG *index);

    HRESULT (STDMETHODCALLTYPE *get_VideoFrequency)(
        IAMTVTuner *This,
        LONG *freq);

    HRESULT (STDMETHODCALLTYPE *get_AudioFrequency)(
        IAMTVTuner *This,
        LONG *freq);

    END_INTERFACE
} IAMTVTunerVtbl;

interface IAMTVTuner {
    CONST_VTBL IAMTVTunerVtbl* lpVtbl;
};

#ifdef COBJMACROS
#ifndef WIDL_C_INLINE_WRAPPERS
/*** IUnknown methods ***/
#define IAMTVTuner_QueryInterface(This,riid,ppvObject) (This)->lpVtbl->QueryInterface(This,riid,ppvObject)
#define IAMTVTuner_AddRef(This) (This)->lpVtbl->AddRef(This)
#define IAMTVTuner_Release(This) (This)->lpVtbl->Release(This)
/*** IAMTuner methods ***/
#define IAMTVTuner_put_Channel(This,channel,video,audio) (This)->lpVtbl->put_Channel(This,channel,video,audio)
#define IAMTVTuner_get_Channel(This,channel,video,audio) (This)->lpVtbl->get_Channel(This,channel,video,audio)
#define IAMTVTuner_ChannelMinMax(This,min,max) (This)->lpVtbl->ChannelMinMax(This,min,max)
#define IAMTVTuner_put_CountryCode(This,country) (This)->lpVtbl->put_CountryCode(This,country)
#define IAMTVTuner_get_CountryCode(This,country) (This)->lpVtbl->get_CountryCode(This,country)
#define IAMTVTuner_put_TuningSpace(This,tuning_space) (This)->lpVtbl->put_TuningSpace(This,tuning_space)
#define IAMTVTuner_get_TuningSpace(This,tuning_space) (This)->lpVtbl->get_TuningSpace(This,tuning_space)
#define IAMTVTuner_Logon(This,user) (This)->lpVtbl->Logon(This,user)
#define IAMTVTuner_Logout(This) (This)->lpVtbl->Logout(This)
#define IAMTVTuner_SignalPresent(This,signal_strength) (This)->lpVtbl->SignalPresent(This,signal_strength)
#define IAMTVTuner_put_Mode(This,mode) (This)->lpVtbl->put_Mode(This,mode)
#define IAMTVTuner_get_Mode(This,mode) (This)->lpVtbl->get_Mode(This,mode)
#define IAMTVTuner_GetAvailableModes(This,modes) (This)->lpVtbl->GetAvailableModes(This,modes)
#define IAMTVTuner_RegisterNotificationCallBack(This,notify,events) (This)->lpVtbl->RegisterNotificationCallBack(This,notify,events)
#define IAMTVTuner_UnRegisterNotificationCallBack(This,notify) (This)->lpVtbl->UnRegisterNotificationCallBack(This,notify)
/*** IAMTVTuner methods ***/
#define IAMTVTuner_get_AvailableTVFormats(This,standard) (This)->lpVtbl->get_AvailableTVFormats(This,standard)
#define IAMTVTuner_get_TVFormat(This,standard) (This)->lpVtbl->get_TVFormat(This,standard)
#define IAMTVTuner_AutoTune(This,channel,signal) (This)->lpVtbl->AutoTune(This,channel,signal)
#define IAMTVTuner_StoreAutoTune(This) (This)->lpVtbl->StoreAutoTune(This)
#define IAMTVTuner_get_NumInputConnections(This,number) (This)->lpVtbl->get_NumInputConnections(This,number)
#define IAMTVTuner_put_InputType(This,index,type) (This)->lpVtbl->put_InputType(This,index,type)
#define IAMTVTuner_get_InputType(This,index,type) (This)->lpVtbl->get_InputType(This,index,type)
#define IAMTVTuner_put_ConnectInput(This,index) (This)->lpVtbl->put_ConnectInput(This,index)
#define IAMTVTuner_get_ConnectInput(This,index) (This)->lpVtbl->get_ConnectInput(This,index)
#define IAMTVTuner_get_VideoFrequency(This,freq) (This)->lpVtbl->get_VideoFrequency(This,freq)
#define IAMTVTuner_get_AudioFrequency(This,freq) (This)->lpVtbl->get_AudioFrequency(This,freq)
#else
/*** IUnknown methods ***/
static FORCEINLINE HRESULT IAMTVTuner_QueryInterface(IAMTVTuner* This,REFIID riid,void **ppvObject) {
    return This->lpVtbl->QueryInterface(This,riid,ppvObject);
}
static FORCEINLINE ULONG IAMTVTuner_AddRef(IAMTVTuner* This) {
    return This->lpVtbl->AddRef(This);
}
static FORCEINLINE ULONG IAMTVTuner_Release(IAMTVTuner* This) {
    return This->lpVtbl->Release(This);
}
/*** IAMTuner methods ***/
static FORCEINLINE HRESULT IAMTVTuner_put_Channel(IAMTVTuner* This,LONG channel,LONG video,LONG audio) {
    return This->lpVtbl->put_Channel(This,channel,video,audio);
}
static FORCEINLINE HRESULT IAMTVTuner_get_Channel(IAMTVTuner* This,LONG *channel,LONG *video,LONG *audio) {
    return This->lpVtbl->get_Channel(This,channel,video,audio);
}
static FORCEINLINE HRESULT IAMTVTuner_ChannelMinMax(IAMTVTuner* This,LONG *min,LONG *max) {
    return This->lpVtbl->ChannelMinMax(This,min,max);
}
static FORCEINLINE HRESULT IAMTVTuner_put_CountryCode(IAMTVTuner* This,LONG country) {
    return This->lpVtbl->put_CountryCode(This,country);
}
static FORCEINLINE HRESULT IAMTVTuner_get_CountryCode(IAMTVTuner* This,LONG *country) {
    return This->lpVtbl->get_CountryCode(This,country);
}
static FORCEINLINE HRESULT IAMTVTuner_put_TuningSpace(IAMTVTuner* This,LONG tuning_space) {
    return This->lpVtbl->put_TuningSpace(This,tuning_space);
}
static FORCEINLINE HRESULT IAMTVTuner_get_TuningSpace(IAMTVTuner* This,LONG *tuning_space) {
    return This->lpVtbl->get_TuningSpace(This,tuning_space);
}
static FORCEINLINE HRESULT IAMTVTuner_Logon(IAMTVTuner* This,HANDLE user) {
    return This->lpVtbl->Logon(This,user);
}
static FORCEINLINE HRESULT IAMTVTuner_Logout(IAMTVTuner* This) {
    return This->lpVtbl->Logout(This);
}
static FORCEINLINE HRESULT IAMTVTuner_SignalPresent(IAMTVTuner* This,LONG *signal_strength) {
    return This->lpVtbl->SignalPresent(This,signal_strength);
}
static FORCEINLINE HRESULT IAMTVTuner_put_Mode(IAMTVTuner* This,AMTunerModeType mode) {
    return This->lpVtbl->put_Mode(This,mode);
}
static FORCEINLINE HRESULT IAMTVTuner_get_Mode(IAMTVTuner* This,AMTunerModeType *mode) {
    return This->lpVtbl->get_Mode(This,mode);
}
static FORCEINLINE HRESULT IAMTVTuner_GetAvailableModes(IAMTVTuner* This,LONG *modes) {
    return This->lpVtbl->GetAvailableModes(This,modes);
}
static FORCEINLINE HRESULT IAMTVTuner_RegisterNotificationCallBack(IAMTVTuner* This,IAMTunerNotification *notify,LONG events) {
    return This->lpVtbl->RegisterNotificationCallBack(This,notify,events);
}
static FORCEINLINE HRESULT IAMTVTuner_UnRegisterNotificationCallBack(IAMTVTuner* This,IAMTunerNotification *notify) {
    return This->lpVtbl->UnRegisterNotificationCallBack(This,notify);
}
/*** IAMTVTuner methods ***/
static FORCEINLINE HRESULT IAMTVTuner_get_AvailableTVFormats(IAMTVTuner* This,LONG *standard) {
    return This->lpVtbl->get_AvailableTVFormats(This,standard);
}
static FORCEINLINE HRESULT IAMTVTuner_get_TVFormat(IAMTVTuner* This,LONG *standard) {
    return This->lpVtbl->get_TVFormat(This,standard);
}
static FORCEINLINE HRESULT IAMTVTuner_AutoTune(IAMTVTuner* This,LONG channel,LONG *signal) {
    return This->lpVtbl->AutoTune(This,channel,signal);
}
static FORCEINLINE HRESULT IAMTVTuner_StoreAutoTune(IAMTVTuner* This) {
    return This->lpVtbl->StoreAutoTune(This);
}
static FORCEINLINE HRESULT IAMTVTuner_get_NumInputConnections(IAMTVTuner* This,LONG *number) {
    return This->lpVtbl->get_NumInputConnections(This,number);
}
static FORCEINLINE HRESULT IAMTVTuner_put_InputType(IAMTVTuner* This,LONG index,TunerInputType type) {
    return This->lpVtbl->put_InputType(This,index,type);
}
static FORCEINLINE HRESULT IAMTVTuner_get_InputType(IAMTVTuner* This,LONG index,TunerInputType *type) {
    return This->lpVtbl->get_InputType(This,index,type);
}
static FORCEINLINE HRESULT IAMTVTuner_put_ConnectInput(IAMTVTuner* This,LONG index) {
    return This->lpVtbl->put_ConnectInput(This,index);
}
static FORCEINLINE HRESULT IAMTVTuner_get_ConnectInput(IAMTVTuner* This,LONG *index) {
    return This->lpVtbl->get_ConnectInput(This,index);
}
static FORCEINLINE HRESULT IAMTVTuner_get_VideoFrequency(IAMTVTuner* This,LONG *freq) {
    return This->lpVtbl->get_VideoFrequency(This,freq);
}
static FORCEINLINE HRESULT IAMTVTuner_get_AudioFrequency(IAMTVTuner* This,LONG *freq) {
    return This->lpVtbl->get_AudioFrequency(This,freq);
}
#endif
#endif

#endif


#endif  /* __IAMTVTuner_INTERFACE_DEFINED__ */

/*****************************************************************************
 * IVideoFrameStep interface
 */
#ifndef __IVideoFrameStep_INTERFACE_DEFINED__
#define __IVideoFrameStep_INTERFACE_DEFINED__

DEFINE_GUID(IID_IVideoFrameStep, 0xe46a9787, 0x2b71, 0x444d, 0xa4,0xb5, 0x1f,0xab,0x7b,0x70,0x8d,0x6a);
#if defined(__cplusplus) && !defined(CINTERFACE)
MIDL_INTERFACE("e46a9787-2b71-444d-a4b5-1fab7b708d6a")
IVideoFrameStep : public IUnknown
{
    virtual HRESULT STDMETHODCALLTYPE Step(
        DWORD frame_count,
        IUnknown *filter) = 0;

    virtual HRESULT STDMETHODCALLTYPE CanStep(
        LONG multiple,
        IUnknown *filter) = 0;

    virtual HRESULT STDMETHODCALLTYPE CancelStep(
        ) = 0;

};
#ifdef __CRT_UUID_DECL
__CRT_UUID_DECL(IVideoFrameStep, 0xe46a9787, 0x2b71, 0x444d, 0xa4,0xb5, 0x1f,0xab,0x7b,0x70,0x8d,0x6a)
#endif
#else
typedef struct IVideoFrameStepVtbl {
    BEGIN_INTERFACE

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

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

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

    /*** IVideoFrameStep methods ***/
    HRESULT (STDMETHODCALLTYPE *Step)(
        IVideoFrameStep *This,
        DWORD frame_count,
        IUnknown *filter);

    HRESULT (STDMETHODCALLTYPE *CanStep)(
        IVideoFrameStep *This,
        LONG multiple,
        IUnknown *filter);

    HRESULT (STDMETHODCALLTYPE *CancelStep)(
        IVideoFrameStep *This);

    END_INTERFACE
} IVideoFrameStepVtbl;

interface IVideoFrameStep {
    CONST_VTBL IVideoFrameStepVtbl* lpVtbl;
};

#ifdef COBJMACROS
#ifndef WIDL_C_INLINE_WRAPPERS
/*** IUnknown methods ***/
#define IVideoFrameStep_QueryInterface(This,riid,ppvObject) (This)->lpVtbl->QueryInterface(This,riid,ppvObject)
#define IVideoFrameStep_AddRef(This) (This)->lpVtbl->AddRef(This)
#define IVideoFrameStep_Release(This) (This)->lpVtbl->Release(This)
/*** IVideoFrameStep methods ***/
#define IVideoFrameStep_Step(This,frame_count,filter) (This)->lpVtbl->Step(This,frame_count,filter)
#define IVideoFrameStep_CanStep(This,multiple,filter) (This)->lpVtbl->CanStep(This,multiple,filter)
#define IVideoFrameStep_CancelStep(This) (This)->lpVtbl->CancelStep(This)
#else
/*** IUnknown methods ***/
static FORCEINLINE HRESULT IVideoFrameStep_QueryInterface(IVideoFrameStep* This,REFIID riid,void **ppvObject) {
    return This->lpVtbl->QueryInterface(This,riid,ppvObject);
}
static FORCEINLINE ULONG IVideoFrameStep_AddRef(IVideoFrameStep* This) {
    return This->lpVtbl->AddRef(This);
}
static FORCEINLINE ULONG IVideoFrameStep_Release(IVideoFrameStep* This) {
    return This->lpVtbl->Release(This);
}
/*** IVideoFrameStep methods ***/
static FORCEINLINE HRESULT IVideoFrameStep_Step(IVideoFrameStep* This,DWORD frame_count,IUnknown *filter) {
    return This->lpVtbl->Step(This,frame_count,filter);
}
static FORCEINLINE HRESULT IVideoFrameStep_CanStep(IVideoFrameStep* This,LONG multiple,IUnknown *filter) {
    return This->lpVtbl->CanStep(This,multiple,filter);
}
static FORCEINLINE HRESULT IVideoFrameStep_CancelStep(IVideoFrameStep* This) {
    return This->lpVtbl->CancelStep(This);
}
#endif
#endif

#endif


#endif  /* __IVideoFrameStep_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_00000015 {
    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__ */

#include <ddraw.h>
#if 0
#ifndef __IGraphBuilder_FWD_DEFINED__
#define __IGraphBuilder_FWD_DEFINED__
typedef interface IGraphBuilder IGraphBuilder;
#ifdef __cplusplus
interface IGraphBuilder;
#endif /* __cplusplus */
#endif

#endif
typedef enum tagDVD_DOMAIN {
    DVD_DOMAIN_FirstPlay = 1,
    DVD_DOMAIN_VideoManagerMenu = 2,
    DVD_DOMAIN_VideoTitleSetMenu = 3,
    DVD_DOMAIN_Title = 4,
    DVD_DOMAIN_Stop = 5
} DVD_DOMAIN;
typedef enum tagDVD_MENU_ID {
    DVD_MENU_Title = 2,
    DVD_MENU_Root = 3,
    DVD_MENU_Subpicture = 4,
    DVD_MENU_Audio = 5,
    DVD_MENU_Angle = 6,
    DVD_MENU_Chapter = 7
} DVD_MENU_ID;
typedef enum tagDVD_DISC_SIDE {
    DVD_SIDE_A = 1,
    DVD_SIDE_B = 2
} DVD_DISC_SIDE;
typedef enum tagDVD_PREFERRED_DISPLAY_MODE {
    DISPLAY_CONTENT_DEFAULT = 0,
    DISPLAY_16x9 = 1,
    DISPLAY_4x3_PANSCAN_PREFERRED = 2,
    DISPLAY_4x3_LETTERBOX_PREFERRED = 3
} DVD_PREFERRED_DISPLAY_MODE;
typedef WORD DVD_REGISTER;
typedef DVD_REGISTER GPRMARRAY[16];
typedef DVD_REGISTER SPRMARRAY[24];
typedef struct tagDVD_ATR {
    ULONG ulCAT;
    BYTE pbATRI[768];
} DVD_ATR;
typedef BYTE DVD_VideoATR[2];
typedef BYTE DVD_AudioATR[8];
typedef BYTE DVD_SubpictureATR[6];
typedef enum tagDVD_FRAMERATE {
    DVD_FPS_25 = 1,
    DVD_FPS_30NonDrop = 3
} DVD_FRAMERATE;
typedef struct tagDVD_TIMECODE
{
   ULONG Hours1 : 4;
   ULONG Hours10 : 4;
   ULONG Minutes1 : 4;
   ULONG Minutes10 : 4;
   ULONG Seconds1 : 4;
   ULONG Seconds10 : 4;
   ULONG Frames1 : 4;
   ULONG Frames10 : 2;
   ULONG FrameRateCode : 2;
} DVD_TIMECODE;
typedef enum tagDVD_NavCmdType {
    DVD_NavCmdType_Pre = 1,
    DVD_NavCmdType_Post = 2,
    DVD_NavCmdType_Cell = 3,
    DVD_NavCmdType_Button = 4
} DVD_NavCmdType;
typedef enum tagDVD_TIMECODE_FLAGS {
    DVD_TC_FLAG_25fps = 0x1,
    DVD_TC_FLAG_30fps = 0x2,
    DVD_TC_FLAG_DropFrame = 0x4,
    DVD_TC_FLAG_Interpolated = 0x8
} DVD_TIMECODE_FLAGS;
typedef struct tagDVD_HMSF_TIMECODE {
    BYTE bHours;
    BYTE bMinutes;
    BYTE bSeconds;
    BYTE bFrames;
} DVD_HMSF_TIMECODE;
typedef struct tagDVD_PLAYBACK_LOCATION2 {
    ULONG TitleNum;
    ULONG ChapterNum;
    DVD_HMSF_TIMECODE TimeCode;
    ULONG TimeCodeFlags;
} DVD_PLAYBACK_LOCATION2;
typedef struct tagDVD_PLAYBACK_LOCATION {
    ULONG TitleNum;
    ULONG ChapterNum;
    ULONG TimeCode;
} DVD_PLAYBACK_LOCATION;
typedef DWORD VALID_UOP_SOMTHING_OR_OTHER;
typedef enum __WIDL_strmif_generated_name_00000016 {
    UOP_FLAG_Play_Title_Or_AtTime = 0x1,
    UOP_FLAG_Play_Chapter = 0x2,
    UOP_FLAG_Play_Title = 0x4,
    UOP_FLAG_Stop = 0x8,
    UOP_FLAG_ReturnFromSubMenu = 0x10,
    UOP_FLAG_Play_Chapter_Or_AtTime = 0x20,
    UOP_FLAG_PlayPrev_Or_Replay_Chapter = 0x40,
    UOP_FLAG_PlayNext_Chapter = 0x80,
    UOP_FLAG_Play_Forwards = 0x100,
    UOP_FLAG_Play_Backwards = 0x200,
    UOP_FLAG_ShowMenu_Title = 0x400,
    UOP_FLAG_ShowMenu_Root = 0x800,
    UOP_FLAG_ShowMenu_SubPic = 0x1000,
    UOP_FLAG_ShowMenu_Audio = 0x2000,
    UOP_FLAG_ShowMenu_Angle = 0x4000,
    UOP_FLAG_ShowMenu_Chapter = 0x8000,
    UOP_FLAG_Resume = 0x10000,
    UOP_FLAG_Select_Or_Activate_Button = 0x20000,
    UOP_FLAG_Still_Off = 0x40000,
    UOP_FLAG_Pause_On = 0x80000,
    UOP_FLAG_Select_Audio_Stream = 0x100000,
    UOP_FLAG_Select_SubPic_Stream = 0x200000,
    UOP_FLAG_Select_Angle = 0x400000,
    UOP_FLAG_Select_Karaoke_Audio_Presentation_Mode = 0x800000,
    UOP_FLAG_Select_Video_Mode_Preference = 0x1000000
} VALID_UOP_FLAG;
typedef enum __WIDL_strmif_generated_name_00000017 {
    DVD_CMD_FLAG_None = 0x0,
    DVD_CMD_FLAG_Flush = 0x1,
    DVD_CMD_FLAG_SendEvents = 0x2,
    DVD_CMD_FLAG_Block = 0x4,
    DVD_CMD_FLAG_StartWhenRendered = 0x8,
    DVD_CMD_FLAG_EndAfterRendered = 0x10
} DVD_CMD_FLAGS;
typedef enum __WIDL_strmif_generated_name_00000018 {
    DVD_ResetOnStop = 1,
    DVD_NotifyParentalLevelChange = 2,
    DVD_HMSF_TimeCodeEvents = 3,
    DVD_AudioDuringFFwdRew = 4,
    DVD_EnableNonblockingAPIs = 5,
    DVD_CacheSizeInMB = 6,
    DVD_EnablePortableBookmarks = 7,
    DVD_EnableExtendedCopyProtectErrors = 8,
    DVD_NotifyPositionChange = 9,
    DVD_IncreaseOutputControl = 10,
    DVD_EnableStreaming = 11,
    DVD_EnableESOutput = 12,
    DVD_EnableTitleLength = 13,
    DVD_DisableStillThrottle = 14,
    DVD_EnableLoggingEvents = 15,
    DVD_MaxReadBurstInKB = 16,
    DVD_ReadBurstPeriodInMS = 17,
    DVD_RestartDisc = 18,
    DVD_EnableCC = 19
} DVD_OPTION_FLAG;
typedef enum __WIDL_strmif_generated_name_00000019 {
    DVD_Relative_Upper = 1,
    DVD_Relative_Lower = 2,
    DVD_Relative_Left = 3,
    DVD_Relative_Right = 4
} DVD_RELATIVE_BUTTON;
typedef enum tagDVD_PARENTAL_LEVEL {
    DVD_PARENTAL_LEVEL_8 = 0x8000,
    DVD_PARENTAL_LEVEL_7 = 0x4000,
    DVD_PARENTAL_LEVEL_6 = 0x2000,
    DVD_PARENTAL_LEVEL_5 = 0x1000,
    DVD_PARENTAL_LEVEL_4 = 0x800,
    DVD_PARENTAL_LEVEL_3 = 0x400,
    DVD_PARENTAL_LEVEL_2 = 0x200,
    DVD_PARENTAL_LEVEL_1 = 0x100
} DVD_PARENTAL_LEVEL;
typedef enum tagDVD_AUDIO_LANG_EXT {
    DVD_AUD_EXT_NotSpecified = 0,
    DVD_AUD_EXT_Captions = 1,
    DVD_AUD_EXT_VisuallyImpaired = 2,
    DVD_AUD_EXT_DirectorComments1 = 3,
    DVD_AUD_EXT_DirectorComments2 = 4
} DVD_AUDIO_LANG_EXT;
typedef enum tagDVD_SUBPICTURE_LANG_EXT {
    DVD_SP_EXT_NotSpecified = 0,
    DVD_SP_EXT_Caption_Normal = 1,
    DVD_SP_EXT_Caption_Big = 2,
    DVD_SP_EXT_Caption_Children = 3,
    DVD_SP_EXT_CC_Normal = 5,
    DVD_SP_EXT_CC_Big = 6,
    DVD_SP_EXT_CC_Children = 7,
    DVD_SP_EXT_Forced = 9,
    DVD_SP_EXT_DirectorComments_Normal = 13,
    DVD_SP_EXT_DirectorComments_Big = 14,
    DVD_SP_EXT_DirectorComments_Children = 15
} DVD_SUBPICTURE_LANG_EXT;
typedef enum tagDVD_AUDIO_APPMODE {
    DVD_AudioMode_None = 0,
    DVD_AudioMode_Karaoke = 1,
    DVD_AudioMode_Surround = 2,
    DVD_AudioMode_Other = 3
} DVD_AUDIO_APPMODE;
typedef enum tagDVD_AUDIO_FORMAT {
    DVD_AudioFormat_AC3 = 0,
    DVD_AudioFormat_MPEG1 = 1,
    DVD_AudioFormat_MPEG1_DRC = 2,
    DVD_AudioFormat_MPEG2 = 3,
    DVD_AudioFormat_MPEG2_DRC = 4,
    DVD_AudioFormat_LPCM = 5,
    DVD_AudioFormat_DTS = 6,
    DVD_AudioFormat_SDDS = 7,
    DVD_AudioFormat_Other = 8
} DVD_AUDIO_FORMAT;
typedef enum tagDVD_KARAOKE_DOWNMIX {
    DVD_Mix_0to0 = 0x1,
    DVD_Mix_1to0 = 0x2,
    DVD_Mix_2to0 = 0x4,
    DVD_Mix_3to0 = 0x8,
    DVD_Mix_4to0 = 0x10,
    DVD_Mix_Lto0 = 0x20,
    DVD_Mix_Rto0 = 0x40,
    DVD_Mix_0to1 = 0x100,
    DVD_Mix_1to1 = 0x200,
    DVD_Mix_2to1 = 0x400,
    DVD_Mix_3to1 = 0x800,
    DVD_Mix_4to1 = 0x1000,
    DVD_Mix_Lto1 = 0x2000,
    DVD_Mix_Rto1 = 0x4000
} DVD_KARAOKE_DOWNMIX;
typedef enum tagDVD_KARAOKE_CONTENTS {
    DVD_Karaoke_GuideVocal1 = 0x1,
    DVD_Karaoke_GuideVocal2 = 0x2,
    DVD_Karaoke_GuideMelody1 = 0x4,
    DVD_Karaoke_GuideMelody2 = 0x8,
    DVD_Karaoke_GuideMelodyA = 0x10,
    DVD_Karaoke_GuideMelodyB = 0x20,
    DVD_Karaoke_SoundEffectA = 0x40,
    DVD_Karaoke_SoundEffectB = 0x80
} DVD_KARAOKE_CONTENTS;
typedef enum tagDVD_KARAOKE_ASSIGNMENT {
    DVD_Assignment_reserved0 = 0,
    DVD_Assignment_reserved1 = 1,
    DVD_Assignment_LR = 2,
    DVD_Assignment_LRM = 3,
    DVD_Assignment_LR1 = 4,
    DVD_Assignment_LRM1 = 5,
    DVD_Assignment_LR12 = 6,
    DVD_Assignment_LRM12 = 7
} DVD_KARAOKE_ASSIGNMENT;
typedef struct tagDVD_MUA_MixingInfo {
    BOOL fMixTo0;
    BOOL fMixTo1;
    BOOL fMix0InPhase;
    BOOL fMix1InPhase;
    DWORD dwSpeakerPosition;
} DVD_MUA_MixingInfo;
typedef struct tagDVD_MUA_Coeff {
    double log2_alpha;
    double log2_beta;
} DVD_MUA_Coeff;
typedef enum tagDVD_VIDEO_COMPRESSION {
    DVD_VideoCompression_Other = 0,
    DVD_VideoCompression_MPEG1 = 1,
    DVD_VideoCompression_MPEG2 = 2
} DVD_VIDEO_COMPRESSION;
typedef enum tagDVD_SUBPICTURE_TYPE {
    DVD_SPType_NotSpecified = 0,
    DVD_SPType_Language = 1,
    DVD_SPType_Other = 2
} DVD_SUBPICTURE_TYPE;
typedef enum tagDVD_SUBPICTURE_CODING {
    DVD_SPCoding_RunLength = 0,
    DVD_SPCoding_Extended = 1,
    DVD_SPCoding_Other = 2
} DVD_SUBPICTURE_CODING;
typedef enum tagDVD_TITLE_APPMODE {
    DVD_AppMode_Not_Specified = 0,
    DVD_AppMode_Karaoke = 1,
    DVD_AppMode_Other = 3
} DVD_TITLE_APPMODE;
enum DVD_TextStringType {
    DVD_Struct_Volume = 0x1,
    DVD_Struct_Title = 0x2,
    DVD_Struct_ParentalID = 0x3,
    DVD_Struct_PartOfTitle = 0x4,
    DVD_Struct_Cell = 0x5,
    DVD_Stream_Audio = 0x10,
    DVD_Stream_Subpicture = 0x11,
    DVD_Stream_Angle = 0x12,
    DVD_Channel_Audio = 0x20,
    DVD_General_Name = 0x30,
    DVD_General_Comments = 0x31,
    DVD_Title_Series = 0x38,
    DVD_Title_Movie = 0x39,
    DVD_Title_Video = 0x3a,
    DVD_Title_Album = 0x3b,
    DVD_Title_Song = 0x3c,
    DVD_Title_Other = 0x3f,
    DVD_Title_Sub_Series = 0x40,
    DVD_Title_Sub_Movie = 0x41,
    DVD_Title_Sub_Video = 0x42,
    DVD_Title_Sub_Album = 0x43,
    DVD_Title_Sub_Song = 0x44,
    DVD_Title_Sub_Other = 0x47,
    DVD_Title_Orig_Series = 0x48,
    DVD_Title_Orig_Movie = 0x49,
    DVD_Title_Orig_Video = 0x4a,
    DVD_Title_Orig_Album = 0x4b,
    DVD_Title_Orig_Song = 0x4c,
    DVD_Title_Orig_Other = 0x4f,
    DVD_Other_Scene = 0x50,
    DVD_Other_Cut = 0x51,
    DVD_Other_Take = 0x52
};
enum DVD_TextCharSet {
    DVD_CharSet_Unicode = 0,
    DVD_CharSet_ISO646 = 1,
    DVD_CharSet_JIS_Roman_Kanji = 2,
    DVD_CharSet_ISO8859_1 = 3,
    DVD_CharSet_ShiftJIS_Kanji_Roman_Katakana = 4
};
typedef struct tagDVD_AudioAttributes {
    DVD_AUDIO_APPMODE AppMode;
    BYTE AppModeData;
    DVD_AUDIO_FORMAT AudioFormat;
    LCID Language;
    DVD_AUDIO_LANG_EXT LanguageExtension;
    BOOL fHasMultichannelInfo;
    DWORD dwFrequency;
    BYTE bQuantization;
    BYTE bNumberOfChannels;
    DWORD dwReserved[2];
} DVD_AudioAttributes;
typedef struct tagDVD_MultichannelAudioAttributes {
    DVD_MUA_MixingInfo Info[8];
    DVD_MUA_Coeff Coeff[8];
} DVD_MultichannelAudioAttributes;
typedef struct tagDVD_VideoAttributes {
    BOOL fPanscanPermitted;
    BOOL fLetterboxPermitted;
    ULONG ulAspectX;
    ULONG ulAspectY;
    ULONG ulFrameRate;
    ULONG ulFrameHeight;
    DVD_VIDEO_COMPRESSION Compression;
    BOOL fLine21Field1InGOP;
    BOOL fLine21Field2InGOP;
    ULONG ulSourceResolutionX;
    ULONG ulSourceResolutionY;
    BOOL fIsSourceLetterboxed;
    BOOL fIsFilmMode;
} DVD_VideoAttributes;
typedef struct tagDVD_SubpictureAttributes {
    DVD_SUBPICTURE_TYPE Type;
    DVD_SUBPICTURE_CODING CodingMode;
    LCID Language;
    DVD_SUBPICTURE_LANG_EXT LanguageExtension;
} DVD_SubpictureAttributes;
typedef struct tagDVD_KaraokeAttributes {
    BYTE bVersion;
    BOOL fMasterOfCeremoniesInGuideVocal1;
    BOOL fDuet;
    DVD_KARAOKE_ASSIGNMENT ChannelAssignment;
    WORD wChannelContents[8];
} DVD_KaraokeAttributes;
typedef struct tagDVD_TitleMainAttributes {
    union {
        DVD_TITLE_APPMODE AppMode;
        DVD_HMSF_TIMECODE TitleLength;
    } DUMMYUNIONNAME;
    DVD_VideoAttributes VideoAttributes;
    ULONG ulNumberOfAudioStreams;
    DVD_AudioAttributes AudioAttributes[8];
    DVD_MultichannelAudioAttributes MultichannelAudioAttributes[8];
    ULONG ulNumberOfSubpictureStreams;
    DVD_SubpictureAttributes SubpictureAttributes[32];
} DVD_TitleAttributes;
typedef struct tagDVD_MenuAttributes {
    BOOL fCompatibleRegion[8];
    DVD_VideoAttributes VideoAttributes;
    BOOL fAudioPresent;
    DVD_AudioAttributes AudioAttributes;
    BOOL fSubpicturePresent;
    DVD_SubpictureAttributes SubpictureAttributes;
} DVD_MenuAttributes;
#define DVD_TITLE_MENU           0x000
#define DVD_STREAM_DATA_VMGM     0x400
#define DVD_STREAM_DATA_VTSM     0x401
#define DVD_STREAM_DATA_CURRENT  0x800
#define DVD_DEFAULT_AUDIO_STREAM 0x00f
#define DVD_AUDIO_CAPS_AC3   0x00000001
#define DVD_AUDIO_CAPS_MPEG2 0x00000002
#define DVD_AUDIO_CAPS_LPCM  0x00000004
#define DVD_AUDIO_CAPS_DTS   0x00000008
#define DVD_AUDIO_CAPS_SDDS  0x00000010
typedef struct tagDVD_DECODER_CAPS {
    DWORD dwSize;
    DWORD dwAudioCaps;
    double dFwdMaxRateVideo;
    double dFwdMaxRateAudio;
    double dFwdMaxRateSP;
    double dBwdMaxRateVideo;
    double dBwdMaxRateAudio;
    double dBwdMaxRateSP;
    DWORD dwRes1;
    DWORD dwRes2;
    DWORD dwRes3;
    DWORD dwRes4;
} DVD_DECODER_CAPS;
typedef enum _AM_DVD_GRAPH_FLAGS {
    AM_DVD_HWDEC_PREFER = 0x1,
    AM_DVD_HWDEC_ONLY = 0x2,
    AM_DVD_SWDEC_PREFER = 0x4,
    AM_DVD_SWDEC_ONLY = 0x8,
    AM_DVD_NOVPE = 0x100,
    AM_DVD_DO_NOT_CLEAR = 0x200,
    AM_DVD_VMR9_ONLY = 0x800,
    AM_DVD_EVR_ONLY = 0x1000,
    AM_DVD_EVR_QOS = 0x2000,
    AM_DVD_ADAPT_GRAPH = 0x4000,
    AM_DVD_MASK = 0xffff
} AM_DVD_GRAPH_FLAGS;
typedef enum _AM_DVD_STREAM_FLAGS {
    AM_DVD_STREAM_VIDEO = 0x1,
    AM_DVD_STREAM_AUDIO = 0x2,
    AM_DVD_STREAM_SUBPIC = 0x4
} AM_DVD_STREAM_FLAGS;
typedef struct tagAM_DVD_RENDERSTATUS {
    HRESULT hrVPEStatus;
    BOOL bDvdVolInvalid;
    BOOL bDvdVolUnknown;
    BOOL bNoLine21In;
    BOOL bNoLine21Out;
    int iNumStreams;
    int iNumStreamsFailed;
    DWORD dwFailedStreamsFlag;
} AM_DVD_RENDERSTATUS;
/*****************************************************************************
 * IDvdControl interface
 */
#ifndef __IDvdControl_INTERFACE_DEFINED__
#define __IDvdControl_INTERFACE_DEFINED__

DEFINE_GUID(IID_IDvdControl, 0xa70efe61, 0xe2a3, 0x11d0, 0xa9,0xbe, 0x00,0xaa,0x00,0x61,0xbe,0x93);
#if defined(__cplusplus) && !defined(CINTERFACE)
MIDL_INTERFACE("a70efe61-e2a3-11d0-a9be-00aa0061be93")
IDvdControl : public IUnknown
{
    virtual HRESULT STDMETHODCALLTYPE TitlePlay(
        ULONG title) = 0;

    virtual HRESULT STDMETHODCALLTYPE ChapterPlay(
        ULONG title,
        ULONG chapter) = 0;

    virtual HRESULT STDMETHODCALLTYPE TimePlay(
        ULONG title,
        ULONG time) = 0;

    virtual HRESULT STDMETHODCALLTYPE StopForResume(
        ) = 0;

    virtual HRESULT STDMETHODCALLTYPE GoUp(
        ) = 0;

    virtual HRESULT STDMETHODCALLTYPE TimeSearch(
        ULONG time) = 0;

    virtual HRESULT STDMETHODCALLTYPE ChapterSearch(
        ULONG chapter) = 0;

    virtual HRESULT STDMETHODCALLTYPE PrevPGSearch(
        ) = 0;

    virtual HRESULT STDMETHODCALLTYPE TopPGSearch(
        ) = 0;

    virtual HRESULT STDMETHODCALLTYPE NextPGSearch(
        ) = 0;

    virtual HRESULT STDMETHODCALLTYPE ForwardScan(
        double speed) = 0;

    virtual HRESULT STDMETHODCALLTYPE BackwardScan(
        double speed) = 0;

    virtual HRESULT STDMETHODCALLTYPE MenuCall(
        DVD_MENU_ID id) = 0;

    virtual HRESULT STDMETHODCALLTYPE Resume(
        ) = 0;

    virtual HRESULT STDMETHODCALLTYPE UpperButtonSelect(
        ) = 0;

    virtual HRESULT STDMETHODCALLTYPE LowerButtonSelect(
        ) = 0;

    virtual HRESULT STDMETHODCALLTYPE LeftButtonSelect(
        ) = 0;

    virtual HRESULT STDMETHODCALLTYPE RightButtonSelect(
        ) = 0;

    virtual HRESULT STDMETHODCALLTYPE ButtonActivate(
        ) = 0;

    virtual HRESULT STDMETHODCALLTYPE ButtonSelectActivate(
        ULONG button) = 0;

    virtual HRESULT STDMETHODCALLTYPE StillOff(
        ) = 0;

    virtual HRESULT STDMETHODCALLTYPE PauseOn(
        ) = 0;

    virtual HRESULT STDMETHODCALLTYPE PauseOff(
        ) = 0;

    virtual HRESULT STDMETHODCALLTYPE MenuLanguageSelect(
        LCID language) = 0;

    virtual HRESULT STDMETHODCALLTYPE AudioStreamChange(
        ULONG audio) = 0;

    virtual HRESULT STDMETHODCALLTYPE SubpictureStreamChange(
        ULONG subpicture,
        BOOL enable) = 0;

    virtual HRESULT STDMETHODCALLTYPE AngleChange(
        ULONG angle) = 0;

    virtual HRESULT STDMETHODCALLTYPE ParentalLevelSelect(
        ULONG level) = 0;

    virtual HRESULT STDMETHODCALLTYPE ParentalCountrySelect(
        WORD country) = 0;

    virtual HRESULT STDMETHODCALLTYPE KaraokeAudioPresentationModeChange(
        ULONG mode) = 0;

    virtual HRESULT STDMETHODCALLTYPE VideoModePreference(
        ULONG mode) = 0;

    virtual HRESULT STDMETHODCALLTYPE SetRoot(
        const WCHAR *path) = 0;

    virtual HRESULT STDMETHODCALLTYPE MouseActivate(
        POINT point) = 0;

    virtual HRESULT STDMETHODCALLTYPE MouseSelect(
        POINT point) = 0;

    virtual HRESULT STDMETHODCALLTYPE ChapterPlayAutoStop(
        ULONG title,
        ULONG chapter,
        ULONG count) = 0;

};
#ifdef __CRT_UUID_DECL
__CRT_UUID_DECL(IDvdControl, 0xa70efe61, 0xe2a3, 0x11d0, 0xa9,0xbe, 0x00,0xaa,0x00,0x61,0xbe,0x93)
#endif
#else
typedef struct IDvdControlVtbl {
    BEGIN_INTERFACE

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

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

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

    /*** IDvdControl methods ***/
    HRESULT (STDMETHODCALLTYPE *TitlePlay)(
        IDvdControl *This,
        ULONG title);

    HRESULT (STDMETHODCALLTYPE *ChapterPlay)(
        IDvdControl *This,
        ULONG title,
        ULONG chapter);

    HRESULT (STDMETHODCALLTYPE *TimePlay)(
        IDvdControl *This,
        ULONG title,
        ULONG time);

    HRESULT (STDMETHODCALLTYPE *StopForResume)(
        IDvdControl *This);

    HRESULT (STDMETHODCALLTYPE *GoUp)(
        IDvdControl *This);

    HRESULT (STDMETHODCALLTYPE *TimeSearch)(
        IDvdControl *This,
        ULONG time);

    HRESULT (STDMETHODCALLTYPE *ChapterSearch)(
        IDvdControl *This,
        ULONG chapter);

    HRESULT (STDMETHODCALLTYPE *PrevPGSearch)(
        IDvdControl *This);

    HRESULT (STDMETHODCALLTYPE *TopPGSearch)(
        IDvdControl *This);

    HRESULT (STDMETHODCALLTYPE *NextPGSearch)(
        IDvdControl *This);

    HRESULT (STDMETHODCALLTYPE *ForwardScan)(
        IDvdControl *This,
        double speed);

    HRESULT (STDMETHODCALLTYPE *BackwardScan)(
        IDvdControl *This,
        double speed);

    HRESULT (STDMETHODCALLTYPE *MenuCall)(
        IDvdControl *This,
        DVD_MENU_ID id);

    HRESULT (STDMETHODCALLTYPE *Resume)(
        IDvdControl *This);

    HRESULT (STDMETHODCALLTYPE *UpperButtonSelect)(
        IDvdControl *This);

    HRESULT (STDMETHODCALLTYPE *LowerButtonSelect)(
        IDvdControl *This);

    HRESULT (STDMETHODCALLTYPE *LeftButtonSelect)(
        IDvdControl *This);

    HRESULT (STDMETHODCALLTYPE *RightButtonSelect)(
        IDvdControl *This);

    HRESULT (STDMETHODCALLTYPE *ButtonActivate)(
        IDvdControl *This);

    HRESULT (STDMETHODCALLTYPE *ButtonSelectActivate)(
        IDvdControl *This,
        ULONG button);

    HRESULT (STDMETHODCALLTYPE *StillOff)(
        IDvdControl *This);

    HRESULT (STDMETHODCALLTYPE *PauseOn)(
        IDvdControl *This);

    HRESULT (STDMETHODCALLTYPE *PauseOff)(
        IDvdControl *This);

    HRESULT (STDMETHODCALLTYPE *MenuLanguageSelect)(
        IDvdControl *This,
        LCID language);

    HRESULT (STDMETHODCALLTYPE *AudioStreamChange)(
        IDvdControl *This,
        ULONG audio);

    HRESULT (STDMETHODCALLTYPE *SubpictureStreamChange)(
        IDvdControl *This,
        ULONG subpicture,
        BOOL enable);

    HRESULT (STDMETHODCALLTYPE *AngleChange)(
        IDvdControl *This,
        ULONG angle);

    HRESULT (STDMETHODCALLTYPE *ParentalLevelSelect)(
        IDvdControl *This,
        ULONG level);

    HRESULT (STDMETHODCALLTYPE *ParentalCountrySelect)(
        IDvdControl *This,
        WORD country);

    HRESULT (STDMETHODCALLTYPE *KaraokeAudioPresentationModeChange)(
        IDvdControl *This,
        ULONG mode);

    HRESULT (STDMETHODCALLTYPE *VideoModePreference)(
        IDvdControl *This,
        ULONG mode);

    HRESULT (STDMETHODCALLTYPE *SetRoot)(
        IDvdControl *This,
        const WCHAR *path);

    HRESULT (STDMETHODCALLTYPE *MouseActivate)(
        IDvdControl *This,
        POINT point);

    HRESULT (STDMETHODCALLTYPE *MouseSelect)(
        IDvdControl *This,
        POINT point);

    HRESULT (STDMETHODCALLTYPE *ChapterPlayAutoStop)(
        IDvdControl *This,
        ULONG title,
        ULONG chapter,
        ULONG count);

    END_INTERFACE
} IDvdControlVtbl;

interface IDvdControl {
    CONST_VTBL IDvdControlVtbl* lpVtbl;
};

#ifdef COBJMACROS
#ifndef WIDL_C_INLINE_WRAPPERS
/*** IUnknown methods ***/
#define IDvdControl_QueryInterface(This,riid,ppvObject) (This)->lpVtbl->QueryInterface(This,riid,ppvObject)
#define IDvdControl_AddRef(This) (This)->lpVtbl->AddRef(This)
#define IDvdControl_Release(This) (This)->lpVtbl->Release(This)
/*** IDvdControl methods ***/
#define IDvdControl_TitlePlay(This,title) (This)->lpVtbl->TitlePlay(This,title)
#define IDvdControl_ChapterPlay(This,title,chapter) (This)->lpVtbl->ChapterPlay(This,title,chapter)
#define IDvdControl_TimePlay(This,title,time) (This)->lpVtbl->TimePlay(This,title,time)
#define IDvdControl_StopForResume(This) (This)->lpVtbl->StopForResume(This)
#define IDvdControl_GoUp(This) (This)->lpVtbl->GoUp(This)
#define IDvdControl_TimeSearch(This,time) (This)->lpVtbl->TimeSearch(This,time)
#define IDvdControl_ChapterSearch(This,chapter) (This)->lpVtbl->ChapterSearch(This,chapter)
#define IDvdControl_PrevPGSearch(This) (This)->lpVtbl->PrevPGSearch(This)
#define IDvdControl_TopPGSearch(This) (This)->lpVtbl->TopPGSearch(This)
#define IDvdControl_NextPGSearch(This) (This)->lpVtbl->NextPGSearch(This)
#define IDvdControl_ForwardScan(This,speed) (This)->lpVtbl->ForwardScan(This,speed)
#define IDvdControl_BackwardScan(This,speed) (This)->lpVtbl->BackwardScan(This,speed)
#define IDvdControl_MenuCall(This,id) (This)->lpVtbl->MenuCall(This,id)
#define IDvdControl_Resume(This) (This)->lpVtbl->Resume(This)
#define IDvdControl_UpperButtonSelect(This) (This)->lpVtbl->UpperButtonSelect(This)
#define IDvdControl_LowerButtonSelect(This) (This)->lpVtbl->LowerButtonSelect(This)
#define IDvdControl_LeftButtonSelect(This) (This)->lpVtbl->LeftButtonSelect(This)
#define IDvdControl_RightButtonSelect(This) (This)->lpVtbl->RightButtonSelect(This)
#define IDvdControl_ButtonActivate(This) (This)->lpVtbl->ButtonActivate(This)
#define IDvdControl_ButtonSelectActivate(This,button) (This)->lpVtbl->ButtonSelectActivate(This,button)
#define IDvdControl_StillOff(This) (This)->lpVtbl->StillOff(This)
#define IDvdControl_PauseOn(This) (This)->lpVtbl->PauseOn(This)
#define IDvdControl_PauseOff(This) (This)->lpVtbl->PauseOff(This)
#define IDvdControl_MenuLanguageSelect(This,language) (This)->lpVtbl->MenuLanguageSelect(This,language)
#define IDvdControl_AudioStreamChange(This,audio) (This)->lpVtbl->AudioStreamChange(This,audio)
#define IDvdControl_SubpictureStreamChange(This,subpicture,enable) (This)->lpVtbl->SubpictureStreamChange(This,subpicture,enable)
#define IDvdControl_AngleChange(This,angle) (This)->lpVtbl->AngleChange(This,angle)
#define IDvdControl_ParentalLevelSelect(This,level) (This)->lpVtbl->ParentalLevelSelect(This,level)
#define IDvdControl_ParentalCountrySelect(This,country) (This)->lpVtbl->ParentalCountrySelect(This,country)
#define IDvdControl_KaraokeAudioPresentationModeChange(This,mode) (This)->lpVtbl->KaraokeAudioPresentationModeChange(This,mode)
#define IDvdControl_VideoModePreference(This,mode) (This)->lpVtbl->VideoModePreference(This,mode)
#define IDvdControl_SetRoot(This,path) (This)->lpVtbl->SetRoot(This,path)
#define IDvdControl_MouseActivate(This,point) (This)->lpVtbl->MouseActivate(This,point)
#define IDvdControl_MouseSelect(This,point) (This)->lpVtbl->MouseSelect(This,point)
#define IDvdControl_ChapterPlayAutoStop(This,title,chapter,count) (This)->lpVtbl->ChapterPlayAutoStop(This,title,chapter,count)
#else
/*** IUnknown methods ***/
static FORCEINLINE HRESULT IDvdControl_QueryInterface(IDvdControl* This,REFIID riid,void **ppvObject) {
    return This->lpVtbl->QueryInterface(This,riid,ppvObject);
}
static FORCEINLINE ULONG IDvdControl_AddRef(IDvdControl* This) {
    return This->lpVtbl->AddRef(This);
}
static FORCEINLINE ULONG IDvdControl_Release(IDvdControl* This) {
    return This->lpVtbl->Release(This);
}
/*** IDvdControl methods ***/
static FORCEINLINE HRESULT IDvdControl_TitlePlay(IDvdControl* This,ULONG title) {
    return This->lpVtbl->TitlePlay(This,title);
}
static FORCEINLINE HRESULT IDvdControl_ChapterPlay(IDvdControl* This,ULONG title,ULONG chapter) {
    return This->lpVtbl->ChapterPlay(This,title,chapter);
}
static FORCEINLINE HRESULT IDvdControl_TimePlay(IDvdControl* This,ULONG title,ULONG time) {
    return This->lpVtbl->TimePlay(This,title,time);
}
static FORCEINLINE HRESULT IDvdControl_StopForResume(IDvdControl* This) {
    return This->lpVtbl->StopForResume(This);
}
static FORCEINLINE HRESULT IDvdControl_GoUp(IDvdControl* This) {
    return This->lpVtbl->GoUp(This);
}
static FORCEINLINE HRESULT IDvdControl_TimeSearch(IDvdControl* This,ULONG time) {
    return This->lpVtbl->TimeSearch(This,time);
}
static FORCEINLINE HRESULT IDvdControl_ChapterSearch(IDvdControl* This,ULONG chapter) {
    return This->lpVtbl->ChapterSearch(This,chapter);
}
static FORCEINLINE HRESULT IDvdControl_PrevPGSearch(IDvdControl* This) {
    return This->lpVtbl->PrevPGSearch(This);
}
static FORCEINLINE HRESULT IDvdControl_TopPGSearch(IDvdControl* This) {
    return This->lpVtbl->TopPGSearch(This);
}
static FORCEINLINE HRESULT IDvdControl_NextPGSearch(IDvdControl* This) {
    return This->lpVtbl->NextPGSearch(This);
}
static FORCEINLINE HRESULT IDvdControl_ForwardScan(IDvdControl* This,double speed) {
    return This->lpVtbl->ForwardScan(This,speed);
}
static FORCEINLINE HRESULT IDvdControl_BackwardScan(IDvdControl* This,double speed) {
    return This->lpVtbl->BackwardScan(This,speed);
}
static FORCEINLINE HRESULT IDvdControl_MenuCall(IDvdControl* This,DVD_MENU_ID id) {
    return This->lpVtbl->MenuCall(This,id);
}
static FORCEINLINE HRESULT IDvdControl_Resume(IDvdControl* This) {
    return This->lpVtbl->Resume(This);
}
static FORCEINLINE HRESULT IDvdControl_UpperButtonSelect(IDvdControl* This) {
    return This->lpVtbl->UpperButtonSelect(This);
}
static FORCEINLINE HRESULT IDvdControl_LowerButtonSelect(IDvdControl* This) {
    return This->lpVtbl->LowerButtonSelect(This);
}
static FORCEINLINE HRESULT IDvdControl_LeftButtonSelect(IDvdControl* This) {
    return This->lpVtbl->LeftButtonSelect(This);
}
static FORCEINLINE HRESULT IDvdControl_RightButtonSelect(IDvdControl* This) {
    return This->lpVtbl->RightButtonSelect(This);
}
static FORCEINLINE HRESULT IDvdControl_ButtonActivate(IDvdControl* This) {
    return This->lpVtbl->ButtonActivate(This);
}
static FORCEINLINE HRESULT IDvdControl_ButtonSelectActivate(IDvdControl* This,ULONG button) {
    return This->lpVtbl->ButtonSelectActivate(This,button);
}
static FORCEINLINE HRESULT IDvdControl_StillOff(IDvdControl* This) {
    return This->lpVtbl->StillOff(This);
}
static FORCEINLINE HRESULT IDvdControl_PauseOn(IDvdControl* This) {
    return This->lpVtbl->PauseOn(This);
}
static FORCEINLINE HRESULT IDvdControl_PauseOff(IDvdControl* This) {
    return This->lpVtbl->PauseOff(This);
}
static FORCEINLINE HRESULT IDvdControl_MenuLanguageSelect(IDvdControl* This,LCID language) {
    return This->lpVtbl->MenuLanguageSelect(This,language);
}
static FORCEINLINE HRESULT IDvdControl_AudioStreamChange(IDvdControl* This,ULONG audio) {
    return This->lpVtbl->AudioStreamChange(This,audio);
}
static FORCEINLINE HRESULT IDvdControl_SubpictureStreamChange(IDvdControl* This,ULONG subpicture,BOOL enable) {
    return This->lpVtbl->SubpictureStreamChange(This,subpicture,enable);
}
static FORCEINLINE HRESULT IDvdControl_AngleChange(IDvdControl* This,ULONG angle) {
    return This->lpVtbl->AngleChange(This,angle);
}
static FORCEINLINE HRESULT IDvdControl_ParentalLevelSelect(IDvdControl* This,ULONG level) {
    return This->lpVtbl->ParentalLevelSelect(This,level);
}
static FORCEINLINE HRESULT IDvdControl_ParentalCountrySelect(IDvdControl* This,WORD country) {
    return This->lpVtbl->ParentalCountrySelect(This,country);
}
static FORCEINLINE HRESULT IDvdControl_KaraokeAudioPresentationModeChange(IDvdControl* This,ULONG mode) {
    return This->lpVtbl->KaraokeAudioPresentationModeChange(This,mode);
}
static FORCEINLINE HRESULT IDvdControl_VideoModePreference(IDvdControl* This,ULONG mode) {
    return This->lpVtbl->VideoModePreference(This,mode);
}
static FORCEINLINE HRESULT IDvdControl_SetRoot(IDvdControl* This,const WCHAR *path) {
    return This->lpVtbl->SetRoot(This,path);
}
static FORCEINLINE HRESULT IDvdControl_MouseActivate(IDvdControl* This,POINT point) {
    return This->lpVtbl->MouseActivate(This,point);
}
static FORCEINLINE HRESULT IDvdControl_MouseSelect(IDvdControl* This,POINT point) {
    return This->lpVtbl->MouseSelect(This,point);
}
static FORCEINLINE HRESULT IDvdControl_ChapterPlayAutoStop(IDvdControl* This,ULONG title,ULONG chapter,ULONG count) {
    return This->lpVtbl->ChapterPlayAutoStop(This,title,chapter,count);
}
#endif
#endif

#endif


#endif  /* __IDvdControl_INTERFACE_DEFINED__ */

/*****************************************************************************
 * IDvdInfo interface
 */
#ifndef __IDvdInfo_INTERFACE_DEFINED__
#define __IDvdInfo_INTERFACE_DEFINED__

DEFINE_GUID(IID_IDvdInfo, 0xa70efe60, 0xe2a3, 0x11d0, 0xa9,0xbe, 0x00,0xaa,0x00,0x61,0xbe,0x93);
#if defined(__cplusplus) && !defined(CINTERFACE)
MIDL_INTERFACE("a70efe60-e2a3-11d0-a9be-00aa0061be93")
IDvdInfo : public IUnknown
{
    virtual HRESULT STDMETHODCALLTYPE GetCurrentDomain(
        DVD_DOMAIN *domain) = 0;

    virtual HRESULT STDMETHODCALLTYPE GetCurrentLocation(
        DVD_PLAYBACK_LOCATION *location) = 0;

    virtual HRESULT STDMETHODCALLTYPE GetTotalTitleTime(
        ULONG *time) = 0;

    virtual HRESULT STDMETHODCALLTYPE GetCurrentButton(
        ULONG *count,
        ULONG *current) = 0;

    virtual HRESULT STDMETHODCALLTYPE GetCurrentAngle(
        ULONG *count,
        ULONG *current) = 0;

    virtual HRESULT STDMETHODCALLTYPE GetCurrentAudio(
        ULONG *count,
        ULONG *current) = 0;

    virtual HRESULT STDMETHODCALLTYPE GetCurrentSubpicture(
        ULONG *count,
        ULONG *current,
        BOOL *enable) = 0;

    virtual HRESULT STDMETHODCALLTYPE GetCurrentUOPS(
        VALID_UOP_SOMTHING_OR_OTHER *uops) = 0;

    virtual HRESULT STDMETHODCALLTYPE GetAllSPRMs(
        SPRMARRAY *regs) = 0;

    virtual HRESULT STDMETHODCALLTYPE GetAllGPRMs(
        GPRMARRAY *regs) = 0;

    virtual HRESULT STDMETHODCALLTYPE GetAudioLanguage(
        ULONG stream,
        LCID *language) = 0;

    virtual HRESULT STDMETHODCALLTYPE GetSubpictureLanguage(
        ULONG stream,
        LCID *language) = 0;

    virtual HRESULT STDMETHODCALLTYPE GetTitleAttributes(
        ULONG title,
        DVD_ATR *attr) = 0;

    virtual HRESULT STDMETHODCALLTYPE GetVMGAttributes(
        DVD_ATR *attr) = 0;

    virtual HRESULT STDMETHODCALLTYPE GetCurrentVideoAttributes(
        DVD_VideoATR *attr) = 0;

    virtual HRESULT STDMETHODCALLTYPE GetCurrentAudioAttributes(
        DVD_AudioATR *attr) = 0;

    virtual HRESULT STDMETHODCALLTYPE GetCurrentSubpictureAttributes(
        DVD_SubpictureATR *attr) = 0;

    virtual HRESULT STDMETHODCALLTYPE GetCurrentVolumeInfo(
        ULONG *volume_count,
        ULONG *current,
        DVD_DISC_SIDE *side,
        ULONG *title_count) = 0;

    virtual HRESULT STDMETHODCALLTYPE GetDVDTextInfo(
        BYTE *text_manager,
        ULONG size,
        ULONG *ret_size) = 0;

    virtual HRESULT STDMETHODCALLTYPE GetPlayerParentalLevel(
        ULONG *level,
        ULONG *country_code) = 0;

    virtual HRESULT STDMETHODCALLTYPE GetNumberOfChapters(
        ULONG title,
        ULONG *count) = 0;

    virtual HRESULT STDMETHODCALLTYPE GetTitleParentalLevels(
        ULONG title,
        ULONG *levels) = 0;

    virtual HRESULT STDMETHODCALLTYPE GetRoot(
        char *path,
        ULONG size,
        ULONG *ret_size) = 0;

};
#ifdef __CRT_UUID_DECL
__CRT_UUID_DECL(IDvdInfo, 0xa70efe60, 0xe2a3, 0x11d0, 0xa9,0xbe, 0x00,0xaa,0x00,0x61,0xbe,0x93)
#endif
#else
typedef struct IDvdInfoVtbl {
    BEGIN_INTERFACE

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

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

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

    /*** IDvdInfo methods ***/
    HRESULT (STDMETHODCALLTYPE *GetCurrentDomain)(
        IDvdInfo *This,
        DVD_DOMAIN *domain);

    HRESULT (STDMETHODCALLTYPE *GetCurrentLocation)(
        IDvdInfo *This,
        DVD_PLAYBACK_LOCATION *location);

    HRESULT (STDMETHODCALLTYPE *GetTotalTitleTime)(
        IDvdInfo *This,
        ULONG *time);

    HRESULT (STDMETHODCALLTYPE *GetCurrentButton)(
        IDvdInfo *This,
        ULONG *count,
        ULONG *current);

    HRESULT (STDMETHODCALLTYPE *GetCurrentAngle)(
        IDvdInfo *This,
        ULONG *count,
        ULONG *current);

    HRESULT (STDMETHODCALLTYPE *GetCurrentAudio)(
        IDvdInfo *This,
        ULONG *count,
        ULONG *current);

    HRESULT (STDMETHODCALLTYPE *GetCurrentSubpicture)(
        IDvdInfo *This,
        ULONG *count,
        ULONG *current,
        BOOL *enable);

    HRESULT (STDMETHODCALLTYPE *GetCurrentUOPS)(
        IDvdInfo *This,
        VALID_UOP_SOMTHING_OR_OTHER *uops);

    HRESULT (STDMETHODCALLTYPE *GetAllSPRMs)(
        IDvdInfo *This,
        SPRMARRAY *regs);

    HRESULT (STDMETHODCALLTYPE *GetAllGPRMs)(
        IDvdInfo *This,
        GPRMARRAY *regs);

    HRESULT (STDMETHODCALLTYPE *GetAudioLanguage)(
        IDvdInfo *This,
        ULONG stream,
        LCID *language);

    HRESULT (STDMETHODCALLTYPE *GetSubpictureLanguage)(
        IDvdInfo *This,
        ULONG stream,
        LCID *language);

    HRESULT (STDMETHODCALLTYPE *GetTitleAttributes)(
        IDvdInfo *This,
        ULONG title,
        DVD_ATR *attr);

    HRESULT (STDMETHODCALLTYPE *GetVMGAttributes)(
        IDvdInfo *This,
        DVD_ATR *attr);

    HRESULT (STDMETHODCALLTYPE *GetCurrentVideoAttributes)(
        IDvdInfo *This,
        DVD_VideoATR *attr);

    HRESULT (STDMETHODCALLTYPE *GetCurrentAudioAttributes)(
        IDvdInfo *This,
        DVD_AudioATR *attr);

    HRESULT (STDMETHODCALLTYPE *GetCurrentSubpictureAttributes)(
        IDvdInfo *This,
        DVD_SubpictureATR *attr);

    HRESULT (STDMETHODCALLTYPE *GetCurrentVolumeInfo)(
        IDvdInfo *This,
        ULONG *volume_count,
        ULONG *current,
        DVD_DISC_SIDE *side,
        ULONG *title_count);

    HRESULT (STDMETHODCALLTYPE *GetDVDTextInfo)(
        IDvdInfo *This,
        BYTE *text_manager,
        ULONG size,
        ULONG *ret_size);

    HRESULT (STDMETHODCALLTYPE *GetPlayerParentalLevel)(
        IDvdInfo *This,
        ULONG *level,
        ULONG *country_code);

    HRESULT (STDMETHODCALLTYPE *GetNumberOfChapters)(
        IDvdInfo *This,
        ULONG title,
        ULONG *count);

    HRESULT (STDMETHODCALLTYPE *GetTitleParentalLevels)(
        IDvdInfo *This,
        ULONG title,
        ULONG *levels);

    HRESULT (STDMETHODCALLTYPE *GetRoot)(
        IDvdInfo *This,
        char *path,
        ULONG size,
        ULONG *ret_size);

    END_INTERFACE
} IDvdInfoVtbl;

interface IDvdInfo {
    CONST_VTBL IDvdInfoVtbl* lpVtbl;
};

#ifdef COBJMACROS
#ifndef WIDL_C_INLINE_WRAPPERS
/*** IUnknown methods ***/
#define IDvdInfo_QueryInterface(This,riid,ppvObject) (This)->lpVtbl->QueryInterface(This,riid,ppvObject)
#define IDvdInfo_AddRef(This) (This)->lpVtbl->AddRef(This)
#define IDvdInfo_Release(This) (This)->lpVtbl->Release(This)
/*** IDvdInfo methods ***/
#define IDvdInfo_GetCurrentDomain(This,domain) (This)->lpVtbl->GetCurrentDomain(This,domain)
#define IDvdInfo_GetCurrentLocation(This,location) (This)->lpVtbl->GetCurrentLocation(This,location)
#define IDvdInfo_GetTotalTitleTime(This,time) (This)->lpVtbl->GetTotalTitleTime(This,time)
#define IDvdInfo_GetCurrentButton(This,count,current) (This)->lpVtbl->GetCurrentButton(This,count,current)
#define IDvdInfo_GetCurrentAngle(This,count,current) (This)->lpVtbl->GetCurrentAngle(This,count,current)
#define IDvdInfo_GetCurrentAudio(This,count,current) (This)->lpVtbl->GetCurrentAudio(This,count,current)
#define IDvdInfo_GetCurrentSubpicture(This,count,current,enable) (This)->lpVtbl->GetCurrentSubpicture(This,count,current,enable)
#define IDvdInfo_GetCurrentUOPS(This,uops) (This)->lpVtbl->GetCurrentUOPS(This,uops)
#define IDvdInfo_GetAllSPRMs(This,regs) (This)->lpVtbl->GetAllSPRMs(This,regs)
#define IDvdInfo_GetAllGPRMs(This,regs) (This)->lpVtbl->GetAllGPRMs(This,regs)
#define IDvdInfo_GetAudioLanguage(This,stream,language) (This)->lpVtbl->GetAudioLanguage(This,stream,language)
#define IDvdInfo_GetSubpictureLanguage(This,stream,language) (This)->lpVtbl->GetSubpictureLanguage(This,stream,language)
#define IDvdInfo_GetTitleAttributes(This,title,attr) (This)->lpVtbl->GetTitleAttributes(This,title,attr)
#define IDvdInfo_GetVMGAttributes(This,attr) (This)->lpVtbl->GetVMGAttributes(This,attr)
#define IDvdInfo_GetCurrentVideoAttributes(This,attr) (This)->lpVtbl->GetCurrentVideoAttributes(This,attr)
#define IDvdInfo_GetCurrentAudioAttributes(This,attr) (This)->lpVtbl->GetCurrentAudioAttributes(This,attr)
#define IDvdInfo_GetCurrentSubpictureAttributes(This,attr) (This)->lpVtbl->GetCurrentSubpictureAttributes(This,attr)
#define IDvdInfo_GetCurrentVolumeInfo(This,volume_count,current,side,title_count) (This)->lpVtbl->GetCurrentVolumeInfo(This,volume_count,current,side,title_count)
#define IDvdInfo_GetDVDTextInfo(This,text_manager,size,ret_size) (This)->lpVtbl->GetDVDTextInfo(This,text_manager,size,ret_size)
#define IDvdInfo_GetPlayerParentalLevel(This,level,country_code) (This)->lpVtbl->GetPlayerParentalLevel(This,level,country_code)
#define IDvdInfo_GetNumberOfChapters(This,title,count) (This)->lpVtbl->GetNumberOfChapters(This,title,count)
#define IDvdInfo_GetTitleParentalLevels(This,title,levels) (This)->lpVtbl->GetTitleParentalLevels(This,title,levels)
#define IDvdInfo_GetRoot(This,path,size,ret_size) (This)->lpVtbl->GetRoot(This,path,size,ret_size)
#else
/*** IUnknown methods ***/
static FORCEINLINE HRESULT IDvdInfo_QueryInterface(IDvdInfo* This,REFIID riid,void **ppvObject) {
    return This->lpVtbl->QueryInterface(This,riid,ppvObject);
}
static FORCEINLINE ULONG IDvdInfo_AddRef(IDvdInfo* This) {
    return This->lpVtbl->AddRef(This);
}
static FORCEINLINE ULONG IDvdInfo_Release(IDvdInfo* This) {
    return This->lpVtbl->Release(This);
}
/*** IDvdInfo methods ***/
static FORCEINLINE HRESULT IDvdInfo_GetCurrentDomain(IDvdInfo* This,DVD_DOMAIN *domain) {
    return This->lpVtbl->GetCurrentDomain(This,domain);
}
static FORCEINLINE HRESULT IDvdInfo_GetCurrentLocation(IDvdInfo* This,DVD_PLAYBACK_LOCATION *location) {
    return This->lpVtbl->GetCurrentLocation(This,location);
}
static FORCEINLINE HRESULT IDvdInfo_GetTotalTitleTime(IDvdInfo* This,ULONG *time) {
    return This->lpVtbl->GetTotalTitleTime(This,time);
}
static FORCEINLINE HRESULT IDvdInfo_GetCurrentButton(IDvdInfo* This,ULONG *count,ULONG *current) {
    return This->lpVtbl->GetCurrentButton(This,count,current);
}
static FORCEINLINE HRESULT IDvdInfo_GetCurrentAngle(IDvdInfo* This,ULONG *count,ULONG *current) {
    return This->lpVtbl->GetCurrentAngle(This,count,current);
}
static FORCEINLINE HRESULT IDvdInfo_GetCurrentAudio(IDvdInfo* This,ULONG *count,ULONG *current) {
    return This->lpVtbl->GetCurrentAudio(This,count,current);
}
static FORCEINLINE HRESULT IDvdInfo_GetCurrentSubpicture(IDvdInfo* This,ULONG *count,ULONG *current,BOOL *enable) {
    return This->lpVtbl->GetCurrentSubpicture(This,count,current,enable);
}
static FORCEINLINE HRESULT IDvdInfo_GetCurrentUOPS(IDvdInfo* This,VALID_UOP_SOMTHING_OR_OTHER *uops) {
    return This->lpVtbl->GetCurrentUOPS(This,uops);
}
static FORCEINLINE HRESULT IDvdInfo_GetAllSPRMs(IDvdInfo* This,SPRMARRAY *regs) {
    return This->lpVtbl->GetAllSPRMs(This,regs);
}
static FORCEINLINE HRESULT IDvdInfo_GetAllGPRMs(IDvdInfo* This,GPRMARRAY *regs) {
    return This->lpVtbl->GetAllGPRMs(This,regs);
}
static FORCEINLINE HRESULT IDvdInfo_GetAudioLanguage(IDvdInfo* This,ULONG stream,LCID *language) {
    return This->lpVtbl->GetAudioLanguage(This,stream,language);
}
static FORCEINLINE HRESULT IDvdInfo_GetSubpictureLanguage(IDvdInfo* This,ULONG stream,LCID *language) {
    return This->lpVtbl->GetSubpictureLanguage(This,stream,language);
}
static FORCEINLINE HRESULT IDvdInfo_GetTitleAttributes(IDvdInfo* This,ULONG title,DVD_ATR *attr) {
    return This->lpVtbl->GetTitleAttributes(This,title,attr);
}
static FORCEINLINE HRESULT IDvdInfo_GetVMGAttributes(IDvdInfo* This,DVD_ATR *attr) {
    return This->lpVtbl->GetVMGAttributes(This,attr);
}
static FORCEINLINE HRESULT IDvdInfo_GetCurrentVideoAttributes(IDvdInfo* This,DVD_VideoATR *attr) {
    return This->lpVtbl->GetCurrentVideoAttributes(This,attr);
}
static FORCEINLINE HRESULT IDvdInfo_GetCurrentAudioAttributes(IDvdInfo* This,DVD_AudioATR *attr) {
    return This->lpVtbl->GetCurrentAudioAttributes(This,attr);
}
static FORCEINLINE HRESULT IDvdInfo_GetCurrentSubpictureAttributes(IDvdInfo* This,DVD_SubpictureATR *attr) {
    return This->lpVtbl->GetCurrentSubpictureAttributes(This,attr);
}
static FORCEINLINE HRESULT IDvdInfo_GetCurrentVolumeInfo(IDvdInfo* This,ULONG *volume_count,ULONG *current,DVD_DISC_SIDE *side,ULONG *title_count) {
    return This->lpVtbl->GetCurrentVolumeInfo(This,volume_count,current,side,title_count);
}
static FORCEINLINE HRESULT IDvdInfo_GetDVDTextInfo(IDvdInfo* This,BYTE *text_manager,ULONG size,ULONG *ret_size) {
    return This->lpVtbl->GetDVDTextInfo(This,text_manager,size,ret_size);
}
static FORCEINLINE HRESULT IDvdInfo_GetPlayerParentalLevel(IDvdInfo* This,ULONG *level,ULONG *country_code) {
    return This->lpVtbl->GetPlayerParentalLevel(This,level,country_code);
}
static FORCEINLINE HRESULT IDvdInfo_GetNumberOfChapters(IDvdInfo* This,ULONG title,ULONG *count) {
    return This->lpVtbl->GetNumberOfChapters(This,title,count);
}
static FORCEINLINE HRESULT IDvdInfo_GetTitleParentalLevels(IDvdInfo* This,ULONG title,ULONG *levels) {
    return This->lpVtbl->GetTitleParentalLevels(This,title,levels);
}
static FORCEINLINE HRESULT IDvdInfo_GetRoot(IDvdInfo* This,char *path,ULONG size,ULONG *ret_size) {
    return This->lpVtbl->GetRoot(This,path,size,ret_size);
}
#endif
#endif

#endif


#endif  /* __IDvdInfo_INTERFACE_DEFINED__ */

/*****************************************************************************
 * IDvdCmd interface
 */
#ifndef __IDvdCmd_INTERFACE_DEFINED__
#define __IDvdCmd_INTERFACE_DEFINED__

DEFINE_GUID(IID_IDvdCmd, 0x5a4a97e4, 0x94ee, 0x4a55, 0x97,0x51, 0x74,0xb5,0x64,0x3a,0xa2,0x7d);
#if defined(__cplusplus) && !defined(CINTERFACE)
MIDL_INTERFACE("5a4a97e4-94ee-4a55-9751-74b5643aa27d")
IDvdCmd : public IUnknown
{
    virtual HRESULT STDMETHODCALLTYPE WaitForStart(
        ) = 0;

    virtual HRESULT STDMETHODCALLTYPE WaitForEnd(
        ) = 0;

};
#ifdef __CRT_UUID_DECL
__CRT_UUID_DECL(IDvdCmd, 0x5a4a97e4, 0x94ee, 0x4a55, 0x97,0x51, 0x74,0xb5,0x64,0x3a,0xa2,0x7d)
#endif
#else
typedef struct IDvdCmdVtbl {
    BEGIN_INTERFACE

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

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

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

    /*** IDvdCmd methods ***/
    HRESULT (STDMETHODCALLTYPE *WaitForStart)(
        IDvdCmd *This);

    HRESULT (STDMETHODCALLTYPE *WaitForEnd)(
        IDvdCmd *This);

    END_INTERFACE
} IDvdCmdVtbl;

interface IDvdCmd {
    CONST_VTBL IDvdCmdVtbl* lpVtbl;
};

#ifdef COBJMACROS
#ifndef WIDL_C_INLINE_WRAPPERS
/*** IUnknown methods ***/
#define IDvdCmd_QueryInterface(This,riid,ppvObject) (This)->lpVtbl->QueryInterface(This,riid,ppvObject)
#define IDvdCmd_AddRef(This) (This)->lpVtbl->AddRef(This)
#define IDvdCmd_Release(This) (This)->lpVtbl->Release(This)
/*** IDvdCmd methods ***/
#define IDvdCmd_WaitForStart(This) (This)->lpVtbl->WaitForStart(This)
#define IDvdCmd_WaitForEnd(This) (This)->lpVtbl->WaitForEnd(This)
#else
/*** IUnknown methods ***/
static FORCEINLINE HRESULT IDvdCmd_QueryInterface(IDvdCmd* This,REFIID riid,void **ppvObject) {
    return This->lpVtbl->QueryInterface(This,riid,ppvObject);
}
static FORCEINLINE ULONG IDvdCmd_AddRef(IDvdCmd* This) {
    return This->lpVtbl->AddRef(This);
}
static FORCEINLINE ULONG IDvdCmd_Release(IDvdCmd* This) {
    return This->lpVtbl->Release(This);
}
/*** IDvdCmd methods ***/
static FORCEINLINE HRESULT IDvdCmd_WaitForStart(IDvdCmd* This) {
    return This->lpVtbl->WaitForStart(This);
}
static FORCEINLINE HRESULT IDvdCmd_WaitForEnd(IDvdCmd* This) {
    return This->lpVtbl->WaitForEnd(This);
}
#endif
#endif

#endif


#endif  /* __IDvdCmd_INTERFACE_DEFINED__ */

/*****************************************************************************
 * IDvdState interface
 */
#ifndef __IDvdState_INTERFACE_DEFINED__
#define __IDvdState_INTERFACE_DEFINED__

DEFINE_GUID(IID_IDvdState, 0x86303d6d, 0x1c4a, 0x4087, 0xab,0x42, 0xf7,0x11,0x16,0x70,0x48,0xef);
#if defined(__cplusplus) && !defined(CINTERFACE)
MIDL_INTERFACE("86303d6d-1c4a-4087-ab42-f711167048ef")
IDvdState : public IUnknown
{
    virtual HRESULT STDMETHODCALLTYPE GetDiscID(
        ULONGLONG *id) = 0;

    virtual HRESULT STDMETHODCALLTYPE GetParentalLevel(
        ULONG *level) = 0;

};
#ifdef __CRT_UUID_DECL
__CRT_UUID_DECL(IDvdState, 0x86303d6d, 0x1c4a, 0x4087, 0xab,0x42, 0xf7,0x11,0x16,0x70,0x48,0xef)
#endif
#else
typedef struct IDvdStateVtbl {
    BEGIN_INTERFACE

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

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

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

    /*** IDvdState methods ***/
    HRESULT (STDMETHODCALLTYPE *GetDiscID)(
        IDvdState *This,
        ULONGLONG *id);

    HRESULT (STDMETHODCALLTYPE *GetParentalLevel)(
        IDvdState *This,
        ULONG *level);

    END_INTERFACE
} IDvdStateVtbl;

interface IDvdState {
    CONST_VTBL IDvdStateVtbl* lpVtbl;
};

#ifdef COBJMACROS
#ifndef WIDL_C_INLINE_WRAPPERS
/*** IUnknown methods ***/
#define IDvdState_QueryInterface(This,riid,ppvObject) (This)->lpVtbl->QueryInterface(This,riid,ppvObject)
#define IDvdState_AddRef(This) (This)->lpVtbl->AddRef(This)
#define IDvdState_Release(This) (This)->lpVtbl->Release(This)
/*** IDvdState methods ***/
#define IDvdState_GetDiscID(This,id) (This)->lpVtbl->GetDiscID(This,id)
#define IDvdState_GetParentalLevel(This,level) (This)->lpVtbl->GetParentalLevel(This,level)
#else
/*** IUnknown methods ***/
static FORCEINLINE HRESULT IDvdState_QueryInterface(IDvdState* This,REFIID riid,void **ppvObject) {
    return This->lpVtbl->QueryInterface(This,riid,ppvObject);
}
static FORCEINLINE ULONG IDvdState_AddRef(IDvdState* This) {
    return This->lpVtbl->AddRef(This);
}
static FORCEINLINE ULONG IDvdState_Release(IDvdState* This) {
    return This->lpVtbl->Release(This);
}
/*** IDvdState methods ***/
static FORCEINLINE HRESULT IDvdState_GetDiscID(IDvdState* This,ULONGLONG *id) {
    return This->lpVtbl->GetDiscID(This,id);
}
static FORCEINLINE HRESULT IDvdState_GetParentalLevel(IDvdState* This,ULONG *level) {
    return This->lpVtbl->GetParentalLevel(This,level);
}
#endif
#endif

#endif


#endif  /* __IDvdState_INTERFACE_DEFINED__ */

/*****************************************************************************
 * IDvdControl2 interface
 */
#ifndef __IDvdControl2_INTERFACE_DEFINED__
#define __IDvdControl2_INTERFACE_DEFINED__

DEFINE_GUID(IID_IDvdControl2, 0x33bc7430, 0xeec0, 0x11d2, 0x82,0x01, 0x00,0xa0,0xc9,0xd7,0x48,0x42);
#if defined(__cplusplus) && !defined(CINTERFACE)
MIDL_INTERFACE("33bc7430-eec0-11d2-8201-00a0c9d74842")
IDvdControl2 : public IUnknown
{
    virtual HRESULT STDMETHODCALLTYPE PlayTitle(
        ULONG title,
        DWORD flags,
        IDvdCmd **cmd) = 0;

    virtual HRESULT STDMETHODCALLTYPE PlayChapterInTitle(
        ULONG title,
        ULONG chapter,
        DWORD flags,
        IDvdCmd **cmd) = 0;

    virtual HRESULT STDMETHODCALLTYPE PlayTimeInTitle(
        ULONG title,
        DVD_HMSF_TIMECODE *time,
        DWORD flags,
        IDvdCmd **cmd) = 0;

    virtual HRESULT STDMETHODCALLTYPE Stop(
        ) = 0;

    virtual HRESULT STDMETHODCALLTYPE ReturnFromSubmenu(
        DWORD flags,
        IDvdCmd **cmd) = 0;

    virtual HRESULT STDMETHODCALLTYPE PlayAtTime(
        DVD_HMSF_TIMECODE *time,
        DWORD flags,
        IDvdCmd **cmd) = 0;

    virtual HRESULT STDMETHODCALLTYPE PlayChapter(
        ULONG chapter,
        DWORD flags,
        IDvdCmd **cmd) = 0;

    virtual HRESULT STDMETHODCALLTYPE PlayPrevChapter(
        DWORD flags,
        IDvdCmd **cmd) = 0;

    virtual HRESULT STDMETHODCALLTYPE ReplayChapter(
        DWORD flags,
        IDvdCmd **cmd) = 0;

    virtual HRESULT STDMETHODCALLTYPE PlayNextChapter(
        DWORD flags,
        IDvdCmd **cmd) = 0;

    virtual HRESULT STDMETHODCALLTYPE PlayForwards(
        double speed,
        DWORD flags,
        IDvdCmd **cmd) = 0;

    virtual HRESULT STDMETHODCALLTYPE PlayBackwards(
        double speed,
        DWORD flags,
        IDvdCmd **cmd) = 0;

    virtual HRESULT STDMETHODCALLTYPE ShowMenu(
        DVD_MENU_ID id,
        DWORD flags,
        IDvdCmd **cmd) = 0;

    virtual HRESULT STDMETHODCALLTYPE Resume(
        DWORD flags,
        IDvdCmd **cmd) = 0;

    virtual HRESULT STDMETHODCALLTYPE SelectRelativeButton(
        DVD_RELATIVE_BUTTON button) = 0;

    virtual HRESULT STDMETHODCALLTYPE ActivateButton(
        ) = 0;

    virtual HRESULT STDMETHODCALLTYPE SelectButton(
        ULONG button) = 0;

    virtual HRESULT STDMETHODCALLTYPE SelectAndActivateButton(
        ULONG button) = 0;

    virtual HRESULT STDMETHODCALLTYPE StillOff(
        ) = 0;

    virtual HRESULT STDMETHODCALLTYPE Pause(
        BOOL enable) = 0;

    virtual HRESULT STDMETHODCALLTYPE SelectAudioStream(
        ULONG stream,
        DWORD flags,
        IDvdCmd **cmd) = 0;

    virtual HRESULT STDMETHODCALLTYPE SelectSubpictureStream(
        ULONG stream,
        DWORD flags,
        IDvdCmd **cmd) = 0;

    virtual HRESULT STDMETHODCALLTYPE SetSubpictureState(
        BOOL enable,
        DWORD flags,
        IDvdCmd **cmd) = 0;

    virtual HRESULT STDMETHODCALLTYPE SelectAngle(
        ULONG angle,
        DWORD flags,
        IDvdCmd **cmd) = 0;

    virtual HRESULT STDMETHODCALLTYPE SelectParentalLevel(
        ULONG level) = 0;

    virtual HRESULT STDMETHODCALLTYPE SelectParentalCountry(
        BYTE country[2]) = 0;

    virtual HRESULT STDMETHODCALLTYPE SelectKaraokeAudioPresentationMode(
        ULONG mode) = 0;

    virtual HRESULT STDMETHODCALLTYPE SelectVideoModePreference(
        ULONG mode) = 0;

    virtual HRESULT STDMETHODCALLTYPE SetDVDDirectory(
        const WCHAR *path) = 0;

    virtual HRESULT STDMETHODCALLTYPE ActivateAtPosition(
        POINT point) = 0;

    virtual HRESULT STDMETHODCALLTYPE SelectAtPosition(
        POINT point) = 0;

    virtual HRESULT STDMETHODCALLTYPE PlayChaptersAutoStop(
        ULONG title,
        ULONG chapter,
        ULONG count,
        DWORD flags,
        IDvdCmd **cmd) = 0;

    virtual HRESULT STDMETHODCALLTYPE AcceptParentalLevelChange(
        BOOL accept) = 0;

    virtual HRESULT STDMETHODCALLTYPE SetOption(
        DVD_OPTION_FLAG flag,
        BOOL option) = 0;

    virtual HRESULT STDMETHODCALLTYPE SetState(
        IDvdState *state,
        DWORD flags,
        IDvdCmd **cmd) = 0;

    virtual HRESULT STDMETHODCALLTYPE PlayPeriodInTitleAutoStop(
        ULONG title,
        DVD_HMSF_TIMECODE *start_time,
        DVD_HMSF_TIMECODE *end_time,
        DWORD flags,
        IDvdCmd **cmd) = 0;

    virtual HRESULT STDMETHODCALLTYPE SetGRPM(
        ULONG index,
        WORD value,
        DWORD flags,
        IDvdCmd **cmd) = 0;

    virtual HRESULT STDMETHODCALLTYPE SelectDefaultMenuLanguage(
        LCID language) = 0;

    virtual HRESULT STDMETHODCALLTYPE SelectDefaultAudioLanguage(
        LCID language,
        DVD_AUDIO_LANG_EXT extension) = 0;

    virtual HRESULT STDMETHODCALLTYPE SelectDefaultSubpictureLanguage(
        LCID language,
        DVD_SUBPICTURE_LANG_EXT extension) = 0;

};
#ifdef __CRT_UUID_DECL
__CRT_UUID_DECL(IDvdControl2, 0x33bc7430, 0xeec0, 0x11d2, 0x82,0x01, 0x00,0xa0,0xc9,0xd7,0x48,0x42)
#endif
#else
typedef struct IDvdControl2Vtbl {
    BEGIN_INTERFACE

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

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

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

    /*** IDvdControl2 methods ***/
    HRESULT (STDMETHODCALLTYPE *PlayTitle)(
        IDvdControl2 *This,
        ULONG title,
        DWORD flags,
        IDvdCmd **cmd);

    HRESULT (STDMETHODCALLTYPE *PlayChapterInTitle)(
        IDvdControl2 *This,
        ULONG title,
        ULONG chapter,
        DWORD flags,
        IDvdCmd **cmd);

    HRESULT (STDMETHODCALLTYPE *PlayTimeInTitle)(
        IDvdControl2 *This,
        ULONG title,
        DVD_HMSF_TIMECODE *time,
        DWORD flags,
        IDvdCmd **cmd);

    HRESULT (STDMETHODCALLTYPE *Stop)(
        IDvdControl2 *This);

    HRESULT (STDMETHODCALLTYPE *ReturnFromSubmenu)(
        IDvdControl2 *This,
        DWORD flags,
        IDvdCmd **cmd);

    HRESULT (STDMETHODCALLTYPE *PlayAtTime)(
        IDvdControl2 *This,
        DVD_HMSF_TIMECODE *time,
        DWORD flags,
        IDvdCmd **cmd);

    HRESULT (STDMETHODCALLTYPE *PlayChapter)(
        IDvdControl2 *This,
        ULONG chapter,
        DWORD flags,
        IDvdCmd **cmd);

    HRESULT (STDMETHODCALLTYPE *PlayPrevChapter)(
        IDvdControl2 *This,
        DWORD flags,
        IDvdCmd **cmd);

    HRESULT (STDMETHODCALLTYPE *ReplayChapter)(
        IDvdControl2 *This,
        DWORD flags,
        IDvdCmd **cmd);

    HRESULT (STDMETHODCALLTYPE *PlayNextChapter)(
        IDvdControl2 *This,
        DWORD flags,
        IDvdCmd **cmd);

    HRESULT (STDMETHODCALLTYPE *PlayForwards)(
        IDvdControl2 *This,
        double speed,
        DWORD flags,
        IDvdCmd **cmd);

    HRESULT (STDMETHODCALLTYPE *PlayBackwards)(
        IDvdControl2 *This,
        double speed,
        DWORD flags,
        IDvdCmd **cmd);

    HRESULT (STDMETHODCALLTYPE *ShowMenu)(
        IDvdControl2 *This,
        DVD_MENU_ID id,
        DWORD flags,
        IDvdCmd **cmd);

    HRESULT (STDMETHODCALLTYPE *Resume)(
        IDvdControl2 *This,
        DWORD flags,
        IDvdCmd **cmd);

    HRESULT (STDMETHODCALLTYPE *SelectRelativeButton)(
        IDvdControl2 *This,
        DVD_RELATIVE_BUTTON button);

    HRESULT (STDMETHODCALLTYPE *ActivateButton)(
        IDvdControl2 *This);

    HRESULT (STDMETHODCALLTYPE *SelectButton)(
        IDvdControl2 *This,
        ULONG button);

    HRESULT (STDMETHODCALLTYPE *SelectAndActivateButton)(
        IDvdControl2 *This,
        ULONG button);

    HRESULT (STDMETHODCALLTYPE *StillOff)(
        IDvdControl2 *This);

    HRESULT (STDMETHODCALLTYPE *Pause)(
        IDvdControl2 *This,
        BOOL enable);

    HRESULT (STDMETHODCALLTYPE *SelectAudioStream)(
        IDvdControl2 *This,
        ULONG stream,
        DWORD flags,
        IDvdCmd **cmd);

    HRESULT (STDMETHODCALLTYPE *SelectSubpictureStream)(
        IDvdControl2 *This,
        ULONG stream,
        DWORD flags,
        IDvdCmd **cmd);

    HRESULT (STDMETHODCALLTYPE *SetSubpictureState)(
        IDvdControl2 *This,
        BOOL enable,
        DWORD flags,
        IDvdCmd **cmd);

    HRESULT (STDMETHODCALLTYPE *SelectAngle)(
        IDvdControl2 *This,
        ULONG angle,
        DWORD flags,
        IDvdCmd **cmd);

    HRESULT (STDMETHODCALLTYPE *SelectParentalLevel)(
        IDvdControl2 *This,
        ULONG level);

    HRESULT (STDMETHODCALLTYPE *SelectParentalCountry)(
        IDvdControl2 *This,
        BYTE country[2]);

    HRESULT (STDMETHODCALLTYPE *SelectKaraokeAudioPresentationMode)(
        IDvdControl2 *This,
        ULONG mode);

    HRESULT (STDMETHODCALLTYPE *SelectVideoModePreference)(
        IDvdControl2 *This,
        ULONG mode);

    HRESULT (STDMETHODCALLTYPE *SetDVDDirectory)(
        IDvdControl2 *This,
        const WCHAR *path);

    HRESULT (STDMETHODCALLTYPE *ActivateAtPosition)(
        IDvdControl2 *This,
        POINT point);

    HRESULT (STDMETHODCALLTYPE *SelectAtPosition)(
        IDvdControl2 *This,
        POINT point);

    HRESULT (STDMETHODCALLTYPE *PlayChaptersAutoStop)(
        IDvdControl2 *This,
        ULONG title,
        ULONG chapter,
        ULONG count,
        DWORD flags,
        IDvdCmd **cmd);

    HRESULT (STDMETHODCALLTYPE *AcceptParentalLevelChange)(
        IDvdControl2 *This,
        BOOL accept);

    HRESULT (STDMETHODCALLTYPE *SetOption)(
        IDvdControl2 *This,
        DVD_OPTION_FLAG flag,
        BOOL option);

    HRESULT (STDMETHODCALLTYPE *SetState)(
        IDvdControl2 *This,
        IDvdState *state,
        DWORD flags,
        IDvdCmd **cmd);

    HRESULT (STDMETHODCALLTYPE *PlayPeriodInTitleAutoStop)(
        IDvdControl2 *This,
        ULONG title,
        DVD_HMSF_TIMECODE *start_time,
        DVD_HMSF_TIMECODE *end_time,
        DWORD flags,
        IDvdCmd **cmd);

    HRESULT (STDMETHODCALLTYPE *SetGRPM)(
        IDvdControl2 *This,
        ULONG index,
        WORD value,
        DWORD flags,
        IDvdCmd **cmd);

    HRESULT (STDMETHODCALLTYPE *SelectDefaultMenuLanguage)(
        IDvdControl2 *This,
        LCID language);

    HRESULT (STDMETHODCALLTYPE *SelectDefaultAudioLanguage)(
        IDvdControl2 *This,
        LCID language,
        DVD_AUDIO_LANG_EXT extension);

    HRESULT (STDMETHODCALLTYPE *SelectDefaultSubpictureLanguage)(
        IDvdControl2 *This,
        LCID language,
        DVD_SUBPICTURE_LANG_EXT extension);

    END_INTERFACE
} IDvdControl2Vtbl;

interface IDvdControl2 {
    CONST_VTBL IDvdControl2Vtbl* lpVtbl;
};

#ifdef COBJMACROS
#ifndef WIDL_C_INLINE_WRAPPERS
/*** IUnknown methods ***/
#define IDvdControl2_QueryInterface(This,riid,ppvObject) (This)->lpVtbl->QueryInterface(This,riid,ppvObject)
#define IDvdControl2_AddRef(This) (This)->lpVtbl->AddRef(This)
#define IDvdControl2_Release(This) (This)->lpVtbl->Release(This)
/*** IDvdControl2 methods ***/
#define IDvdControl2_PlayTitle(This,title,flags,cmd) (This)->lpVtbl->PlayTitle(This,title,flags,cmd)
#define IDvdControl2_PlayChapterInTitle(This,title,chapter,flags,cmd) (This)->lpVtbl->PlayChapterInTitle(This,title,chapter,flags,cmd)
#define IDvdControl2_PlayTimeInTitle(This,title,time,flags,cmd) (This)->lpVtbl->PlayTimeInTitle(This,title,time,flags,cmd)
#define IDvdControl2_Stop(This) (This)->lpVtbl->Stop(This)
#define IDvdControl2_ReturnFromSubmenu(This,flags,cmd) (This)->lpVtbl->ReturnFromSubmenu(This,flags,cmd)
#define IDvdControl2_PlayAtTime(This,time,flags,cmd) (This)->lpVtbl->PlayAtTime(This,time,flags,cmd)
#define IDvdControl2_PlayChapter(This,chapter,flags,cmd) (This)->lpVtbl->PlayChapter(This,chapter,flags,cmd)
#define IDvdControl2_PlayPrevChapter(This,flags,cmd) (This)->lpVtbl->PlayPrevChapter(This,flags,cmd)
#define IDvdControl2_ReplayChapter(This,flags,cmd) (This)->lpVtbl->ReplayChapter(This,flags,cmd)
#define IDvdControl2_PlayNextChapter(This,flags,cmd) (This)->lpVtbl->PlayNextChapter(This,flags,cmd)
#define IDvdControl2_PlayForwards(This,speed,flags,cmd) (This)->lpVtbl->PlayForwards(This,speed,flags,cmd)
#define IDvdControl2_PlayBackwards(This,speed,flags,cmd) (This)->lpVtbl->PlayBackwards(This,speed,flags,cmd)
#define IDvdControl2_ShowMenu(This,id,flags,cmd) (This)->lpVtbl->ShowMenu(This,id,flags,cmd)
#define IDvdControl2_Resume(This,flags,cmd) (This)->lpVtbl->Resume(This,flags,cmd)
#define IDvdControl2_SelectRelativeButton(This,button) (This)->lpVtbl->SelectRelativeButton(This,button)
#define IDvdControl2_ActivateButton(This) (This)->lpVtbl->ActivateButton(This)
#define IDvdControl2_SelectButton(This,button) (This)->lpVtbl->SelectButton(This,button)
#define IDvdControl2_SelectAndActivateButton(This,button) (This)->lpVtbl->SelectAndActivateButton(This,button)
#define IDvdControl2_StillOff(This) (This)->lpVtbl->StillOff(This)
#define IDvdControl2_Pause(This,enable) (This)->lpVtbl->Pause(This,enable)
#define IDvdControl2_SelectAudioStream(This,stream,flags,cmd) (This)->lpVtbl->SelectAudioStream(This,stream,flags,cmd)
#define IDvdControl2_SelectSubpictureStream(This,stream,flags,cmd) (This)->lpVtbl->SelectSubpictureStream(This,stream,flags,cmd)
#define IDvdControl2_SetSubpictureState(This,enable,flags,cmd) (This)->lpVtbl->SetSubpictureState(This,enable,flags,cmd)
#define IDvdControl2_SelectAngle(This,angle,flags,cmd) (This)->lpVtbl->SelectAngle(This,angle,flags,cmd)
#define IDvdControl2_SelectParentalLevel(This,level) (This)->lpVtbl->SelectParentalLevel(This,level)
#define IDvdControl2_SelectParentalCountry(This,country) (This)->lpVtbl->SelectParentalCountry(This,country)
#define IDvdControl2_SelectKaraokeAudioPresentationMode(This,mode) (This)->lpVtbl->SelectKaraokeAudioPresentationMode(This,mode)
#define IDvdControl2_SelectVideoModePreference(This,mode) (This)->lpVtbl->SelectVideoModePreference(This,mode)
#define IDvdControl2_SetDVDDirectory(This,path) (This)->lpVtbl->SetDVDDirectory(This,path)
#define IDvdControl2_ActivateAtPosition(This,point) (This)->lpVtbl->ActivateAtPosition(This,point)
#define IDvdControl2_SelectAtPosition(This,point) (This)->lpVtbl->SelectAtPosition(This,point)
#define IDvdControl2_PlayChaptersAutoStop(This,title,chapter,count,flags,cmd) (This)->lpVtbl->PlayChaptersAutoStop(This,title,chapter,count,flags,cmd)
#define IDvdControl2_AcceptParentalLevelChange(This,accept) (This)->lpVtbl->AcceptParentalLevelChange(This,accept)
#define IDvdControl2_SetOption(This,flag,option) (This)->lpVtbl->SetOption(This,flag,option)
#define IDvdControl2_SetState(This,state,flags,cmd) (This)->lpVtbl->SetState(This,state,flags,cmd)
#define IDvdControl2_PlayPeriodInTitleAutoStop(This,title,start_time,end_time,flags,cmd) (This)->lpVtbl->PlayPeriodInTitleAutoStop(This,title,start_time,end_time,flags,cmd)
#define IDvdControl2_SetGRPM(This,index,value,flags,cmd) (This)->lpVtbl->SetGRPM(This,index,value,flags,cmd)
#define IDvdControl2_SelectDefaultMenuLanguage(This,language) (This)->lpVtbl->SelectDefaultMenuLanguage(This,language)
#define IDvdControl2_SelectDefaultAudioLanguage(This,language,extension) (This)->lpVtbl->SelectDefaultAudioLanguage(This,language,extension)
#define IDvdControl2_SelectDefaultSubpictureLanguage(This,language,extension) (This)->lpVtbl->SelectDefaultSubpictureLanguage(This,language,extension)
#else
/*** IUnknown methods ***/
static FORCEINLINE HRESULT IDvdControl2_QueryInterface(IDvdControl2* This,REFIID riid,void **ppvObject) {
    return This->lpVtbl->QueryInterface(This,riid,ppvObject);
}
static FORCEINLINE ULONG IDvdControl2_AddRef(IDvdControl2* This) {
    return This->lpVtbl->AddRef(This);
}
static FORCEINLINE ULONG IDvdControl2_Release(IDvdControl2* This) {
    return This->lpVtbl->Release(This);
}
/*** IDvdControl2 methods ***/
static FORCEINLINE HRESULT IDvdControl2_PlayTitle(IDvdControl2* This,ULONG title,DWORD flags,IDvdCmd **cmd) {
    return This->lpVtbl->PlayTitle(This,title,flags,cmd);
}
static FORCEINLINE HRESULT IDvdControl2_PlayChapterInTitle(IDvdControl2* This,ULONG title,ULONG chapter,DWORD flags,IDvdCmd **cmd) {
    return This->lpVtbl->PlayChapterInTitle(This,title,chapter,flags,cmd);
}
static FORCEINLINE HRESULT IDvdControl2_PlayTimeInTitle(IDvdControl2* This,ULONG title,DVD_HMSF_TIMECODE *time,DWORD flags,IDvdCmd **cmd) {
    return This->lpVtbl->PlayTimeInTitle(This,title,time,flags,cmd);
}
static FORCEINLINE HRESULT IDvdControl2_Stop(IDvdControl2* This) {
    return This->lpVtbl->Stop(This);
}
static FORCEINLINE HRESULT IDvdControl2_ReturnFromSubmenu(IDvdControl2* This,DWORD flags,IDvdCmd **cmd) {
    return This->lpVtbl->ReturnFromSubmenu(This,flags,cmd);
}
static FORCEINLINE HRESULT IDvdControl2_PlayAtTime(IDvdControl2* This,DVD_HMSF_TIMECODE *time,DWORD flags,IDvdCmd **cmd) {
    return This->lpVtbl->PlayAtTime(This,time,flags,cmd);
}
static FORCEINLINE HRESULT IDvdControl2_PlayChapter(IDvdControl2* This,ULONG chapter,DWORD flags,IDvdCmd **cmd) {
    return This->lpVtbl->PlayChapter(This,chapter,flags,cmd);
}
static FORCEINLINE HRESULT IDvdControl2_PlayPrevChapter(IDvdControl2* This,DWORD flags,IDvdCmd **cmd) {
    return This->lpVtbl->PlayPrevChapter(This,flags,cmd);
}
static FORCEINLINE HRESULT IDvdControl2_ReplayChapter(IDvdControl2* This,DWORD flags,IDvdCmd **cmd) {
    return This->lpVtbl->ReplayChapter(This,flags,cmd);
}
static FORCEINLINE HRESULT IDvdControl2_PlayNextChapter(IDvdControl2* This,DWORD flags,IDvdCmd **cmd) {
    return This->lpVtbl->PlayNextChapter(This,flags,cmd);
}
static FORCEINLINE HRESULT IDvdControl2_PlayForwards(IDvdControl2* This,double speed,DWORD flags,IDvdCmd **cmd) {
    return This->lpVtbl->PlayForwards(This,speed,flags,cmd);
}
static FORCEINLINE HRESULT IDvdControl2_PlayBackwards(IDvdControl2* This,double speed,DWORD flags,IDvdCmd **cmd) {
    return This->lpVtbl->PlayBackwards(This,speed,flags,cmd);
}
static FORCEINLINE HRESULT IDvdControl2_ShowMenu(IDvdControl2* This,DVD_MENU_ID id,DWORD flags,IDvdCmd **cmd) {
    return This->lpVtbl->ShowMenu(This,id,flags,cmd);
}
static FORCEINLINE HRESULT IDvdControl2_Resume(IDvdControl2* This,DWORD flags,IDvdCmd **cmd) {
    return This->lpVtbl->Resume(This,flags,cmd);
}
static FORCEINLINE HRESULT IDvdControl2_SelectRelativeButton(IDvdControl2* This,DVD_RELATIVE_BUTTON button) {
    return This->lpVtbl->SelectRelativeButton(This,button);
}
static FORCEINLINE HRESULT IDvdControl2_ActivateButton(IDvdControl2* This) {
    return This->lpVtbl->ActivateButton(This);
}
static FORCEINLINE HRESULT IDvdControl2_SelectButton(IDvdControl2* This,ULONG button) {
    return This->lpVtbl->SelectButton(This,button);
}
static FORCEINLINE HRESULT IDvdControl2_SelectAndActivateButton(IDvdControl2* This,ULONG button) {
    return This->lpVtbl->SelectAndActivateButton(This,button);
}
static FORCEINLINE HRESULT IDvdControl2_StillOff(IDvdControl2* This) {
    return This->lpVtbl->StillOff(This);
}
static FORCEINLINE HRESULT IDvdControl2_Pause(IDvdControl2* This,BOOL enable) {
    return This->lpVtbl->Pause(This,enable);
}
static FORCEINLINE HRESULT IDvdControl2_SelectAudioStream(IDvdControl2* This,ULONG stream,DWORD flags,IDvdCmd **cmd) {
    return This->lpVtbl->SelectAudioStream(This,stream,flags,cmd);
}
static FORCEINLINE HRESULT IDvdControl2_SelectSubpictureStream(IDvdControl2* This,ULONG stream,DWORD flags,IDvdCmd **cmd) {
    return This->lpVtbl->SelectSubpictureStream(This,stream,flags,cmd);
}
static FORCEINLINE HRESULT IDvdControl2_SetSubpictureState(IDvdControl2* This,BOOL enable,DWORD flags,IDvdCmd **cmd) {
    return This->lpVtbl->SetSubpictureState(This,enable,flags,cmd);
}
static FORCEINLINE HRESULT IDvdControl2_SelectAngle(IDvdControl2* This,ULONG angle,DWORD flags,IDvdCmd **cmd) {
    return This->lpVtbl->SelectAngle(This,angle,flags,cmd);
}
static FORCEINLINE HRESULT IDvdControl2_SelectParentalLevel(IDvdControl2* This,ULONG level) {
    return This->lpVtbl->SelectParentalLevel(This,level);
}
static FORCEINLINE HRESULT IDvdControl2_SelectParentalCountry(IDvdControl2* This,BYTE country[2]) {
    return This->lpVtbl->SelectParentalCountry(This,country);
}
static FORCEINLINE HRESULT IDvdControl2_SelectKaraokeAudioPresentationMode(IDvdControl2* This,ULONG mode) {
    return This->lpVtbl->SelectKaraokeAudioPresentationMode(This,mode);
}
static FORCEINLINE HRESULT IDvdControl2_SelectVideoModePreference(IDvdControl2* This,ULONG mode) {
    return This->lpVtbl->SelectVideoModePreference(This,mode);
}
static FORCEINLINE HRESULT IDvdControl2_SetDVDDirectory(IDvdControl2* This,const WCHAR *path) {
    return This->lpVtbl->SetDVDDirectory(This,path);
}
static FORCEINLINE HRESULT IDvdControl2_ActivateAtPosition(IDvdControl2* This,POINT point) {
    return This->lpVtbl->ActivateAtPosition(This,point);
}
static FORCEINLINE HRESULT IDvdControl2_SelectAtPosition(IDvdControl2* This,POINT point) {
    return This->lpVtbl->SelectAtPosition(This,point);
}
static FORCEINLINE HRESULT IDvdControl2_PlayChaptersAutoStop(IDvdControl2* This,ULONG title,ULONG chapter,ULONG count,DWORD flags,IDvdCmd **cmd) {
    return This->lpVtbl->PlayChaptersAutoStop(This,title,chapter,count,flags,cmd);
}
static FORCEINLINE HRESULT IDvdControl2_AcceptParentalLevelChange(IDvdControl2* This,BOOL accept) {
    return This->lpVtbl->AcceptParentalLevelChange(This,accept);
}
static FORCEINLINE HRESULT IDvdControl2_SetOption(IDvdControl2* This,DVD_OPTION_FLAG flag,BOOL option) {
    return This->lpVtbl->SetOption(This,flag,option);
}
static FORCEINLINE HRESULT IDvdControl2_SetState(IDvdControl2* This,IDvdState *state,DWORD flags,IDvdCmd **cmd) {
    return This->lpVtbl->SetState(This,state,flags,cmd);
}
static FORCEINLINE HRESULT IDvdControl2_PlayPeriodInTitleAutoStop(IDvdControl2* This,ULONG title,DVD_HMSF_TIMECODE *start_time,DVD_HMSF_TIMECODE *end_time,DWORD flags,IDvdCmd **cmd) {
    return This->lpVtbl->PlayPeriodInTitleAutoStop(This,title,start_time,end_time,flags,cmd);
}
static FORCEINLINE HRESULT IDvdControl2_SetGRPM(IDvdControl2* This,ULONG index,WORD value,DWORD flags,IDvdCmd **cmd) {
    return This->lpVtbl->SetGRPM(This,index,value,flags,cmd);
}
static FORCEINLINE HRESULT IDvdControl2_SelectDefaultMenuLanguage(IDvdControl2* This,LCID language) {
    return This->lpVtbl->SelectDefaultMenuLanguage(This,language);
}
static FORCEINLINE HRESULT IDvdControl2_SelectDefaultAudioLanguage(IDvdControl2* This,LCID language,DVD_AUDIO_LANG_EXT extension) {
    return This->lpVtbl->SelectDefaultAudioLanguage(This,language,extension);
}
static FORCEINLINE HRESULT IDvdControl2_SelectDefaultSubpictureLanguage(IDvdControl2* This,LCID language,DVD_SUBPICTURE_LANG_EXT extension) {
    return This->lpVtbl->SelectDefaultSubpictureLanguage(This,language,extension);
}
#endif
#endif

#endif


#endif  /* __IDvdControl2_INTERFACE_DEFINED__ */

/*****************************************************************************
 * IDvdInfo2 interface
 */
#ifndef __IDvdInfo2_INTERFACE_DEFINED__
#define __IDvdInfo2_INTERFACE_DEFINED__

DEFINE_GUID(IID_IDvdInfo2, 0x34151510, 0xeec0, 0x11d2, 0x82,0x01, 0x00,0xa0,0xc9,0xd7,0x48,0x42);
#if defined(__cplusplus) && !defined(CINTERFACE)
MIDL_INTERFACE("34151510-eec0-11d2-8201-00a0c9d74842")
IDvdInfo2 : public IUnknown
{
    virtual HRESULT STDMETHODCALLTYPE GetCurrentDomain(
        DVD_DOMAIN *domain) = 0;

    virtual HRESULT STDMETHODCALLTYPE GetCurrentLocation(
        DVD_PLAYBACK_LOCATION2 *location) = 0;

    virtual HRESULT STDMETHODCALLTYPE GetTotalTitleTime(
        DVD_HMSF_TIMECODE *time,
        ULONG *flags) = 0;

    virtual HRESULT STDMETHODCALLTYPE GetCurrentButton(
        ULONG *count,
        ULONG *current) = 0;

    virtual HRESULT STDMETHODCALLTYPE GetCurrentAngle(
        ULONG *count,
        ULONG *current) = 0;

    virtual HRESULT STDMETHODCALLTYPE GetCurrentAudio(
        ULONG *count,
        ULONG *current) = 0;

    virtual HRESULT STDMETHODCALLTYPE GetCurrentSubpicture(
        ULONG *count,
        ULONG *current,
        BOOL *enable) = 0;

    virtual HRESULT STDMETHODCALLTYPE GetCurrentUOPS(
        ULONG *uops) = 0;

    virtual HRESULT STDMETHODCALLTYPE GetAllSPRMs(
        SPRMARRAY *regs) = 0;

    virtual HRESULT STDMETHODCALLTYPE GetAllGPRMs(
        GPRMARRAY *regs) = 0;

    virtual HRESULT STDMETHODCALLTYPE GetAudioLanguage(
        ULONG stream,
        LCID *language) = 0;

    virtual HRESULT STDMETHODCALLTYPE GetSubpictureLanguage(
        ULONG stream,
        LCID *language) = 0;

    virtual HRESULT STDMETHODCALLTYPE GetTitleAttributes(
        ULONG index,
        DVD_MenuAttributes *menu,
        DVD_TitleAttributes *title) = 0;

    virtual HRESULT STDMETHODCALLTYPE GetVMGAttributes(
        DVD_MenuAttributes *attr) = 0;

    virtual HRESULT STDMETHODCALLTYPE GetVideoAttributes(
        DVD_VideoAttributes *attr) = 0;

    virtual HRESULT STDMETHODCALLTYPE GetAudioAttributes(
        ULONG stream,
        DVD_AudioAttributes *attr) = 0;

    virtual HRESULT STDMETHODCALLTYPE GetKaraokeAttributes(
        ULONG stream,
        DVD_KaraokeAttributes *attr) = 0;

    virtual HRESULT STDMETHODCALLTYPE GetSubpictureAttributes(
        ULONG stream,
        DVD_SubpictureAttributes *attr) = 0;

    virtual HRESULT STDMETHODCALLTYPE GetCurrentVolumeInfo(
        ULONG *volume_count,
        ULONG *current,
        DVD_DISC_SIDE *side,
        ULONG *title_count) = 0;

    virtual HRESULT STDMETHODCALLTYPE GetDVDTextNumberOfLanguages(
        ULONG *count) = 0;

    virtual HRESULT STDMETHODCALLTYPE GetDVDTextLanguageInfo(
        ULONG index,
        ULONG *string_count,
        LCID *language,
        enum DVD_TextCharSet *character_set) = 0;

    virtual HRESULT STDMETHODCALLTYPE GetDVDTextStringAsNative(
        ULONG lang_index,
        ULONG string_index,
        BYTE *string,
        ULONG size,
        ULONG *ret_size,
        enum DVD_TextStringType *type) = 0;

    virtual HRESULT STDMETHODCALLTYPE GetDVDTextStringAsUnicode(
        ULONG lang_index,
        ULONG string_index,
        WCHAR *string,
        ULONG size,
        ULONG *ret_size,
        enum DVD_TextStringType *type) = 0;

    virtual HRESULT STDMETHODCALLTYPE GetPlayerParentalLevel(
        ULONG *level,
        BYTE country_code[2]) = 0;

    virtual HRESULT STDMETHODCALLTYPE GetNumberOfChapters(
        ULONG title,
        ULONG *count) = 0;

    virtual HRESULT STDMETHODCALLTYPE GetTitleParentalLevels(
        ULONG title,
        ULONG *levels) = 0;

    virtual HRESULT STDMETHODCALLTYPE GetDVDDirectory(
        WCHAR *path,
        ULONG size,
        ULONG *ret_size) = 0;

    virtual HRESULT STDMETHODCALLTYPE IsAudioStreamEnabled(
        ULONG stream,
        BOOL *enable) = 0;

    virtual HRESULT STDMETHODCALLTYPE GetDiscID(
        const WCHAR *path,
        ULONGLONG *id) = 0;

    virtual HRESULT STDMETHODCALLTYPE GetState(
        IDvdState **state) = 0;

    virtual HRESULT STDMETHODCALLTYPE GetMenuLanguages(
        LCID *languages,
        ULONG count,
        ULONG *ret_count) = 0;

    virtual HRESULT STDMETHODCALLTYPE GetButtonAtPosition(
        POINT point,
        ULONG *button) = 0;

    virtual HRESULT STDMETHODCALLTYPE GetCmdFromEvent(
        LONG_PTR param,
        IDvdCmd **cmd) = 0;

    virtual HRESULT STDMETHODCALLTYPE GetDefaultMenuLanguage(
        LCID *language) = 0;

    virtual HRESULT STDMETHODCALLTYPE GetDefaultAudioLanguage(
        LCID *language,
        DVD_AUDIO_LANG_EXT *extension) = 0;

    virtual HRESULT STDMETHODCALLTYPE SelectDefaultSubpictureLanguage(
        LCID *language,
        DVD_SUBPICTURE_LANG_EXT *extension) = 0;

    virtual HRESULT STDMETHODCALLTYPE GetDecoderCaps(
        DVD_DECODER_CAPS *caps) = 0;

    virtual HRESULT STDMETHODCALLTYPE GetButtonRect(
        ULONG button,
        RECT *rect) = 0;

    virtual HRESULT STDMETHODCALLTYPE IsSubpictureStreamEnabled(
        ULONG stream,
        BOOL *enable) = 0;

};
#ifdef __CRT_UUID_DECL
__CRT_UUID_DECL(IDvdInfo2, 0x34151510, 0xeec0, 0x11d2, 0x82,0x01, 0x00,0xa0,0xc9,0xd7,0x48,0x42)
#endif
#else
typedef struct IDvdInfo2Vtbl {
    BEGIN_INTERFACE

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

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

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

    /*** IDvdInfo2 methods ***/
    HRESULT (STDMETHODCALLTYPE *GetCurrentDomain)(
        IDvdInfo2 *This,
        DVD_DOMAIN *domain);

    HRESULT (STDMETHODCALLTYPE *GetCurrentLocation)(
        IDvdInfo2 *This,
        DVD_PLAYBACK_LOCATION2 *location);

    HRESULT (STDMETHODCALLTYPE *GetTotalTitleTime)(
        IDvdInfo2 *This,
        DVD_HMSF_TIMECODE *time,
        ULONG *flags);

    HRESULT (STDMETHODCALLTYPE *GetCurrentButton)(
        IDvdInfo2 *This,
        ULONG *count,
        ULONG *current);

    HRESULT (STDMETHODCALLTYPE *GetCurrentAngle)(
        IDvdInfo2 *This,
        ULONG *count,
        ULONG *current);

    HRESULT (STDMETHODCALLTYPE *GetCurrentAudio)(
        IDvdInfo2 *This,
        ULONG *count,
        ULONG *current);

    HRESULT (STDMETHODCALLTYPE *GetCurrentSubpicture)(
        IDvdInfo2 *This,
        ULONG *count,
        ULONG *current,
        BOOL *enable);

    HRESULT (STDMETHODCALLTYPE *GetCurrentUOPS)(
        IDvdInfo2 *This,
        ULONG *uops);

    HRESULT (STDMETHODCALLTYPE *GetAllSPRMs)(
        IDvdInfo2 *This,
        SPRMARRAY *regs);

    HRESULT (STDMETHODCALLTYPE *GetAllGPRMs)(
        IDvdInfo2 *This,
        GPRMARRAY *regs);

    HRESULT (STDMETHODCALLTYPE *GetAudioLanguage)(
        IDvdInfo2 *This,
        ULONG stream,
        LCID *language);

    HRESULT (STDMETHODCALLTYPE *GetSubpictureLanguage)(
        IDvdInfo2 *This,
        ULONG stream,
        LCID *language);

    HRESULT (STDMETHODCALLTYPE *GetTitleAttributes)(
        IDvdInfo2 *This,
        ULONG index,
        DVD_MenuAttributes *menu,
        DVD_TitleAttributes *title);

    HRESULT (STDMETHODCALLTYPE *GetVMGAttributes)(
        IDvdInfo2 *This,
        DVD_MenuAttributes *attr);

    HRESULT (STDMETHODCALLTYPE *GetVideoAttributes)(
        IDvdInfo2 *This,
        DVD_VideoAttributes *attr);

    HRESULT (STDMETHODCALLTYPE *GetAudioAttributes)(
        IDvdInfo2 *This,
        ULONG stream,
        DVD_AudioAttributes *attr);

    HRESULT (STDMETHODCALLTYPE *GetKaraokeAttributes)(
        IDvdInfo2 *This,
        ULONG stream,
        DVD_KaraokeAttributes *attr);

    HRESULT (STDMETHODCALLTYPE *GetSubpictureAttributes)(
        IDvdInfo2 *This,
        ULONG stream,
        DVD_SubpictureAttributes *attr);

    HRESULT (STDMETHODCALLTYPE *GetCurrentVolumeInfo)(
        IDvdInfo2 *This,
        ULONG *volume_count,
        ULONG *current,
        DVD_DISC_SIDE *side,
        ULONG *title_count);

    HRESULT (STDMETHODCALLTYPE *GetDVDTextNumberOfLanguages)(
        IDvdInfo2 *This,
        ULONG *count);

    HRESULT (STDMETHODCALLTYPE *GetDVDTextLanguageInfo)(
        IDvdInfo2 *This,
        ULONG index,
        ULONG *string_count,
        LCID *language,
        enum DVD_TextCharSet *character_set);

    HRESULT (STDMETHODCALLTYPE *GetDVDTextStringAsNative)(
        IDvdInfo2 *This,
        ULONG lang_index,
        ULONG string_index,
        BYTE *string,
        ULONG size,
        ULONG *ret_size,
        enum DVD_TextStringType *type);

    HRESULT (STDMETHODCALLTYPE *GetDVDTextStringAsUnicode)(
        IDvdInfo2 *This,
        ULONG lang_index,
        ULONG string_index,
        WCHAR *string,
        ULONG size,
        ULONG *ret_size,
        enum DVD_TextStringType *type);

    HRESULT (STDMETHODCALLTYPE *GetPlayerParentalLevel)(
        IDvdInfo2 *This,
        ULONG *level,
        BYTE country_code[2]);

    HRESULT (STDMETHODCALLTYPE *GetNumberOfChapters)(
        IDvdInfo2 *This,
        ULONG title,
        ULONG *count);

    HRESULT (STDMETHODCALLTYPE *GetTitleParentalLevels)(
        IDvdInfo2 *This,
        ULONG title,
        ULONG *levels);

    HRESULT (STDMETHODCALLTYPE *GetDVDDirectory)(
        IDvdInfo2 *This,
        WCHAR *path,
        ULONG size,
        ULONG *ret_size);

    HRESULT (STDMETHODCALLTYPE *IsAudioStreamEnabled)(
        IDvdInfo2 *This,
        ULONG stream,
        BOOL *enable);

    HRESULT (STDMETHODCALLTYPE *GetDiscID)(
        IDvdInfo2 *This,
        const WCHAR *path,
        ULONGLONG *id);

    HRESULT (STDMETHODCALLTYPE *GetState)(
        IDvdInfo2 *This,
        IDvdState **state);

    HRESULT (STDMETHODCALLTYPE *GetMenuLanguages)(
        IDvdInfo2 *This,
        LCID *languages,
        ULONG count,
        ULONG *ret_count);

    HRESULT (STDMETHODCALLTYPE *GetButtonAtPosition)(
        IDvdInfo2 *This,
        POINT point,
        ULONG *button);

    HRESULT (STDMETHODCALLTYPE *GetCmdFromEvent)(
        IDvdInfo2 *This,
        LONG_PTR param,
        IDvdCmd **cmd);

    HRESULT (STDMETHODCALLTYPE *GetDefaultMenuLanguage)(
        IDvdInfo2 *This,
        LCID *language);

    HRESULT (STDMETHODCALLTYPE *GetDefaultAudioLanguage)(
        IDvdInfo2 *This,
        LCID *language,
        DVD_AUDIO_LANG_EXT *extension);

    HRESULT (STDMETHODCALLTYPE *SelectDefaultSubpictureLanguage)(
        IDvdInfo2 *This,
        LCID *language,
        DVD_SUBPICTURE_LANG_EXT *extension);

    HRESULT (STDMETHODCALLTYPE *GetDecoderCaps)(
        IDvdInfo2 *This,
        DVD_DECODER_CAPS *caps);

    HRESULT (STDMETHODCALLTYPE *GetButtonRect)(
        IDvdInfo2 *This,
        ULONG button,
        RECT *rect);

    HRESULT (STDMETHODCALLTYPE *IsSubpictureStreamEnabled)(
        IDvdInfo2 *This,
        ULONG stream,
        BOOL *enable);

    END_INTERFACE
} IDvdInfo2Vtbl;

interface IDvdInfo2 {
    CONST_VTBL IDvdInfo2Vtbl* lpVtbl;
};

#ifdef COBJMACROS
#ifndef WIDL_C_INLINE_WRAPPERS
/*** IUnknown methods ***/
#define IDvdInfo2_QueryInterface(This,riid,ppvObject) (This)->lpVtbl->QueryInterface(This,riid,ppvObject)
#define IDvdInfo2_AddRef(This) (This)->lpVtbl->AddRef(This)
#define IDvdInfo2_Release(This) (This)->lpVtbl->Release(This)
/*** IDvdInfo2 methods ***/
#define IDvdInfo2_GetCurrentDomain(This,domain) (This)->lpVtbl->GetCurrentDomain(This,domain)
#define IDvdInfo2_GetCurrentLocation(This,location) (This)->lpVtbl->GetCurrentLocation(This,location)
#define IDvdInfo2_GetTotalTitleTime(This,time,flags) (This)->lpVtbl->GetTotalTitleTime(This,time,flags)
#define IDvdInfo2_GetCurrentButton(This,count,current) (This)->lpVtbl->GetCurrentButton(This,count,current)
#define IDvdInfo2_GetCurrentAngle(This,count,current) (This)->lpVtbl->GetCurrentAngle(This,count,current)
#define IDvdInfo2_GetCurrentAudio(This,count,current) (This)->lpVtbl->GetCurrentAudio(This,count,current)
#define IDvdInfo2_GetCurrentSubpicture(This,count,current,enable) (This)->lpVtbl->GetCurrentSubpicture(This,count,current,enable)
#define IDvdInfo2_GetCurrentUOPS(This,uops) (This)->lpVtbl->GetCurrentUOPS(This,uops)
#define IDvdInfo2_GetAllSPRMs(This,regs) (This)->lpVtbl->GetAllSPRMs(This,regs)
#define IDvdInfo2_GetAllGPRMs(This,regs) (This)->lpVtbl->GetAllGPRMs(This,regs)
#define IDvdInfo2_GetAudioLanguage(This,stream,language) (This)->lpVtbl->GetAudioLanguage(This,stream,language)
#define IDvdInfo2_GetSubpictureLanguage(This,stream,language) (This)->lpVtbl->GetSubpictureLanguage(This,stream,language)
#define IDvdInfo2_GetTitleAttributes(This,index,menu,title) (This)->lpVtbl->GetTitleAttributes(This,index,menu,title)
#define IDvdInfo2_GetVMGAttributes(This,attr) (This)->lpVtbl->GetVMGAttributes(This,attr)
#define IDvdInfo2_GetVideoAttributes(This,attr) (This)->lpVtbl->GetVideoAttributes(This,attr)
#define IDvdInfo2_GetAudioAttributes(This,stream,attr) (This)->lpVtbl->GetAudioAttributes(This,stream,attr)
#define IDvdInfo2_GetKaraokeAttributes(This,stream,attr) (This)->lpVtbl->GetKaraokeAttributes(This,stream,attr)
#define IDvdInfo2_GetSubpictureAttributes(This,stream,attr) (This)->lpVtbl->GetSubpictureAttributes(This,stream,attr)
#define IDvdInfo2_GetCurrentVolumeInfo(This,volume_count,current,side,title_count) (This)->lpVtbl->GetCurrentVolumeInfo(This,volume_count,current,side,title_count)
#define IDvdInfo2_GetDVDTextNumberOfLanguages(This,count) (This)->lpVtbl->GetDVDTextNumberOfLanguages(This,count)
#define IDvdInfo2_GetDVDTextLanguageInfo(This,index,string_count,language,character_set) (This)->lpVtbl->GetDVDTextLanguageInfo(This,index,string_count,language,character_set)
#define IDvdInfo2_GetDVDTextStringAsNative(This,lang_index,string_index,string,size,ret_size,type) (This)->lpVtbl->GetDVDTextStringAsNative(This,lang_index,string_index,string,size,ret_size,type)
#define IDvdInfo2_GetDVDTextStringAsUnicode(This,lang_index,string_index,string,size,ret_size,type) (This)->lpVtbl->GetDVDTextStringAsUnicode(This,lang_index,string_index,string,size,ret_size,type)
#define IDvdInfo2_GetPlayerParentalLevel(This,level,country_code) (This)->lpVtbl->GetPlayerParentalLevel(This,level,country_code)
#define IDvdInfo2_GetNumberOfChapters(This,title,count) (This)->lpVtbl->GetNumberOfChapters(This,title,count)
#define IDvdInfo2_GetTitleParentalLevels(This,title,levels) (This)->lpVtbl->GetTitleParentalLevels(This,title,levels)
#define IDvdInfo2_GetDVDDirectory(This,path,size,ret_size) (This)->lpVtbl->GetDVDDirectory(This,path,size,ret_size)
#define IDvdInfo2_IsAudioStreamEnabled(This,stream,enable) (This)->lpVtbl->IsAudioStreamEnabled(This,stream,enable)
#define IDvdInfo2_GetDiscID(This,path,id) (This)->lpVtbl->GetDiscID(This,path,id)
#define IDvdInfo2_GetState(This,state) (This)->lpVtbl->GetState(This,state)
#define IDvdInfo2_GetMenuLanguages(This,languages,count,ret_count) (This)->lpVtbl->GetMenuLanguages(This,languages,count,ret_count)
#define IDvdInfo2_GetButtonAtPosition(This,point,button) (This)->lpVtbl->GetButtonAtPosition(This,point,button)
#define IDvdInfo2_GetCmdFromEvent(This,param,cmd) (This)->lpVtbl->GetCmdFromEvent(This,param,cmd)
#define IDvdInfo2_GetDefaultMenuLanguage(This,language) (This)->lpVtbl->GetDefaultMenuLanguage(This,language)
#define IDvdInfo2_GetDefaultAudioLanguage(This,language,extension) (This)->lpVtbl->GetDefaultAudioLanguage(This,language,extension)
#define IDvdInfo2_SelectDefaultSubpictureLanguage(This,language,extension) (This)->lpVtbl->SelectDefaultSubpictureLanguage(This,language,extension)
#define IDvdInfo2_GetDecoderCaps(This,caps) (This)->lpVtbl->GetDecoderCaps(This,caps)
#define IDvdInfo2_GetButtonRect(This,button,rect) (This)->lpVtbl->GetButtonRect(This,button,rect)
#define IDvdInfo2_IsSubpictureStreamEnabled(This,stream,enable) (This)->lpVtbl->IsSubpictureStreamEnabled(This,stream,enable)
#else
/*** IUnknown methods ***/
static FORCEINLINE HRESULT IDvdInfo2_QueryInterface(IDvdInfo2* This,REFIID riid,void **ppvObject) {
    return This->lpVtbl->QueryInterface(This,riid,ppvObject);
}
static FORCEINLINE ULONG IDvdInfo2_AddRef(IDvdInfo2* This) {
    return This->lpVtbl->AddRef(This);
}
static FORCEINLINE ULONG IDvdInfo2_Release(IDvdInfo2* This) {
    return This->lpVtbl->Release(This);
}
/*** IDvdInfo2 methods ***/
static FORCEINLINE HRESULT IDvdInfo2_GetCurrentDomain(IDvdInfo2* This,DVD_DOMAIN *domain) {
    return This->lpVtbl->GetCurrentDomain(This,domain);
}
static FORCEINLINE HRESULT IDvdInfo2_GetCurrentLocation(IDvdInfo2* This,DVD_PLAYBACK_LOCATION2 *location) {
    return This->lpVtbl->GetCurrentLocation(This,location);
}
static FORCEINLINE HRESULT IDvdInfo2_GetTotalTitleTime(IDvdInfo2* This,DVD_HMSF_TIMECODE *time,ULONG *flags) {
    return This->lpVtbl->GetTotalTitleTime(This,time,flags);
}
static FORCEINLINE HRESULT IDvdInfo2_GetCurrentButton(IDvdInfo2* This,ULONG *count,ULONG *current) {
    return This->lpVtbl->GetCurrentButton(This,count,current);
}
static FORCEINLINE HRESULT IDvdInfo2_GetCurrentAngle(IDvdInfo2* This,ULONG *count,ULONG *current) {
    return This->lpVtbl->GetCurrentAngle(This,count,current);
}
static FORCEINLINE HRESULT IDvdInfo2_GetCurrentAudio(IDvdInfo2* This,ULONG *count,ULONG *current) {
    return This->lpVtbl->GetCurrentAudio(This,count,current);
}
static FORCEINLINE HRESULT IDvdInfo2_GetCurrentSubpicture(IDvdInfo2* This,ULONG *count,ULONG *current,BOOL *enable) {
    return This->lpVtbl->GetCurrentSubpicture(This,count,current,enable);
}
static FORCEINLINE HRESULT IDvdInfo2_GetCurrentUOPS(IDvdInfo2* This,ULONG *uops) {
    return This->lpVtbl->GetCurrentUOPS(This,uops);
}
static FORCEINLINE HRESULT IDvdInfo2_GetAllSPRMs(IDvdInfo2* This,SPRMARRAY *regs) {
    return This->lpVtbl->GetAllSPRMs(This,regs);
}
static FORCEINLINE HRESULT IDvdInfo2_GetAllGPRMs(IDvdInfo2* This,GPRMARRAY *regs) {
    return This->lpVtbl->GetAllGPRMs(This,regs);
}
static FORCEINLINE HRESULT IDvdInfo2_GetAudioLanguage(IDvdInfo2* This,ULONG stream,LCID *language) {
    return This->lpVtbl->GetAudioLanguage(This,stream,language);
}
static FORCEINLINE HRESULT IDvdInfo2_GetSubpictureLanguage(IDvdInfo2* This,ULONG stream,LCID *language) {
    return This->lpVtbl->GetSubpictureLanguage(This,stream,language);
}
static FORCEINLINE HRESULT IDvdInfo2_GetTitleAttributes(IDvdInfo2* This,ULONG index,DVD_MenuAttributes *menu,DVD_TitleAttributes *title) {
    return This->lpVtbl->GetTitleAttributes(This,index,menu,title);
}
static FORCEINLINE HRESULT IDvdInfo2_GetVMGAttributes(IDvdInfo2* This,DVD_MenuAttributes *attr) {
    return This->lpVtbl->GetVMGAttributes(This,attr);
}
static FORCEINLINE HRESULT IDvdInfo2_GetVideoAttributes(IDvdInfo2* This,DVD_VideoAttributes *attr) {
    return This->lpVtbl->GetVideoAttributes(This,attr);
}
static FORCEINLINE HRESULT IDvdInfo2_GetAudioAttributes(IDvdInfo2* This,ULONG stream,DVD_AudioAttributes *attr) {
    return This->lpVtbl->GetAudioAttributes(This,stream,attr);
}
static FORCEINLINE HRESULT IDvdInfo2_GetKaraokeAttributes(IDvdInfo2* This,ULONG stream,DVD_KaraokeAttributes *attr) {
    return This->lpVtbl->GetKaraokeAttributes(This,stream,attr);
}
static FORCEINLINE HRESULT IDvdInfo2_GetSubpictureAttributes(IDvdInfo2* This,ULONG stream,DVD_SubpictureAttributes *attr) {
    return This->lpVtbl->GetSubpictureAttributes(This,stream,attr);
}
static FORCEINLINE HRESULT IDvdInfo2_GetCurrentVolumeInfo(IDvdInfo2* This,ULONG *volume_count,ULONG *current,DVD_DISC_SIDE *side,ULONG *title_count) {
    return This->lpVtbl->GetCurrentVolumeInfo(This,volume_count,current,side,title_count);
}
static FORCEINLINE HRESULT IDvdInfo2_GetDVDTextNumberOfLanguages(IDvdInfo2* This,ULONG *count) {
    return This->lpVtbl->GetDVDTextNumberOfLanguages(This,count);
}
static FORCEINLINE HRESULT IDvdInfo2_GetDVDTextLanguageInfo(IDvdInfo2* This,ULONG index,ULONG *string_count,LCID *language,enum DVD_TextCharSet *character_set) {
    return This->lpVtbl->GetDVDTextLanguageInfo(This,index,string_count,language,character_set);
}
static FORCEINLINE HRESULT IDvdInfo2_GetDVDTextStringAsNative(IDvdInfo2* This,ULONG lang_index,ULONG string_index,BYTE *string,ULONG size,ULONG *ret_size,enum DVD_TextStringType *type) {
    return This->lpVtbl->GetDVDTextStringAsNative(This,lang_index,string_index,string,size,ret_size,type);
}
static FORCEINLINE HRESULT IDvdInfo2_GetDVDTextStringAsUnicode(IDvdInfo2* This,ULONG lang_index,ULONG string_index,WCHAR *string,ULONG size,ULONG *ret_size,enum DVD_TextStringType *type) {
    return This->lpVtbl->GetDVDTextStringAsUnicode(This,lang_index,string_index,string,size,ret_size,type);
}
static FORCEINLINE HRESULT IDvdInfo2_GetPlayerParentalLevel(IDvdInfo2* This,ULONG *level,BYTE country_code[2]) {
    return This->lpVtbl->GetPlayerParentalLevel(This,level,country_code);
}
static FORCEINLINE HRESULT IDvdInfo2_GetNumberOfChapters(IDvdInfo2* This,ULONG title,ULONG *count) {
    return This->lpVtbl->GetNumberOfChapters(This,title,count);
}
static FORCEINLINE HRESULT IDvdInfo2_GetTitleParentalLevels(IDvdInfo2* This,ULONG title,ULONG *levels) {
    return This->lpVtbl->GetTitleParentalLevels(This,title,levels);
}
static FORCEINLINE HRESULT IDvdInfo2_GetDVDDirectory(IDvdInfo2* This,WCHAR *path,ULONG size,ULONG *ret_size) {
    return This->lpVtbl->GetDVDDirectory(This,path,size,ret_size);
}
static FORCEINLINE HRESULT IDvdInfo2_IsAudioStreamEnabled(IDvdInfo2* This,ULONG stream,BOOL *enable) {
    return This->lpVtbl->IsAudioStreamEnabled(This,stream,enable);
}
static FORCEINLINE HRESULT IDvdInfo2_GetDiscID(IDvdInfo2* This,const WCHAR *path,ULONGLONG *id) {
    return This->lpVtbl->GetDiscID(This,path,id);
}
static FORCEINLINE HRESULT IDvdInfo2_GetState(IDvdInfo2* This,IDvdState **state) {
    return This->lpVtbl->GetState(This,state);
}
static FORCEINLINE HRESULT IDvdInfo2_GetMenuLanguages(IDvdInfo2* This,LCID *languages,ULONG count,ULONG *ret_count) {
    return This->lpVtbl->GetMenuLanguages(This,languages,count,ret_count);
}
static FORCEINLINE HRESULT IDvdInfo2_GetButtonAtPosition(IDvdInfo2* This,POINT point,ULONG *button) {
    return This->lpVtbl->GetButtonAtPosition(This,point,button);
}
static FORCEINLINE HRESULT IDvdInfo2_GetCmdFromEvent(IDvdInfo2* This,LONG_PTR param,IDvdCmd **cmd) {
    return This->lpVtbl->GetCmdFromEvent(This,param,cmd);
}
static FORCEINLINE HRESULT IDvdInfo2_GetDefaultMenuLanguage(IDvdInfo2* This,LCID *language) {
    return This->lpVtbl->GetDefaultMenuLanguage(This,language);
}
static FORCEINLINE HRESULT IDvdInfo2_GetDefaultAudioLanguage(IDvdInfo2* This,LCID *language,DVD_AUDIO_LANG_EXT *extension) {
    return This->lpVtbl->GetDefaultAudioLanguage(This,language,extension);
}
static FORCEINLINE HRESULT IDvdInfo2_SelectDefaultSubpictureLanguage(IDvdInfo2* This,LCID *language,DVD_SUBPICTURE_LANG_EXT *extension) {
    return This->lpVtbl->SelectDefaultSubpictureLanguage(This,language,extension);
}
static FORCEINLINE HRESULT IDvdInfo2_GetDecoderCaps(IDvdInfo2* This,DVD_DECODER_CAPS *caps) {
    return This->lpVtbl->GetDecoderCaps(This,caps);
}
static FORCEINLINE HRESULT IDvdInfo2_GetButtonRect(IDvdInfo2* This,ULONG button,RECT *rect) {
    return This->lpVtbl->GetButtonRect(This,button,rect);
}
static FORCEINLINE HRESULT IDvdInfo2_IsSubpictureStreamEnabled(IDvdInfo2* This,ULONG stream,BOOL *enable) {
    return This->lpVtbl->IsSubpictureStreamEnabled(This,stream,enable);
}
#endif
#endif

#endif


#endif  /* __IDvdInfo2_INTERFACE_DEFINED__ */

/*****************************************************************************
 * IDvdGraphBuilder interface
 */
#ifndef __IDvdGraphBuilder_INTERFACE_DEFINED__
#define __IDvdGraphBuilder_INTERFACE_DEFINED__

DEFINE_GUID(IID_IDvdGraphBuilder, 0xfcc152b6, 0xf372, 0x11d0, 0x8e,0x00, 0x00,0xc0,0x4f,0xd7,0xc0,0x8b);
#if defined(__cplusplus) && !defined(CINTERFACE)
MIDL_INTERFACE("fcc152b6-f372-11d0-8e00-00c04fd7c08b")
IDvdGraphBuilder : public IUnknown
{
    virtual HRESULT STDMETHODCALLTYPE GetFiltergraph(
        IGraphBuilder **graph) = 0;

    virtual HRESULT STDMETHODCALLTYPE GetDvdInterface(
        REFIID iid,
        void **out) = 0;

    virtual HRESULT STDMETHODCALLTYPE RenderDvdVideoVolume(
        const WCHAR *path,
        DWORD flags,
        AM_DVD_RENDERSTATUS *status) = 0;

};
#ifdef __CRT_UUID_DECL
__CRT_UUID_DECL(IDvdGraphBuilder, 0xfcc152b6, 0xf372, 0x11d0, 0x8e,0x00, 0x00,0xc0,0x4f,0xd7,0xc0,0x8b)
#endif
#else
typedef struct IDvdGraphBuilderVtbl {
    BEGIN_INTERFACE

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

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

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

    /*** IDvdGraphBuilder methods ***/
    HRESULT (STDMETHODCALLTYPE *GetFiltergraph)(
        IDvdGraphBuilder *This,
        IGraphBuilder **graph);

    HRESULT (STDMETHODCALLTYPE *GetDvdInterface)(
        IDvdGraphBuilder *This,
        REFIID iid,
        void **out);

    HRESULT (STDMETHODCALLTYPE *RenderDvdVideoVolume)(
        IDvdGraphBuilder *This,
        const WCHAR *path,
        DWORD flags,
        AM_DVD_RENDERSTATUS *status);

    END_INTERFACE
} IDvdGraphBuilderVtbl;

interface IDvdGraphBuilder {
    CONST_VTBL IDvdGraphBuilderVtbl* lpVtbl;
};

#ifdef COBJMACROS
#ifndef WIDL_C_INLINE_WRAPPERS
/*** IUnknown methods ***/
#define IDvdGraphBuilder_QueryInterface(This,riid,ppvObject) (This)->lpVtbl->QueryInterface(This,riid,ppvObject)
#define IDvdGraphBuilder_AddRef(This) (This)->lpVtbl->AddRef(This)
#define IDvdGraphBuilder_Release(This) (This)->lpVtbl->Release(This)
/*** IDvdGraphBuilder methods ***/
#define IDvdGraphBuilder_GetFiltergraph(This,graph) (This)->lpVtbl->GetFiltergraph(This,graph)
#define IDvdGraphBuilder_GetDvdInterface(This,iid,out) (This)->lpVtbl->GetDvdInterface(This,iid,out)
#define IDvdGraphBuilder_RenderDvdVideoVolume(This,path,flags,status) (This)->lpVtbl->RenderDvdVideoVolume(This,path,flags,status)
#else
/*** IUnknown methods ***/
static FORCEINLINE HRESULT IDvdGraphBuilder_QueryInterface(IDvdGraphBuilder* This,REFIID riid,void **ppvObject) {
    return This->lpVtbl->QueryInterface(This,riid,ppvObject);
}
static FORCEINLINE ULONG IDvdGraphBuilder_AddRef(IDvdGraphBuilder* This) {
    return This->lpVtbl->AddRef(This);
}
static FORCEINLINE ULONG IDvdGraphBuilder_Release(IDvdGraphBuilder* This) {
    return This->lpVtbl->Release(This);
}
/*** IDvdGraphBuilder methods ***/
static FORCEINLINE HRESULT IDvdGraphBuilder_GetFiltergraph(IDvdGraphBuilder* This,IGraphBuilder **graph) {
    return This->lpVtbl->GetFiltergraph(This,graph);
}
static FORCEINLINE HRESULT IDvdGraphBuilder_GetDvdInterface(IDvdGraphBuilder* This,REFIID iid,void **out) {
    return This->lpVtbl->GetDvdInterface(This,iid,out);
}
static FORCEINLINE HRESULT IDvdGraphBuilder_RenderDvdVideoVolume(IDvdGraphBuilder* This,const WCHAR *path,DWORD flags,AM_DVD_RENDERSTATUS *status) {
    return This->lpVtbl->RenderDvdVideoVolume(This,path,flags,status);
}
#endif
#endif

#endif


#endif  /* __IDvdGraphBuilder_INTERFACE_DEFINED__ */

/* Begin additional prototypes for all interfaces */


/* End additional prototypes */

#ifdef __cplusplus
}
#endif

#endif /* __strmif_h__ */
