/**
 * This file has no copyright assigned and is placed in the Public Domain.
 * This file is part of the mingw-w64 runtime package.
 * No warranty is given; refer to the file DISCLAIMER.PD within this package.
 */

import "unknwn.idl";

/* Fake widl types */
cpp_quote("#if 0")
typedef DWORD IDirect3DDevice9;
typedef DWORD IDirect3DSurface9;
typedef DWORD D3DFORMAT;
typedef DWORD D3DPOOL;
cpp_quote("#endif")

interface IDirectXVideoDecoderService;

cpp_quote("#ifndef __REFERENCE_TIME_DEFINED")
cpp_quote("#define __REFERENCE_TIME_DEFINED")
cpp_quote("typedef LONGLONG REFERENCE_TIME;")
cpp_quote("#endif /*__REFERENCE_TIME_DEFINED*/")

cpp_quote("#define DXVA2_ProcAmp_None 0x0000")
cpp_quote("#define DXVA2_ProcAmp_Brightness 0x0001")
cpp_quote("#define DXVA2_ProcAmp_Contrast 0x0002")
cpp_quote("#define DXVA2_ProcAmp_Hue 0x0004")
cpp_quote("#define DXVA2_ProcAmp_Saturation 0x0008")
cpp_quote("")
cpp_quote("#define DXVA2_E_NOT_INITIALIZED     MAKE_HRESULT(1, 4, 4096)")
cpp_quote("#define DXVA2_E_NEW_VIDEO_DEVICE    MAKE_HRESULT(1, 4, 4097)")
cpp_quote("#define DXVA2_E_VIDEO_DEVICE_LOCKED MAKE_HRESULT(1, 4, 4098)")
cpp_quote("#define DXVA2_E_NOT_AVAILABLE       MAKE_HRESULT(1, 4, 4099)")
cpp_quote("")
cpp_quote("DEFINE_GUID(DXVA2_ModeMPEG2_MoComp, 0xe6a9f44b, 0x61b0,0x4563, 0x9e,0xa4,0x63,0xd2,0xa3,0xc6,0xfe,0x66);")
cpp_quote("DEFINE_GUID(DXVA2_ModeMPEG2_IDCT, 0xbf22ad00, 0x03ea,0x4690, 0x80,0x77,0x47,0x33,0x46,0x20,0x9b,0x7e);")
cpp_quote("DEFINE_GUID(DXVA2_ModeMPEG2_VLD, 0xee27417f, 0x5e28,0x4e65, 0xbe,0xea,0x1d,0x26,0xb5,0x08,0xad,0xc9);")
cpp_quote("DEFINE_GUID(DXVA2_ModeH264_A, 0x1b81be64, 0xa0c7,0x11d3, 0xb9,0x84,0x00,0xc0,0x4f,0x2e,0x73,0xc5);")
cpp_quote("DEFINE_GUID(DXVA2_ModeH264_B, 0x1b81be65, 0xa0c7,0x11d3, 0xb9,0x84,0x00,0xc0,0x4f,0x2e,0x73,0xc5);")
cpp_quote("DEFINE_GUID(DXVA2_ModeH264_C, 0x1b81be66, 0xa0c7,0x11d3, 0xb9,0x84,0x00,0xc0,0x4f,0x2e,0x73,0xc5);")
cpp_quote("DEFINE_GUID(DXVA2_ModeH264_D, 0x1b81be67, 0xa0c7,0x11d3, 0xb9,0x84,0x00,0xc0,0x4f,0x2e,0x73,0xc5);")
cpp_quote("DEFINE_GUID(DXVA2_ModeH264_E, 0x1b81be68, 0xa0c7,0x11d3, 0xb9,0x84,0x00,0xc0,0x4f,0x2e,0x73,0xc5);")
cpp_quote("DEFINE_GUID(DXVA2_ModeH264_F, 0x1b81be69, 0xa0c7,0x11d3, 0xb9,0x84,0x00,0xc0,0x4f,0x2e,0x73,0xc5);")
cpp_quote("DEFINE_GUID(DXVA2_ModeWMV8_A, 0x1b81be80, 0xa0c7,0x11d3, 0xb9,0x84,0x00,0xc0,0x4f,0x2e,0x73,0xc5);")
cpp_quote("DEFINE_GUID(DXVA2_ModeWMV8_B, 0x1b81be81, 0xa0c7,0x11d3, 0xb9,0x84,0x00,0xc0,0x4f,0x2e,0x73,0xc5);")
cpp_quote("DEFINE_GUID(DXVA2_ModeWMV9_A, 0x1b81be90, 0xa0c7,0x11d3, 0xb9,0x84,0x00,0xc0,0x4f,0x2e,0x73,0xc5);")
cpp_quote("DEFINE_GUID(DXVA2_ModeWMV9_B, 0x1b81be91, 0xa0c7,0x11d3, 0xb9,0x84,0x00,0xc0,0x4f,0x2e,0x73,0xc5);")
cpp_quote("DEFINE_GUID(DXVA2_ModeWMV9_C, 0x1b81be94, 0xa0c7,0x11d3, 0xb9,0x84,0x00,0xc0,0x4f,0x2e,0x73,0xc5);")
cpp_quote("DEFINE_GUID(DXVA2_ModeVC1_A, 0x1b81beA0, 0xa0c7,0x11d3, 0xb9,0x84,0x00,0xc0,0x4f,0x2e,0x73,0xc5);")
cpp_quote("DEFINE_GUID(DXVA2_ModeVC1_B, 0x1b81beA1, 0xa0c7,0x11d3, 0xb9,0x84,0x00,0xc0,0x4f,0x2e,0x73,0xc5);")
cpp_quote("DEFINE_GUID(DXVA2_ModeVC1_C, 0x1b81beA2, 0xa0c7,0x11d3, 0xb9,0x84,0x00,0xc0,0x4f,0x2e,0x73,0xc5);")
cpp_quote("DEFINE_GUID(DXVA2_ModeVC1_D, 0x1b81beA3, 0xa0c7,0x11d3, 0xb9,0x84,0x00,0xc0,0x4f,0x2e,0x73,0xc5);")
cpp_quote("")
cpp_quote("typedef enum _DXVA2_SampleFormat {")
cpp_quote("  DXVA2_SampleFormatMask                  = 0x00FF,")
cpp_quote("  DXVA2_SampleUnknown                     = 0,")
cpp_quote("  DXVA2_SampleProgressiveFrame            = 2,")
cpp_quote("  DXVA2_SampleFieldInterleavedEvenFirst   = 3,")
cpp_quote("  DXVA2_SampleFieldInterleavedOddFirst    = 4,")
cpp_quote("  DXVA2_SampleFieldSingleEven             = 5,")
cpp_quote("  DXVA2_SampleFieldSingleOdd              = 6,")
cpp_quote("  DXVA2_SampleSubStream                   = 7 ")
cpp_quote("} DXVA2_SampleFormat;")
cpp_quote("")
cpp_quote("typedef enum _DXVA2_VideoChromaSubSampling {")
cpp_quote("  DXVA2_VideoChromaSubsamplingMask                              = 0x0F,")
cpp_quote("  DXVA2_VideoChromaSubsampling_Unknown                          = 0,")
cpp_quote("  DXVA2_VideoChromaSubsampling_ProgressiveChroma                = 0x8,")
cpp_quote("  DXVA2_VideoChromaSubsampling_Horizontally_Cosited             = 0x4,")
cpp_quote("  DXVA2_VideoChromaSubsampling_Vertically_Cosited               = 0x2,")
cpp_quote("  DXVA2_VideoChromaSubsampling_Vertically_AlignedChromaPlanes   = 0x1,")
cpp_quote("  DXVA2_VideoChromaSubsampling_MPEG2                            = ")
cpp_quote("              DXVA2_VideoChromaSubsampling_Horizontally_Cosited |")
cpp_quote("              DXVA2_VideoChromaSubsampling_Vertically_AlignedChromaPlanes,")
cpp_quote("  DXVA2_VideoChromaSubsampling_MPEG1                            = ")
cpp_quote("              DXVA2_VideoChromaSubsampling_Vertically_AlignedChromaPlanes,")
cpp_quote("  DXVA2_VideoChromaSubsampling_DV_PAL                           = ")
cpp_quote("              DXVA2_VideoChromaSubsampling_Horizontally_Cosited | ")
cpp_quote("              DXVA2_VideoChromaSubsampling_Vertically_Cosited,")
cpp_quote("  DXVA2_VideoChromaSubsampling_Cosited                          = ")
cpp_quote("              DXVA2_VideoChromaSubsampling_Horizontally_Cosited | ")
cpp_quote("              DXVA2_VideoChromaSubsampling_Vertically_Cosited | ")
cpp_quote("              DXVA2_VideoChromaSubsampling_Vertically_AlignedChromaPlanes ")
cpp_quote("} DXVA2_VideoChromaSubSampling;")
cpp_quote("")
cpp_quote("typedef enum _DXVA2_NominalRange {")
cpp_quote("  DXVA2_NominalRangeMask       = 0x07,")
cpp_quote("  DXVA2_NominalRange_Unknown   = 0,")
cpp_quote("  DXVA2_NominalRange_Normal    = 1,")
cpp_quote("  DXVA2_NominalRange_Wide      = 2,")
cpp_quote("  DXVA2_NominalRange_0_255     = 1,")
cpp_quote("  DXVA2_NominalRange_16_235    = 2,")
cpp_quote("  DXVA2_NominalRange_48_208    = 3 ")
cpp_quote("} DXVA2_NominalRange;")
cpp_quote("")
cpp_quote("typedef enum _DXVA2_VideoLighting {")
cpp_quote("  DXVA2_VideoLightingMask       = 0x0F,")
cpp_quote("  DXVA2_VideoLighting_Unknown   = 0,")
cpp_quote("  DXVA2_VideoLighting_bright    = 1,")
cpp_quote("  DXVA2_VideoLighting_office    = 2,")
cpp_quote("  DXVA2_VideoLighting_dim       = 3,")
cpp_quote("  DXVA2_VideoLighting_dark      = 4 ")
cpp_quote("} DXVA2_VideoLighting;")
cpp_quote("")
cpp_quote("typedef enum _DXVA2_VideoPrimaries {")
cpp_quote("  DXVA2_VideoPrimariesMask             = 0x001f,")
cpp_quote("  DXVA2_VideoPrimaries_Unknown         = 0,")
cpp_quote("  DXVA2_VideoPrimaries_reserved        = 1,")
cpp_quote("  DXVA2_VideoPrimaries_BT709           = 2,")
cpp_quote("  DXVA2_VideoPrimaries_BT470_2_SysM    = 3,")
cpp_quote("  DXVA2_VideoPrimaries_BT470_2_SysBG   = 4,")
cpp_quote("  DXVA2_VideoPrimaries_SMPTE170M       = 5,")
cpp_quote("  DXVA2_VideoPrimaries_SMPTE240M       = 6,")
cpp_quote("  DXVA2_VideoPrimaries_EBU3213         = 7,")
cpp_quote("  DXVA2_VideoPrimaries_SMPTE_C         = 8 ")
cpp_quote("} DXVA2_VideoPrimaries;")
cpp_quote("")
cpp_quote("typedef enum _DXVA2_VideoTransferFunction {")
cpp_quote("  DXVA2_VideoTransFuncMask       = 0x001f,")
cpp_quote("  DXVA2_VideoTransFunc_Unknown   = 0,")
cpp_quote("  DXVA2_VideoTransFunc_10        = 1,")
cpp_quote("  DXVA2_VideoTransFunc_18        = 2,")
cpp_quote("  DXVA2_VideoTransFunc_20        = 3,")
cpp_quote("  DXVA2_VideoTransFunc_22        = 4,")
cpp_quote("  DXVA2_VideoTransFunc_709       = 5,")
cpp_quote("  DXVA2_VideoTransFunc_240M      = 6,")
cpp_quote("  DXVA2_VideoTransFunc_sRGB      = 7,")
cpp_quote("  DXVA2_VideoTransFunc_28        = 8 ")
cpp_quote("} DXVA2_VideoTransferFunction;")
cpp_quote("")
cpp_quote("typedef enum  {")
cpp_quote("  DXVA2_SurfaceType_DecoderRenderTarget      = 0,")
cpp_quote("  DXVA2_SurfaceType_ProcessorRenderTarget    = 1,")
cpp_quote("  DXVA2_SurfaceType_D3DRenderTargetTexture   = 2 ")
cpp_quote("} DXVA2_SurfaceType;")
cpp_quote("")
cpp_quote("typedef enum _DXVA2_VideoTransferMatrix {")
cpp_quote("  DXVA2_VideoTransferMatrixMask         = 0x07,")
cpp_quote("  DXVA2_VideoTransferMatrix_Unknown     = 0,")
cpp_quote("  DXVA2_VideoTransferMatrix_BT709       = 1,")
cpp_quote("  DXVA2_VideoTransferMatrix_BT601       = 2,")
cpp_quote("  DXVA2_VideoTransferMatrix_SMPTE240M   = 3 ")
cpp_quote("} DXVA2_VideoTransferMatrix;")
cpp_quote("")
cpp_quote("typedef struct _DXVA2_AYUVSample16 {")
cpp_quote("  USHORT Cr;")
cpp_quote("  USHORT Cb;")
cpp_quote("  USHORT Y;")
cpp_quote("  USHORT Alpha;")
cpp_quote("} DXVA2_AYUVSample16;")
cpp_quote("")
cpp_quote("typedef struct _DXVA2_AYUVSample8 {")
cpp_quote("  UCHAR Cr;")
cpp_quote("  UCHAR Cb;")
cpp_quote("  UCHAR Y;")
cpp_quote("  UCHAR Alpha;")
cpp_quote("} DXVA2_AYUVSample8;")

typedef struct _DXVA2_ConfigPictureDecode {
  GUID   guidConfigBitstreamEncryption;
  GUID   guidConfigMBcontrolEncryption;
  GUID   guidConfigResidDiffEncryption;
  UINT   ConfigBitstreamRaw;
  UINT   ConfigMBcontrolRasterOrder;
  UINT   ConfigResidDiffHost;
  UINT   ConfigSpatialResid8;
  UINT   ConfigResid8Subtraction;
  UINT   ConfigSpatialHost8or9Clipping;
  UINT   ConfigSpatialResidInterleaved;
  UINT   ConfigIntraResidUnsigned;
  UINT   ConfigResidDiffAccelerator;
  UINT   ConfigHostInverseScan;
  UINT   ConfigSpecificIDCT;
  UINT   Config4GroupedCoefs;
  USHORT ConfigMinRenderTargetBuffCount;
  USHORT ConfigDecoderSpecific;
} DXVA2_ConfigPictureDecode;

typedef struct _DXVA2_DecodeBufferDesc {
  DWORD CompressedBufferType;
  UINT  BufferIndex;
  UINT  DataOffset;
  UINT  DataSize;
  UINT  FirstMBaddress;
  UINT  NumMBsInBuffer;
  UINT  Width;
  UINT  Height;
  UINT  Stride;
  UINT  ReservedBits;
  PVOID pvPVPState;
} DXVA2_DecodeBufferDesc;

typedef struct _DXVA2_DecodeExtensionData {
  UINT  Function;
  PVOID pPrivateInputData;
  UINT  PrivateInputDataSize;
  PVOID pPrivateOutputData;
  UINT  PrivateOutputDataSize;
} DXVA2_DecodeExtensionData;

typedef struct _DXVA2_DecodeExecuteParams {
  UINT                      NumCompBuffers;
  DXVA2_DecodeBufferDesc    *pCompressedBuffers;
  DXVA2_DecodeExtensionData *pExtensionData;
} DXVA2_DecodeExecuteParams;

typedef struct _DXVA2_ExtendedFormat {
  union {
    struct {
      UINT SampleFormat            :8;
      UINT VideoChromaSubsampling  :4;
      UINT NominalRange            :3;
      UINT VideoTransferMatrix     :3;
      UINT VideoLighting           :4;
      UINT VideoPrimaries          :5;
      UINT VideoTransferFunction   :5;
    };
    UINT   value;
  };
} DXVA2_ExtendedFormat;

cpp_quote("typedef struct _DXVA2_Fixed32 {")
cpp_quote("  __C89_NAMELESS union {")
cpp_quote("    __C89_NAMELESS struct {")
cpp_quote("      USHORT Fraction;")
cpp_quote("      SHORT  Value;")
cpp_quote("    } DUMMYSTRUCTNAME;")
cpp_quote("    LONG   ll;")
cpp_quote("  } DUMMYUNIONNAME;")
cpp_quote("} DXVA2_Fixed32;")
cpp_quote("")
cpp_quote("typedef struct _DXVA2_FilterValues {")
cpp_quote("  DXVA2_Fixed32 Level;")
cpp_quote("  DXVA2_Fixed32 Threshold;")
cpp_quote("  DXVA2_Fixed32 Radius;")
cpp_quote("} DXVA2_FilterValues;")

typedef struct _DXVA2_Frequency {
  UINT Numerator;
  UINT Denominator;
} DXVA2_Frequency;

cpp_quote("typedef struct _DXVA2_ProcAmpValues {")
cpp_quote("  DXVA2_Fixed32 Brightness;")
cpp_quote("  DXVA2_Fixed32 Contrast;")
cpp_quote("  DXVA2_Fixed32 Hue;")
cpp_quote("  DXVA2_Fixed32 Saturation;")
cpp_quote("} DXVA2_ProcAmpValues;")
cpp_quote("")
cpp_quote("typedef struct _DXVA2_ValueRange {")
cpp_quote("  DXVA2_Fixed32 MinValue;")
cpp_quote("  DXVA2_Fixed32 MaxValue;")
cpp_quote("  DXVA2_Fixed32 DefaultValue;")
cpp_quote("  DXVA2_Fixed32 StepSize;")
cpp_quote("} DXVA2_ValueRange;")

typedef struct _DXVA2_VideoDesc {
  UINT                 SampleWidth;
  UINT                 SampleHeight;
  DXVA2_ExtendedFormat SampleFormat;
  D3DFORMAT            Format;
  DXVA2_Frequency      InputSampleFreq;
  DXVA2_Frequency      OutputFrameFreq;
  UINT                 UABProtectionLevel;
  UINT                 Reserved;
} DXVA2_VideoDesc;

cpp_quote("/* DeviceCaps")
cpp_quote("DXVA2_VPDev_EmulatedDXVA1")
cpp_quote("DXVA2_VPDev_HardwareDevice")
cpp_quote("DXVA2_VPDev_SoftwareDevice")
cpp_quote("*/")
cpp_quote("/* DeinterlaceTechnology")
cpp_quote("DXVA2_DeinterlaceTech_Unknown")
cpp_quote("DXVA2_DeinterlaceTech_BOBLineReplicate")
cpp_quote("DXVA2_DeinterlaceTech_BOBVerticalStretch")
cpp_quote("DXVA2_DeinterlaceTech_BOBVerticalStretch4Tap")
cpp_quote("DXVA2_DeinterlaceTech_MedianFiltering")
cpp_quote("DXVA2_DeinterlaceTech_EdgeFiltering")
cpp_quote("DXVA2_DeinterlaceTech_FieldAdaptive")
cpp_quote("DXVA2_DeinterlaceTech_PixelAdaptive")
cpp_quote("DXVA2_DeinterlaceTech_MotionVectorSteered")
cpp_quote("DXVA2_DeinterlaceTech_InverseTelecine")
cpp_quote("*/")
cpp_quote("")
cpp_quote("/* VideoProcessorOperations")
cpp_quote("DXVA2_VideoProcess_YUV2RGB")
cpp_quote("DXVA2_VideoProcess_StretchX")
cpp_quote("DXVA2_VideoProcess_StretchY")
cpp_quote("DXVA2_VideoProcess_AlphaBlend")
cpp_quote("DXVA2_VideoProcess_SubRects")
cpp_quote("DXVA2_VideoProcess_SubStreams")
cpp_quote("DXVA2_VideoProcess_SubStreamsExtended")
cpp_quote("DXVA2_VideoProcess_YUV2RGBExtended")
cpp_quote("DXVA2_VideoProcess_AlphaBlendExtended")
cpp_quote("DXVA2_VideoProcess_Constriction")
cpp_quote("DXVA2_VideoProcess_NoiseFilter")
cpp_quote("DXVA2_VideoProcess_DetailFilter")
cpp_quote("DXVA2_VideoProcess_PlanarAlpha")
cpp_quote("DXVA2_VideoProcess_LinearScaling")
cpp_quote("DXVA2_VideoProcess_GammaCompensated")
cpp_quote("DXVA2_VideoProcess_MaintainsOriginalFieldData")
cpp_quote("*/")
cpp_quote("")
cpp_quote("/*NoiseFilterTechnology")
cpp_quote("DXVA2_NoiseFilterTech_Unsupported")
cpp_quote("DXVA2_NoiseFilterTech_Unknown")
cpp_quote("DXVA2_NoiseFilterTech_Median")
cpp_quote("DXVA2_NoiseFilterTech_Temporal")
cpp_quote("DXVA2_NoiseFilterTech_BlockNoise")
cpp_quote("DXVA2_NoiseFilterTech_MosquitoNoise")
cpp_quote("*/")
cpp_quote("")
cpp_quote("/* DetailFilterTechnology")
cpp_quote("DXVA2_DetailFilterTech_Unsupported")
cpp_quote("DXVA2_DetailFilterTech_Unknown")
cpp_quote("DXVA2_DetailFilterTech_Edge")
cpp_quote("DXVA2_DetailFilterTech_Sharpening")
cpp_quote("*/")
cpp_quote("typedef struct _DXVA2_VideoProcessBltParams {")
cpp_quote("  REFERENCE_TIME       TargetFrame;")
cpp_quote("  RECT                 TargetRect;")
cpp_quote("  SIZE                 ConstrictionSize;")
cpp_quote("  UINT                 StreamingFlags;")
cpp_quote("  DXVA2_AYUVSample16   BackgroundColor;")
cpp_quote("  DXVA2_ExtendedFormat DestFormat;")
cpp_quote("  DXVA2_ProcAmpValues  ProcAmpValues;")
cpp_quote("  DXVA2_Fixed32        Alpha;")
cpp_quote("  DXVA2_FilterValues   NoiseFilterLuma;")
cpp_quote("  DXVA2_FilterValues   NoiseFilterChroma;")
cpp_quote("  DXVA2_FilterValues   DetailFilterLuma;")
cpp_quote("  DXVA2_FilterValues   DetailFilterChroma;")
cpp_quote("  DWORD                DestData;")
cpp_quote("} DXVA2_VideoProcessBltParams;")
cpp_quote("")
cpp_quote("#ifdef _D3D9_H_")
cpp_quote("typedef struct _DXVA2_VideoProcessorCaps {")
cpp_quote("  UINT    DeviceCaps;")
cpp_quote("  D3DPOOL InputPool;")
cpp_quote("  UINT    NumForwardRefSamples;")
cpp_quote("  UINT    NumBackwardRefSamples;")
cpp_quote("  UINT    Reserved;")
cpp_quote("  UINT    DeinterlaceTechnology;")
cpp_quote("  UINT    ProcAmpControlCaps;")
cpp_quote("  UINT    VideoProcessorOperations;")
cpp_quote("  UINT    NoiseFilterTechnology;")
cpp_quote("  UINT    DetailFilterTechnology;")
cpp_quote("} DXVA2_VideoProcessorCaps;")
cpp_quote("#endif")
cpp_quote("")
cpp_quote("/* SampleData")
cpp_quote("DXVA2_SampleData_RFF")
cpp_quote("DXVA2_SampleData_TFF")
cpp_quote("DXVA2_SampleData_RFF_TFF_Present")
cpp_quote("*/")
cpp_quote("")
cpp_quote("#ifdef _D3D9_H_")
cpp_quote("typedef struct _DXVA2_VideoSample {")
cpp_quote("  REFERENCE_TIME       Start;")
cpp_quote("  REFERENCE_TIME       End;")
cpp_quote("  DXVA2_ExtendedFormat SampleFormat;")
cpp_quote("  IDirect3DSurface9*   SrcSurface;")
cpp_quote("  RECT                 SrcRect;")
cpp_quote("  RECT                 DstRect;")
cpp_quote("  DXVA2_AYUVSample8    Pal[16];")
cpp_quote("  DXVA2_Fixed32        PlanarAlpha;")
cpp_quote("  DWORD                SampleData;")
cpp_quote("} DXVA2_VideoSample;")
cpp_quote("#endif")
cpp_quote("")
cpp_quote("/* Constants */")
cpp_quote("")
cpp_quote("#define DXVA2_VideoDecoderRenderTarget 0")
cpp_quote("#define DXVA2_VideoProcessorRenderTarget 1")
cpp_quote("#define DXVA2_VideoSoftwareRenderTarget 2")
cpp_quote("")
cpp_quote("/* CompressedBufferType */")
cpp_quote("#define DXVA2_PictureParametersBufferType 0")
cpp_quote("#define DXVA2_MacroBlockControlBufferType 1")
cpp_quote("#define DXVA2_ResidualDifferenceBufferType 2")
cpp_quote("#define DXVA2_DeblockingControlBufferType 3")
cpp_quote("#define DXVA2_InverseQuantizationMatrixBufferType 4")
cpp_quote("#define DXVA2_SliceControlBufferType 5")
cpp_quote("#define DXVA2_BitStreamDateBufferType 6")
cpp_quote("#define DXVA2_MotionVectorBuffer 7")
cpp_quote("#define DXVA2_FilmGrainBuffer 8")
cpp_quote("")
cpp_quote("__forceinline const DXVA2_Fixed32 DXVA2_Fixed32OpaqueAlpha (void) {")
cpp_quote("  DXVA2_Fixed32 f32;")
cpp_quote("  f32.ll = 0 + (1 << 16);")
cpp_quote("  return f32;")
cpp_quote("}")
cpp_quote("")
cpp_quote("__forceinline const DXVA2_Fixed32 DXVA2_Fixed32TransparentAlpha (void) {")
cpp_quote("  DXVA2_Fixed32 f32;")
cpp_quote("  f32.ll = 0;")
cpp_quote("  return f32;")
cpp_quote("}")
cpp_quote("")
cpp_quote("__forceinline float DXVA2FixedToFloat (const DXVA2_Fixed32 f32) {")
cpp_quote("  return (float)f32.Value + (float)f32.Fraction / (1 << 16);")
cpp_quote("}")
cpp_quote("")
cpp_quote("__forceinline DXVA2_Fixed32 DXVA2FloatToFixed (const float f) {")
cpp_quote("  DXVA2_Fixed32 f32;")
cpp_quote("  f32.Value    = ((ULONG) (f * (1 << 16))) >> 16;")
cpp_quote("  f32.Fraction = ((ULONG) (f * (1 << 16))) & 0xFFFF;")
cpp_quote("  return f32;")
cpp_quote("}")

cpp_quote("#ifdef _D3D9_H_")

cpp_quote("HRESULT WINAPI DXVA2CreateDirect3DDeviceManager9(UINT *pResetToken,IDirect3DDeviceManager9 **ppDXVAManager);")
cpp_quote("HRESULT WINAPI DXVA2CreateVideoService(IDirect3DDevice9 *pDD,REFIID riid,void **ppService);")

[
    object,
    uuid(a0cade0f-06d5-4cf4-a1c7-f3cdd725aa75),
    local
]
interface IDirect3DDeviceManager9 : IUnknown
{
    HRESULT ResetDevice([in] IDirect3DDevice9 *pDevice, [in] UINT resetToken);
    HRESULT OpenDeviceHandle([out] HANDLE *phDevice);
    HRESULT CloseDeviceHandle([in] HANDLE hDevice);
    HRESULT TestDevice([in] HANDLE hDevice);
    HRESULT LockDevice([in] HANDLE hDevice, [out] IDirect3DDevice9 **ppDevice, [in] BOOL fBlock);
    HRESULT UnlockDevice([in] HANDLE hDevice, [in] BOOL fSaveState);
    HRESULT GetVideoService([in] HANDLE hDevice, [in] REFIID riid, [out] void **ppService);
}

[
    object,
    uuid(f2b0810a-fd00-43c9-918c-df94e2d8ef7d),
    local
]
interface IDirectXVideoDecoder : IUnknown
{
    HRESULT GetVideoDecoderService([out] IDirectXVideoDecoderService **ppService);
    HRESULT GetCreationParameters([out] GUID *pDeviceGuid, [out] DXVA2_VideoDesc *pVideoDesc,
            [out] DXVA2_ConfigPictureDecode *pConfig,
            [out, unique, size_is(*pNumSurfaces)] IDirect3DSurface9 ***pDecoderRenderTargets,
            [out] UINT *pNumSurfaces);

    HRESULT GetBuffer([in] UINT BufferType, [out] void **ppBuffer, [out] UINT *pBufferSize);
    HRESULT ReleaseBuffer([in] UINT BufferType);
    HRESULT BeginFrame([in] IDirect3DSurface9 *pRenderTarget, [in] void *pvPVPData);
    HRESULT EndFrame([out] HANDLE *pHandleComplete);
    HRESULT Execute([in] const DXVA2_DecodeExecuteParams *pExecuteParams);
}

[
    object,
    uuid(fc51a550-d5e7-11d9-af55-00054e43ff02),
    local
]
interface IDirectXVideoAccelerationService : IUnknown
{
    HRESULT CreateSurface([in] UINT Width, [in] UINT Height, [in] UINT BackBuffers, [in] D3DFORMAT Format,
            [in] D3DPOOL Pool, [in] DWORD Usage, [in] DWORD DxvaType, [out, size_is(BackBuffers+1)] IDirect3DSurface9 **ppSurface,
            [in, out] HANDLE *pSharedHandle);
}

[
    object,
    uuid(fc51a551-d5e7-11d9-af55-00054e43ff02),
    local
]
interface IDirectXVideoDecoderService : IDirectXVideoAccelerationService
{
    HRESULT GetDecoderDeviceGuids([out] UINT *pCount, [out, unique, size_is(*pCount)] GUID **pGuids);

    HRESULT GetDecoderRenderTargets([in] REFGUID Guid, [out] UINT *pCount, [out, unique, size_is(*pCount)] D3DFORMAT **pFormats);

    HRESULT GetDecoderConfigurations([in] REFGUID Guid, [in] const DXVA2_VideoDesc *pVideoDesc, [in] void *pReserved,
            [out] UINT *pCount, [out, unique, size_is(*pCount)] DXVA2_ConfigPictureDecode **ppConfigs);

    HRESULT CreateVideoDecoder([in] REFGUID Guid, [in] const DXVA2_VideoDesc *pVideoDesc,
            [in] const DXVA2_ConfigPictureDecode *pConfig,
            [in, size_is(NumRenderTargets)] IDirect3DSurface9 **ppDecoderRenderTargets,
            [in] UINT NumRenderTargets, [out] IDirectXVideoDecoder **ppDecode);
}

cpp_quote("#endif /* _D3D9_H_ */")
