/*** Autogenerated by WIDL 11.0 from ../wine-11.0/include/evr.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 __evr_h__
#define __evr_h__

/* Forward declarations */

#ifndef __IMFVideoPresenter_FWD_DEFINED__
#define __IMFVideoPresenter_FWD_DEFINED__
typedef interface IMFVideoPresenter IMFVideoPresenter;
#ifdef __cplusplus
interface IMFVideoPresenter;
#endif /* __cplusplus */
#endif

#ifndef __IEVRFilterConfig_FWD_DEFINED__
#define __IEVRFilterConfig_FWD_DEFINED__
typedef interface IEVRFilterConfig IEVRFilterConfig;
#ifdef __cplusplus
interface IEVRFilterConfig;
#endif /* __cplusplus */
#endif

#ifndef __IMFVideoPositionMapper_FWD_DEFINED__
#define __IMFVideoPositionMapper_FWD_DEFINED__
typedef interface IMFVideoPositionMapper IMFVideoPositionMapper;
#ifdef __cplusplus
interface IMFVideoPositionMapper;
#endif /* __cplusplus */
#endif

#ifndef __IMFVideoRenderer_FWD_DEFINED__
#define __IMFVideoRenderer_FWD_DEFINED__
typedef interface IMFVideoRenderer IMFVideoRenderer;
#ifdef __cplusplus
interface IMFVideoRenderer;
#endif /* __cplusplus */
#endif

#ifndef __IMFTopologyServiceLookup_FWD_DEFINED__
#define __IMFTopologyServiceLookup_FWD_DEFINED__
typedef interface IMFTopologyServiceLookup IMFTopologyServiceLookup;
#ifdef __cplusplus
interface IMFTopologyServiceLookup;
#endif /* __cplusplus */
#endif

#ifndef __IMFTopologyServiceLookupClient_FWD_DEFINED__
#define __IMFTopologyServiceLookupClient_FWD_DEFINED__
typedef interface IMFTopologyServiceLookupClient IMFTopologyServiceLookupClient;
#ifdef __cplusplus
interface IMFTopologyServiceLookupClient;
#endif /* __cplusplus */
#endif

#ifndef __IMFVideoDeviceID_FWD_DEFINED__
#define __IMFVideoDeviceID_FWD_DEFINED__
typedef interface IMFVideoDeviceID IMFVideoDeviceID;
#ifdef __cplusplus
interface IMFVideoDeviceID;
#endif /* __cplusplus */
#endif

#ifndef __IMFVideoMixerControl_FWD_DEFINED__
#define __IMFVideoMixerControl_FWD_DEFINED__
typedef interface IMFVideoMixerControl IMFVideoMixerControl;
#ifdef __cplusplus
interface IMFVideoMixerControl;
#endif /* __cplusplus */
#endif

#ifndef __IMFVideoMixerControl2_FWD_DEFINED__
#define __IMFVideoMixerControl2_FWD_DEFINED__
typedef interface IMFVideoMixerControl2 IMFVideoMixerControl2;
#ifdef __cplusplus
interface IMFVideoMixerControl2;
#endif /* __cplusplus */
#endif

#ifndef __IMFDesiredSample_FWD_DEFINED__
#define __IMFDesiredSample_FWD_DEFINED__
typedef interface IMFDesiredSample IMFDesiredSample;
#ifdef __cplusplus
interface IMFDesiredSample;
#endif /* __cplusplus */
#endif

#ifndef __IMFVideoDisplayControl_FWD_DEFINED__
#define __IMFVideoDisplayControl_FWD_DEFINED__
typedef interface IMFVideoDisplayControl IMFVideoDisplayControl;
#ifdef __cplusplus
interface IMFVideoDisplayControl;
#endif /* __cplusplus */
#endif

/* Headers for imported files */

#include <unknwn.h>
#include <propidl.h>
#include <mfidl.h>
#include <mftransform.h>
#include <mediaobj.h>
#include <strmif.h>

#ifdef __cplusplus
extern "C" {
#endif

#ifndef _MFVideoNormalizedRect_
#define _MFVideoNormalizedRect_
typedef struct MFVideoNormalizedRect {
    float left;
    float top;
    float right;
    float bottom;
} MFVideoNormalizedRect;
#endif
typedef enum _MFVP_MESSAGE_TYPE {
    MFVP_MESSAGE_FLUSH = 0,
    MFVP_MESSAGE_INVALIDATEMEDIATYPE = 1,
    MFVP_MESSAGE_PROCESSINPUTNOTIFY = 2,
    MFVP_MESSAGE_BEGINSTREAMING = 3,
    MFVP_MESSAGE_ENDSTREAMING = 4,
    MFVP_MESSAGE_ENDOFSTREAM = 5,
    MFVP_MESSAGE_STEP = 6,
    MFVP_MESSAGE_CANCELSTEP = 7
} MFVP_MESSAGE_TYPE;
/*****************************************************************************
 * IMFVideoPresenter interface
 */
#ifndef __IMFVideoPresenter_INTERFACE_DEFINED__
#define __IMFVideoPresenter_INTERFACE_DEFINED__

DEFINE_GUID(IID_IMFVideoPresenter, 0x29aff080, 0x182a, 0x4a5d, 0xaf,0x3b, 0x44,0x8f,0x3a,0x63,0x46,0xcb);
#if defined(__cplusplus) && !defined(CINTERFACE)
MIDL_INTERFACE("29aff080-182a-4a5d-af3b-448f3a6346cb")
IMFVideoPresenter : public IMFClockStateSink
{
    virtual HRESULT STDMETHODCALLTYPE ProcessMessage(
        MFVP_MESSAGE_TYPE eMessage,
        ULONG_PTR ulParam) = 0;

    virtual HRESULT STDMETHODCALLTYPE GetCurrentMediaType(
        IMFVideoMediaType **ppMediaType) = 0;

};
#ifdef __CRT_UUID_DECL
__CRT_UUID_DECL(IMFVideoPresenter, 0x29aff080, 0x182a, 0x4a5d, 0xaf,0x3b, 0x44,0x8f,0x3a,0x63,0x46,0xcb)
#endif
#else
typedef struct IMFVideoPresenterVtbl {
    BEGIN_INTERFACE

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

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

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

    /*** IMFClockStateSink methods ***/
    HRESULT (STDMETHODCALLTYPE *OnClockStart)(
        IMFVideoPresenter *This,
        MFTIME hnsSystemTime,
        LONGLONG llClockStartOffset);

    HRESULT (STDMETHODCALLTYPE *OnClockStop)(
        IMFVideoPresenter *This,
        MFTIME hnssSystemTime);

    HRESULT (STDMETHODCALLTYPE *OnClockPause)(
        IMFVideoPresenter *This,
        MFTIME hnsSystemTime);

    HRESULT (STDMETHODCALLTYPE *OnClockRestart)(
        IMFVideoPresenter *This,
        MFTIME hnsSystemTime);

    HRESULT (STDMETHODCALLTYPE *OnClockSetRate)(
        IMFVideoPresenter *This,
        MFTIME hnsSystemTime,
        float flRate);

    /*** IMFVideoPresenter methods ***/
    HRESULT (STDMETHODCALLTYPE *ProcessMessage)(
        IMFVideoPresenter *This,
        MFVP_MESSAGE_TYPE eMessage,
        ULONG_PTR ulParam);

    HRESULT (STDMETHODCALLTYPE *GetCurrentMediaType)(
        IMFVideoPresenter *This,
        IMFVideoMediaType **ppMediaType);

    END_INTERFACE
} IMFVideoPresenterVtbl;

interface IMFVideoPresenter {
    CONST_VTBL IMFVideoPresenterVtbl* lpVtbl;
};

#ifdef COBJMACROS
#ifndef WIDL_C_INLINE_WRAPPERS
/*** IUnknown methods ***/
#define IMFVideoPresenter_QueryInterface(This,riid,ppvObject) (This)->lpVtbl->QueryInterface(This,riid,ppvObject)
#define IMFVideoPresenter_AddRef(This) (This)->lpVtbl->AddRef(This)
#define IMFVideoPresenter_Release(This) (This)->lpVtbl->Release(This)
/*** IMFClockStateSink methods ***/
#define IMFVideoPresenter_OnClockStart(This,hnsSystemTime,llClockStartOffset) (This)->lpVtbl->OnClockStart(This,hnsSystemTime,llClockStartOffset)
#define IMFVideoPresenter_OnClockStop(This,hnssSystemTime) (This)->lpVtbl->OnClockStop(This,hnssSystemTime)
#define IMFVideoPresenter_OnClockPause(This,hnsSystemTime) (This)->lpVtbl->OnClockPause(This,hnsSystemTime)
#define IMFVideoPresenter_OnClockRestart(This,hnsSystemTime) (This)->lpVtbl->OnClockRestart(This,hnsSystemTime)
#define IMFVideoPresenter_OnClockSetRate(This,hnsSystemTime,flRate) (This)->lpVtbl->OnClockSetRate(This,hnsSystemTime,flRate)
/*** IMFVideoPresenter methods ***/
#define IMFVideoPresenter_ProcessMessage(This,eMessage,ulParam) (This)->lpVtbl->ProcessMessage(This,eMessage,ulParam)
#define IMFVideoPresenter_GetCurrentMediaType(This,ppMediaType) (This)->lpVtbl->GetCurrentMediaType(This,ppMediaType)
#else
/*** IUnknown methods ***/
static inline HRESULT IMFVideoPresenter_QueryInterface(IMFVideoPresenter* This,REFIID riid,void **ppvObject) {
    return This->lpVtbl->QueryInterface(This,riid,ppvObject);
}
static inline ULONG IMFVideoPresenter_AddRef(IMFVideoPresenter* This) {
    return This->lpVtbl->AddRef(This);
}
static inline ULONG IMFVideoPresenter_Release(IMFVideoPresenter* This) {
    return This->lpVtbl->Release(This);
}
/*** IMFClockStateSink methods ***/
static inline HRESULT IMFVideoPresenter_OnClockStart(IMFVideoPresenter* This,MFTIME hnsSystemTime,LONGLONG llClockStartOffset) {
    return This->lpVtbl->OnClockStart(This,hnsSystemTime,llClockStartOffset);
}
static inline HRESULT IMFVideoPresenter_OnClockStop(IMFVideoPresenter* This,MFTIME hnssSystemTime) {
    return This->lpVtbl->OnClockStop(This,hnssSystemTime);
}
static inline HRESULT IMFVideoPresenter_OnClockPause(IMFVideoPresenter* This,MFTIME hnsSystemTime) {
    return This->lpVtbl->OnClockPause(This,hnsSystemTime);
}
static inline HRESULT IMFVideoPresenter_OnClockRestart(IMFVideoPresenter* This,MFTIME hnsSystemTime) {
    return This->lpVtbl->OnClockRestart(This,hnsSystemTime);
}
static inline HRESULT IMFVideoPresenter_OnClockSetRate(IMFVideoPresenter* This,MFTIME hnsSystemTime,float flRate) {
    return This->lpVtbl->OnClockSetRate(This,hnsSystemTime,flRate);
}
/*** IMFVideoPresenter methods ***/
static inline HRESULT IMFVideoPresenter_ProcessMessage(IMFVideoPresenter* This,MFVP_MESSAGE_TYPE eMessage,ULONG_PTR ulParam) {
    return This->lpVtbl->ProcessMessage(This,eMessage,ulParam);
}
static inline HRESULT IMFVideoPresenter_GetCurrentMediaType(IMFVideoPresenter* This,IMFVideoMediaType **ppMediaType) {
    return This->lpVtbl->GetCurrentMediaType(This,ppMediaType);
}
#endif
#endif

#endif


#endif  /* __IMFVideoPresenter_INTERFACE_DEFINED__ */

/*****************************************************************************
 * IEVRFilterConfig interface
 */
#ifndef __IEVRFilterConfig_INTERFACE_DEFINED__
#define __IEVRFilterConfig_INTERFACE_DEFINED__

DEFINE_GUID(IID_IEVRFilterConfig, 0x83e91e85, 0x82c1, 0x4ea7, 0x80,0x1d, 0x85,0xdc,0x50,0xb7,0x50,0x86);
#if defined(__cplusplus) && !defined(CINTERFACE)
MIDL_INTERFACE("83e91e85-82c1-4ea7-801d-85dc50b75086")
IEVRFilterConfig : public IUnknown
{
    virtual HRESULT STDMETHODCALLTYPE SetNumberOfStreams(
        DWORD dwMaxStreams) = 0;

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

};
#ifdef __CRT_UUID_DECL
__CRT_UUID_DECL(IEVRFilterConfig, 0x83e91e85, 0x82c1, 0x4ea7, 0x80,0x1d, 0x85,0xdc,0x50,0xb7,0x50,0x86)
#endif
#else
typedef struct IEVRFilterConfigVtbl {
    BEGIN_INTERFACE

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

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

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

    /*** IEVRFilterConfig methods ***/
    HRESULT (STDMETHODCALLTYPE *SetNumberOfStreams)(
        IEVRFilterConfig *This,
        DWORD dwMaxStreams);

    HRESULT (STDMETHODCALLTYPE *GetNumberOfStreams)(
        IEVRFilterConfig *This,
        DWORD *pdwMaxStreams);

    END_INTERFACE
} IEVRFilterConfigVtbl;

interface IEVRFilterConfig {
    CONST_VTBL IEVRFilterConfigVtbl* lpVtbl;
};

#ifdef COBJMACROS
#ifndef WIDL_C_INLINE_WRAPPERS
/*** IUnknown methods ***/
#define IEVRFilterConfig_QueryInterface(This,riid,ppvObject) (This)->lpVtbl->QueryInterface(This,riid,ppvObject)
#define IEVRFilterConfig_AddRef(This) (This)->lpVtbl->AddRef(This)
#define IEVRFilterConfig_Release(This) (This)->lpVtbl->Release(This)
/*** IEVRFilterConfig methods ***/
#define IEVRFilterConfig_SetNumberOfStreams(This,dwMaxStreams) (This)->lpVtbl->SetNumberOfStreams(This,dwMaxStreams)
#define IEVRFilterConfig_GetNumberOfStreams(This,pdwMaxStreams) (This)->lpVtbl->GetNumberOfStreams(This,pdwMaxStreams)
#else
/*** IUnknown methods ***/
static inline HRESULT IEVRFilterConfig_QueryInterface(IEVRFilterConfig* This,REFIID riid,void **ppvObject) {
    return This->lpVtbl->QueryInterface(This,riid,ppvObject);
}
static inline ULONG IEVRFilterConfig_AddRef(IEVRFilterConfig* This) {
    return This->lpVtbl->AddRef(This);
}
static inline ULONG IEVRFilterConfig_Release(IEVRFilterConfig* This) {
    return This->lpVtbl->Release(This);
}
/*** IEVRFilterConfig methods ***/
static inline HRESULT IEVRFilterConfig_SetNumberOfStreams(IEVRFilterConfig* This,DWORD dwMaxStreams) {
    return This->lpVtbl->SetNumberOfStreams(This,dwMaxStreams);
}
static inline HRESULT IEVRFilterConfig_GetNumberOfStreams(IEVRFilterConfig* This,DWORD *pdwMaxStreams) {
    return This->lpVtbl->GetNumberOfStreams(This,pdwMaxStreams);
}
#endif
#endif

#endif


#endif  /* __IEVRFilterConfig_INTERFACE_DEFINED__ */

/*****************************************************************************
 * IMFVideoPositionMapper interface
 */
#ifndef __IMFVideoPositionMapper_INTERFACE_DEFINED__
#define __IMFVideoPositionMapper_INTERFACE_DEFINED__

DEFINE_GUID(IID_IMFVideoPositionMapper, 0x1f6a9f17, 0xe70b, 0x4e24, 0x8a,0xe4, 0x0b,0x2c,0x3b,0xa7,0xa4,0xae);
#if defined(__cplusplus) && !defined(CINTERFACE)
MIDL_INTERFACE("1f6a9f17-e70b-4e24-8ae4-0b2c3ba7a4ae")
IMFVideoPositionMapper : public IUnknown
{
    virtual HRESULT STDMETHODCALLTYPE MapOutputCoordinateToInputStream(
        float xOut,
        float yOut,
        DWORD dwOutputStreamIndex,
        DWORD dwInputStreamIndex,
        float *pxIn,
        float *pyIn) = 0;

};
#ifdef __CRT_UUID_DECL
__CRT_UUID_DECL(IMFVideoPositionMapper, 0x1f6a9f17, 0xe70b, 0x4e24, 0x8a,0xe4, 0x0b,0x2c,0x3b,0xa7,0xa4,0xae)
#endif
#else
typedef struct IMFVideoPositionMapperVtbl {
    BEGIN_INTERFACE

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

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

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

    /*** IMFVideoPositionMapper methods ***/
    HRESULT (STDMETHODCALLTYPE *MapOutputCoordinateToInputStream)(
        IMFVideoPositionMapper *This,
        float xOut,
        float yOut,
        DWORD dwOutputStreamIndex,
        DWORD dwInputStreamIndex,
        float *pxIn,
        float *pyIn);

    END_INTERFACE
} IMFVideoPositionMapperVtbl;

interface IMFVideoPositionMapper {
    CONST_VTBL IMFVideoPositionMapperVtbl* lpVtbl;
};

#ifdef COBJMACROS
#ifndef WIDL_C_INLINE_WRAPPERS
/*** IUnknown methods ***/
#define IMFVideoPositionMapper_QueryInterface(This,riid,ppvObject) (This)->lpVtbl->QueryInterface(This,riid,ppvObject)
#define IMFVideoPositionMapper_AddRef(This) (This)->lpVtbl->AddRef(This)
#define IMFVideoPositionMapper_Release(This) (This)->lpVtbl->Release(This)
/*** IMFVideoPositionMapper methods ***/
#define IMFVideoPositionMapper_MapOutputCoordinateToInputStream(This,xOut,yOut,dwOutputStreamIndex,dwInputStreamIndex,pxIn,pyIn) (This)->lpVtbl->MapOutputCoordinateToInputStream(This,xOut,yOut,dwOutputStreamIndex,dwInputStreamIndex,pxIn,pyIn)
#else
/*** IUnknown methods ***/
static inline HRESULT IMFVideoPositionMapper_QueryInterface(IMFVideoPositionMapper* This,REFIID riid,void **ppvObject) {
    return This->lpVtbl->QueryInterface(This,riid,ppvObject);
}
static inline ULONG IMFVideoPositionMapper_AddRef(IMFVideoPositionMapper* This) {
    return This->lpVtbl->AddRef(This);
}
static inline ULONG IMFVideoPositionMapper_Release(IMFVideoPositionMapper* This) {
    return This->lpVtbl->Release(This);
}
/*** IMFVideoPositionMapper methods ***/
static inline HRESULT IMFVideoPositionMapper_MapOutputCoordinateToInputStream(IMFVideoPositionMapper* This,float xOut,float yOut,DWORD dwOutputStreamIndex,DWORD dwInputStreamIndex,float *pxIn,float *pyIn) {
    return This->lpVtbl->MapOutputCoordinateToInputStream(This,xOut,yOut,dwOutputStreamIndex,dwInputStreamIndex,pxIn,pyIn);
}
#endif
#endif

#endif


#endif  /* __IMFVideoPositionMapper_INTERFACE_DEFINED__ */

/*****************************************************************************
 * IMFVideoRenderer interface
 */
#ifndef __IMFVideoRenderer_INTERFACE_DEFINED__
#define __IMFVideoRenderer_INTERFACE_DEFINED__

DEFINE_GUID(IID_IMFVideoRenderer, 0xdfdfd197, 0xa9ca, 0x43d8, 0xb3,0x41, 0x6a,0xf3,0x50,0x37,0x92,0xcd);
#if defined(__cplusplus) && !defined(CINTERFACE)
MIDL_INTERFACE("dfdfd197-a9ca-43d8-b341-6af3503792cd")
IMFVideoRenderer : public IUnknown
{
    virtual HRESULT STDMETHODCALLTYPE InitializeRenderer(
        IMFTransform *pVideoMixer,
        IMFVideoPresenter *pVideoPresenter) = 0;

};
#ifdef __CRT_UUID_DECL
__CRT_UUID_DECL(IMFVideoRenderer, 0xdfdfd197, 0xa9ca, 0x43d8, 0xb3,0x41, 0x6a,0xf3,0x50,0x37,0x92,0xcd)
#endif
#else
typedef struct IMFVideoRendererVtbl {
    BEGIN_INTERFACE

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

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

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

    /*** IMFVideoRenderer methods ***/
    HRESULT (STDMETHODCALLTYPE *InitializeRenderer)(
        IMFVideoRenderer *This,
        IMFTransform *pVideoMixer,
        IMFVideoPresenter *pVideoPresenter);

    END_INTERFACE
} IMFVideoRendererVtbl;

interface IMFVideoRenderer {
    CONST_VTBL IMFVideoRendererVtbl* lpVtbl;
};

#ifdef COBJMACROS
#ifndef WIDL_C_INLINE_WRAPPERS
/*** IUnknown methods ***/
#define IMFVideoRenderer_QueryInterface(This,riid,ppvObject) (This)->lpVtbl->QueryInterface(This,riid,ppvObject)
#define IMFVideoRenderer_AddRef(This) (This)->lpVtbl->AddRef(This)
#define IMFVideoRenderer_Release(This) (This)->lpVtbl->Release(This)
/*** IMFVideoRenderer methods ***/
#define IMFVideoRenderer_InitializeRenderer(This,pVideoMixer,pVideoPresenter) (This)->lpVtbl->InitializeRenderer(This,pVideoMixer,pVideoPresenter)
#else
/*** IUnknown methods ***/
static inline HRESULT IMFVideoRenderer_QueryInterface(IMFVideoRenderer* This,REFIID riid,void **ppvObject) {
    return This->lpVtbl->QueryInterface(This,riid,ppvObject);
}
static inline ULONG IMFVideoRenderer_AddRef(IMFVideoRenderer* This) {
    return This->lpVtbl->AddRef(This);
}
static inline ULONG IMFVideoRenderer_Release(IMFVideoRenderer* This) {
    return This->lpVtbl->Release(This);
}
/*** IMFVideoRenderer methods ***/
static inline HRESULT IMFVideoRenderer_InitializeRenderer(IMFVideoRenderer* This,IMFTransform *pVideoMixer,IMFVideoPresenter *pVideoPresenter) {
    return This->lpVtbl->InitializeRenderer(This,pVideoMixer,pVideoPresenter);
}
#endif
#endif

#endif


#endif  /* __IMFVideoRenderer_INTERFACE_DEFINED__ */

typedef enum _MF_SERVICE_LOOKUP_TYPE {
    MF_SERVICE_LOOKUP_UPSTREAM = 0,
    MF_SERVICE_LOOKUP_UPSTREAM_DIRECT = 1,
    MF_SERVICE_LOOKUP_DOWNSTREAM = 2,
    MF_SERVICE_LOOKUP_DOWNSTREAM_DIRECT = 3,
    MF_SERVICE_LOOKUP_ALL = 4,
    MF_SERVICE_LOOKUP_GLOBAL = 5
} MF_SERVICE_LOOKUP_TYPE;
/*****************************************************************************
 * IMFTopologyServiceLookup interface
 */
#ifndef __IMFTopologyServiceLookup_INTERFACE_DEFINED__
#define __IMFTopologyServiceLookup_INTERFACE_DEFINED__

DEFINE_GUID(IID_IMFTopologyServiceLookup, 0xfa993889, 0x4383, 0x415a, 0xa9,0x30, 0xdd,0x47,0x2a,0x8c,0xf6,0xf7);
#if defined(__cplusplus) && !defined(CINTERFACE)
MIDL_INTERFACE("fa993889-4383-415a-a930-dd472a8cf6f7")
IMFTopologyServiceLookup : public IUnknown
{
    virtual HRESULT STDMETHODCALLTYPE LookupService(
        MF_SERVICE_LOOKUP_TYPE lookup_type,
        DWORD index,
        REFGUID service,
        REFIID riid,
        void **objects,
        DWORD *num_objects) = 0;

};
#ifdef __CRT_UUID_DECL
__CRT_UUID_DECL(IMFTopologyServiceLookup, 0xfa993889, 0x4383, 0x415a, 0xa9,0x30, 0xdd,0x47,0x2a,0x8c,0xf6,0xf7)
#endif
#else
typedef struct IMFTopologyServiceLookupVtbl {
    BEGIN_INTERFACE

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

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

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

    /*** IMFTopologyServiceLookup methods ***/
    HRESULT (STDMETHODCALLTYPE *LookupService)(
        IMFTopologyServiceLookup *This,
        MF_SERVICE_LOOKUP_TYPE lookup_type,
        DWORD index,
        REFGUID service,
        REFIID riid,
        void **objects,
        DWORD *num_objects);

    END_INTERFACE
} IMFTopologyServiceLookupVtbl;

interface IMFTopologyServiceLookup {
    CONST_VTBL IMFTopologyServiceLookupVtbl* lpVtbl;
};

#ifdef COBJMACROS
#ifndef WIDL_C_INLINE_WRAPPERS
/*** IUnknown methods ***/
#define IMFTopologyServiceLookup_QueryInterface(This,riid,ppvObject) (This)->lpVtbl->QueryInterface(This,riid,ppvObject)
#define IMFTopologyServiceLookup_AddRef(This) (This)->lpVtbl->AddRef(This)
#define IMFTopologyServiceLookup_Release(This) (This)->lpVtbl->Release(This)
/*** IMFTopologyServiceLookup methods ***/
#define IMFTopologyServiceLookup_LookupService(This,lookup_type,index,service,riid,objects,num_objects) (This)->lpVtbl->LookupService(This,lookup_type,index,service,riid,objects,num_objects)
#else
/*** IUnknown methods ***/
static inline HRESULT IMFTopologyServiceLookup_QueryInterface(IMFTopologyServiceLookup* This,REFIID riid,void **ppvObject) {
    return This->lpVtbl->QueryInterface(This,riid,ppvObject);
}
static inline ULONG IMFTopologyServiceLookup_AddRef(IMFTopologyServiceLookup* This) {
    return This->lpVtbl->AddRef(This);
}
static inline ULONG IMFTopologyServiceLookup_Release(IMFTopologyServiceLookup* This) {
    return This->lpVtbl->Release(This);
}
/*** IMFTopologyServiceLookup methods ***/
static inline HRESULT IMFTopologyServiceLookup_LookupService(IMFTopologyServiceLookup* This,MF_SERVICE_LOOKUP_TYPE lookup_type,DWORD index,REFGUID service,REFIID riid,void **objects,DWORD *num_objects) {
    return This->lpVtbl->LookupService(This,lookup_type,index,service,riid,objects,num_objects);
}
#endif
#endif

#endif


#endif  /* __IMFTopologyServiceLookup_INTERFACE_DEFINED__ */

/*****************************************************************************
 * IMFTopologyServiceLookupClient interface
 */
#ifndef __IMFTopologyServiceLookupClient_INTERFACE_DEFINED__
#define __IMFTopologyServiceLookupClient_INTERFACE_DEFINED__

DEFINE_GUID(IID_IMFTopologyServiceLookupClient, 0xfa99388a, 0x4383, 0x415a, 0xa9,0x30, 0xdd,0x47,0x2a,0x8c,0xf6,0xf7);
#if defined(__cplusplus) && !defined(CINTERFACE)
MIDL_INTERFACE("fa99388a-4383-415a-a930-dd472a8cf6f7")
IMFTopologyServiceLookupClient : public IUnknown
{
    virtual HRESULT STDMETHODCALLTYPE InitServicePointers(
        IMFTopologyServiceLookup *service_lookup) = 0;

    virtual HRESULT STDMETHODCALLTYPE ReleaseServicePointers(
        ) = 0;

};
#ifdef __CRT_UUID_DECL
__CRT_UUID_DECL(IMFTopologyServiceLookupClient, 0xfa99388a, 0x4383, 0x415a, 0xa9,0x30, 0xdd,0x47,0x2a,0x8c,0xf6,0xf7)
#endif
#else
typedef struct IMFTopologyServiceLookupClientVtbl {
    BEGIN_INTERFACE

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

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

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

    /*** IMFTopologyServiceLookupClient methods ***/
    HRESULT (STDMETHODCALLTYPE *InitServicePointers)(
        IMFTopologyServiceLookupClient *This,
        IMFTopologyServiceLookup *service_lookup);

    HRESULT (STDMETHODCALLTYPE *ReleaseServicePointers)(
        IMFTopologyServiceLookupClient *This);

    END_INTERFACE
} IMFTopologyServiceLookupClientVtbl;

interface IMFTopologyServiceLookupClient {
    CONST_VTBL IMFTopologyServiceLookupClientVtbl* lpVtbl;
};

#ifdef COBJMACROS
#ifndef WIDL_C_INLINE_WRAPPERS
/*** IUnknown methods ***/
#define IMFTopologyServiceLookupClient_QueryInterface(This,riid,ppvObject) (This)->lpVtbl->QueryInterface(This,riid,ppvObject)
#define IMFTopologyServiceLookupClient_AddRef(This) (This)->lpVtbl->AddRef(This)
#define IMFTopologyServiceLookupClient_Release(This) (This)->lpVtbl->Release(This)
/*** IMFTopologyServiceLookupClient methods ***/
#define IMFTopologyServiceLookupClient_InitServicePointers(This,service_lookup) (This)->lpVtbl->InitServicePointers(This,service_lookup)
#define IMFTopologyServiceLookupClient_ReleaseServicePointers(This) (This)->lpVtbl->ReleaseServicePointers(This)
#else
/*** IUnknown methods ***/
static inline HRESULT IMFTopologyServiceLookupClient_QueryInterface(IMFTopologyServiceLookupClient* This,REFIID riid,void **ppvObject) {
    return This->lpVtbl->QueryInterface(This,riid,ppvObject);
}
static inline ULONG IMFTopologyServiceLookupClient_AddRef(IMFTopologyServiceLookupClient* This) {
    return This->lpVtbl->AddRef(This);
}
static inline ULONG IMFTopologyServiceLookupClient_Release(IMFTopologyServiceLookupClient* This) {
    return This->lpVtbl->Release(This);
}
/*** IMFTopologyServiceLookupClient methods ***/
static inline HRESULT IMFTopologyServiceLookupClient_InitServicePointers(IMFTopologyServiceLookupClient* This,IMFTopologyServiceLookup *service_lookup) {
    return This->lpVtbl->InitServicePointers(This,service_lookup);
}
static inline HRESULT IMFTopologyServiceLookupClient_ReleaseServicePointers(IMFTopologyServiceLookupClient* This) {
    return This->lpVtbl->ReleaseServicePointers(This);
}
#endif
#endif

#endif


#endif  /* __IMFTopologyServiceLookupClient_INTERFACE_DEFINED__ */

/*****************************************************************************
 * IMFVideoDeviceID interface
 */
#ifndef __IMFVideoDeviceID_INTERFACE_DEFINED__
#define __IMFVideoDeviceID_INTERFACE_DEFINED__

DEFINE_GUID(IID_IMFVideoDeviceID, 0xa38d9567, 0x5a9c, 0x4f3c, 0xb2,0x93, 0x8e,0xb4,0x15,0xb2,0x79,0xba);
#if defined(__cplusplus) && !defined(CINTERFACE)
MIDL_INTERFACE("a38d9567-5a9c-4f3c-b293-8eb415b279ba")
IMFVideoDeviceID : public IUnknown
{
    virtual HRESULT STDMETHODCALLTYPE GetDeviceID(
        IID *device_id) = 0;

};
#ifdef __CRT_UUID_DECL
__CRT_UUID_DECL(IMFVideoDeviceID, 0xa38d9567, 0x5a9c, 0x4f3c, 0xb2,0x93, 0x8e,0xb4,0x15,0xb2,0x79,0xba)
#endif
#else
typedef struct IMFVideoDeviceIDVtbl {
    BEGIN_INTERFACE

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

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

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

    /*** IMFVideoDeviceID methods ***/
    HRESULT (STDMETHODCALLTYPE *GetDeviceID)(
        IMFVideoDeviceID *This,
        IID *device_id);

    END_INTERFACE
} IMFVideoDeviceIDVtbl;

interface IMFVideoDeviceID {
    CONST_VTBL IMFVideoDeviceIDVtbl* lpVtbl;
};

#ifdef COBJMACROS
#ifndef WIDL_C_INLINE_WRAPPERS
/*** IUnknown methods ***/
#define IMFVideoDeviceID_QueryInterface(This,riid,ppvObject) (This)->lpVtbl->QueryInterface(This,riid,ppvObject)
#define IMFVideoDeviceID_AddRef(This) (This)->lpVtbl->AddRef(This)
#define IMFVideoDeviceID_Release(This) (This)->lpVtbl->Release(This)
/*** IMFVideoDeviceID methods ***/
#define IMFVideoDeviceID_GetDeviceID(This,device_id) (This)->lpVtbl->GetDeviceID(This,device_id)
#else
/*** IUnknown methods ***/
static inline HRESULT IMFVideoDeviceID_QueryInterface(IMFVideoDeviceID* This,REFIID riid,void **ppvObject) {
    return This->lpVtbl->QueryInterface(This,riid,ppvObject);
}
static inline ULONG IMFVideoDeviceID_AddRef(IMFVideoDeviceID* This) {
    return This->lpVtbl->AddRef(This);
}
static inline ULONG IMFVideoDeviceID_Release(IMFVideoDeviceID* This) {
    return This->lpVtbl->Release(This);
}
/*** IMFVideoDeviceID methods ***/
static inline HRESULT IMFVideoDeviceID_GetDeviceID(IMFVideoDeviceID* This,IID *device_id) {
    return This->lpVtbl->GetDeviceID(This,device_id);
}
#endif
#endif

#endif


#endif  /* __IMFVideoDeviceID_INTERFACE_DEFINED__ */

/*****************************************************************************
 * IMFVideoMixerControl interface
 */
#ifndef __IMFVideoMixerControl_INTERFACE_DEFINED__
#define __IMFVideoMixerControl_INTERFACE_DEFINED__

DEFINE_GUID(IID_IMFVideoMixerControl, 0xa5c6c53f, 0xc202, 0x4aa5, 0x96,0x95, 0x17,0x5b,0xa8,0xc5,0x08,0xa5);
#if defined(__cplusplus) && !defined(CINTERFACE)
MIDL_INTERFACE("a5c6c53f-c202-4aa5-9695-175ba8c508a5")
IMFVideoMixerControl : public IUnknown
{
    virtual HRESULT STDMETHODCALLTYPE SetStreamZOrder(
        DWORD stream_id,
        DWORD zorder) = 0;

    virtual HRESULT STDMETHODCALLTYPE GetStreamZOrder(
        DWORD stream_id,
        DWORD *zorder) = 0;

    virtual HRESULT STDMETHODCALLTYPE SetStreamOutputRect(
        DWORD stream_id,
        const MFVideoNormalizedRect *rect) = 0;

    virtual HRESULT STDMETHODCALLTYPE GetStreamOutputRect(
        DWORD stream_id,
        MFVideoNormalizedRect *rect) = 0;

};
#ifdef __CRT_UUID_DECL
__CRT_UUID_DECL(IMFVideoMixerControl, 0xa5c6c53f, 0xc202, 0x4aa5, 0x96,0x95, 0x17,0x5b,0xa8,0xc5,0x08,0xa5)
#endif
#else
typedef struct IMFVideoMixerControlVtbl {
    BEGIN_INTERFACE

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

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

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

    /*** IMFVideoMixerControl methods ***/
    HRESULT (STDMETHODCALLTYPE *SetStreamZOrder)(
        IMFVideoMixerControl *This,
        DWORD stream_id,
        DWORD zorder);

    HRESULT (STDMETHODCALLTYPE *GetStreamZOrder)(
        IMFVideoMixerControl *This,
        DWORD stream_id,
        DWORD *zorder);

    HRESULT (STDMETHODCALLTYPE *SetStreamOutputRect)(
        IMFVideoMixerControl *This,
        DWORD stream_id,
        const MFVideoNormalizedRect *rect);

    HRESULT (STDMETHODCALLTYPE *GetStreamOutputRect)(
        IMFVideoMixerControl *This,
        DWORD stream_id,
        MFVideoNormalizedRect *rect);

    END_INTERFACE
} IMFVideoMixerControlVtbl;

interface IMFVideoMixerControl {
    CONST_VTBL IMFVideoMixerControlVtbl* lpVtbl;
};

#ifdef COBJMACROS
#ifndef WIDL_C_INLINE_WRAPPERS
/*** IUnknown methods ***/
#define IMFVideoMixerControl_QueryInterface(This,riid,ppvObject) (This)->lpVtbl->QueryInterface(This,riid,ppvObject)
#define IMFVideoMixerControl_AddRef(This) (This)->lpVtbl->AddRef(This)
#define IMFVideoMixerControl_Release(This) (This)->lpVtbl->Release(This)
/*** IMFVideoMixerControl methods ***/
#define IMFVideoMixerControl_SetStreamZOrder(This,stream_id,zorder) (This)->lpVtbl->SetStreamZOrder(This,stream_id,zorder)
#define IMFVideoMixerControl_GetStreamZOrder(This,stream_id,zorder) (This)->lpVtbl->GetStreamZOrder(This,stream_id,zorder)
#define IMFVideoMixerControl_SetStreamOutputRect(This,stream_id,rect) (This)->lpVtbl->SetStreamOutputRect(This,stream_id,rect)
#define IMFVideoMixerControl_GetStreamOutputRect(This,stream_id,rect) (This)->lpVtbl->GetStreamOutputRect(This,stream_id,rect)
#else
/*** IUnknown methods ***/
static inline HRESULT IMFVideoMixerControl_QueryInterface(IMFVideoMixerControl* This,REFIID riid,void **ppvObject) {
    return This->lpVtbl->QueryInterface(This,riid,ppvObject);
}
static inline ULONG IMFVideoMixerControl_AddRef(IMFVideoMixerControl* This) {
    return This->lpVtbl->AddRef(This);
}
static inline ULONG IMFVideoMixerControl_Release(IMFVideoMixerControl* This) {
    return This->lpVtbl->Release(This);
}
/*** IMFVideoMixerControl methods ***/
static inline HRESULT IMFVideoMixerControl_SetStreamZOrder(IMFVideoMixerControl* This,DWORD stream_id,DWORD zorder) {
    return This->lpVtbl->SetStreamZOrder(This,stream_id,zorder);
}
static inline HRESULT IMFVideoMixerControl_GetStreamZOrder(IMFVideoMixerControl* This,DWORD stream_id,DWORD *zorder) {
    return This->lpVtbl->GetStreamZOrder(This,stream_id,zorder);
}
static inline HRESULT IMFVideoMixerControl_SetStreamOutputRect(IMFVideoMixerControl* This,DWORD stream_id,const MFVideoNormalizedRect *rect) {
    return This->lpVtbl->SetStreamOutputRect(This,stream_id,rect);
}
static inline HRESULT IMFVideoMixerControl_GetStreamOutputRect(IMFVideoMixerControl* This,DWORD stream_id,MFVideoNormalizedRect *rect) {
    return This->lpVtbl->GetStreamOutputRect(This,stream_id,rect);
}
#endif
#endif

#endif


#endif  /* __IMFVideoMixerControl_INTERFACE_DEFINED__ */

typedef enum _MFVideoMixPrefs {
    MFVideoMixPrefs_ForceHalfInterlace = 0x1,
    MFVideoMixPrefs_AllowDropToHalfInterlace = 0x2,
    MFVideoMixPrefs_AllowDropToBob = 0x4,
    MFVideoMixPrefs_ForceBob = 0x8,
    MFVideoMixPrefs_EnableRotation = 0x10,
    MFVideoMixPrefs_Mask = 0x1f
} MFVideoMixPrefs;
/*****************************************************************************
 * IMFVideoMixerControl2 interface
 */
#ifndef __IMFVideoMixerControl2_INTERFACE_DEFINED__
#define __IMFVideoMixerControl2_INTERFACE_DEFINED__

DEFINE_GUID(IID_IMFVideoMixerControl2, 0x8459616d, 0x966e, 0x4930, 0xb6,0x58, 0x54,0xfa,0x7e,0x5a,0x16,0xd3);
#if defined(__cplusplus) && !defined(CINTERFACE)
MIDL_INTERFACE("8459616d-966e-4930-b658-54fa7e5a16d3")
IMFVideoMixerControl2 : public IMFVideoMixerControl
{
    virtual HRESULT STDMETHODCALLTYPE SetMixingPrefs(
        DWORD flags) = 0;

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

};
#ifdef __CRT_UUID_DECL
__CRT_UUID_DECL(IMFVideoMixerControl2, 0x8459616d, 0x966e, 0x4930, 0xb6,0x58, 0x54,0xfa,0x7e,0x5a,0x16,0xd3)
#endif
#else
typedef struct IMFVideoMixerControl2Vtbl {
    BEGIN_INTERFACE

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

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

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

    /*** IMFVideoMixerControl methods ***/
    HRESULT (STDMETHODCALLTYPE *SetStreamZOrder)(
        IMFVideoMixerControl2 *This,
        DWORD stream_id,
        DWORD zorder);

    HRESULT (STDMETHODCALLTYPE *GetStreamZOrder)(
        IMFVideoMixerControl2 *This,
        DWORD stream_id,
        DWORD *zorder);

    HRESULT (STDMETHODCALLTYPE *SetStreamOutputRect)(
        IMFVideoMixerControl2 *This,
        DWORD stream_id,
        const MFVideoNormalizedRect *rect);

    HRESULT (STDMETHODCALLTYPE *GetStreamOutputRect)(
        IMFVideoMixerControl2 *This,
        DWORD stream_id,
        MFVideoNormalizedRect *rect);

    /*** IMFVideoMixerControl2 methods ***/
    HRESULT (STDMETHODCALLTYPE *SetMixingPrefs)(
        IMFVideoMixerControl2 *This,
        DWORD flags);

    HRESULT (STDMETHODCALLTYPE *GetMixingPrefs)(
        IMFVideoMixerControl2 *This,
        DWORD *flags);

    END_INTERFACE
} IMFVideoMixerControl2Vtbl;

interface IMFVideoMixerControl2 {
    CONST_VTBL IMFVideoMixerControl2Vtbl* lpVtbl;
};

#ifdef COBJMACROS
#ifndef WIDL_C_INLINE_WRAPPERS
/*** IUnknown methods ***/
#define IMFVideoMixerControl2_QueryInterface(This,riid,ppvObject) (This)->lpVtbl->QueryInterface(This,riid,ppvObject)
#define IMFVideoMixerControl2_AddRef(This) (This)->lpVtbl->AddRef(This)
#define IMFVideoMixerControl2_Release(This) (This)->lpVtbl->Release(This)
/*** IMFVideoMixerControl methods ***/
#define IMFVideoMixerControl2_SetStreamZOrder(This,stream_id,zorder) (This)->lpVtbl->SetStreamZOrder(This,stream_id,zorder)
#define IMFVideoMixerControl2_GetStreamZOrder(This,stream_id,zorder) (This)->lpVtbl->GetStreamZOrder(This,stream_id,zorder)
#define IMFVideoMixerControl2_SetStreamOutputRect(This,stream_id,rect) (This)->lpVtbl->SetStreamOutputRect(This,stream_id,rect)
#define IMFVideoMixerControl2_GetStreamOutputRect(This,stream_id,rect) (This)->lpVtbl->GetStreamOutputRect(This,stream_id,rect)
/*** IMFVideoMixerControl2 methods ***/
#define IMFVideoMixerControl2_SetMixingPrefs(This,flags) (This)->lpVtbl->SetMixingPrefs(This,flags)
#define IMFVideoMixerControl2_GetMixingPrefs(This,flags) (This)->lpVtbl->GetMixingPrefs(This,flags)
#else
/*** IUnknown methods ***/
static inline HRESULT IMFVideoMixerControl2_QueryInterface(IMFVideoMixerControl2* This,REFIID riid,void **ppvObject) {
    return This->lpVtbl->QueryInterface(This,riid,ppvObject);
}
static inline ULONG IMFVideoMixerControl2_AddRef(IMFVideoMixerControl2* This) {
    return This->lpVtbl->AddRef(This);
}
static inline ULONG IMFVideoMixerControl2_Release(IMFVideoMixerControl2* This) {
    return This->lpVtbl->Release(This);
}
/*** IMFVideoMixerControl methods ***/
static inline HRESULT IMFVideoMixerControl2_SetStreamZOrder(IMFVideoMixerControl2* This,DWORD stream_id,DWORD zorder) {
    return This->lpVtbl->SetStreamZOrder(This,stream_id,zorder);
}
static inline HRESULT IMFVideoMixerControl2_GetStreamZOrder(IMFVideoMixerControl2* This,DWORD stream_id,DWORD *zorder) {
    return This->lpVtbl->GetStreamZOrder(This,stream_id,zorder);
}
static inline HRESULT IMFVideoMixerControl2_SetStreamOutputRect(IMFVideoMixerControl2* This,DWORD stream_id,const MFVideoNormalizedRect *rect) {
    return This->lpVtbl->SetStreamOutputRect(This,stream_id,rect);
}
static inline HRESULT IMFVideoMixerControl2_GetStreamOutputRect(IMFVideoMixerControl2* This,DWORD stream_id,MFVideoNormalizedRect *rect) {
    return This->lpVtbl->GetStreamOutputRect(This,stream_id,rect);
}
/*** IMFVideoMixerControl2 methods ***/
static inline HRESULT IMFVideoMixerControl2_SetMixingPrefs(IMFVideoMixerControl2* This,DWORD flags) {
    return This->lpVtbl->SetMixingPrefs(This,flags);
}
static inline HRESULT IMFVideoMixerControl2_GetMixingPrefs(IMFVideoMixerControl2* This,DWORD *flags) {
    return This->lpVtbl->GetMixingPrefs(This,flags);
}
#endif
#endif

#endif


#endif  /* __IMFVideoMixerControl2_INTERFACE_DEFINED__ */

/*****************************************************************************
 * IMFDesiredSample interface
 */
#ifndef __IMFDesiredSample_INTERFACE_DEFINED__
#define __IMFDesiredSample_INTERFACE_DEFINED__

DEFINE_GUID(IID_IMFDesiredSample, 0x56c294d0, 0x753e, 0x4260, 0x8d,0x61, 0xa3,0xd8,0x82,0x0b,0x1d,0x54);
#if defined(__cplusplus) && !defined(CINTERFACE)
MIDL_INTERFACE("56c294d0-753e-4260-8d61-a3d8820b1d54")
IMFDesiredSample : public IUnknown
{
    virtual HRESULT STDMETHODCALLTYPE GetDesiredSampleTimeAndDuration(
        LONGLONG *sample_time,
        LONGLONG *sample_duration) = 0;

    virtual void STDMETHODCALLTYPE SetDesiredSampleTimeAndDuration(
        LONGLONG sample_time,
        LONGLONG sample_duration) = 0;

    virtual void STDMETHODCALLTYPE Clear(
        ) = 0;

};
#ifdef __CRT_UUID_DECL
__CRT_UUID_DECL(IMFDesiredSample, 0x56c294d0, 0x753e, 0x4260, 0x8d,0x61, 0xa3,0xd8,0x82,0x0b,0x1d,0x54)
#endif
#else
typedef struct IMFDesiredSampleVtbl {
    BEGIN_INTERFACE

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

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

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

    /*** IMFDesiredSample methods ***/
    HRESULT (STDMETHODCALLTYPE *GetDesiredSampleTimeAndDuration)(
        IMFDesiredSample *This,
        LONGLONG *sample_time,
        LONGLONG *sample_duration);

    void (STDMETHODCALLTYPE *SetDesiredSampleTimeAndDuration)(
        IMFDesiredSample *This,
        LONGLONG sample_time,
        LONGLONG sample_duration);

    void (STDMETHODCALLTYPE *Clear)(
        IMFDesiredSample *This);

    END_INTERFACE
} IMFDesiredSampleVtbl;

interface IMFDesiredSample {
    CONST_VTBL IMFDesiredSampleVtbl* lpVtbl;
};

#ifdef COBJMACROS
#ifndef WIDL_C_INLINE_WRAPPERS
/*** IUnknown methods ***/
#define IMFDesiredSample_QueryInterface(This,riid,ppvObject) (This)->lpVtbl->QueryInterface(This,riid,ppvObject)
#define IMFDesiredSample_AddRef(This) (This)->lpVtbl->AddRef(This)
#define IMFDesiredSample_Release(This) (This)->lpVtbl->Release(This)
/*** IMFDesiredSample methods ***/
#define IMFDesiredSample_GetDesiredSampleTimeAndDuration(This,sample_time,sample_duration) (This)->lpVtbl->GetDesiredSampleTimeAndDuration(This,sample_time,sample_duration)
#define IMFDesiredSample_SetDesiredSampleTimeAndDuration(This,sample_time,sample_duration) (This)->lpVtbl->SetDesiredSampleTimeAndDuration(This,sample_time,sample_duration)
#define IMFDesiredSample_Clear(This) (This)->lpVtbl->Clear(This)
#else
/*** IUnknown methods ***/
static inline HRESULT IMFDesiredSample_QueryInterface(IMFDesiredSample* This,REFIID riid,void **ppvObject) {
    return This->lpVtbl->QueryInterface(This,riid,ppvObject);
}
static inline ULONG IMFDesiredSample_AddRef(IMFDesiredSample* This) {
    return This->lpVtbl->AddRef(This);
}
static inline ULONG IMFDesiredSample_Release(IMFDesiredSample* This) {
    return This->lpVtbl->Release(This);
}
/*** IMFDesiredSample methods ***/
static inline HRESULT IMFDesiredSample_GetDesiredSampleTimeAndDuration(IMFDesiredSample* This,LONGLONG *sample_time,LONGLONG *sample_duration) {
    return This->lpVtbl->GetDesiredSampleTimeAndDuration(This,sample_time,sample_duration);
}
static inline void IMFDesiredSample_SetDesiredSampleTimeAndDuration(IMFDesiredSample* This,LONGLONG sample_time,LONGLONG sample_duration) {
    This->lpVtbl->SetDesiredSampleTimeAndDuration(This,sample_time,sample_duration);
}
static inline void IMFDesiredSample_Clear(IMFDesiredSample* This) {
    This->lpVtbl->Clear(This);
}
#endif
#endif

#endif


#endif  /* __IMFDesiredSample_INTERFACE_DEFINED__ */

typedef enum MFVideoAspectRatioMode {
    MFVideoARMode_None = 0x0,
    MFVideoARMode_PreservePicture = 0x1,
    MFVideoARMode_PreservePixel = 0x2,
    MFVideoARMode_NonLinearStretch = 0x4,
    MFVideoARMode_Mask = 0x7
} MFVideoAspectRatioMode;
/*****************************************************************************
 * IMFVideoDisplayControl interface
 */
#ifndef __IMFVideoDisplayControl_INTERFACE_DEFINED__
#define __IMFVideoDisplayControl_INTERFACE_DEFINED__

DEFINE_GUID(IID_IMFVideoDisplayControl, 0xa490b1e4, 0xab84, 0x4d31, 0xa1,0xb2, 0x18,0x1e,0x03,0xb1,0x07,0x7a);
#if defined(__cplusplus) && !defined(CINTERFACE)
MIDL_INTERFACE("a490b1e4-ab84-4d31-a1b2-181e03b1077a")
IMFVideoDisplayControl : public IUnknown
{
    virtual HRESULT STDMETHODCALLTYPE GetNativeVideoSize(
        SIZE *video_size,
        SIZE *aspect_ratio) = 0;

    virtual HRESULT STDMETHODCALLTYPE GetIdealVideoSize(
        SIZE *min_size,
        SIZE *max_size) = 0;

    virtual HRESULT STDMETHODCALLTYPE SetVideoPosition(
        const MFVideoNormalizedRect *source,
        const RECT *dest) = 0;

    virtual HRESULT STDMETHODCALLTYPE GetVideoPosition(
        MFVideoNormalizedRect *source,
        RECT *dest) = 0;

    virtual HRESULT STDMETHODCALLTYPE SetAspectRatioMode(
        DWORD mode) = 0;

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

    virtual HRESULT STDMETHODCALLTYPE SetVideoWindow(
        HWND window) = 0;

    virtual HRESULT STDMETHODCALLTYPE GetVideoWindow(
        HWND *window) = 0;

    virtual HRESULT STDMETHODCALLTYPE RepaintVideo(
        ) = 0;

    virtual HRESULT STDMETHODCALLTYPE GetCurrentImage(
        LPBITMAPINFOHEADER header,
        BYTE **dib,
        DWORD *dib_size,
        LONGLONG *timestamp) = 0;

    virtual HRESULT STDMETHODCALLTYPE SetBorderColor(
        COLORREF color) = 0;

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

    virtual HRESULT STDMETHODCALLTYPE SetRenderingPrefs(
        DWORD flags) = 0;

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

    virtual HRESULT STDMETHODCALLTYPE SetFullscreen(
        BOOL fullscreen) = 0;

    virtual HRESULT STDMETHODCALLTYPE GetFullscreen(
        BOOL *fullscreen) = 0;

};
#ifdef __CRT_UUID_DECL
__CRT_UUID_DECL(IMFVideoDisplayControl, 0xa490b1e4, 0xab84, 0x4d31, 0xa1,0xb2, 0x18,0x1e,0x03,0xb1,0x07,0x7a)
#endif
#else
typedef struct IMFVideoDisplayControlVtbl {
    BEGIN_INTERFACE

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

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

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

    /*** IMFVideoDisplayControl methods ***/
    HRESULT (STDMETHODCALLTYPE *GetNativeVideoSize)(
        IMFVideoDisplayControl *This,
        SIZE *video_size,
        SIZE *aspect_ratio);

    HRESULT (STDMETHODCALLTYPE *GetIdealVideoSize)(
        IMFVideoDisplayControl *This,
        SIZE *min_size,
        SIZE *max_size);

    HRESULT (STDMETHODCALLTYPE *SetVideoPosition)(
        IMFVideoDisplayControl *This,
        const MFVideoNormalizedRect *source,
        const RECT *dest);

    HRESULT (STDMETHODCALLTYPE *GetVideoPosition)(
        IMFVideoDisplayControl *This,
        MFVideoNormalizedRect *source,
        RECT *dest);

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

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

    HRESULT (STDMETHODCALLTYPE *SetVideoWindow)(
        IMFVideoDisplayControl *This,
        HWND window);

    HRESULT (STDMETHODCALLTYPE *GetVideoWindow)(
        IMFVideoDisplayControl *This,
        HWND *window);

    HRESULT (STDMETHODCALLTYPE *RepaintVideo)(
        IMFVideoDisplayControl *This);

    HRESULT (STDMETHODCALLTYPE *GetCurrentImage)(
        IMFVideoDisplayControl *This,
        LPBITMAPINFOHEADER header,
        BYTE **dib,
        DWORD *dib_size,
        LONGLONG *timestamp);

    HRESULT (STDMETHODCALLTYPE *SetBorderColor)(
        IMFVideoDisplayControl *This,
        COLORREF color);

    HRESULT (STDMETHODCALLTYPE *GetBorderColor)(
        IMFVideoDisplayControl *This,
        COLORREF *color);

    HRESULT (STDMETHODCALLTYPE *SetRenderingPrefs)(
        IMFVideoDisplayControl *This,
        DWORD flags);

    HRESULT (STDMETHODCALLTYPE *GetRenderingPrefs)(
        IMFVideoDisplayControl *This,
        DWORD *flags);

    HRESULT (STDMETHODCALLTYPE *SetFullscreen)(
        IMFVideoDisplayControl *This,
        BOOL fullscreen);

    HRESULT (STDMETHODCALLTYPE *GetFullscreen)(
        IMFVideoDisplayControl *This,
        BOOL *fullscreen);

    END_INTERFACE
} IMFVideoDisplayControlVtbl;

interface IMFVideoDisplayControl {
    CONST_VTBL IMFVideoDisplayControlVtbl* lpVtbl;
};

#ifdef COBJMACROS
#ifndef WIDL_C_INLINE_WRAPPERS
/*** IUnknown methods ***/
#define IMFVideoDisplayControl_QueryInterface(This,riid,ppvObject) (This)->lpVtbl->QueryInterface(This,riid,ppvObject)
#define IMFVideoDisplayControl_AddRef(This) (This)->lpVtbl->AddRef(This)
#define IMFVideoDisplayControl_Release(This) (This)->lpVtbl->Release(This)
/*** IMFVideoDisplayControl methods ***/
#define IMFVideoDisplayControl_GetNativeVideoSize(This,video_size,aspect_ratio) (This)->lpVtbl->GetNativeVideoSize(This,video_size,aspect_ratio)
#define IMFVideoDisplayControl_GetIdealVideoSize(This,min_size,max_size) (This)->lpVtbl->GetIdealVideoSize(This,min_size,max_size)
#define IMFVideoDisplayControl_SetVideoPosition(This,source,dest) (This)->lpVtbl->SetVideoPosition(This,source,dest)
#define IMFVideoDisplayControl_GetVideoPosition(This,source,dest) (This)->lpVtbl->GetVideoPosition(This,source,dest)
#define IMFVideoDisplayControl_SetAspectRatioMode(This,mode) (This)->lpVtbl->SetAspectRatioMode(This,mode)
#define IMFVideoDisplayControl_GetAspectRatioMode(This,mode) (This)->lpVtbl->GetAspectRatioMode(This,mode)
#define IMFVideoDisplayControl_SetVideoWindow(This,window) (This)->lpVtbl->SetVideoWindow(This,window)
#define IMFVideoDisplayControl_GetVideoWindow(This,window) (This)->lpVtbl->GetVideoWindow(This,window)
#define IMFVideoDisplayControl_RepaintVideo(This) (This)->lpVtbl->RepaintVideo(This)
#define IMFVideoDisplayControl_GetCurrentImage(This,header,dib,dib_size,timestamp) (This)->lpVtbl->GetCurrentImage(This,header,dib,dib_size,timestamp)
#define IMFVideoDisplayControl_SetBorderColor(This,color) (This)->lpVtbl->SetBorderColor(This,color)
#define IMFVideoDisplayControl_GetBorderColor(This,color) (This)->lpVtbl->GetBorderColor(This,color)
#define IMFVideoDisplayControl_SetRenderingPrefs(This,flags) (This)->lpVtbl->SetRenderingPrefs(This,flags)
#define IMFVideoDisplayControl_GetRenderingPrefs(This,flags) (This)->lpVtbl->GetRenderingPrefs(This,flags)
#define IMFVideoDisplayControl_SetFullscreen(This,fullscreen) (This)->lpVtbl->SetFullscreen(This,fullscreen)
#define IMFVideoDisplayControl_GetFullscreen(This,fullscreen) (This)->lpVtbl->GetFullscreen(This,fullscreen)
#else
/*** IUnknown methods ***/
static inline HRESULT IMFVideoDisplayControl_QueryInterface(IMFVideoDisplayControl* This,REFIID riid,void **ppvObject) {
    return This->lpVtbl->QueryInterface(This,riid,ppvObject);
}
static inline ULONG IMFVideoDisplayControl_AddRef(IMFVideoDisplayControl* This) {
    return This->lpVtbl->AddRef(This);
}
static inline ULONG IMFVideoDisplayControl_Release(IMFVideoDisplayControl* This) {
    return This->lpVtbl->Release(This);
}
/*** IMFVideoDisplayControl methods ***/
static inline HRESULT IMFVideoDisplayControl_GetNativeVideoSize(IMFVideoDisplayControl* This,SIZE *video_size,SIZE *aspect_ratio) {
    return This->lpVtbl->GetNativeVideoSize(This,video_size,aspect_ratio);
}
static inline HRESULT IMFVideoDisplayControl_GetIdealVideoSize(IMFVideoDisplayControl* This,SIZE *min_size,SIZE *max_size) {
    return This->lpVtbl->GetIdealVideoSize(This,min_size,max_size);
}
static inline HRESULT IMFVideoDisplayControl_SetVideoPosition(IMFVideoDisplayControl* This,const MFVideoNormalizedRect *source,const RECT *dest) {
    return This->lpVtbl->SetVideoPosition(This,source,dest);
}
static inline HRESULT IMFVideoDisplayControl_GetVideoPosition(IMFVideoDisplayControl* This,MFVideoNormalizedRect *source,RECT *dest) {
    return This->lpVtbl->GetVideoPosition(This,source,dest);
}
static inline HRESULT IMFVideoDisplayControl_SetAspectRatioMode(IMFVideoDisplayControl* This,DWORD mode) {
    return This->lpVtbl->SetAspectRatioMode(This,mode);
}
static inline HRESULT IMFVideoDisplayControl_GetAspectRatioMode(IMFVideoDisplayControl* This,DWORD *mode) {
    return This->lpVtbl->GetAspectRatioMode(This,mode);
}
static inline HRESULT IMFVideoDisplayControl_SetVideoWindow(IMFVideoDisplayControl* This,HWND window) {
    return This->lpVtbl->SetVideoWindow(This,window);
}
static inline HRESULT IMFVideoDisplayControl_GetVideoWindow(IMFVideoDisplayControl* This,HWND *window) {
    return This->lpVtbl->GetVideoWindow(This,window);
}
static inline HRESULT IMFVideoDisplayControl_RepaintVideo(IMFVideoDisplayControl* This) {
    return This->lpVtbl->RepaintVideo(This);
}
static inline HRESULT IMFVideoDisplayControl_GetCurrentImage(IMFVideoDisplayControl* This,LPBITMAPINFOHEADER header,BYTE **dib,DWORD *dib_size,LONGLONG *timestamp) {
    return This->lpVtbl->GetCurrentImage(This,header,dib,dib_size,timestamp);
}
static inline HRESULT IMFVideoDisplayControl_SetBorderColor(IMFVideoDisplayControl* This,COLORREF color) {
    return This->lpVtbl->SetBorderColor(This,color);
}
static inline HRESULT IMFVideoDisplayControl_GetBorderColor(IMFVideoDisplayControl* This,COLORREF *color) {
    return This->lpVtbl->GetBorderColor(This,color);
}
static inline HRESULT IMFVideoDisplayControl_SetRenderingPrefs(IMFVideoDisplayControl* This,DWORD flags) {
    return This->lpVtbl->SetRenderingPrefs(This,flags);
}
static inline HRESULT IMFVideoDisplayControl_GetRenderingPrefs(IMFVideoDisplayControl* This,DWORD *flags) {
    return This->lpVtbl->GetRenderingPrefs(This,flags);
}
static inline HRESULT IMFVideoDisplayControl_SetFullscreen(IMFVideoDisplayControl* This,BOOL fullscreen) {
    return This->lpVtbl->SetFullscreen(This,fullscreen);
}
static inline HRESULT IMFVideoDisplayControl_GetFullscreen(IMFVideoDisplayControl* This,BOOL *fullscreen) {
    return This->lpVtbl->GetFullscreen(This,fullscreen);
}
#endif
#endif

#endif


#endif  /* __IMFVideoDisplayControl_INTERFACE_DEFINED__ */

DEFINE_GUID(MR_VIDEO_RENDER_SERVICE, 0x1092a86c, 0xab1a, 0x459a, 0xa3, 0x36, 0x83, 0x1f, 0xbc, 0x4d, 0x11, 0xff);
DEFINE_GUID(MR_VIDEO_MIXER_SERVICE, 0x073cd2fc, 0x6cf4, 0x40b7, 0x88, 0x59, 0xe8, 0x95, 0x52, 0xc8, 0x41, 0xf8);
DEFINE_GUID(MR_VIDEO_ACCELERATION_SERVICE, 0xefef5175, 0x5c7d, 0x4ce2, 0xbb, 0xbd, 0x34, 0xff, 0x8b, 0xca, 0x65, 0x54);
DEFINE_GUID(MR_BUFFER_SERVICE, 0xa562248c, 0x9ac6, 0x4ffc, 0x9f, 0xba, 0x3a, 0xf8, 0xf8, 0xad, 0x1a, 0x4d);
DEFINE_GUID(VIDEO_ZOOM_RECT, 0x7aaa1638, 0x1b7f, 0x4c93, 0xbd, 0x89, 0x5b, 0x9c, 0x9f, 0xb6, 0xfc, 0xf0);
HRESULT WINAPI MFCreateVideoMixer(IUnknown *owner, REFIID riid_device, REFIID riid, void **obj);
HRESULT WINAPI MFCreateVideoMixerAndPresenter(IUnknown *mixer_outer, IUnknown *presenter_outer, 
        REFIID riid_mixer, void **mixer, REFIID riid_presenter, void **presenter);
HRESULT WINAPI MFCreateVideoPresenter(IUnknown *owner, REFIID riid_device, REFIID riid, void **obj);
HRESULT WINAPI MFCreateVideoRenderer(REFIID riid, void **renderer);
HRESULT WINAPI MFCreateVideoSampleAllocator(REFIID riid, void **allocator);
HRESULT WINAPI MFCreateVideoSampleFromSurface(IUnknown *surface, IMFSample **sample);
/* Begin additional prototypes for all interfaces */

ULONG           __RPC_USER HWND_UserSize     (ULONG *, ULONG, HWND *);
unsigned char * __RPC_USER HWND_UserMarshal  (ULONG *, unsigned char *, HWND *);
unsigned char * __RPC_USER HWND_UserUnmarshal(ULONG *, unsigned char *, HWND *);
void            __RPC_USER HWND_UserFree     (ULONG *, HWND *);

/* End additional prototypes */

#ifdef __cplusplus
}
#endif

#endif /* __evr_h__ */
