xref: /rockchip-linux_mpp/mpp/common/av1d_syntax.h (revision 437bfbeb9567cca9cd9080e3f6954aa9d6a94f18)
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