1*437bfbebSnyanmisaka /* 2*437bfbebSnyanmisaka * Copyright 2021 Rockchip Electronics Co. LTD 3*437bfbebSnyanmisaka * 4*437bfbebSnyanmisaka * Licensed under the Apache License, Version 2.0 (the "License"); 5*437bfbebSnyanmisaka * you may not use this file except in compliance with the License. 6*437bfbebSnyanmisaka * You may obtain a copy of the License at 7*437bfbebSnyanmisaka * 8*437bfbebSnyanmisaka * http://www.apache.org/licenses/LICENSE-2.0 9*437bfbebSnyanmisaka * 10*437bfbebSnyanmisaka * Unless required by applicable law or agreed to in writing, software 11*437bfbebSnyanmisaka * distributed under the License is distributed on an "AS IS" BASIS, 12*437bfbebSnyanmisaka * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. 13*437bfbebSnyanmisaka * See the License for the specific language governing permissions and 14*437bfbebSnyanmisaka * limitations under the License. 15*437bfbebSnyanmisaka */ 16*437bfbebSnyanmisaka 17*437bfbebSnyanmisaka #ifndef _AV1D_SYNTAX_H_ 18*437bfbebSnyanmisaka #define _AV1D_SYNTAX_H_ 19*437bfbebSnyanmisaka 20*437bfbebSnyanmisaka typedef unsigned long DWORD; 21*437bfbebSnyanmisaka typedef unsigned char BYTE; 22*437bfbebSnyanmisaka typedef unsigned short WORD; 23*437bfbebSnyanmisaka typedef unsigned long ULONG; 24*437bfbebSnyanmisaka typedef unsigned short USHORT; 25*437bfbebSnyanmisaka typedef unsigned char UCHAR; 26*437bfbebSnyanmisaka typedef unsigned int UINT; 27*437bfbebSnyanmisaka typedef unsigned int UINT32; 28*437bfbebSnyanmisaka 29*437bfbebSnyanmisaka typedef signed int BOOL; 30*437bfbebSnyanmisaka typedef signed int INT; 31*437bfbebSnyanmisaka typedef signed char CHAR; 32*437bfbebSnyanmisaka typedef signed short SHORT; 33*437bfbebSnyanmisaka typedef signed long LONG; 34*437bfbebSnyanmisaka typedef void *PVOID; 35*437bfbebSnyanmisaka 36*437bfbebSnyanmisaka typedef struct _DXVA_PicEntry_AV1 { 37*437bfbebSnyanmisaka union { 38*437bfbebSnyanmisaka struct { 39*437bfbebSnyanmisaka UCHAR Index7Bits : 7; 40*437bfbebSnyanmisaka UCHAR AssociatedFlag : 1; 41*437bfbebSnyanmisaka }; 42*437bfbebSnyanmisaka UCHAR bPicEntry; 43*437bfbebSnyanmisaka }; 44*437bfbebSnyanmisaka } DXVA_PicEntry_AV1, *LPDXVA_PicEntry_AV1; 45*437bfbebSnyanmisaka 46*437bfbebSnyanmisaka 47*437bfbebSnyanmisaka typedef struct _DXVA_PicParams_AV1 { 48*437bfbebSnyanmisaka DXVA_PicEntry_AV1 CurrPic; 49*437bfbebSnyanmisaka USHORT width ; 50*437bfbebSnyanmisaka USHORT height ; 51*437bfbebSnyanmisaka USHORT max_width ; 52*437bfbebSnyanmisaka USHORT max_height ; 53*437bfbebSnyanmisaka USHORT CurrPicTextureIndex ; 54*437bfbebSnyanmisaka USHORT superres_denom ; 55*437bfbebSnyanmisaka USHORT bitdepth ; 56*437bfbebSnyanmisaka USHORT seq_profile ; 57*437bfbebSnyanmisaka USHORT frame_header_size ; 58*437bfbebSnyanmisaka union { 59*437bfbebSnyanmisaka struct { 60*437bfbebSnyanmisaka UINT32 current_operating_point : 12; 61*437bfbebSnyanmisaka UINT32 use_128x128_superblock : 1; 62*437bfbebSnyanmisaka UINT32 intra_edge_filter : 1; 63*437bfbebSnyanmisaka UINT32 interintra_compound : 1; 64*437bfbebSnyanmisaka UINT32 masked_compound : 1; 65*437bfbebSnyanmisaka UINT32 warped_motion : 1; 66*437bfbebSnyanmisaka UINT32 dual_filter : 1; 67*437bfbebSnyanmisaka UINT32 jnt_comp : 1; 68*437bfbebSnyanmisaka UINT32 screen_content_tools : 1; 69*437bfbebSnyanmisaka UINT32 integer_mv : 2; 70*437bfbebSnyanmisaka UINT32 cdef_en : 1; 71*437bfbebSnyanmisaka UINT32 restoration : 1; 72*437bfbebSnyanmisaka UINT32 film_grain_en : 1; 73*437bfbebSnyanmisaka UINT32 intrabc : 1; 74*437bfbebSnyanmisaka UINT32 high_precision_mv : 1; 75*437bfbebSnyanmisaka UINT32 switchable_motion_mode : 1; 76*437bfbebSnyanmisaka UINT32 filter_intra : 1; 77*437bfbebSnyanmisaka UINT32 disable_frame_end_update_cdf : 1; 78*437bfbebSnyanmisaka UINT32 disable_cdf_update : 1; 79*437bfbebSnyanmisaka UINT32 reference_mode : 1; 80*437bfbebSnyanmisaka UINT32 skip_mode : 1; 81*437bfbebSnyanmisaka UINT32 reduced_tx_set : 1; 82*437bfbebSnyanmisaka UINT32 superres : 1; 83*437bfbebSnyanmisaka UINT32 tx_mode : 3; 84*437bfbebSnyanmisaka UINT32 use_ref_frame_mvs : 1; 85*437bfbebSnyanmisaka UINT32 enable_ref_frame_mvs : 1; 86*437bfbebSnyanmisaka UINT32 reference_frame_update : 1; 87*437bfbebSnyanmisaka UINT32 error_resilient_mode : 1; 88*437bfbebSnyanmisaka } coding; 89*437bfbebSnyanmisaka }; 90*437bfbebSnyanmisaka 91*437bfbebSnyanmisaka struct { 92*437bfbebSnyanmisaka USHORT cols; 93*437bfbebSnyanmisaka USHORT rows; 94*437bfbebSnyanmisaka USHORT context_update_id; 95*437bfbebSnyanmisaka USHORT widths[64]; 96*437bfbebSnyanmisaka USHORT heights[64]; 97*437bfbebSnyanmisaka UINT32 tile_offset_start[128]; 98*437bfbebSnyanmisaka UINT32 tile_offset_end[128]; 99*437bfbebSnyanmisaka UCHAR tile_sz_mag; 100*437bfbebSnyanmisaka } tiles; 101*437bfbebSnyanmisaka 102*437bfbebSnyanmisaka struct { 103*437bfbebSnyanmisaka UCHAR frame_type ; 104*437bfbebSnyanmisaka UCHAR show_frame ; 105*437bfbebSnyanmisaka UCHAR showable_frame; 106*437bfbebSnyanmisaka UCHAR subsampling_x ; 107*437bfbebSnyanmisaka UCHAR subsampling_y ; 108*437bfbebSnyanmisaka UCHAR mono_chrome ; 109*437bfbebSnyanmisaka } format; 110*437bfbebSnyanmisaka 111*437bfbebSnyanmisaka UCHAR primary_ref_frame; 112*437bfbebSnyanmisaka UCHAR enable_order_hint; 113*437bfbebSnyanmisaka UCHAR order_hint; 114*437bfbebSnyanmisaka UCHAR order_hint_bits; 115*437bfbebSnyanmisaka 116*437bfbebSnyanmisaka struct { 117*437bfbebSnyanmisaka UCHAR filter_level[2] ; 118*437bfbebSnyanmisaka UCHAR filter_level_u ; 119*437bfbebSnyanmisaka UCHAR filter_level_v ; 120*437bfbebSnyanmisaka UCHAR sharpness_level ; 121*437bfbebSnyanmisaka UCHAR mode_ref_delta_enabled ; 122*437bfbebSnyanmisaka UCHAR mode_ref_delta_update ; 123*437bfbebSnyanmisaka UCHAR delta_lf_multi ; 124*437bfbebSnyanmisaka UCHAR delta_lf_present ; 125*437bfbebSnyanmisaka UCHAR delta_lf_res ; 126*437bfbebSnyanmisaka CHAR ref_deltas[8] ; 127*437bfbebSnyanmisaka CHAR mode_deltas[2] ; 128*437bfbebSnyanmisaka UCHAR frame_restoration_type[3] ; 129*437bfbebSnyanmisaka UCHAR log2_restoration_unit_size[3]; 130*437bfbebSnyanmisaka } loop_filter; 131*437bfbebSnyanmisaka 132*437bfbebSnyanmisaka struct { 133*437bfbebSnyanmisaka UCHAR delta_q_present; 134*437bfbebSnyanmisaka UCHAR delta_q_res ; 135*437bfbebSnyanmisaka UCHAR base_qindex ; 136*437bfbebSnyanmisaka CHAR y_dc_delta_q ; 137*437bfbebSnyanmisaka CHAR u_dc_delta_q ; 138*437bfbebSnyanmisaka CHAR v_dc_delta_q ; 139*437bfbebSnyanmisaka CHAR u_ac_delta_q ; 140*437bfbebSnyanmisaka CHAR v_ac_delta_q ; 141*437bfbebSnyanmisaka CHAR using_qmatrix ; 142*437bfbebSnyanmisaka UCHAR qm_y ; 143*437bfbebSnyanmisaka UCHAR qm_u ; 144*437bfbebSnyanmisaka UCHAR qm_v ; 145*437bfbebSnyanmisaka } quantization; 146*437bfbebSnyanmisaka 147*437bfbebSnyanmisaka struct { 148*437bfbebSnyanmisaka UCHAR damping; 149*437bfbebSnyanmisaka UCHAR bits; 150*437bfbebSnyanmisaka 151*437bfbebSnyanmisaka struct { 152*437bfbebSnyanmisaka UCHAR primary; 153*437bfbebSnyanmisaka UCHAR secondary; 154*437bfbebSnyanmisaka } y_strengths[8]; 155*437bfbebSnyanmisaka struct { 156*437bfbebSnyanmisaka UCHAR primary; 157*437bfbebSnyanmisaka UCHAR secondary; 158*437bfbebSnyanmisaka } uv_strengths[8]; 159*437bfbebSnyanmisaka } cdef; 160*437bfbebSnyanmisaka 161*437bfbebSnyanmisaka struct { 162*437bfbebSnyanmisaka UCHAR enabled ; 163*437bfbebSnyanmisaka UCHAR update_map ; 164*437bfbebSnyanmisaka UCHAR update_data ; 165*437bfbebSnyanmisaka UCHAR temporal_update ; 166*437bfbebSnyanmisaka UCHAR feature_mask[8] ; 167*437bfbebSnyanmisaka INT feature_data[8][8]; 168*437bfbebSnyanmisaka UCHAR last_active ; 169*437bfbebSnyanmisaka UCHAR preskip ; 170*437bfbebSnyanmisaka } segmentation; 171*437bfbebSnyanmisaka 172*437bfbebSnyanmisaka struct { 173*437bfbebSnyanmisaka UCHAR apply_grain ; 174*437bfbebSnyanmisaka UCHAR scaling_shift_minus8 ; 175*437bfbebSnyanmisaka UCHAR chroma_scaling_from_luma ; 176*437bfbebSnyanmisaka UCHAR ar_coeff_lag ; 177*437bfbebSnyanmisaka UCHAR ar_coeff_shift_minus6 ; 178*437bfbebSnyanmisaka UCHAR grain_scale_shift ; 179*437bfbebSnyanmisaka UCHAR overlap_flag ; 180*437bfbebSnyanmisaka UCHAR clip_to_restricted_range ; 181*437bfbebSnyanmisaka UCHAR matrix_coefficients ; 182*437bfbebSnyanmisaka UCHAR matrix_coeff_is_identity ; 183*437bfbebSnyanmisaka UCHAR num_y_points ; 184*437bfbebSnyanmisaka UCHAR num_cb_points ; 185*437bfbebSnyanmisaka UCHAR num_cr_points ; 186*437bfbebSnyanmisaka UCHAR scaling_points_y[14][2] ; 187*437bfbebSnyanmisaka UCHAR scaling_points_cb[10][2] ; 188*437bfbebSnyanmisaka UCHAR scaling_points_cr[10][2] ; 189*437bfbebSnyanmisaka UCHAR ar_coeffs_y[24] ; 190*437bfbebSnyanmisaka UCHAR ar_coeffs_cb[25] ; 191*437bfbebSnyanmisaka UCHAR ar_coeffs_cr[25] ; 192*437bfbebSnyanmisaka UCHAR cb_mult ; 193*437bfbebSnyanmisaka UCHAR cb_luma_mult ; 194*437bfbebSnyanmisaka UCHAR cr_mult ; 195*437bfbebSnyanmisaka UCHAR cr_luma_mult ; 196*437bfbebSnyanmisaka 197*437bfbebSnyanmisaka USHORT grain_seed ; 198*437bfbebSnyanmisaka USHORT update_grain ; 199*437bfbebSnyanmisaka USHORT cb_offset ; 200*437bfbebSnyanmisaka USHORT cr_offset ; 201*437bfbebSnyanmisaka } film_grain; 202*437bfbebSnyanmisaka 203*437bfbebSnyanmisaka UINT32 ref_frame_valued; 204*437bfbebSnyanmisaka UINT32 ref_frame_idx[7]; 205*437bfbebSnyanmisaka 206*437bfbebSnyanmisaka UINT32 ref_order_hint[8]; 207*437bfbebSnyanmisaka struct { 208*437bfbebSnyanmisaka UINT32 width; 209*437bfbebSnyanmisaka UINT32 height; 210*437bfbebSnyanmisaka UINT32 order_hint; 211*437bfbebSnyanmisaka UINT32 lst_frame_offset; 212*437bfbebSnyanmisaka UINT32 lst2_frame_offset; 213*437bfbebSnyanmisaka UINT32 lst3_frame_offset; 214*437bfbebSnyanmisaka UINT32 gld_frame_offset; 215*437bfbebSnyanmisaka UINT32 bwd_frame_offset; 216*437bfbebSnyanmisaka UINT32 alt2_frame_offset; 217*437bfbebSnyanmisaka UINT32 alt_frame_offset; 218*437bfbebSnyanmisaka UINT32 is_intra_frame; 219*437bfbebSnyanmisaka UINT32 intra_only; 220*437bfbebSnyanmisaka CHAR Index; 221*437bfbebSnyanmisaka UCHAR wminvalid; 222*437bfbebSnyanmisaka UCHAR wmtype; 223*437bfbebSnyanmisaka RK_S32 wmmat[6]; 224*437bfbebSnyanmisaka RK_S32 wmmat_val[6]; 225*437bfbebSnyanmisaka USHORT alpha, beta, gamma, delta; 226*437bfbebSnyanmisaka } frame_refs[8]; 227*437bfbebSnyanmisaka 228*437bfbebSnyanmisaka struct { 229*437bfbebSnyanmisaka RK_S32 valid; // RefValid 230*437bfbebSnyanmisaka RK_S32 frame_id; // RefFrameId 231*437bfbebSnyanmisaka RK_S32 upscaled_width; // RefUpscaledWidth 232*437bfbebSnyanmisaka RK_S32 frame_width; // RefFrameWidth 233*437bfbebSnyanmisaka RK_S32 frame_height; // RefFrameHeight 234*437bfbebSnyanmisaka RK_S32 render_width; // RefRenderWidth 235*437bfbebSnyanmisaka RK_S32 render_height; // RefRenderHeight 236*437bfbebSnyanmisaka RK_S32 frame_type; // RefFrameType 237*437bfbebSnyanmisaka RK_S32 subsampling_x; // RefSubsamplingX 238*437bfbebSnyanmisaka RK_S32 subsampling_y; // RefSubsamplingY 239*437bfbebSnyanmisaka RK_S32 bit_depth; // RefBitDepth 240*437bfbebSnyanmisaka RK_S32 order_hint; // RefOrderHint 241*437bfbebSnyanmisaka } frame_ref_state[8]; 242*437bfbebSnyanmisaka 243*437bfbebSnyanmisaka RK_U8 ref_frame_sign_bias[8]; 244*437bfbebSnyanmisaka 245*437bfbebSnyanmisaka UCHAR coded_lossless; 246*437bfbebSnyanmisaka RK_S32 all_lossless; 247*437bfbebSnyanmisaka UCHAR interp_filter; 248*437bfbebSnyanmisaka UCHAR RefFrameMapTextureIndex[8]; 249*437bfbebSnyanmisaka UINT32 upscaled_width; 250*437bfbebSnyanmisaka UINT32 frame_to_show_map_idx; 251*437bfbebSnyanmisaka UINT32 show_existing_frame; 252*437bfbebSnyanmisaka UINT32 frame_tag_size; 253*437bfbebSnyanmisaka UINT32 offset_to_dct_parts; 254*437bfbebSnyanmisaka UCHAR skip_ref0; 255*437bfbebSnyanmisaka UCHAR skip_ref1; 256*437bfbebSnyanmisaka RK_U8 refresh_frame_flags; 257*437bfbebSnyanmisaka void *cdfs; 258*437bfbebSnyanmisaka void *cdfs_ndvc; 259*437bfbebSnyanmisaka RK_U8 tile_cols_log2; 260*437bfbebSnyanmisaka RK_U8 tile_rows_log2; 261*437bfbebSnyanmisaka } DXVA_PicParams_AV1, *LPDXVA_PicParams_AV1; 262*437bfbebSnyanmisaka 263*437bfbebSnyanmisaka typedef struct _DXVA_Slice_AV1_Short { 264*437bfbebSnyanmisaka UINT BSNALunitDataLocation; 265*437bfbebSnyanmisaka UINT SliceByteInBuffer; 266*437bfbebSnyanmisaka USHORT wBadSliceChopping; 267*437bfbebSnyanmisaka } DXVA_Slice_AV1_Short, *LPDXVA_Slice_AV1_Short; 268*437bfbebSnyanmisaka 269*437bfbebSnyanmisaka #endif 270