1use 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}