[PATCH] include/dxva: add HEVC and VP8/VP9 structures

Biswapriyo Nath nathbappai at gmail.com
Tue Mar 17 11:26:07 CDT 2020


-------------- next part --------------
From 9200af9cbf895d4aac20c653910473899cc50603 Mon Sep 17 00:00:00 2001
From: Biswapriyo Nath <nathbappai at gmail.com>
Date: Tue, 17 Mar 2020 21:53:09 +0530
Subject: [PATCH] include/dxva: add HEVC and VP8/VP9 structures

Signed-off-by: Biswapriyo Nath <nathbappai at gmail.com>
---
 include/dxva.h | 399 ++++++++++++++++++++++++++++++++++++++++++++++---
 1 file changed, 378 insertions(+), 21 deletions(-)

diff --git a/include/dxva.h b/include/dxva.h
index 1260d75..25354f5 100644
--- a/include/dxva.h
+++ b/include/dxva.h
@@ -23,12 +23,54 @@
 extern "C" {
 #endif
 
+DEFINE_GUID(DXVA_NoEncrypt, 0x1b81bed0, 0xa0c7,0x11d3, 0xb9,0x84,0x00,0xc0,0x4f,0x2e,0x73,0xc5);
+
 #define DXVA_USUAL_BLOCK_WIDTH   8
 #define DXVA_USUAL_BLOCK_HEIGHT  8
 #define DXVA_USUAL_BLOCK_SIZE   (DXVA_USUAL_BLOCK_WIDTH * DXVA_USUAL_BLOCK_HEIGHT)
 
 #include <pshpack1.h>
 
+typedef struct _DXVA_PicEntry_H264
+{
+    union
+    {
+        struct
+        {
+            UCHAR Index7Bits     : 7;
+            UCHAR AssociatedFlag : 1;
+        } DUMMYSTRUCTNAME;
+        UCHAR bPicEntry;
+    } DUMMYUNIONNAME;
+} DXVA_PicEntry_H264, *LPDXVA_PicEntry_H264;
+
+typedef struct _DXVA_FilmGrainCharacteristics
+{
+    USHORT  wFrameWidthInMbsMinus1;
+    USHORT  wFrameHeightInMbsMinus1;
+    DXVA_PicEntry_H264 InPic;
+    DXVA_PicEntry_H264 OutPic;
+    USHORT  PicOrderCnt_offset;
+    INT     CurrPicOrderCnt;
+    UINT    StatusReportFeedbackNumber;
+    UCHAR   model_id;
+    UCHAR   separate_colour_description_present_flag;
+    UCHAR   film_grain_bit_depth_luma_minus8;
+    UCHAR   film_grain_bit_depth_chroma_minus8;
+    UCHAR   film_grain_full_range_flag;
+    UCHAR   film_grain_colour_primaries;
+    UCHAR   film_grain_transfer_characteristics;
+    UCHAR   film_grain_matrix_coefficients;
+    UCHAR   blending_mode_id;
+    UCHAR   log2_scale_factor;
+    UCHAR   comp_model_present_flag[4];
+    UCHAR   num_intensity_intervals_minus1[4];
+    UCHAR   num_model_values_minus1[4];
+    UCHAR   intensity_interval_lower_bound[3][16];
+    UCHAR   intensity_interval_upper_bound[3][16];
+    SHORT   comp_model_value[3][16][8];
+} DXVA_FilmGrainChar_H264, *LPDXVA_FilmGrainChar_H264;
+
 typedef struct _DXVA_PictureParameters
 {
     WORD wDecodedPictureIndex;
@@ -89,20 +131,7 @@ typedef struct _DXVA_QmatrixData
     WORD Qmatrix[4][DXVA_USUAL_BLOCK_WIDTH * DXVA_USUAL_BLOCK_HEIGHT];
 } DXVA_QmatrixData, *LPDXVA_QmatrixData;
 
-typedef struct
-{
-    union
-    {
-        struct
-        {
-            UCHAR Index7Bits     : 7;
-            UCHAR AssociatedFlag : 1;
-        } DUMMYSTRUCTNAME;
-        UCHAR bPicEntry;
-    } DUMMYUNIONNAME;
-} DXVA_PicEntry_H264;
-
-typedef struct
+typedef struct _DXVA_PicParams_H264
 {
     USHORT wFrameWidthInMbsMinus1;
     USHORT wFrameHeightInMbsMinus1;
@@ -163,15 +192,15 @@ typedef struct
     UCHAR Reserved8BitsB;
     USHORT slice_group_change_rate_minus1;
     UCHAR SliceGroupMap[810];
-} DXVA_PicParams_H264;
+} DXVA_PicParams_H264, *LPDXVA_PicParams_H264;
 
-typedef struct
+typedef struct _DXVA_Qmatrix_H264
 {
     UCHAR bScalingLists4x4[6][16];
     UCHAR bScalingLists8x8[2][64];
-} DXVA_Qmatrix_H264;
+} DXVA_Qmatrix_H264, *LPDXVA_Qmatrix_H264;
 
-typedef struct
+typedef struct _DXVA_Slice_H264_Long
 {
     UINT BSNALunitDataLocation;
     UINT SliceBytesInBuffer;
@@ -197,14 +226,342 @@ typedef struct
     UCHAR cabac_init_idc;
     UCHAR disable_deblocking_filter_idc;
     USHORT slice_id;
-} DXVA_Slice_H264_Long;
+} DXVA_Slice_H264_Long, *LPDXVA_Slice_H264_Long;
 
-typedef struct
+typedef struct _DXVA_Slice_H264_Short
 {
     UINT BSNALunitDataLocation;
     UINT SliceBytesInBuffer;
     USHORT wBadSliceChopping;
-} DXVA_Slice_H264_Short;
+} DXVA_Slice_H264_Short, *LPDXVA_Slice_H264_Short;
+
+
+typedef struct _DXVA_PicEntry_HEVC
+{
+    union
+    {
+        struct
+        {
+            UCHAR Index7Bits : 7;
+            UCHAR AssociatedFlag : 1;
+        };
+        UCHAR bPicEntry;
+    };
+} DXVA_PicEntry_HEVC, *LPDXVA_PicEntry_HEVC;
+
+typedef struct _DXVA_PicParams_HEVC
+{
+    USHORT      PicWidthInMinCbsY;
+    USHORT      PicHeightInMinCbsY;
+    union
+    {
+        struct
+        {
+            USHORT  chroma_format_idc                       : 2;
+            USHORT  separate_colour_plane_flag              : 1;
+            USHORT  bit_depth_luma_minus8                   : 3;
+            USHORT  bit_depth_chroma_minus8                 : 3;
+            USHORT  log2_max_pic_order_cnt_lsb_minus4       : 4;
+            USHORT  NoPicReorderingFlag                     : 1;
+            USHORT  NoBiPredFlag                            : 1;
+            USHORT  ReservedBits1                            : 1;
+        };
+        USHORT wFormatAndSequenceInfoFlags;
+    };
+    DXVA_PicEntry_HEVC  CurrPic;
+    UCHAR   sps_max_dec_pic_buffering_minus1;
+    UCHAR   log2_min_luma_coding_block_size_minus3;
+    UCHAR   log2_diff_max_min_luma_coding_block_size;
+    UCHAR   log2_min_transform_block_size_minus2;
+    UCHAR   log2_diff_max_min_transform_block_size;
+    UCHAR   max_transform_hierarchy_depth_inter;
+    UCHAR   max_transform_hierarchy_depth_intra;
+    UCHAR   num_short_term_ref_pic_sets;
+    UCHAR   num_long_term_ref_pics_sps;
+    UCHAR   num_ref_idx_l0_default_active_minus1;
+    UCHAR   num_ref_idx_l1_default_active_minus1;
+    CHAR    init_qp_minus26;
+    UCHAR   ucNumDeltaPocsOfRefRpsIdx;
+    USHORT  wNumBitsForShortTermRPSInSlice;
+    USHORT  ReservedBits2;
+
+    union
+    {
+        struct
+        {
+            UINT32  scaling_list_enabled_flag                    : 1;
+            UINT32  amp_enabled_flag                            : 1;
+            UINT32  sample_adaptive_offset_enabled_flag         : 1;
+            UINT32  pcm_enabled_flag                            : 1;
+            UINT32  pcm_sample_bit_depth_luma_minus1            : 4;
+            UINT32  pcm_sample_bit_depth_chroma_minus1          : 4;
+            UINT32  log2_min_pcm_luma_coding_block_size_minus3  : 2;
+            UINT32  log2_diff_max_min_pcm_luma_coding_block_size : 2;
+            UINT32  pcm_loop_filter_disabled_flag                : 1;
+            UINT32  long_term_ref_pics_present_flag             : 1;
+            UINT32  sps_temporal_mvp_enabled_flag               : 1;
+            UINT32  strong_intra_smoothing_enabled_flag         : 1;
+            UINT32  dependent_slice_segments_enabled_flag       : 1;
+            UINT32  output_flag_present_flag                    : 1;
+            UINT32  num_extra_slice_header_bits                 : 3;
+            UINT32  sign_data_hiding_enabled_flag               : 1;
+            UINT32  cabac_init_present_flag                     : 1;
+            UINT32  ReservedBits3                               : 5;
+        };
+        UINT32 dwCodingParamToolFlags;
+    };
+
+    union
+    {
+        struct
+        {
+            UINT32  constrained_intra_pred_flag                 : 1;
+            UINT32  transform_skip_enabled_flag                 : 1;
+            UINT32  cu_qp_delta_enabled_flag                    : 1;
+            UINT32  pps_slice_chroma_qp_offsets_present_flag    : 1;
+            UINT32  weighted_pred_flag                          : 1;
+            UINT32  weighted_bipred_flag                        : 1;
+            UINT32  transquant_bypass_enabled_flag              : 1;
+            UINT32  tiles_enabled_flag                          : 1;
+            UINT32  entropy_coding_sync_enabled_flag            : 1;
+            UINT32  uniform_spacing_flag                        : 1;
+            UINT32  loop_filter_across_tiles_enabled_flag       : 1;
+            UINT32  pps_loop_filter_across_slices_enabled_flag  : 1;
+            UINT32  deblocking_filter_override_enabled_flag     : 1;
+            UINT32  pps_deblocking_filter_disabled_flag         : 1;
+            UINT32  lists_modification_present_flag             : 1;
+            UINT32  slice_segment_header_extension_present_flag : 1;
+            UINT32  IrapPicFlag                                 : 1;
+            UINT32  IdrPicFlag                                  : 1;
+            UINT32  IntraPicFlag                                : 1;
+            UINT32  ReservedBits4                               : 13;
+        };
+        UINT32 dwCodingSettingPicturePropertyFlags;
+    };
+    CHAR    pps_cb_qp_offset;
+    CHAR    pps_cr_qp_offset;
+    UCHAR   num_tile_columns_minus1;
+    UCHAR   num_tile_rows_minus1;
+    USHORT  column_width_minus1[19];
+    USHORT  row_height_minus1[21];
+    UCHAR   diff_cu_qp_delta_depth;
+    CHAR    pps_beta_offset_div2;
+    CHAR    pps_tc_offset_div2;
+    UCHAR   log2_parallel_merge_level_minus2;
+    INT     CurrPicOrderCntVal;
+    DXVA_PicEntry_HEVC	RefPicList[15];
+    UCHAR   ReservedBits5;
+    INT     PicOrderCntValList[15];
+    UCHAR   RefPicSetStCurrBefore[8];
+    UCHAR   RefPicSetStCurrAfter[8];
+    UCHAR   RefPicSetLtCurr[8];
+    USHORT  ReservedBits6;
+    USHORT  ReservedBits7;
+    UINT    StatusReportFeedbackNumber;
+} DXVA_PicParams_HEVC, *LPDXVA_PicParams_HEVC;
+
+typedef struct _DXVA_Qmatrix_HEVC
+{
+    UCHAR ucScalingLists0[6][16];
+    UCHAR ucScalingLists1[6][64];
+    UCHAR ucScalingLists2[6][64];
+    UCHAR ucScalingLists3[2][64];
+    UCHAR ucScalingListDCCoefSizeID2[6];
+    UCHAR ucScalingListDCCoefSizeID3[2];
+} DXVA_Qmatrix_HEVC, *LPDXVA_Qmatrix_HEVC;
+
+typedef struct _DXVA_Slice_HEVC_Short
+{
+    UINT    BSNALunitDataLocation;
+    UINT    SliceBytesInBuffer;
+    USHORT  wBadSliceChopping;
+} DXVA_Slice_HEVC_Short, *LPDXVA_Slice_HEVC_Short;
+
+typedef struct _DXVA_PicEntry_VPx
+{
+    union
+    {
+        struct
+        {
+            UCHAR Index7Bits     : 7;
+            UCHAR AssociatedFlag : 1;
+        };
+        UCHAR bPicEntry;
+    };
+} DXVA_PicEntry_VPx, *LPDXVA_PicEntry_VPx;
+
+typedef struct _segmentation_VP9
+{
+    union
+    {
+        struct
+        {
+            UCHAR enabled                   : 1;
+            UCHAR update_map                : 1;
+            UCHAR temporal_update           : 1;
+            UCHAR abs_delta                 : 1;
+            UCHAR ReservedSegmentFlags4Bits : 4;
+        };
+        UCHAR wSegmentInfoFlags;
+    };
+    UCHAR tree_probs[7];
+    UCHAR pred_probs[3];
+    SHORT feature_data[8][4];
+    UCHAR feature_mask[8];
+} DXVA_segmentation_VP9;
+
+typedef struct _DXVA_PicParams_VP9
+{
+    DXVA_PicEntry_VPx    CurrPic;
+    UCHAR                profile;
+    union
+    {
+        struct
+        {
+            USHORT frame_type                   : 1;
+            USHORT show_frame                   : 1;
+            USHORT error_resilient_mode         : 1;
+            USHORT subsampling_x                : 1;
+            USHORT subsampling_y                : 1;
+            USHORT extra_plane                  : 1;
+            USHORT refresh_frame_context        : 1;
+            USHORT frame_parallel_decoding_mode : 1;
+            USHORT intra_only                   : 1;
+            USHORT frame_context_idx            : 2;
+            USHORT reset_frame_context          : 2;
+            USHORT allow_high_precision_mv      : 1;
+            USHORT ReservedFormatInfo2Bits      : 2;
+        };
+        USHORT wFormatAndPictureInfoFlags;
+    };
+    UINT  width;
+    UINT  height;
+    UCHAR BitDepthMinus8Luma;
+    UCHAR BitDepthMinus8Chroma;
+    UCHAR interp_filter;
+    UCHAR Reserved8Bits;
+    DXVA_PicEntry_VPx  ref_frame_map[8];
+    UINT  ref_frame_coded_width[8];
+    UINT  ref_frame_coded_height[8];
+    DXVA_PicEntry_VPx  frame_refs[3];
+    CHAR  ref_frame_sign_bias[4];
+    CHAR  filter_level;
+    CHAR  sharpness_level;
+    union
+    {
+        struct
+        {
+            UCHAR mode_ref_delta_enabled   : 1;
+            UCHAR mode_ref_delta_update    : 1;
+            UCHAR use_prev_in_find_mv_refs : 1;
+            UCHAR ReservedControlInfo5Bits : 5;
+        };
+        UCHAR wControlInfoFlags;
+    };
+    CHAR   ref_deltas[4];
+    CHAR   mode_deltas[2];
+    SHORT  base_qindex;
+    CHAR   y_dc_delta_q;
+    CHAR   uv_dc_delta_q;
+    CHAR   uv_ac_delta_q;
+    DXVA_segmentation_VP9 stVP9Segments;
+    UCHAR  log2_tile_cols;
+    UCHAR  log2_tile_rows;
+    USHORT uncompressed_header_size_byte_aligned;
+    USHORT first_partition_size;
+    USHORT Reserved16Bits;
+    UINT   Reserved32Bits;
+    UINT   StatusReportFeedbackNumber;
+} DXVA_PicParams_VP9, *LPDXVA_PicParams_VP9;
+
+typedef struct _segmentation_VP8
+{
+    union
+    {
+        struct
+        {
+            UCHAR segmentation_enabled        : 1;
+            UCHAR update_mb_segmentation_map  : 1;
+            UCHAR update_mb_segmentation_data : 1;
+            UCHAR mb_segement_abs_delta       : 1;
+            UCHAR ReservedSegmentFlags4Bits   : 4;
+        };
+        UCHAR wSegmentFlags;
+    };
+    CHAR  segment_feature_data[2][4];
+    UCHAR mb_segment_tree_probs[3];
+} DXVA_segmentation_VP8;
+
+typedef struct _DXVA_PicParams_VP8
+{
+    UINT first_part_size;
+    UINT width;
+    UINT height;
+    DXVA_PicEntry_VPx  CurrPic;
+    union
+    {
+        struct
+        {
+            UCHAR frame_type            : 1;
+            UCHAR version               : 3;
+            UCHAR show_frame            : 1;
+            UCHAR clamp_type            : 1;
+            UCHAR ReservedFrameTag3Bits : 2;
+        };
+        UCHAR wFrameTagFlags;
+    };
+    DXVA_segmentation_VP8  stVP8Segments;
+    UCHAR  filter_type;
+    UCHAR  filter_level;
+    UCHAR  sharpness_level;
+    UCHAR  mode_ref_lf_delta_enabled;
+    UCHAR  mode_ref_lf_delta_update;
+    CHAR   ref_lf_deltas[4];
+    CHAR   mode_lf_deltas[4];
+    UCHAR  log2_nbr_of_dct_partitions;
+    UCHAR  base_qindex;
+    CHAR   y1dc_delta_q;
+    CHAR   y2dc_delta_q;
+    CHAR   y2ac_delta_q;
+    CHAR   uvdc_delta_q;
+    CHAR   uvac_delta_q;
+    DXVA_PicEntry_VPx alt_fb_idx;
+    DXVA_PicEntry_VPx gld_fb_idx;
+    DXVA_PicEntry_VPx lst_fb_idx;
+    UCHAR  ref_frame_sign_bias_golden;
+    UCHAR  ref_frame_sign_bias_altref;
+    UCHAR  refresh_entropy_probs;
+    UCHAR  vp8_coef_update_probs[4][8][3][11];
+    UCHAR  mb_no_coeff_skip;
+    UCHAR  prob_skip_false;
+    UCHAR  prob_intra;
+    UCHAR  prob_last;
+    UCHAR  prob_golden;
+    UCHAR  intra_16x16_prob[4];
+    UCHAR  intra_chroma_prob[3];
+    UCHAR  vp8_mv_update_probs[2][19];
+    USHORT ReservedBits1;
+    USHORT ReservedBits2;
+    USHORT ReservedBits3;
+    UINT   StatusReportFeedbackNumber;
+} DXVA_PicParams_VP8, *LPDXVA_PicParams_VP8;
+
+typedef struct _DXVA_Slice_VPx_Short
+{
+    UINT   BSNALunitDataLocation;
+    UINT   SliceBytesInBuffer;
+    USHORT wBadSliceChopping;
+} DXVA_Slice_VPx_Short, *LPDXVA_Slice_VPx_Short;
+
+typedef struct _DXVA_Status_VPx
+{
+    UINT   StatusReportFeedbackNumber;
+    DXVA_PicEntry_VPx CurrPic;
+    UCHAR  bBufType;
+    UCHAR  bStatus;
+    UCHAR  bReserved8Bits;
+    USHORT wNumMbsAffected;
+} DXVA_Status_VPx, *LPDXVA_Status_VPx;
 
 #include <poppack.h>
 
-- 
2.25.1



More information about the wine-devel mailing list