/**
 * This file has no copyright assigned and is placed in the Public Domain.
 * This file is part of the w64 mingw-runtime package.
 * No warranty is given; refer to the file DISCLAIMER.PD within this package.
 */
#ifndef _INC_DXAVHD
#define _INC_DXAVHD
#if (_WIN32_WINNT >= 0x0601)
#ifdef __cplusplus
extern "C" {
#endif

#ifndef CALLBACK
#define CALLBACK __stdcall
#endif

typedef struct IDXVAHD_Device IDXVAHD_Device;
typedef struct IDXVAHD_VideoProcessor IDXVAHD_VideoProcessor;

  typedef enum _DXVAHD_ALPHA_FILL_MODE {
    DXVAHD_ALPHA_FILL_MODE_OPAQUE          = 0,
    DXVAHD_ALPHA_FILL_MODE_BACKGROUND      = 1,
    DXVAHD_ALPHA_FILL_MODE_DESTINATION     = 2,
    DXVAHD_ALPHA_FILL_MODE_SOURCE_STREAM   = 3 
  } DXVAHD_ALPHA_FILL_MODE;

  typedef struct _DXVAHD_COLOR_YCbCrA {
    FLOAT Y;
    FLOAT Cb;
    FLOAT Cr;
    FLOAT A;
  } DXVAHD_COLOR_YCbCrA;

  typedef struct _DXVAHD_COLOR_RGBA {
    FLOAT R;
    FLOAT G;
    FLOAT B;
    FLOAT A;
  } DXVAHD_COLOR_RGBA;

  typedef union _DXVAHD_COLOR {
    DXVAHD_COLOR_RGBA   RGB;
    DXVAHD_COLOR_YCbCrA YCbCr;
  } DXVAHD_COLOR;

  typedef struct _DXVAHD_BLT_STATE_BACKGROUND_COLOR_DATA {
    WINBOOL         YCbCr;
    DXVAHD_COLOR BackgroundColor;
  } DXVAHD_BLT_STATE_BACKGROUND_COLOR_DATA;

typedef enum _DXVAHD_BLT_STATE {
  DXVAHD_BLT_STATE_TARGET_RECT          = 0,
  DXVAHD_BLT_STATE_BACKGROUND_COLOR     = 1,
  DXVAHD_BLT_STATE_OUTPUT_COLOR_SPACE   = 2,
  DXVAHD_BLT_STATE_ALPHA_FILL           = 3,
  DXVAHD_BLT_STATE_CONSTRICTION         = 4,
  DXVAHD_BLT_STATE_PRIVATE              = 1000 
} DXVAHD_BLT_STATE;

typedef enum _DXVAHD_DEVICE_CAPS {
  DXVAHD_DEVICE_CAPS_LINEAR_SPACE              = 0x1,
  DXVAHD_DEVICE_CAPS_xvYCC                     = 0x2,
  DXVAHD_DEVICE_CAPS_RGB_RANGE_CONVERSION      = 0x4,
  DXVAHD_DEVICE_CAPS_YCbCr_MATRIX_CONVERSION   = 0x8 
} DXVAHD_DEVICE_CAPS;

typedef enum _DXVAHD_DEVICE_TYPE {
  DXVAHD_DEVICE_TYPE_HARDWARE    = 0,
  DXVAHD_DEVICE_TYPE_SOFTWARE    = 1,
  DXVAHD_DEVICE_TYPE_REFERENCE   = 2,
  DXVAHD_DEVICE_TYPE_OTHER       = 3 
} DXVAHD_DEVICE_TYPE;

typedef enum _DXVAHD_DEVICE_USAGE {
  DXVAHD_DEVICE_USAGE_PLAYBACK_NORMAL   = 0,
  DXVAHD_DEVICE_USAGE_OPTIMAL_SPEED     = 1,
  DXVAHD_DEVICE_USAGE_OPTIMAL_QUALITY   = 2 
} DXVAHD_DEVICE_USAGE;


typedef enum _DXVAHD_FEATURE_CAPS {
  DXVAHD_FEATURE_CAPS_ALPHA_FILL      = 0x1,
  DXVAHD_FEATURE_CAPS_CONSTRICTION    = 0x2,
  DXVAHD_FEATURE_CAPS_LUMA_KEY        = 0x4,
  DXVAHD_FEATURE_CAPS_ALPHA_PALETTE   = 0x8 
} DXVAHD_FEATURE_CAPS;

typedef enum _DXVAHD_FILTER {
  DXVAHD_FILTER_BRIGHTNESS           = 0,
  DXVAHD_FILTER_CONTRAST             = 1,
  DXVAHD_FILTER_HUE                  = 2,
  DXVAHD_FILTER_SATURATION           = 3,
  DXVAHD_FILTER_NOISE_REDUCTION      = 4,
  DXVAHD_FILTER_EDGE_ENHANCEMENT     = 5,
  DXVAHD_FILTER_ANAMORPHIC_SCALING   = 6 
} DXVAHD_FILTER;

typedef enum _DXVAHD_FILTER_CAPS {
  DXVAHD_FILTER_CAPS_BRIGHTNESS           = 0x1,
  DXVAHD_FILTER_CAPS_CONTRAST             = 0x2,
  DXVAHD_FILTER_CAPS_HUE                  = 0x4,
  DXVAHD_FILTER_CAPS_SATURATION           = 0x8,
  DXVAHD_FILTER_CAPS_NOISE_REDUCTION      = 0x10,
  DXVAHD_FILTER_CAPS_EDGE_ENHANCEMENT     = 0x20,
  DXVAHD_FILTER_CAPS_ANAMORPHIC_SCALING   = 0x40 
} DXVAHD_FILTER_CAPS;

typedef enum _DXVAHD_FRAME_FORMAT {
  DXVAHD_FRAME_FORMAT_PROGRESSIVE                     = 0,
  DXVAHD_FRAME_FORMAT_INTERLACED_TOP_FIELD_FIRST      = 1,
  DXVAHD_FRAME_FORMAT_INTERLACED_BOTTOM_FIELD_FIRST   = 2 
} DXVAHD_FRAME_FORMAT;

typedef enum _DXVAHD_INPUT_FORMAT_CAPS {
  DXVAHD_INPUT_FORMAT_CAPS_RGB_INTERLACED       = 0x1,
  DXVAHD_INPUT_FORMAT_CAPS_RGB_PROCAMP          = 0x2,
  DXVAHD_INPUT_FORMAT_CAPS_RGB_LUMA_KEY         = 0x4,
  DXVAHD_INPUT_FORMAT_CAPS_PALETTE_INTERLACED   = 0x8 
} DXVAHD_INPUT_FORMAT_CAPS;

typedef enum _DXVAHD_ITELECINE_CAPS {
  DXVAHD_ITELECINE_CAPS_32             = 0x1,
  DXVAHD_ITELECINE_CAPS_22             = 0x2,
  DXVAHD_ITELECINE_CAPS_2224           = 0x4,
  DXVAHD_ITELECINE_CAPS_2332           = 0x8,
  DXVAHD_ITELECINE_CAPS_32322          = 0x10,
  DXVAHD_ITELECINE_CAPS_55             = 0x20,
  DXVAHD_ITELECINE_CAPS_64             = 0x40,
  DXVAHD_ITELECINE_CAPS_87             = 0x80,
  DXVAHD_ITELECINE_CAPS_222222222223   = 0x100,
  DXVAHD_ITELECINE_CAPS_OTHER          = 0x80000000 
} DXVAHD_ITELECINE_CAPS;

typedef enum _DXVAHD_OUTPUT_RATE {
  DXVAHD_OUTPUT_RATE_NORMAL   = 0,
  DXVAHD_OUTPUT_RATE_HALF     = 1,
  DXVAHD_OUTPUT_RATE_CUSTOM   = 2 
} DXVAHD_OUTPUT_RATE;

typedef enum _DXVAHD_PROCESSOR_CAPS {
  DXVAHD_PROCESSOR_CAPS_DEINTERLACE_BLEND                 = 0x1,
  DXVAHD_PROCESSOR_CAPS_DEINTERLACE_BOB                   = 0x2,
  DXVAHD_PROCESSOR_CAPS_DEINTERLACE_ADAPTIVE              = 0x4,
  DXVAHD_PROCESSOR_CAPS_DEINTERLACE_MOTION_COMPENSATION   = 0x8,
  DXVAHD_PROCESSOR_CAPS_INVERSE_TELECINE                  = 0x10,
  DXVAHD_PROCESSOR_CAPS_FRAME_RATE_CONVERSION             = 0x20 
} DXVAHD_PROCESSOR_CAPS;

typedef enum _DXVAHD_STREAM_STATE {
  DXVAHD_STREAM_STATE_D3DFORMAT                   = 0,
  DXVAHD_STREAM_STATE_FRAME_FORMAT                = 1,
  DXVAHD_STREAM_STATE_INPUT_COLOR_SPACE           = 2,
  DXVAHD_STREAM_STATE_OUTPUT_RATE                 = 3,
  DXVAHD_STREAM_STATE_SOURCE_RECT                 = 4,
  DXVAHD_STREAM_STATE_DESTINATION_RECT            = 5,
  DXVAHD_STREAM_STATE_ALPHA                       = 6,
  DXVAHD_STREAM_STATE_PALETTE                     = 7,
  DXVAHD_STREAM_STATE_LUMA_KEY                    = 8,
  DXVAHD_STREAM_STATE_ASPECT_RATIO                = 9,
  DXVAHD_STREAM_STATE_FILTER_BRIGHTNESS           = 100,
  DXVAHD_STREAM_STATE_FILTER_CONTRAST             = 101,
  DXVAHD_STREAM_STATE_FILTER_HUE                  = 102,
  DXVAHD_STREAM_STATE_FILTER_SATURATION           = 103,
  DXVAHD_STREAM_STATE_FILTER_NOISE_REDUCTION      = 104,
  DXVAHD_STREAM_STATE_FILTER_EDGE_ENHANCEMENT     = 105,
  DXVAHD_STREAM_STATE_FILTER_ANAMORPHIC_SCALING   = 106,
  DXVAHD_STREAM_STATE_PRIVATE                     = 1000 
} DXVAHD_STREAM_STATE;

typedef enum _DXVAHD_SURFACE_TYPE {
  DXVAHD_SURFACE_TYPE_VIDEO_INPUT           = 0,
  DXVAHD_SURFACE_TYPE_VIDEO_INPUT_PRIVATE   = 1,
  DXVAHD_SURFACE_TYPE_VIDEO_OUTPUT          = 2 
} DXVAHD_SURFACE_TYPE;

typedef struct _DXVAHD_VPDEVCAPS {
  DXVAHD_DEVICE_TYPE DeviceType;
  UINT               DeviceCaps;
  UINT               FeatureCaps;
  UINT               FilterCaps;
  UINT               InputFormatCaps;
  D3DPOOL            InputPool;
  UINT               OutputFormatCount;
  UINT               InputFormatCount;
  UINT               VideoProcessorCount;
  UINT               MaxInputStreams;
  UINT               MaxStreamStates;
} DXVAHD_VPDEVCAPS;

typedef struct _DXVAHD_BLT_STATE_ALPHA_FILL_DATA {
  DXVAHD_ALPHA_FILL_MODE Mode;
  UINT                   StreamNumber;
} DXVAHD_BLT_STATE_ALPHA_FILL_DATA;

typedef struct _DXVAHD_BLT_STATE_CONSTRICTION_DATA {
  WINBOOL Enable;
  SIZE Size;
} DXVAHD_BLT_STATE_CONSTRICTION_DATA;

typedef struct _DXVAHD_BLT_STATE_OUTPUT_COLOR_SPACE_DATA {
  UINT Usage  :1;
  UINT RGB_Range  :1;
  UINT YCbCr_Matrix  :1;
  UINT YCbCr_xvYCC  :1;
} DXVAHD_BLT_STATE_OUTPUT_COLOR_SPACE_DATA;

typedef struct _DXVAHD_BLT_STATE_PRIVATE_DATA {
  GUID Guid;
  UINT DataSize;
  void *pData;
} DXVAHD_BLT_STATE_PRIVATE_DATA;

typedef struct _DXVAHD_BLT_STATE_TARGET_RECT_DATA {
  WINBOOL Enable;
  RECT TargetRect;
} DXVAHD_BLT_STATE_TARGET_RECT_DATA;

typedef struct _DXVAHD_RATIONAL {
  UINT Numerator;
  UINT Denominator;
} DXVAHD_RATIONAL;

typedef struct _DXVAHD_CONTENT_DESC {
  DXVAHD_FRAME_FORMAT InputFrameFormat;
  DXVAHD_RATIONAL     InputFrameRate;
  UINT                InputWidth;
  UINT                InputHeight;
  DXVAHD_RATIONAL     OutputFrameRate;
  UINT                OutputWidth;
  UINT                OutputHeight;
} DXVAHD_CONTENT_DESC;

typedef struct _DXVAHD_CUSTOM_RATE_DATA {
  DXVAHD_RATIONAL CustomRate;
  UINT            OutputFrames;
  WINBOOL         InputInterlaced;
  UINT            InputFramesOrFields;
} DXVAHD_CUSTOM_RATE_DATA;

typedef struct _DXVAHD_FILTER_RANGE_DATA {
  INT   Minimum;
  INT   Maximum;
  INT   Default;
  FLOAT Multiplier;
} DXVAHD_FILTER_RANGE_DATA;

typedef struct _DXVAHD_STREAM_DATA {
  WINBOOL           Enable;
  UINT              OutputIndex;
  UINT              InputFrameOrField;
  UINT              PastFrames;
  UINT              FutureFrames;
  IDirect3DSurface9 **ppPastSurfaces;
  IDirect3DSurface9 *pInputSurface;
  IDirect3DSurface9 **ppFutureSurfaces;
} DXVAHD_STREAM_DATA;

typedef struct _DXVAHD_VPCAPS {
  GUID VPGuid;
  UINT PastFrames;
  UINT FutureFrames;
  UINT ProcessorCaps;
  UINT ITelecineCaps;
  UINT CustomRateCount;
} DXVAHD_VPCAPS;

typedef struct _DXVAHD_STREAM_STATE_ALPHA_DATA {
  WINBOOL Enable;
  FLOAT   Alpha;
} DXVAHD_STREAM_STATE_ALPHA_DATA;

typedef struct _DXVAHD_STREAM_STATE_ASPECT_RATIO_DATA {
  WINBOOL         Enable;
  DXVAHD_RATIONAL SourceAspectRatio;
  DXVAHD_RATIONAL DestinationAspectRatio;
} DXVAHD_STREAM_STATE_ASPECT_RATIO_DATA, *PDXVAHD_STREAM_STATE_ASPECT_RATIO_DATA;

typedef struct _DXVAHD_STREAM_STATE_D3DFORMAT_DATA {
  D3DFORMAT Format;
} DXVAHD_STREAM_STATE_D3DFORMAT_DATA;

typedef struct _DXVAHD_STREAM_STATE_DESTINATION_RECT_DATA {
  WINBOOL Enable;
  RECT    DestinationRect;
} DXVAHD_STREAM_STATE_DESTINATION_RECT_DATA;

typedef struct _DXVAHD_STREAM_STATE_FILTER_DATA {
  WINBOOL Enable;
  INT     Level;
} DXVAHD_STREAM_STATE_FILTER_DATA;

typedef struct _DXVAHD_STREAM_STATE_FRAME_FORMAT_DATA {
  DXVAHD_FRAME_FORMAT FrameFormat;
} DXVAHD_STREAM_STATE_FRAME_FORMAT_DATA;

typedef struct _DXVAHD_STREAM_STATE_INPUT_COLOR_SPACE_DATA {
  UINT Type  :1;
  UINT RGB_Range  :1;
  UINT YCbCr_Matrix  :1;
  UINT YCbCr_xvYCC  :1;
} DXVAHD_STREAM_STATE_INPUT_COLOR_SPACE_DATA;

typedef struct _DXVAHD_STREAM_STATE_LUMA_KEY_DATA {
  WINBOOL Enable;
  FLOAT   Lower;
  FLOAT   Upper;
} DXVAHD_STREAM_STATE_LUMA_KEY_DATA;

typedef struct _DXVAHD_STREAM_STATE_OUTPUT_RATE_DATA {
  WINBOOL            RepeatFrame;
  DXVAHD_OUTPUT_RATE OutputRate;
  DXVAHD_RATIONAL    CustomRate;
} DXVAHD_STREAM_STATE_OUTPUT_RATE_DATA;

typedef struct _DXVAHD_STREAM_STATE_SOURCE_RECT_DATA {
  WINBOOL Enable;
  RECT    SourceRect;
} DXVAHD_STREAM_STATE_SOURCE_RECT_DATA;

typedef struct _DXVAHD_STREAM_STATE_PRIVATE_IVTC_DATA {
  WINBOOL Enable;
  UINT    ITelecineFlags;
  UINT    Frames;
  UINT    InputField;
} DXVAHD_STREAM_STATE_PRIVATE_IVTC_DATA;

typedef struct _DXVAHD_STREAM_STATE_PRIVATE_DATA {
  GUID Guid;
  UINT DataSize;
  void *pData;
} DXVAHD_STREAM_STATE_PRIVATE_DATA;

typedef struct _DXVAHD_STREAM_STATE_PALETTE_DATA {
  UINT     Count;
  D3DCOLOR *pEntries;
} DXVAHD_STREAM_STATE_PALETTE_DATA;

typedef HRESULT ( CALLBACK *PDXVAHDSW_CreateDevice )(IDirect3DDevice9Ex *pD3DDevice,HANDLE *phDevice);
typedef HRESULT ( CALLBACK *PDXVAHDSW_ProposeVideoPrivateFormat )(HANDLE hDevice,D3DFORMAT *pFormat);
typedef HRESULT ( CALLBACK *PDXVAHDSW_GetVideoProcessorDeviceCaps )(HANDLE hDevice,const DXVAHD_CONTENT_DESC *pContentDesc,DXVAHD_DEVICE_USAGE Usage,DXVAHD_VPDEVCAPS *pCaps);
typedef HRESULT ( CALLBACK *PDXVAHDSW_GetVideoProcessorOutputFormats )(HANDLE hDevice,const DXVAHD_CONTENT_DESC *pContentDesc,DXVAHD_DEVICE_USAGE Usage,UINT Count,D3DFORMAT *pFormats);
typedef HRESULT ( CALLBACK *PDXVAHDSW_GetVideoProcessorInputFormats )(HANDLE hDevice,const DXVAHD_CONTENT_DESC *pContentDesc,DXVAHD_DEVICE_USAGE Usage,UINT Count,D3DFORMAT *pFormats);
typedef HRESULT ( CALLBACK *PDXVAHDSW_GetVideoProcessorCaps )(HANDLE hDevice,const DXVAHD_CONTENT_DESC *pContentDesc,DXVAHD_DEVICE_USAGE Usage,UINT Count,DXVAHD_VPCAPS *pCaps);
typedef HRESULT ( CALLBACK *PDXVAHDSW_GetVideoProcessorCustomRates )(HANDLE hDevice,const GUID *pVPGuid,UINT Count,DXVAHD_CUSTOM_RATE_DATA *pRates);
typedef HRESULT ( CALLBACK *PDXVAHDSW_SetVideoProcessBltState )(HANDLE hVideoProcessor,DXVAHD_BLT_STATE State,UINT DataSize,const void *pData);
typedef HRESULT ( CALLBACK *PDXVAHDSW_CreateVideoProcessor )(HANDLE hDevice,const GUID *pVPGuid,HANDLE *phVideoProcessor);
typedef HRESULT ( CALLBACK *PDXVAHDSW_DestroyDevice )(HANDLE hDevice);
typedef HRESULT ( CALLBACK *PDXVAHDSW_GetVideoProcessorFilterRange )(HANDLE hDevice,DXVAHD_FILTER Filter,DXVAHD_FILTER_RANGE_DATA *pRange);
typedef HRESULT ( CALLBACK *PDXVAHDSW_DestroyVideoProcessor )(HANDLE hVideoProcessor);
typedef HRESULT ( CALLBACK *PDXVAHDSW_VideoProcessBltHD )(HANDLE hVideoProcessor,IDirect3DSurface9 *pOutputSurface,UINT OutputFrame,UINT StreamCount,const DXVAHD_STREAM_DATA *pStreams);
typedef HRESULT ( CALLBACK *PDXVAHDSW_GetVideoProcessStreamStatePrivate )(HANDLE hVideoProcessor,UINT StreamNumber,DXVAHD_STREAM_STATE_PRIVATE_DATA *pData);
typedef HRESULT ( CALLBACK *PDXVAHDSW_SetVideoProcessStreamState )(HANDLE hVideoProcessor,UINT StreamNumber,DXVAHD_STREAM_STATE State,UINT DataSize,const void *pData);
typedef HRESULT ( CALLBACK *PDXVAHDSW_GetVideoProcessBltStatePrivate )(HANDLE hVideoProcessor,DXVAHD_BLT_STATE_PRIVATE_DATA *pData);
typedef HRESULT ( CALLBACK *PDXVAHDSW_Plugin )(UINT Size,void *pCallbacks);

typedef struct _DXVAHDSW_CALLBACKS {
  PDXVAHDSW_CreateDevice                      CreateDevice;
  PDXVAHDSW_ProposeVideoPrivateFormat         ProposeVideoPrivateFormat;
  PDXVAHDSW_GetVideoProcessorDeviceCaps       GetVideoProcessorDeviceCaps;
  PDXVAHDSW_GetVideoProcessorOutputFormats    GetVideoProcessorOutputFormats;
  PDXVAHDSW_GetVideoProcessorInputFormats     GetVideoProcessorInputFormats;
  PDXVAHDSW_GetVideoProcessorCaps             GetVideoProcessorCaps;
  PDXVAHDSW_GetVideoProcessorCustomRates      GetVideoProcessorCustomRates;
  PDXVAHDSW_GetVideoProcessorFilterRange      GetVideoProcessorFilterRange;
  PDXVAHDSW_DestroyDevice                     DestroyDevice;
  PDXVAHDSW_CreateVideoProcessor              CreateVideoProcessor;
  PDXVAHDSW_SetVideoProcessBltState           SetVideoProcessBltState;
  PDXVAHDSW_GetVideoProcessBltStatePrivate    GetVideoProcessBltStatePrivate;
  PDXVAHDSW_SetVideoProcessStreamState        SetVideoProcessStreamState;
  PDXVAHDSW_GetVideoProcessStreamStatePrivate GetVideoProcessStreamStatePrivate;
  PDXVAHDSW_VideoProcessBltHD                 VideoProcessBltHD;
  PDXVAHDSW_DestroyVideoProcessor             DestroyVideoProcessor;
} DXVAHDSW_CALLBACKS;

HRESULT DXVAHD_CreateDevice(IDirect3DDevice9Ex *pD3DDevice,const DXVAHD_CONTENT_DESC *pContentDesc,DXVAHD_DEVICE_USAGE Usage,PDXVAHDSW_Plugin pPlugin,IDXVAHD_Device **ppDevice);

#ifdef __cplusplus
}
#endif

#undef  INTERFACE
#define INTERFACE IDXVAHD_Device
#ifdef __GNUC__
#warning COM interfaces layout in this header has not been verified.
#warning COM interfaces with incorrect layout may not work at all.
__MINGW_BROKEN_INTERFACE(INTERFACE)
#endif
DECLARE_INTERFACE_(IDXVAHD_Device,IUnknown)
{
    BEGIN_INTERFACE

    /* IUnknown methods */
    STDMETHOD(QueryInterface)(THIS_ REFIID riid, void **ppvObject) PURE;
    STDMETHOD_(ULONG, AddRef)(THIS) PURE;
    STDMETHOD_(ULONG, Release)(THIS) PURE;

    /* IDXVAHD_Device methods */
    STDMETHOD_(HRESULT,CreateVideoProcessor)(THIS_ const GUID *pVPGuid,IDXVAHD_VideoProcessor **ppVideoProcessor) PURE;
    STDMETHOD_(HRESULT,CreateVideoSurface)(THIS_ UINT Width,UINT Height,D3DFORMAT Format,D3DPOOL Pool,DWORD Usage,DXVAHD_SURFACE_TYPE Type,UINT NumSurfaces,IDirect3DSurface9 **ppSurfaces,HANDLE *pSharedHandle) PURE;
    STDMETHOD_(HRESULT,GetVideoProcessorCaps)(THIS_ UINT Count,DXVAHD_VPCAPS *pCaps) PURE;
    STDMETHOD_(HRESULT,GetVideoProcessorCustomRates)(THIS_ const GUID *pVPGuid,UINT Count,DXVAHD_CUSTOM_RATE_DATA *pRates) PURE;
    STDMETHOD_(HRESULT,GetVideoProcessorDeviceCaps)(THIS_ DXVAHD_VPDEVCAPS *pCaps) PURE;
    STDMETHOD_(HRESULT,GetVideoProcessorFilterRange)(THIS_ DXVAHD_FILTER Filter,DXVAHD_FILTER_RANGE_DATA *pRange) PURE;
    STDMETHOD_(HRESULT,GetVideoProcessorInputFormats)(THIS_ UINT Count,D3DFORMAT *pFormats) PURE;
    STDMETHOD_(HRESULT,GetVideoProcessorOutputFormats)(THIS_ UINT Count,D3DFORMAT *pFormats) PURE;

    END_INTERFACE
};
#ifdef COBJMACROS
#define IDXVAHD_Device_QueryInterface(This,riid,ppvObject) (This)->pVtbl->QueryInterface(This,riid,ppvObject)
#define IDXVAHD_Device_AddRef(This) (This)->pVtbl->AddRef(This)
#define IDXVAHD_Device_Release(This) (This)->pVtbl->Release(This)
#define IDXVAHD_Device_CreateVideoProcessor(This,pVPGuid,ppVideoProcessor) (This)->lpVtbl->CreateVideoProcessor(This,pVPGuid,ppVideoProcessor)
#define IDXVAHD_Device_CreateVideoSurface(This,Width,Height,Format,Pool,Usage,Type,NumSurfaces,ppSurfaces,pSharedHandle) (This)->lpVtbl->CreateVideoSurface(This,Width,Height,Format,Pool,Usage,Type,NumSurfaces,ppSurfaces,pSharedHandle)
#define IDXVAHD_Device_GetVideoProcessorCaps(This,Count,pCaps) (This)->lpVtbl->GetVideoProcessorCaps(This,Count,pCaps)
#define IDXVAHD_Device_GetVideoProcessorCustomRates(This,pVPGuid,Count,pRates) (This)->lpVtbl->GetVideoProcessorCustomRates(This,pVPGuid,Count,pRates)
#define IDXVAHD_Device_GetVideoProcessorDeviceCaps(This,pCaps) (This)->lpVtbl->GetVideoProcessorDeviceCaps(This,pCaps)
#define IDXVAHD_Device_GetVideoProcessorFilterRange(This,Filter,pRange) (This)->lpVtbl->GetVideoProcessorFilterRange(This,Filter,pRange)
#define IDXVAHD_Device_GetVideoProcessorInputFormats(This,Count,pFormats) (This)->lpVtbl->GetVideoProcessorInputFormats(This,Count,pFormats)
#define IDXVAHD_Device_GetVideoProcessorOutputFormats(This,Count,pFormats) (This)->lpVtbl->GetVideoProcessorOutputFormats(This,Count,pFormats)
#endif /*COBJMACROS*/

#undef  INTERFACE
#define INTERFACE IDXVAHD_VideoProcessor
#ifdef __GNUC__
#warning COM interfaces layout in this header has not been verified.
#warning COM interfaces with incorrect layout may not work at all.
__MINGW_BROKEN_INTERFACE(INTERFACE)
#endif
DECLARE_INTERFACE_(IDXVAHD_VideoProcessor,IUnknown)
{
    BEGIN_INTERFACE

    /* IUnknown methods */
    STDMETHOD(QueryInterface)(THIS_ REFIID riid, void **ppvObject) PURE;
    STDMETHOD_(ULONG, AddRef)(THIS) PURE;
    STDMETHOD_(ULONG, Release)(THIS) PURE;

    /* IDXVAHD_VideoProcessor methods */
    STDMETHOD_(HRESULT,GetVideoProcessBltState)(THIS_ DXVAHD_BLT_STATE State,UINT DataSize,void *pData) PURE;
    STDMETHOD_(HRESULT,GetVideoProcessStreamState)(THIS_ UINT StreamNumber,DXVAHD_STREAM_STATE State,UINT DataSize,void *pData) PURE;
    STDMETHOD_(HRESULT,SetVideoProcessBltState)(THIS_ DXVAHD_BLT_STATE State,UINT DataSize,const void *pData) PURE;
    STDMETHOD_(HRESULT,SetVideoProcessStreamState)(THIS_ UINT StreamNumber,DXVAHD_STREAM_STATE State,UINT DataSize,const void *pData) PURE;
    STDMETHOD_(HRESULT,VideoProcessBltHD)(THIS_ IDirect3DSurface9 *pOutputSurface,UINT OutputFrame,UINT StreamCount,const DXVAHD_STREAM_DATA *pStreams) PURE;

    END_INTERFACE
};
#ifdef COBJMACROS
#define IDXVAHD_VideoProcessor_QueryInterface(This,riid,ppvObject) (This)->pVtbl->QueryInterface(This,riid,ppvObject)
#define IDXVAHD_VideoProcessor_AddRef(This) (This)->pVtbl->AddRef(This)
#define IDXVAHD_VideoProcessor_Release(This) (This)->pVtbl->Release(This)
#define IDXVAHD_VideoProcessor_GetVideoProcessBltState(This,State,DataSize,pData) (This)->lpVtbl->GetVideoProcessBltState(This,State,DataSize,pData)
#define IDXVAHD_VideoProcessor_GetVideoProcessStreamState(This,StreamNumber,State,DataSize,pData) (This)->lpVtbl->GetVideoProcessStreamState(This,StreamNumber,State,DataSize,pData)
#define IDXVAHD_VideoProcessor_SetVideoProcessBltState(This,State,DataSize,pData) (This)->lpVtbl->SetVideoProcessBltState(This,State,DataSize,pData)
#define IDXVAHD_VideoProcessor_SetVideoProcessStreamState(This,StreamNumber,State,DataSize,pData) (This)->lpVtbl->SetVideoProcessStreamState(This,StreamNumber,State,DataSize,pData)
#define IDXVAHD_VideoProcessor_VideoProcessBltHD(This,pOutputSurface,OutputFrame,StreamCount,pStreams) (This)->lpVtbl->VideoProcessBltHD(This,pOutputSurface,OutputFrame,StreamCount,pStreams)
#endif /*COBJMACROS*/

#endif /*(_WIN32_WINNT >= 0x0601)*/
#endif /*_INC_DXAVHD*/
