winapi_ui_automation/um/
dxvahd.rs

1// Licensed under the Apache License, Version 2.0
2// <LICENSE-APACHE or http://www.apache.org/licenses/LICENSE-2.0> or the MIT license
3// <LICENSE-MIT or http://opensource.org/licenses/MIT>, at your option.
4// All files in the project carrying such notice may not be copied, modified, or distributed
5// except according to those terms.
6use ctypes::c_void;
7use shared::d3d9::{IDirect3DDevice9Ex, IDirect3DSurface9};
8use shared::d3d9types::{D3DCOLOR, D3DFORMAT, D3DPOOL};
9use shared::guiddef::GUID;
10use shared::minwindef::{BOOL, DWORD, FLOAT, INT, UINT};
11use shared::windef::{RECT, SIZE};
12use um::unknwnbase::{IUnknown, IUnknownVtbl};
13use um::winnt::{HANDLE, HRESULT, ULONGLONG};
14DEFINE_GUID!{IID_IDXVAHD_Device,
15    0x95f12dfd, 0xd77e, 0x49be, 0x81, 0x5f, 0x57, 0xd5, 0x79, 0x63, 0x4d, 0x6d}
16DEFINE_GUID!{IID_IDXVAHD_VideoProcessor,
17    0x95f4edf4, 0x6e03, 0x4cd7, 0xbe, 0x1b, 0x30, 0x75, 0xd6, 0x65, 0xaa, 0x52}
18ENUM!{enum DXVAHD_FRAME_FORMAT {
19    DXVAHD_FRAME_FORMAT_PROGRESSIVE = 0,
20    DXVAHD_FRAME_FORMAT_INTERLACED_TOP_FIELD_FIRST = 1,
21    DXVAHD_FRAME_FORMAT_INTERLACED_BOTTOM_FIELD_FIRST = 2,
22}}
23ENUM!{enum DXVAHD_DEVICE_USAGE {
24    DXVAHD_DEVICE_USAGE_PLAYBACK_NORMAL = 0,
25    DXVAHD_DEVICE_USAGE_OPTIMAL_SPEED = 1,
26    DXVAHD_DEVICE_USAGE_OPTIMAL_QUALITY = 2,
27}}
28ENUM!{enum DXVAHD_SURFACE_TYPE {
29    DXVAHD_SURFACE_TYPE_VIDEO_INPUT = 0,
30    DXVAHD_SURFACE_TYPE_VIDEO_INPUT_PRIVATE = 1,
31    DXVAHD_SURFACE_TYPE_VIDEO_OUTPUT = 2,
32}}
33ENUM!{enum DXVAHD_DEVICE_TYPE {
34    DXVAHD_DEVICE_TYPE_HARDWARE = 0,
35    DXVAHD_DEVICE_TYPE_SOFTWARE = 1,
36    DXVAHD_DEVICE_TYPE_REFERENCE = 2,
37    DXVAHD_DEVICE_TYPE_OTHER = 3,
38}}
39ENUM!{enum DXVAHD_DEVICE_CAPS {
40    DXVAHD_DEVICE_CAPS_LINEAR_SPACE = 0x1,
41    DXVAHD_DEVICE_CAPS_xvYCC = 0x2,
42    DXVAHD_DEVICE_CAPS_RGB_RANGE_CONVERSION = 0x4,
43    DXVAHD_DEVICE_CAPS_YCbCr_MATRIX_CONVERSION = 0x8,
44}}
45ENUM!{enum DXVAHD_FEATURE_CAPS {
46    DXVAHD_FEATURE_CAPS_ALPHA_FILL = 0x1,
47    DXVAHD_FEATURE_CAPS_CONSTRICTION = 0x2,
48    DXVAHD_FEATURE_CAPS_LUMA_KEY = 0x4,
49    DXVAHD_FEATURE_CAPS_ALPHA_PALETTE = 0x8,
50}}
51ENUM!{enum DXVAHD_FILTER_CAPS {
52    DXVAHD_FILTER_CAPS_BRIGHTNESS = 0x1,
53    DXVAHD_FILTER_CAPS_CONTRAST = 0x2,
54    DXVAHD_FILTER_CAPS_HUE = 0x4,
55    DXVAHD_FILTER_CAPS_SATURATION = 0x8,
56    DXVAHD_FILTER_CAPS_NOISE_REDUCTION = 0x10,
57    DXVAHD_FILTER_CAPS_EDGE_ENHANCEMENT = 0x20,
58    DXVAHD_FILTER_CAPS_ANAMORPHIC_SCALING = 0x40,
59}}
60ENUM!{enum DXVAHD_INPUT_FORMAT_CAPS {
61    DXVAHD_INPUT_FORMAT_CAPS_RGB_INTERLACED = 0x1,
62    DXVAHD_INPUT_FORMAT_CAPS_RGB_PROCAMP = 0x2,
63    DXVAHD_INPUT_FORMAT_CAPS_RGB_LUMA_KEY = 0x4,
64    DXVAHD_INPUT_FORMAT_CAPS_PALETTE_INTERLACED = 0x8,
65}}
66ENUM!{enum DXVAHD_PROCESSOR_CAPS {
67    DXVAHD_PROCESSOR_CAPS_DEINTERLACE_BLEND = 0x1,
68    DXVAHD_PROCESSOR_CAPS_DEINTERLACE_BOB = 0x2,
69    DXVAHD_PROCESSOR_CAPS_DEINTERLACE_ADAPTIVE = 0x4,
70    DXVAHD_PROCESSOR_CAPS_DEINTERLACE_MOTION_COMPENSATION = 0x8,
71    DXVAHD_PROCESSOR_CAPS_INVERSE_TELECINE = 0x10,
72    DXVAHD_PROCESSOR_CAPS_FRAME_RATE_CONVERSION = 0x20,
73}}
74ENUM!{enum DXVAHD_ITELECINE_CAPS {
75    DXVAHD_ITELECINE_CAPS_32 = 0x1,
76    DXVAHD_ITELECINE_CAPS_22 = 0x2,
77    DXVAHD_ITELECINE_CAPS_2224 = 0x4,
78    DXVAHD_ITELECINE_CAPS_2332 = 0x8,
79    DXVAHD_ITELECINE_CAPS_32322 = 0x10,
80    DXVAHD_ITELECINE_CAPS_55 = 0x20,
81    DXVAHD_ITELECINE_CAPS_64 = 0x40,
82    DXVAHD_ITELECINE_CAPS_87 = 0x80,
83    DXVAHD_ITELECINE_CAPS_222222222223 = 0x100,
84    DXVAHD_ITELECINE_CAPS_OTHER = 0x80000000,
85}}
86ENUM!{enum DXVAHD_FILTER {
87    DXVAHD_FILTER_BRIGHTNESS = 0,
88    DXVAHD_FILTER_CONTRAST = 1,
89    DXVAHD_FILTER_HUE = 2,
90    DXVAHD_FILTER_SATURATION = 3,
91    DXVAHD_FILTER_NOISE_REDUCTION = 4,
92    DXVAHD_FILTER_EDGE_ENHANCEMENT = 5,
93    DXVAHD_FILTER_ANAMORPHIC_SCALING = 6,
94}}
95ENUM!{enum DXVAHD_BLT_STATE {
96    DXVAHD_BLT_STATE_TARGET_RECT = 0,
97    DXVAHD_BLT_STATE_BACKGROUND_COLOR = 1,
98    DXVAHD_BLT_STATE_OUTPUT_COLOR_SPACE = 2,
99    DXVAHD_BLT_STATE_ALPHA_FILL = 3,
100    DXVAHD_BLT_STATE_CONSTRICTION = 4,
101    DXVAHD_BLT_STATE_PRIVATE = 1000,
102}}
103ENUM!{enum DXVAHD_ALPHA_FILL_MODE {
104    DXVAHD_ALPHA_FILL_MODE_OPAQUE = 0,
105    DXVAHD_ALPHA_FILL_MODE_BACKGROUND = 1,
106    DXVAHD_ALPHA_FILL_MODE_DESTINATION = 2,
107    DXVAHD_ALPHA_FILL_MODE_SOURCE_STREAM = 3,
108}}
109ENUM!{enum DXVAHD_STREAM_STATE {
110    DXVAHD_STREAM_STATE_D3DFORMAT = 0,
111    DXVAHD_STREAM_STATE_FRAME_FORMAT = 1,
112    DXVAHD_STREAM_STATE_INPUT_COLOR_SPACE = 2,
113    DXVAHD_STREAM_STATE_OUTPUT_RATE = 3,
114    DXVAHD_STREAM_STATE_SOURCE_RECT = 4,
115    DXVAHD_STREAM_STATE_DESTINATION_RECT = 5,
116    DXVAHD_STREAM_STATE_ALPHA = 6,
117    DXVAHD_STREAM_STATE_PALETTE = 7,
118    DXVAHD_STREAM_STATE_LUMA_KEY = 8,
119    DXVAHD_STREAM_STATE_ASPECT_RATIO = 9,
120    DXVAHD_STREAM_STATE_FILTER_BRIGHTNESS = 100,
121    DXVAHD_STREAM_STATE_FILTER_CONTRAST = 101,
122    DXVAHD_STREAM_STATE_FILTER_HUE = 102,
123    DXVAHD_STREAM_STATE_FILTER_SATURATION = 103,
124    DXVAHD_STREAM_STATE_FILTER_NOISE_REDUCTION = 104,
125    DXVAHD_STREAM_STATE_FILTER_EDGE_ENHANCEMENT = 105,
126    DXVAHD_STREAM_STATE_FILTER_ANAMORPHIC_SCALING = 106,
127    DXVAHD_STREAM_STATE_PRIVATE = 1000,
128}}
129ENUM!{enum DXVAHD_OUTPUT_RATE {
130    DXVAHD_OUTPUT_RATE_NORMAL = 0,
131    DXVAHD_OUTPUT_RATE_HALF = 1,
132    DXVAHD_OUTPUT_RATE_CUSTOM = 2,
133}}
134STRUCT!{struct DXVAHD_RATIONAL {
135    Numerator: UINT,
136    Denominator: UINT,
137}}
138STRUCT!{struct DXVAHD_COLOR_RGBA {
139    R: FLOAT,
140    G: FLOAT,
141    B: FLOAT,
142    A: FLOAT,
143}}
144STRUCT!{struct DXVAHD_COLOR_YCbCrA {
145    Y: FLOAT,
146    Cb: FLOAT,
147    Cr: FLOAT,
148    A: FLOAT,
149}}
150UNION!{union DXVAHD_COLOR {
151    [u32; 4],
152    RGB RGB_mut: DXVAHD_COLOR_RGBA,
153    YCbCr YCbCr_mut: DXVAHD_COLOR_YCbCrA,
154}}
155STRUCT!{struct DXVAHD_CONTENT_DESC {
156    InputFrameFormat: DXVAHD_FRAME_FORMAT,
157    InputFrameRate: DXVAHD_RATIONAL,
158    InputWidth: UINT,
159    InputHeight: UINT,
160    OutputFrameRate: DXVAHD_RATIONAL,
161    OutputWidth: UINT,
162    OutputHeight: UINT,
163}}
164STRUCT!{struct DXVAHD_VPDEVCAPS {
165    DeviceType: DXVAHD_DEVICE_TYPE,
166    DeviceCaps: UINT,
167    FeatureCaps: UINT,
168    FilterCaps: UINT,
169    InputFormatCaps: UINT,
170    InputPool: D3DPOOL,
171    OutputFormatCount: UINT,
172    InputFormatCount: UINT,
173    VideoProcessorCount: UINT,
174    MaxInputStreams: UINT,
175    MaxStreamStates: UINT,
176}}
177STRUCT!{struct DXVAHD_VPCAPS {
178    VPGuid: GUID,
179    PastFrames: UINT,
180    FutureFrames: UINT,
181    ProcessorCaps: UINT,
182    ITelecineCaps: UINT,
183    CustomRateCount: UINT,
184}}
185STRUCT!{struct DXVAHD_CUSTOM_RATE_DATA {
186    CustomRate: DXVAHD_RATIONAL,
187    OutputFrames: UINT,
188    InputInterlaced: BOOL,
189    InputFramesOrFields: UINT,
190}}
191STRUCT!{struct DXVAHD_FILTER_RANGE_DATA {
192    Minimum: INT,
193    Maximum: INT,
194    Default: INT,
195    Multiplier: FLOAT,
196}}
197STRUCT!{struct DXVAHD_BLT_STATE_TARGET_RECT_DATA {
198    Enable: BOOL,
199    TargetRect: RECT,
200}}
201STRUCT!{struct DXVAHD_BLT_STATE_BACKGROUND_COLOR_DATA {
202    YCbCr: BOOL,
203    BackgroundColor: DXVAHD_COLOR,
204}}
205STRUCT!{struct DXVAHD_BLT_STATE_OUTPUT_COLOR_SPACE_DATA {
206    Value: UINT,
207}}
208BITFIELD!{DXVAHD_BLT_STATE_OUTPUT_COLOR_SPACE_DATA Value: UINT [
209    Usage set_Usage[0..1],
210    RGB_Range set_RGB_Range[1..2],
211    YCbCr_Matrix set_YCbCr_Matrix[2..3],
212    YCbCr_xvYCC set_YCbCr_xvYCC[3..4],
213    Reserved set_Reserved[4..32],
214]}
215STRUCT!{struct DXVAHD_BLT_STATE_ALPHA_FILL_DATA {
216    Mode: DXVAHD_ALPHA_FILL_MODE,
217    StreamNumber: UINT,
218}}
219STRUCT!{struct DXVAHD_BLT_STATE_CONSTRICTION_DATA {
220    Enable: BOOL,
221    Size: SIZE,
222}}
223STRUCT!{struct DXVAHD_BLT_STATE_PRIVATE_DATA {
224    Guid: GUID,
225    DataSize: UINT,
226    pData: *mut c_void,
227}}
228STRUCT!{struct DXVAHD_STREAM_STATE_D3DFORMAT_DATA {
229    Format: D3DFORMAT,
230}}
231STRUCT!{struct DXVAHD_STREAM_STATE_FRAME_FORMAT_DATA {
232    FrameFormat: DXVAHD_FRAME_FORMAT,
233}}
234STRUCT!{struct DXVAHD_STREAM_STATE_INPUT_COLOR_SPACE_DATA {
235    Value: UINT,
236}}
237BITFIELD!{DXVAHD_STREAM_STATE_INPUT_COLOR_SPACE_DATA Value: UINT [
238    Type set_Type[0..1],
239    RGB_Range set_RGB_Range[1..2],
240    YCbCr_Matrix set_YCbCr_Matrix[2..3],
241    YCbCr_xvYCC set_YCbCr_xvYCC[3..4],
242    Reserved set_Reserved[4..32],
243]}
244STRUCT!{struct DXVAHD_STREAM_STATE_OUTPUT_RATE_DATA {
245    RepeatFrame: BOOL,
246    OutputRate: DXVAHD_OUTPUT_RATE,
247    CustomRate: DXVAHD_RATIONAL,
248}}
249STRUCT!{struct DXVAHD_STREAM_STATE_SOURCE_RECT_DATA {
250    Enable: BOOL,
251    SourceRect: RECT,
252}}
253STRUCT!{struct DXVAHD_STREAM_STATE_DESTINATION_RECT_DATA {
254    Enable: BOOL,
255    DestinationRect: RECT,
256}}
257STRUCT!{struct DXVAHD_STREAM_STATE_ALPHA_DATA {
258    Enable: BOOL,
259    Alpha: FLOAT,
260}}
261STRUCT!{struct DXVAHD_STREAM_STATE_PALETTE_DATA {
262    Count: UINT,
263    pEntries: *mut D3DCOLOR,
264}}
265STRUCT!{struct DXVAHD_STREAM_STATE_LUMA_KEY_DATA {
266    Enable: BOOL,
267    Lower: FLOAT,
268    Upper: FLOAT,
269}}
270STRUCT!{struct DXVAHD_STREAM_STATE_ASPECT_RATIO_DATA {
271    Enable: BOOL,
272    SourceAspectRatio: DXVAHD_RATIONAL,
273    DestinationAspectRatio: DXVAHD_RATIONAL,
274}}
275STRUCT!{struct DXVAHD_STREAM_STATE_FILTER_DATA {
276    Enable: BOOL,
277    Level: INT,
278}}
279STRUCT!{struct DXVAHD_STREAM_STATE_PRIVATE_DATA {
280    Guid: GUID,
281    DataSize: UINT,
282    pData: *mut c_void,
283}}
284STRUCT!{struct DXVAHD_STREAM_DATA {
285    Enable: BOOL,
286    OutputIndex: UINT,
287    InputFrameOrField: UINT,
288    PastFrames: UINT,
289    FutureFrames: UINT,
290    ppPastSurfaces: *mut *mut IDirect3DSurface9,
291    pInputSurface: *mut IDirect3DSurface9,
292    ppFutureSurfaces: *mut *mut IDirect3DSurface9,
293}}
294STRUCT!{struct DXVAHD_STREAM_STATE_PRIVATE_IVTC_DATA {
295    Enable: BOOL,
296    ITelecineFlags: UINT,
297    Frames: UINT,
298    InputField: UINT,
299}}
300RIDL!{#[uuid(0x95f12dfd, 0xd77e, 0x49be, 0x81, 0x5f, 0x57, 0xd5, 0x79, 0x63, 0x4d, 0x6d)]
301interface IDXVAHD_Device(IDXVAHD_DeviceVtbl): IUnknown(IUnknownVtbl) {
302    fn CreateVideoSurface(
303        Width: UINT,
304        Height: UINT,
305        Format: D3DFORMAT,
306        Pool: D3DPOOL,
307        Usage: DWORD,
308        Type: DXVAHD_SURFACE_TYPE,
309        NumSurfaces: UINT,
310        ppSurfaces: *mut *mut IDirect3DSurface9,
311        pSharedHandle: *mut HANDLE,
312    ) -> HRESULT,
313    fn GetVideoProcessorDeviceCaps(
314        pCaps: *mut DXVAHD_VPDEVCAPS,
315    ) -> HRESULT,
316    fn GetVideoProcessorOutputFormats(
317        Count: UINT,
318        pFormats: *mut D3DFORMAT,
319    ) -> HRESULT,
320    fn GetVideoProcessorInputFormats(
321        Count: UINT,
322        pFormats: *mut D3DFORMAT,
323    ) -> HRESULT,
324    fn GetVideoProcessorCaps(
325        Count: UINT,
326        pCaps: *mut DXVAHD_VPCAPS,
327    ) -> HRESULT,
328    fn GetVideoProcessorCustomRates(
329        pVPGuid: *const GUID,
330        Count: UINT,
331        pRates: *mut DXVAHD_CUSTOM_RATE_DATA,
332    ) -> HRESULT,
333    fn GetVideoProcessorFilterRange(
334        Filter: DXVAHD_FILTER,
335        pRange: *mut DXVAHD_FILTER_RANGE_DATA,
336    ) -> HRESULT,
337    fn CreateVideoProcessor(
338        pVPGuid: *const GUID,
339        ppVideoProcessor: *mut *mut IDXVAHD_VideoProcessor,
340    ) -> HRESULT,
341}}
342RIDL!{#[uuid(0x95f4edf4, 0x6e03, 0x4cd7, 0xbe, 0x1b, 0x30, 0x75, 0xd6, 0x65, 0xaa, 0x52)]
343interface IDXVAHD_VideoProcessor(IDXVAHD_VideoProcessorVtbl): IUnknown(IUnknownVtbl) {
344    fn SetVideoProcessBltState(
345        State: DXVAHD_BLT_STATE,
346        DataSize: UINT,
347        pData: *const c_void,
348    ) -> HRESULT,
349    fn GetVideoProcessBltState(
350        State: DXVAHD_BLT_STATE,
351        DataSize: UINT,
352        pData: *mut c_void,
353    ) -> HRESULT,
354    fn SetVideoProcessStreamState(
355        StreamNumber: UINT,
356        State: DXVAHD_STREAM_STATE,
357        DataSize: UINT,
358        pData: *const c_void,
359    ) -> HRESULT,
360    fn GetVideoProcessStreamState(
361        StreamNumber: UINT,
362        State: DXVAHD_STREAM_STATE,
363        DataSize: UINT,
364        pData: *mut c_void,
365    ) -> HRESULT,
366    fn VideoProcessBltHD(
367        pOutputSurface: *mut IDirect3DSurface9,
368        OutputFrame: UINT,
369        StreamCount: UINT,
370        pStreams: *const DXVAHD_STREAM_DATA,
371    ) -> HRESULT,
372}}
373FN!{stdcall PDXVAHDSW_CreateDevice(
374    pD3DDevice: *mut IDirect3DDevice9Ex,
375    phDevice: *mut HANDLE,
376) -> HRESULT}
377FN!{stdcall PDXVAHDSW_ProposeVideoPrivateFormat(
378    hDevice: HANDLE,
379    pFormat: *mut D3DFORMAT,
380) -> HRESULT}
381FN!{stdcall PDXVAHDSW_GetVideoProcessorDeviceCaps(
382    hDevice: HANDLE,
383    pContentDesc: *const DXVAHD_CONTENT_DESC,
384    Usage: DXVAHD_DEVICE_USAGE,
385    pCaps: *mut DXVAHD_VPDEVCAPS,
386) -> HRESULT}
387FN!{stdcall PDXVAHDSW_GetVideoProcessorOutputFormats(
388    hDevice: HANDLE,
389    pContentDesc: *const DXVAHD_CONTENT_DESC,
390    Usage: DXVAHD_DEVICE_USAGE,
391    Count: UINT,
392    pFormats: *mut D3DFORMAT,
393) -> HRESULT}
394FN!{stdcall PDXVAHDSW_GetVideoProcessorInputFormats(
395    hDevice: HANDLE,
396    pContentDesc: *const DXVAHD_CONTENT_DESC,
397    Usage: DXVAHD_DEVICE_USAGE,
398    Count: UINT,
399    pFormats: *mut D3DFORMAT,
400) -> HRESULT}
401FN!{stdcall PDXVAHDSW_GetVideoProcessorCaps(
402    hDevice: HANDLE,
403    pContentDesc: *const DXVAHD_CONTENT_DESC,
404    Usage: DXVAHD_DEVICE_USAGE,
405    Count: UINT,
406    pCaps: *mut DXVAHD_VPCAPS,
407) -> HRESULT}
408FN!{stdcall PDXVAHDSW_GetVideoProcessorCustomRates(
409    hDevice: HANDLE,
410    pVPGuid: *const GUID,
411    Count: UINT,
412    pRates: *mut DXVAHD_CUSTOM_RATE_DATA,
413) -> HRESULT}
414FN!{stdcall PDXVAHDSW_GetVideoProcessorFilterRange(
415    hDevice: HANDLE,
416    Filter: DXVAHD_FILTER,
417    pRange: *mut DXVAHD_FILTER_RANGE_DATA,
418) -> HRESULT}
419FN!{stdcall PDXVAHDSW_DestroyDevice(
420    hDevice: HANDLE,
421) -> HRESULT}
422FN!{stdcall PDXVAHDSW_CreateVideoProcessor(
423    hDevice: HANDLE,
424    pVPGuid: *const GUID,
425    phVideoProcessor: *mut HANDLE,
426) -> HRESULT}
427FN!{stdcall PDXVAHDSW_SetVideoProcessBltState(
428    hVideoProcessor: HANDLE,
429    State: DXVAHD_BLT_STATE,
430    DataSize: UINT,
431    pData: *const c_void,
432) -> HRESULT}
433FN!{stdcall PDXVAHDSW_GetVideoProcessBltStatePrivate(
434    hVideoProcessor: HANDLE,
435    pData: *mut DXVAHD_BLT_STATE_PRIVATE_DATA,
436) -> HRESULT}
437FN!{stdcall PDXVAHDSW_SetVideoProcessStreamState(
438    hVideoProcessor: HANDLE,
439    StreamNumber: UINT,
440    State: DXVAHD_STREAM_STATE,
441    DataSize: UINT,
442    pData: *const c_void,
443) -> HRESULT}
444FN!{stdcall PDXVAHDSW_GetVideoProcessStreamStatePrivate(
445    hVideoProcessor: HANDLE,
446    StreamNumber: UINT,
447    pData: *mut DXVAHD_STREAM_STATE_PRIVATE_DATA,
448) -> HRESULT}
449FN!{stdcall PDXVAHDSW_VideoProcessBltHD(
450    hVideoProcessor: HANDLE,
451    pOutputSurface: *mut IDirect3DSurface9,
452    OutputFrame: UINT,
453    StreamCount: UINT,
454    pStreams: *const DXVAHD_STREAM_DATA,
455) -> HRESULT}
456FN!{stdcall PDXVAHDSW_DestroyVideoProcessor(
457    hVideoProcessor: HANDLE,
458) -> HRESULT}
459STRUCT!{struct DXVAHDSW_CALLBACKS {
460    CreateDevice: PDXVAHDSW_CreateDevice,
461    ProposeVideoPrivateFormat: PDXVAHDSW_ProposeVideoPrivateFormat,
462    GetVideoProcessorDeviceCaps: PDXVAHDSW_GetVideoProcessorDeviceCaps,
463    GetVideoProcessorOutputFormats: PDXVAHDSW_GetVideoProcessorOutputFormats,
464    GetVideoProcessorInputFormats: PDXVAHDSW_GetVideoProcessorInputFormats,
465    GetVideoProcessorCaps: PDXVAHDSW_GetVideoProcessorCaps,
466    GetVideoProcessorCustomRates: PDXVAHDSW_GetVideoProcessorCustomRates,
467    GetVideoProcessorFilterRange: PDXVAHDSW_GetVideoProcessorFilterRange,
468    DestroyDevice: PDXVAHDSW_DestroyDevice,
469    CreateVideoProcessor: PDXVAHDSW_CreateVideoProcessor,
470    SetVideoProcessBltState: PDXVAHDSW_SetVideoProcessBltState,
471    GetVideoProcessBltStatePrivate: PDXVAHDSW_GetVideoProcessBltStatePrivate,
472    SetVideoProcessStreamState: PDXVAHDSW_SetVideoProcessStreamState,
473    GetVideoProcessStreamStatePrivate: PDXVAHDSW_GetVideoProcessStreamStatePrivate,
474    VideoProcessBltHD: PDXVAHDSW_VideoProcessBltHD,
475    DestroyVideoProcessor: PDXVAHDSW_DestroyVideoProcessor,
476}}
477FN!{stdcall PDXVAHDSW_Plugin(
478    Size: UINT,
479    pCallbacks: *mut c_void,
480) -> HRESULT}
481DEFINE_GUID!{DXVAHDControlGuid,
482    0xa0386e75, 0xf70c, 0x464c, 0xa9, 0xce, 0x33, 0xc4, 0x4e, 0x09, 0x16, 0x23}
483DEFINE_GUID!{DXVAHDETWGUID_CREATEVIDEOPROCESSOR,
484    0x681e3d1e, 0x5674, 0x4fb3, 0xa5, 0x03, 0x2f, 0x20, 0x55, 0xe9, 0x1f, 0x60}
485DEFINE_GUID!{DXVAHDETWGUID_VIDEOPROCESSBLTSTATE,
486    0x76c94b5a, 0x193f, 0x4692, 0x94, 0x84, 0xa4, 0xd9, 0x99, 0xda, 0x81, 0xa8}
487DEFINE_GUID!{DXVAHDETWGUID_VIDEOPROCESSSTREAMSTATE,
488    0x262c0b02, 0x209d, 0x47ed, 0x94, 0xd8, 0x82, 0xae, 0x02, 0xb8, 0x4a, 0xa7}
489DEFINE_GUID!{DXVAHDETWGUID_VIDEOPROCESSBLTHD,
490    0xbef3d435, 0x78c7, 0x4de3, 0x97, 0x07, 0xcd, 0x1b, 0x08, 0x3b, 0x16, 0x0a}
491DEFINE_GUID!{DXVAHDETWGUID_VIDEOPROCESSBLTHD_STREAM,
492    0x27ae473e, 0xa5fc, 0x4be5, 0xb4, 0xe3, 0xf2, 0x49, 0x94, 0xd3, 0xc4, 0x95}
493DEFINE_GUID!{DXVAHDETWGUID_DESTROYVIDEOPROCESSOR,
494    0xf943f0a0, 0x3f16, 0x43e0, 0x80, 0x93, 0x10, 0x5a, 0x98, 0x6a, 0xa5, 0xf1}
495STRUCT!{struct DXVAHDETW_CREATEVIDEOPROCESSOR {
496    pObject: ULONGLONG,
497    pD3D9Ex: ULONGLONG,
498    VPGuid: GUID,
499}}
500STRUCT!{struct DXVAHDETW_VIDEOPROCESSBLTSTATE {
501    pObject: ULONGLONG,
502    State: DXVAHD_BLT_STATE,
503    DataSize: UINT,
504    SetState: BOOL,
505}}
506STRUCT!{struct DXVAHDETW_VIDEOPROCESSSTREAMSTATE {
507    pObject: ULONGLONG,
508    StreamNumber: UINT,
509    State: DXVAHD_STREAM_STATE,
510    DataSize: UINT,
511    SetState: BOOL,
512}}
513STRUCT!{struct DXVAHDETW_VIDEOPROCESSBLTHD {
514    pObject: ULONGLONG,
515    pOutputSurface: ULONGLONG,
516    TargetRect: RECT,
517    OutputFormat: D3DFORMAT,
518    ColorSpace: UINT,
519    OutputFrame: UINT,
520    StreamCount: UINT,
521    Enter: BOOL,
522}}
523STRUCT!{struct DXVAHDETW_VIDEOPROCESSBLTHD_STREAM {
524    pObject: ULONGLONG,
525    pInputSurface: ULONGLONG,
526    SourceRect: RECT,
527    DestinationRect: RECT,
528    InputFormat: D3DFORMAT,
529    FrameFormat: DXVAHD_FRAME_FORMAT,
530    ColorSpace: UINT,
531    StreamNumber: UINT,
532    OutputIndex: UINT,
533    InputFrameOrField: UINT,
534    PastFrames: UINT,
535    FutureFrames: UINT,
536}}
537STRUCT!{struct DXVAHDETW_DESTROYVIDEOPROCESSOR {
538    pObject: ULONGLONG,
539}}
540extern "system" {
541    pub fn DXVAHD_CreateDevice(
542        pD3DDevice: *mut IDirect3DDevice9Ex,
543        pContentDesc: *const DXVAHD_CONTENT_DESC,
544        Usage: DXVAHD_DEVICE_USAGE,
545        pPlugin: PDXVAHDSW_Plugin,
546        ppDevice: *mut *mut IDXVAHD_Device,
547    ) -> HRESULT;
548}
549FN!{stdcall PDXVAHD_CreateDevice(
550    pD3DDevice: *mut IDirect3DDevice9Ex,
551    pContentDesc: *const DXVAHD_CONTENT_DESC,
552    Usage: DXVAHD_DEVICE_USAGE,
553    pPlugin: PDXVAHDSW_Plugin,
554    ppDevice: *mut *mut IDXVAHD_Device,
555) -> HRESULT}