1 /*
2  * Copyright 2015 Michael Müller
3  *
4  * This library is free software; you can redistribute it and/or
5  * modify it under the terms of the GNU Lesser General Public
6  * License as published by the Free Software Foundation; either
7  * version 2.1 of the License, or (at your option) any later version.
8  *
9  * This library is distributed in the hope that it will be useful,
10  * but WITHOUT ANY WARRANTY; without even the implied warranty of
11  * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU
12  * Lesser General Public License for more details.
13  *
14  * You should have received a copy of the GNU Lesser General Public
15  * License along with this library; if not, write to the Free Software
16  * Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301, USA
17  */
18 
19 #ifndef __WINE_DXVA_H
20 #define __WINE_DXVA_H
21 
22 #ifdef __cplusplus
23 extern "C" {
24 #endif
25 
26 DEFINE_GUID(DXVA_NoEncrypt, 0x1b81bed0, 0xa0c7,0x11d3, 0xb9,0x84,0x00,0xc0,0x4f,0x2e,0x73,0xc5);
27 
28 #define DXVA_USUAL_BLOCK_WIDTH   8
29 #define DXVA_USUAL_BLOCK_HEIGHT  8
30 #define DXVA_USUAL_BLOCK_SIZE   (DXVA_USUAL_BLOCK_WIDTH * DXVA_USUAL_BLOCK_HEIGHT)
31 
32 #include <pshpack1.h>
33 
34 typedef struct _DXVA_PicEntry_H264
35 {
36     union
37     {
38         struct
39         {
40             UCHAR Index7Bits     : 7;
41             UCHAR AssociatedFlag : 1;
42         } DUMMYSTRUCTNAME;
43         UCHAR bPicEntry;
44     } DUMMYUNIONNAME;
45 } DXVA_PicEntry_H264, *LPDXVA_PicEntry_H264;
46 
47 typedef struct _DXVA_FilmGrainCharacteristics
48 {
49     USHORT  wFrameWidthInMbsMinus1;
50     USHORT  wFrameHeightInMbsMinus1;
51     DXVA_PicEntry_H264 InPic;
52     DXVA_PicEntry_H264 OutPic;
53     USHORT  PicOrderCnt_offset;
54     INT     CurrPicOrderCnt;
55     UINT    StatusReportFeedbackNumber;
56     UCHAR   model_id;
57     UCHAR   separate_colour_description_present_flag;
58     UCHAR   film_grain_bit_depth_luma_minus8;
59     UCHAR   film_grain_bit_depth_chroma_minus8;
60     UCHAR   film_grain_full_range_flag;
61     UCHAR   film_grain_colour_primaries;
62     UCHAR   film_grain_transfer_characteristics;
63     UCHAR   film_grain_matrix_coefficients;
64     UCHAR   blending_mode_id;
65     UCHAR   log2_scale_factor;
66     UCHAR   comp_model_present_flag[4];
67     UCHAR   num_intensity_intervals_minus1[4];
68     UCHAR   num_model_values_minus1[4];
69     UCHAR   intensity_interval_lower_bound[3][16];
70     UCHAR   intensity_interval_upper_bound[3][16];
71     SHORT   comp_model_value[3][16][8];
72 } DXVA_FilmGrainChar_H264, *LPDXVA_FilmGrainChar_H264;
73 
74 typedef struct _DXVA_PictureParameters
75 {
76     WORD wDecodedPictureIndex;
77     WORD wDeblockedPictureIndex;
78     WORD wForwardRefPictureIndex;
79     WORD wBackwardRefPictureIndex;
80     WORD wPicWidthInMBminus1;
81     WORD wPicHeightInMBminus1;
82     BYTE bMacroblockWidthMinus1;
83     BYTE bMacroblockHeightMinus1;
84     BYTE bBlockWidthMinus1;
85     BYTE bBlockHeightMinus1;
86     BYTE bBPPminus1;
87     BYTE bPicStructure;
88     BYTE bSecondField;
89     BYTE bPicIntra;
90     BYTE bPicBackwardPrediction;
91     BYTE bBidirectionalAveragingMode;
92     BYTE bMVprecisionAndChromaRelation;
93     BYTE bChromaFormat;
94     BYTE bPicScanFixed;
95     BYTE bPicScanMethod;
96     BYTE bPicReadbackRequests;
97     BYTE bRcontrol;
98     BYTE bPicSpatialResid8;
99     BYTE bPicOverflowBlocks;
100     BYTE bPicExtrapolation;
101     BYTE bPicDeblocked;
102     BYTE bPicDeblockConfined;
103     BYTE bPic4MVallowed;
104     BYTE bPicOBMC;
105     BYTE bPicBinPB;
106     BYTE bMV_RPS;
107     BYTE bReservedBits;
108     WORD wBitstreamFcodes;
109     WORD wBitstreamPCEelements;
110     BYTE bBitstreamConcealmentNeed;
111     BYTE bBitstreamConcealmentMethod;
112 } DXVA_PictureParameters, *LPDXVA_PictureParameters;
113 
114 typedef struct _DXVA_SliceInfo
115 {
116     WORD wHorizontalPosition;
117     WORD wVerticalPosition;
118     DWORD dwSliceBitsInBuffer;
119     DWORD dwSliceDataLocation;
120     BYTE bStartCodeBitOffset;
121     BYTE bReservedBits;
122     WORD wMBbitOffset;
123     WORD wNumberMBsInSlice;
124     WORD wQuantizerScaleCode;
125     WORD wBadSliceChopping;
126 } DXVA_SliceInfo, *LPDXVA_SliceInfo;
127 
128 typedef struct _DXVA_QmatrixData
129 {
130     BYTE bNewQmatrix[4];
131     WORD Qmatrix[4][DXVA_USUAL_BLOCK_WIDTH * DXVA_USUAL_BLOCK_HEIGHT];
132 } DXVA_QmatrixData, *LPDXVA_QmatrixData;
133 
134 typedef struct _DXVA_PicParams_H264
135 {
136     USHORT wFrameWidthInMbsMinus1;
137     USHORT wFrameHeightInMbsMinus1;
138     DXVA_PicEntry_H264 CurrPic;
139     UCHAR num_ref_frames;
140     union
141     {
142         struct
143         {
144             USHORT field_pic_flag                   : 1;
145             USHORT MbaffFrameFlag                   : 1;
146             USHORT residual_colour_transform_flag   : 1;
147             USHORT sp_for_switch_flag               : 1;
148             USHORT chroma_format_idc                : 2;
149             USHORT RefPicFlag                       : 1;
150             USHORT constrained_intra_pred_flag      : 1;
151             USHORT weighted_pred_flag               : 1;
152             USHORT weighted_bipred_idc              : 2;
153             USHORT MbsConsecutiveFlag               : 1;
154             USHORT frame_mbs_only_flag              : 1;
155             USHORT transform_8x8_mode_flag          : 1;
156             USHORT MinLumaBipredSize8x8Flag         : 1;
157             USHORT IntraPicFlag                     : 1;
158         } DUMMYSTRUCTNAME;
159         USHORT wBitFields;
160     } DUMMYUNIONNAME;
161     UCHAR bit_depth_luma_minus8;
162     UCHAR bit_depth_chroma_minus8;
163     USHORT Reserved16Bits;
164     UINT StatusReportFeedbackNumber;
165     DXVA_PicEntry_H264 RefFrameList[16];
166     INT CurrFieldOrderCnt[2];
167     INT FieldOrderCntList[16][2];
168     CHAR pic_init_qs_minus26;
169     CHAR chroma_qp_index_offset;
170     CHAR second_chroma_qp_index_offset;
171     UCHAR ContinuationFlag;
172     CHAR pic_init_qp_minus26;
173     UCHAR num_ref_idx_l0_active_minus1;
174     UCHAR num_ref_idx_l1_active_minus1;
175     UCHAR Reserved8BitsA;
176     USHORT FrameNumList[16];
177 
178     UINT UsedForReferenceFlags;
179     USHORT NonExistingFrameFlags;
180     USHORT frame_num;
181     UCHAR log2_max_frame_num_minus4;
182     UCHAR pic_order_cnt_type;
183     UCHAR log2_max_pic_order_cnt_lsb_minus4;
184     UCHAR delta_pic_order_always_zero_flag;
185     UCHAR direct_8x8_inference_flag;
186     UCHAR entropy_coding_mode_flag;
187     UCHAR pic_order_present_flag;
188     UCHAR num_slice_groups_minus1;
189     UCHAR slice_group_map_type;
190     UCHAR deblocking_filter_control_present_flag;
191     UCHAR redundant_pic_cnt_present_flag;
192     UCHAR Reserved8BitsB;
193     USHORT slice_group_change_rate_minus1;
194     UCHAR SliceGroupMap[810];
195 } DXVA_PicParams_H264, *LPDXVA_PicParams_H264;
196 
197 typedef struct _DXVA_Qmatrix_H264
198 {
199     UCHAR bScalingLists4x4[6][16];
200     UCHAR bScalingLists8x8[2][64];
201 } DXVA_Qmatrix_H264, *LPDXVA_Qmatrix_H264;
202 
203 typedef struct _DXVA_Slice_H264_Long
204 {
205     UINT BSNALunitDataLocation;
206     UINT SliceBytesInBuffer;
207     USHORT wBadSliceChopping;
208     USHORT first_mb_in_slice;
209     USHORT NumMbsForSlice;
210     USHORT BitOffsetToSliceData;
211     UCHAR slice_type;
212     UCHAR luma_log2_weight_denom;
213     UCHAR chroma_log2_weight_denom;
214 
215     UCHAR num_ref_idx_l0_active_minus1;
216     UCHAR num_ref_idx_l1_active_minus1;
217     CHAR slice_alpha_c0_offset_div2;
218     CHAR slice_beta_offset_div2;
219     UCHAR Reserved8Bits;
220     DXVA_PicEntry_H264 RefPicList[2][32];
221     SHORT Weights[2][32][3][2];
222     CHAR slice_qs_delta;
223     CHAR slice_qp_delta;
224     UCHAR redundant_pic_cnt;
225     UCHAR direct_spatial_mv_pred_flag;
226     UCHAR cabac_init_idc;
227     UCHAR disable_deblocking_filter_idc;
228     USHORT slice_id;
229 } DXVA_Slice_H264_Long, *LPDXVA_Slice_H264_Long;
230 
231 typedef struct _DXVA_Slice_H264_Short
232 {
233     UINT BSNALunitDataLocation;
234     UINT SliceBytesInBuffer;
235     USHORT wBadSliceChopping;
236 } DXVA_Slice_H264_Short, *LPDXVA_Slice_H264_Short;
237 
238 
239 typedef struct _DXVA_PicEntry_HEVC
240 {
241     union
242     {
243         struct
244         {
245             UCHAR Index7Bits : 7;
246             UCHAR AssociatedFlag : 1;
247         };
248         UCHAR bPicEntry;
249     };
250 } DXVA_PicEntry_HEVC, *LPDXVA_PicEntry_HEVC;
251 
252 typedef struct _DXVA_PicParams_HEVC
253 {
254     USHORT      PicWidthInMinCbsY;
255     USHORT      PicHeightInMinCbsY;
256     union
257     {
258         struct
259         {
260             USHORT  chroma_format_idc                       : 2;
261             USHORT  separate_colour_plane_flag              : 1;
262             USHORT  bit_depth_luma_minus8                   : 3;
263             USHORT  bit_depth_chroma_minus8                 : 3;
264             USHORT  log2_max_pic_order_cnt_lsb_minus4       : 4;
265             USHORT  NoPicReorderingFlag                     : 1;
266             USHORT  NoBiPredFlag                            : 1;
267             USHORT  ReservedBits1                            : 1;
268         };
269         USHORT wFormatAndSequenceInfoFlags;
270     };
271     DXVA_PicEntry_HEVC  CurrPic;
272     UCHAR   sps_max_dec_pic_buffering_minus1;
273     UCHAR   log2_min_luma_coding_block_size_minus3;
274     UCHAR   log2_diff_max_min_luma_coding_block_size;
275     UCHAR   log2_min_transform_block_size_minus2;
276     UCHAR   log2_diff_max_min_transform_block_size;
277     UCHAR   max_transform_hierarchy_depth_inter;
278     UCHAR   max_transform_hierarchy_depth_intra;
279     UCHAR   num_short_term_ref_pic_sets;
280     UCHAR   num_long_term_ref_pics_sps;
281     UCHAR   num_ref_idx_l0_default_active_minus1;
282     UCHAR   num_ref_idx_l1_default_active_minus1;
283     CHAR    init_qp_minus26;
284     UCHAR   ucNumDeltaPocsOfRefRpsIdx;
285     USHORT  wNumBitsForShortTermRPSInSlice;
286     USHORT  ReservedBits2;
287 
288     union
289     {
290         struct
291         {
292             UINT32  scaling_list_enabled_flag                    : 1;
293             UINT32  amp_enabled_flag                            : 1;
294             UINT32  sample_adaptive_offset_enabled_flag         : 1;
295             UINT32  pcm_enabled_flag                            : 1;
296             UINT32  pcm_sample_bit_depth_luma_minus1            : 4;
297             UINT32  pcm_sample_bit_depth_chroma_minus1          : 4;
298             UINT32  log2_min_pcm_luma_coding_block_size_minus3  : 2;
299             UINT32  log2_diff_max_min_pcm_luma_coding_block_size : 2;
300             UINT32  pcm_loop_filter_disabled_flag                : 1;
301             UINT32  long_term_ref_pics_present_flag             : 1;
302             UINT32  sps_temporal_mvp_enabled_flag               : 1;
303             UINT32  strong_intra_smoothing_enabled_flag         : 1;
304             UINT32  dependent_slice_segments_enabled_flag       : 1;
305             UINT32  output_flag_present_flag                    : 1;
306             UINT32  num_extra_slice_header_bits                 : 3;
307             UINT32  sign_data_hiding_enabled_flag               : 1;
308             UINT32  cabac_init_present_flag                     : 1;
309             UINT32  ReservedBits3                               : 5;
310         };
311         UINT32 dwCodingParamToolFlags;
312     };
313 
314     union
315     {
316         struct
317         {
318             UINT32  constrained_intra_pred_flag                 : 1;
319             UINT32  transform_skip_enabled_flag                 : 1;
320             UINT32  cu_qp_delta_enabled_flag                    : 1;
321             UINT32  pps_slice_chroma_qp_offsets_present_flag    : 1;
322             UINT32  weighted_pred_flag                          : 1;
323             UINT32  weighted_bipred_flag                        : 1;
324             UINT32  transquant_bypass_enabled_flag              : 1;
325             UINT32  tiles_enabled_flag                          : 1;
326             UINT32  entropy_coding_sync_enabled_flag            : 1;
327             UINT32  uniform_spacing_flag                        : 1;
328             UINT32  loop_filter_across_tiles_enabled_flag       : 1;
329             UINT32  pps_loop_filter_across_slices_enabled_flag  : 1;
330             UINT32  deblocking_filter_override_enabled_flag     : 1;
331             UINT32  pps_deblocking_filter_disabled_flag         : 1;
332             UINT32  lists_modification_present_flag             : 1;
333             UINT32  slice_segment_header_extension_present_flag : 1;
334             UINT32  IrapPicFlag                                 : 1;
335             UINT32  IdrPicFlag                                  : 1;
336             UINT32  IntraPicFlag                                : 1;
337             UINT32  ReservedBits4                               : 13;
338         };
339         UINT32 dwCodingSettingPicturePropertyFlags;
340     };
341     CHAR    pps_cb_qp_offset;
342     CHAR    pps_cr_qp_offset;
343     UCHAR   num_tile_columns_minus1;
344     UCHAR   num_tile_rows_minus1;
345     USHORT  column_width_minus1[19];
346     USHORT  row_height_minus1[21];
347     UCHAR   diff_cu_qp_delta_depth;
348     CHAR    pps_beta_offset_div2;
349     CHAR    pps_tc_offset_div2;
350     UCHAR   log2_parallel_merge_level_minus2;
351     INT     CurrPicOrderCntVal;
352     DXVA_PicEntry_HEVC	RefPicList[15];
353     UCHAR   ReservedBits5;
354     INT     PicOrderCntValList[15];
355     UCHAR   RefPicSetStCurrBefore[8];
356     UCHAR   RefPicSetStCurrAfter[8];
357     UCHAR   RefPicSetLtCurr[8];
358     USHORT  ReservedBits6;
359     USHORT  ReservedBits7;
360     UINT    StatusReportFeedbackNumber;
361 } DXVA_PicParams_HEVC, *LPDXVA_PicParams_HEVC;
362 
363 typedef struct _DXVA_Qmatrix_HEVC
364 {
365     UCHAR ucScalingLists0[6][16];
366     UCHAR ucScalingLists1[6][64];
367     UCHAR ucScalingLists2[6][64];
368     UCHAR ucScalingLists3[2][64];
369     UCHAR ucScalingListDCCoefSizeID2[6];
370     UCHAR ucScalingListDCCoefSizeID3[2];
371 } DXVA_Qmatrix_HEVC, *LPDXVA_Qmatrix_HEVC;
372 
373 typedef struct _DXVA_Slice_HEVC_Short
374 {
375     UINT    BSNALunitDataLocation;
376     UINT    SliceBytesInBuffer;
377     USHORT  wBadSliceChopping;
378 } DXVA_Slice_HEVC_Short, *LPDXVA_Slice_HEVC_Short;
379 
380 typedef struct _DXVA_PicEntry_VPx
381 {
382     union
383     {
384         struct
385         {
386             UCHAR Index7Bits     : 7;
387             UCHAR AssociatedFlag : 1;
388         };
389         UCHAR bPicEntry;
390     };
391 } DXVA_PicEntry_VPx, *LPDXVA_PicEntry_VPx;
392 
393 typedef struct _segmentation_VP9
394 {
395     union
396     {
397         struct
398         {
399             UCHAR enabled                   : 1;
400             UCHAR update_map                : 1;
401             UCHAR temporal_update           : 1;
402             UCHAR abs_delta                 : 1;
403             UCHAR ReservedSegmentFlags4Bits : 4;
404         };
405         UCHAR wSegmentInfoFlags;
406     };
407     UCHAR tree_probs[7];
408     UCHAR pred_probs[3];
409     SHORT feature_data[8][4];
410     UCHAR feature_mask[8];
411 } DXVA_segmentation_VP9;
412 
413 typedef struct _DXVA_PicParams_VP9
414 {
415     DXVA_PicEntry_VPx    CurrPic;
416     UCHAR                profile;
417     union
418     {
419         struct
420         {
421             USHORT frame_type                   : 1;
422             USHORT show_frame                   : 1;
423             USHORT error_resilient_mode         : 1;
424             USHORT subsampling_x                : 1;
425             USHORT subsampling_y                : 1;
426             USHORT extra_plane                  : 1;
427             USHORT refresh_frame_context        : 1;
428             USHORT frame_parallel_decoding_mode : 1;
429             USHORT intra_only                   : 1;
430             USHORT frame_context_idx            : 2;
431             USHORT reset_frame_context          : 2;
432             USHORT allow_high_precision_mv      : 1;
433             USHORT ReservedFormatInfo2Bits      : 2;
434         };
435         USHORT wFormatAndPictureInfoFlags;
436     };
437     UINT  width;
438     UINT  height;
439     UCHAR BitDepthMinus8Luma;
440     UCHAR BitDepthMinus8Chroma;
441     UCHAR interp_filter;
442     UCHAR Reserved8Bits;
443     DXVA_PicEntry_VPx  ref_frame_map[8];
444     UINT  ref_frame_coded_width[8];
445     UINT  ref_frame_coded_height[8];
446     DXVA_PicEntry_VPx  frame_refs[3];
447     CHAR  ref_frame_sign_bias[4];
448     CHAR  filter_level;
449     CHAR  sharpness_level;
450     union
451     {
452         struct
453         {
454             UCHAR mode_ref_delta_enabled   : 1;
455             UCHAR mode_ref_delta_update    : 1;
456             UCHAR use_prev_in_find_mv_refs : 1;
457             UCHAR ReservedControlInfo5Bits : 5;
458         };
459         UCHAR wControlInfoFlags;
460     };
461     CHAR   ref_deltas[4];
462     CHAR   mode_deltas[2];
463     SHORT  base_qindex;
464     CHAR   y_dc_delta_q;
465     CHAR   uv_dc_delta_q;
466     CHAR   uv_ac_delta_q;
467     DXVA_segmentation_VP9 stVP9Segments;
468     UCHAR  log2_tile_cols;
469     UCHAR  log2_tile_rows;
470     USHORT uncompressed_header_size_byte_aligned;
471     USHORT first_partition_size;
472     USHORT Reserved16Bits;
473     UINT   Reserved32Bits;
474     UINT   StatusReportFeedbackNumber;
475 } DXVA_PicParams_VP9, *LPDXVA_PicParams_VP9;
476 
477 typedef struct _segmentation_VP8
478 {
479     union
480     {
481         struct
482         {
483             UCHAR segmentation_enabled        : 1;
484             UCHAR update_mb_segmentation_map  : 1;
485             UCHAR update_mb_segmentation_data : 1;
486             UCHAR mb_segement_abs_delta       : 1;
487             UCHAR ReservedSegmentFlags4Bits   : 4;
488         };
489         UCHAR wSegmentFlags;
490     };
491     CHAR  segment_feature_data[2][4];
492     UCHAR mb_segment_tree_probs[3];
493 } DXVA_segmentation_VP8;
494 
495 typedef struct _DXVA_PicParams_VP8
496 {
497     UINT first_part_size;
498     UINT width;
499     UINT height;
500     DXVA_PicEntry_VPx  CurrPic;
501     union
502     {
503         struct
504         {
505             UCHAR frame_type            : 1;
506             UCHAR version               : 3;
507             UCHAR show_frame            : 1;
508             UCHAR clamp_type            : 1;
509             UCHAR ReservedFrameTag3Bits : 2;
510         };
511         UCHAR wFrameTagFlags;
512     };
513     DXVA_segmentation_VP8  stVP8Segments;
514     UCHAR  filter_type;
515     UCHAR  filter_level;
516     UCHAR  sharpness_level;
517     UCHAR  mode_ref_lf_delta_enabled;
518     UCHAR  mode_ref_lf_delta_update;
519     CHAR   ref_lf_deltas[4];
520     CHAR   mode_lf_deltas[4];
521     UCHAR  log2_nbr_of_dct_partitions;
522     UCHAR  base_qindex;
523     CHAR   y1dc_delta_q;
524     CHAR   y2dc_delta_q;
525     CHAR   y2ac_delta_q;
526     CHAR   uvdc_delta_q;
527     CHAR   uvac_delta_q;
528     DXVA_PicEntry_VPx alt_fb_idx;
529     DXVA_PicEntry_VPx gld_fb_idx;
530     DXVA_PicEntry_VPx lst_fb_idx;
531     UCHAR  ref_frame_sign_bias_golden;
532     UCHAR  ref_frame_sign_bias_altref;
533     UCHAR  refresh_entropy_probs;
534     UCHAR  vp8_coef_update_probs[4][8][3][11];
535     UCHAR  mb_no_coeff_skip;
536     UCHAR  prob_skip_false;
537     UCHAR  prob_intra;
538     UCHAR  prob_last;
539     UCHAR  prob_golden;
540     UCHAR  intra_16x16_prob[4];
541     UCHAR  intra_chroma_prob[3];
542     UCHAR  vp8_mv_update_probs[2][19];
543     USHORT ReservedBits1;
544     USHORT ReservedBits2;
545     USHORT ReservedBits3;
546     UINT   StatusReportFeedbackNumber;
547 } DXVA_PicParams_VP8, *LPDXVA_PicParams_VP8;
548 
549 typedef struct _DXVA_Slice_VPx_Short
550 {
551     UINT   BSNALunitDataLocation;
552     UINT   SliceBytesInBuffer;
553     USHORT wBadSliceChopping;
554 } DXVA_Slice_VPx_Short, *LPDXVA_Slice_VPx_Short;
555 
556 typedef struct _DXVA_Status_VPx
557 {
558     UINT   StatusReportFeedbackNumber;
559     DXVA_PicEntry_VPx CurrPic;
560     UCHAR  bBufType;
561     UCHAR  bStatus;
562     UCHAR  bReserved8Bits;
563     USHORT wNumMbsAffected;
564 } DXVA_Status_VPx, *LPDXVA_Status_VPx;
565 
566 #include <poppack.h>
567 
568 typedef enum _DXVA_VideoChromaSubsampling
569 {
570     DXVA_VideoChromaSubsampling_Vertically_AlignedChromaPlanes  = 0x1,
571     DXVA_VideoChromaSubsampling_Vertically_Cosited              = 0x2,
572     DXVA_VideoChromaSubsampling_Horizontally_Cosited            = 0x4,
573     DXVA_VideoChromaSubsampling_ProgressiveChroma               = 0x8,
574 
575     DXVA_VideoChromaSubsampling_Unknown = 0,
576     DXVA_VideoChromaSubsampling_Cosited = DXVA_VideoChromaSubsampling_Vertically_AlignedChromaPlanes
577             | DXVA_VideoChromaSubsampling_Vertically_Cosited
578             | DXVA_VideoChromaSubsampling_Horizontally_Cosited,
579     DXVA_VideoChromaSubsampling_DV_PAL = DXVA_VideoChromaSubsampling_Vertically_Cosited
580             | DXVA_VideoChromaSubsampling_Horizontally_Cosited,
581     DXVA_VideoChromaSubsampling_MPEG1 = DXVA_VideoChromaSubsampling_Vertically_AlignedChromaPlanes,
582     DXVA_VideoChromaSubsampling_MPEG2 = DXVA_VideoChromaSubsampling_Vertically_AlignedChromaPlanes
583             | DXVA_VideoChromaSubsampling_Horizontally_Cosited,
584 } DXVA_VideoChromaSubsampling;
585 
586 typedef enum _DXVA_NominalRange
587 {
588     DXVA_NominalRange_Unknown = 0,
589     DXVA_NominalRange_0_255 = 1,
590     DXVA_NominalRange_16_235 = 2,
591     DXVA_NominalRange_48_208 = 3,
592     DXVA_NominalRange_Normal = DXVA_NominalRange_0_255,
593     DXVA_NominalRange_Wide = DXVA_NominalRange_16_235,
594 } DXVA_NominalRange;
595 
596 typedef enum _DXVA_VideoTransferMatrix
597 {
598     DXVA_VideoTransferMatrix_Unknown = 0,
599     DXVA_VideoTransferMatrix_BT709 = 1,
600     DXVA_VideoTransferMatrix_BT601 = 2,
601     DXVA_VideoTransferMatrix_SMPTE240M = 3,
602 } DXVA_VideoTransferMatrix;
603 
604 typedef enum _DXVA_VideoLighting
605 {
606     DXVA_VideoLighting_Unknown = 0,
607     DXVA_VideoLighting_bright = 1,
608     DXVA_VideoLighting_office = 2,
609     DXVA_VideoLighting_dim = 3,
610     DXVA_VideoLighting_dark = 4,
611 } DXVA_VideoLighting;
612 
613 typedef enum _DXVA_VideoPrimaries
614 {
615     DXVA_VideoPrimaries_Unknown = 0,
616     DXVA_VideoPrimaries_reserved = 1,
617     DXVA_VideoPrimaries_BT709 = 2,
618     DXVA_VideoPrimaries_BT470_2_SysM = 3,
619     DXVA_VideoPrimaries_BT470_2_SysBG = 4,
620     DXVA_VideoPrimaries_SMPTE170M = 5,
621     DXVA_VideoPrimaries_SMPTE420M = 6,
622     DXVA_VideoPrimaries_EBU3213 = 7,
623     DXVA_VideoPrimaries_SMPTE_C = 8,
624 } DXVA_VideoPrimaries;
625 
626 typedef enum _DXVA_VideoTransferFunction
627 {
628     DXVA_VideoTransFunc_Unknown = 0,
629     DXVA_VideoTransFunc_10 = 1,
630     DXVA_VideoTransFunc_18 = 2,
631     DXVA_VideoTransFunc_20 = 3,
632     DXVA_VideoTransFunc_22 = 4,
633     DXVA_VideoTransFunc_22_709 = 5,
634     DXVA_VideoTransFunc_22_240M = 6,
635     DXVA_VideoTransFunc_22_8bit_sRGB = 7,
636     DXVA_VideoTransFunc_28 = 8,
637 } DXVA_VideoTransferFunction;
638 
639 typedef struct _DXVA_ExtendedFormat
640 {
641     UINT SampleFormat : 8;
642     UINT VideoChromaSubsampling : 4;
643     DXVA_NominalRange NominalRange : 3;
644     DXVA_VideoTransferMatrix VideoTransferMatrix : 3;
645     DXVA_VideoLighting VideoLighting : 4;
646     DXVA_VideoPrimaries VideoPrimaries : 5;
647     DXVA_VideoTransferFunction VideoTransferFunction : 5;
648 } DXVA_ExtendedFormat;
649 
650 #ifdef __cplusplus
651 }
652 #endif
653 
654 #endif /* __WINE_DXVA_H */
655