xref: /rockchip-linux_mpp/mpp/common/vp9d_syntax.h (revision 437bfbeb9567cca9cd9080e3f6954aa9d6a94f18)
1*437bfbebSnyanmisaka /*
2*437bfbebSnyanmisaka  *
3*437bfbebSnyanmisaka  * Copyright 2015 Rockchip Electronics Co. LTD
4*437bfbebSnyanmisaka  *
5*437bfbebSnyanmisaka  * Licensed under the Apache License, Version 2.0 (the "License");
6*437bfbebSnyanmisaka  * you may not use this file except in compliance with the License.
7*437bfbebSnyanmisaka  * You may obtain a copy of the License at
8*437bfbebSnyanmisaka  *
9*437bfbebSnyanmisaka  *      http://www.apache.org/licenses/LICENSE-2.0
10*437bfbebSnyanmisaka  *
11*437bfbebSnyanmisaka  * Unless required by applicable law or agreed to in writing, software
12*437bfbebSnyanmisaka  * distributed under the License is distributed on an "AS IS" BASIS,
13*437bfbebSnyanmisaka  * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
14*437bfbebSnyanmisaka  * See the License for the specific language governing permissions and
15*437bfbebSnyanmisaka  * limitations under the License.
16*437bfbebSnyanmisaka  */
17*437bfbebSnyanmisaka #ifndef _VP9D_SYNTAX_H_
18*437bfbebSnyanmisaka #define _VP9D_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_VPx {
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_VPx, *LPDXVA_PicEntry_Vpx;
45*437bfbebSnyanmisaka 
46*437bfbebSnyanmisaka typedef struct _segmentation_VP9 {
47*437bfbebSnyanmisaka     union {
48*437bfbebSnyanmisaka         struct {
49*437bfbebSnyanmisaka             UCHAR enabled : 1;
50*437bfbebSnyanmisaka             UCHAR update_map : 1;
51*437bfbebSnyanmisaka             UCHAR temporal_update : 1;
52*437bfbebSnyanmisaka             UCHAR abs_delta : 1;
53*437bfbebSnyanmisaka             UCHAR ReservedSegmentFlags4Bits : 4;
54*437bfbebSnyanmisaka         };
55*437bfbebSnyanmisaka         UCHAR wSegmentInfoFlags;
56*437bfbebSnyanmisaka     };
57*437bfbebSnyanmisaka     UCHAR tree_probs[7];
58*437bfbebSnyanmisaka     UCHAR pred_probs[3];
59*437bfbebSnyanmisaka     SHORT feature_data[8][4];
60*437bfbebSnyanmisaka     UCHAR feature_mask[8];
61*437bfbebSnyanmisaka } DXVA_segmentation_VP9;
62*437bfbebSnyanmisaka 
63*437bfbebSnyanmisaka typedef struct {
64*437bfbebSnyanmisaka     RK_U8 y_mode[4][9];
65*437bfbebSnyanmisaka     RK_U8 uv_mode[10][9];
66*437bfbebSnyanmisaka     RK_U8 filter[4][2];
67*437bfbebSnyanmisaka     RK_U8 mv_mode[7][3];
68*437bfbebSnyanmisaka     RK_U8 intra[4];
69*437bfbebSnyanmisaka     RK_U8 comp[5];
70*437bfbebSnyanmisaka     RK_U8 single_ref[5][2];
71*437bfbebSnyanmisaka     RK_U8 comp_ref[5];
72*437bfbebSnyanmisaka     RK_U8 tx32p[2][3];
73*437bfbebSnyanmisaka     RK_U8 tx16p[2][2];
74*437bfbebSnyanmisaka     RK_U8 tx8p[2];
75*437bfbebSnyanmisaka     RK_U8 skip[3];
76*437bfbebSnyanmisaka     RK_U8 mv_joint[3];
77*437bfbebSnyanmisaka     struct {
78*437bfbebSnyanmisaka         RK_U8 sign;
79*437bfbebSnyanmisaka         RK_U8 classes[10];
80*437bfbebSnyanmisaka         RK_U8 class0;
81*437bfbebSnyanmisaka         RK_U8 bits[10];
82*437bfbebSnyanmisaka         RK_U8 class0_fp[2][3];
83*437bfbebSnyanmisaka         RK_U8 fp[3];
84*437bfbebSnyanmisaka         RK_U8 class0_hp;
85*437bfbebSnyanmisaka         RK_U8 hp;
86*437bfbebSnyanmisaka     } mv_comp[2];
87*437bfbebSnyanmisaka     RK_U8 partition[4][4][3];
88*437bfbebSnyanmisaka } DXVA_prob_vp9;
89*437bfbebSnyanmisaka 
90*437bfbebSnyanmisaka typedef struct _DXVA_PicParams_VP9 {
91*437bfbebSnyanmisaka     DXVA_PicEntry_VPx CurrPic;
92*437bfbebSnyanmisaka     UCHAR profile;
93*437bfbebSnyanmisaka     union {
94*437bfbebSnyanmisaka         struct {
95*437bfbebSnyanmisaka             USHORT frame_type : 1;
96*437bfbebSnyanmisaka             USHORT show_frame : 1;
97*437bfbebSnyanmisaka             USHORT error_resilient_mode : 1;
98*437bfbebSnyanmisaka             USHORT subsampling_x : 1;
99*437bfbebSnyanmisaka             USHORT subsampling_y : 1;
100*437bfbebSnyanmisaka             USHORT extra_plane : 1;
101*437bfbebSnyanmisaka             USHORT refresh_frame_context : 1;
102*437bfbebSnyanmisaka             USHORT intra_only : 1;
103*437bfbebSnyanmisaka             USHORT frame_context_idx : 2;
104*437bfbebSnyanmisaka             USHORT reset_frame_context : 2;
105*437bfbebSnyanmisaka             USHORT allow_high_precision_mv : 1;
106*437bfbebSnyanmisaka             USHORT parallelmode            : 1;
107*437bfbebSnyanmisaka             USHORT show_existing_frame : 1;
108*437bfbebSnyanmisaka         };
109*437bfbebSnyanmisaka         USHORT wFormatAndPictureInfoFlags;
110*437bfbebSnyanmisaka     };
111*437bfbebSnyanmisaka     UINT width;
112*437bfbebSnyanmisaka     UINT height;
113*437bfbebSnyanmisaka     UCHAR BitDepthMinus8Luma;
114*437bfbebSnyanmisaka     UCHAR BitDepthMinus8Chroma;
115*437bfbebSnyanmisaka     UCHAR interp_filter;
116*437bfbebSnyanmisaka     UCHAR Reserved8Bits;
117*437bfbebSnyanmisaka     DXVA_PicEntry_VPx ref_frame_map[8];
118*437bfbebSnyanmisaka     UINT ref_frame_coded_width[8];
119*437bfbebSnyanmisaka     UINT ref_frame_coded_height[8];
120*437bfbebSnyanmisaka     DXVA_PicEntry_VPx frame_refs[3];
121*437bfbebSnyanmisaka     CHAR ref_frame_sign_bias[4];
122*437bfbebSnyanmisaka     CHAR filter_level;
123*437bfbebSnyanmisaka     CHAR sharpness_level;
124*437bfbebSnyanmisaka     union {
125*437bfbebSnyanmisaka         struct {
126*437bfbebSnyanmisaka             UCHAR mode_ref_delta_enabled : 1;
127*437bfbebSnyanmisaka             UCHAR mode_ref_delta_update : 1;
128*437bfbebSnyanmisaka             UCHAR use_prev_in_find_mv_refs : 1;
129*437bfbebSnyanmisaka             UCHAR ReservedControlInfo5Bits : 5;
130*437bfbebSnyanmisaka         };
131*437bfbebSnyanmisaka         UCHAR wControlInfoFlags;
132*437bfbebSnyanmisaka     };
133*437bfbebSnyanmisaka     CHAR ref_deltas[4];
134*437bfbebSnyanmisaka     CHAR mode_deltas[2];
135*437bfbebSnyanmisaka     SHORT base_qindex;
136*437bfbebSnyanmisaka     CHAR y_dc_delta_q;
137*437bfbebSnyanmisaka     CHAR uv_dc_delta_q;
138*437bfbebSnyanmisaka     CHAR uv_ac_delta_q;
139*437bfbebSnyanmisaka     DXVA_segmentation_VP9 stVP9Segments;
140*437bfbebSnyanmisaka     UCHAR log2_tile_cols;
141*437bfbebSnyanmisaka     UCHAR log2_tile_rows;
142*437bfbebSnyanmisaka     USHORT uncompressed_header_size_byte_aligned;
143*437bfbebSnyanmisaka     USHORT first_partition_size;
144*437bfbebSnyanmisaka     USHORT Reserved16Bits;
145*437bfbebSnyanmisaka     USHORT Reserved32Bits;
146*437bfbebSnyanmisaka     UINT StatusReportFeedbackNumber;
147*437bfbebSnyanmisaka     struct {
148*437bfbebSnyanmisaka         UCHAR y_mode[4][9];
149*437bfbebSnyanmisaka         UCHAR uv_mode[10][9];
150*437bfbebSnyanmisaka         UCHAR filter[4][2];
151*437bfbebSnyanmisaka         UCHAR mv_mode[7][3];
152*437bfbebSnyanmisaka         UCHAR intra[4];
153*437bfbebSnyanmisaka         UCHAR comp[5];
154*437bfbebSnyanmisaka         UCHAR single_ref[5][2];
155*437bfbebSnyanmisaka         UCHAR comp_ref[5];
156*437bfbebSnyanmisaka         UCHAR tx32p[2][3];
157*437bfbebSnyanmisaka         UCHAR tx16p[2][2];
158*437bfbebSnyanmisaka         UCHAR tx8p[2];
159*437bfbebSnyanmisaka         UCHAR skip[3];
160*437bfbebSnyanmisaka         UCHAR mv_joint[3];
161*437bfbebSnyanmisaka         struct {
162*437bfbebSnyanmisaka             UCHAR sign;
163*437bfbebSnyanmisaka             UCHAR classes[10];
164*437bfbebSnyanmisaka             UCHAR class0;
165*437bfbebSnyanmisaka             UCHAR bits[10];
166*437bfbebSnyanmisaka             UCHAR class0_fp[2][3];
167*437bfbebSnyanmisaka             UCHAR fp[3];
168*437bfbebSnyanmisaka             UCHAR class0_hp;
169*437bfbebSnyanmisaka             UCHAR hp;
170*437bfbebSnyanmisaka         } mv_comp[2];
171*437bfbebSnyanmisaka         UCHAR partition[4][4][3];
172*437bfbebSnyanmisaka         UCHAR coef[4][2][2][6][6][3];
173*437bfbebSnyanmisaka     } prob;
174*437bfbebSnyanmisaka     struct {
175*437bfbebSnyanmisaka         UINT partition[4][4][4];
176*437bfbebSnyanmisaka         UINT skip[3][2];
177*437bfbebSnyanmisaka         UINT intra[4][2];
178*437bfbebSnyanmisaka         UINT tx32p[2][4];
179*437bfbebSnyanmisaka         UINT tx16p[2][4];
180*437bfbebSnyanmisaka         UINT tx8p[2][2];
181*437bfbebSnyanmisaka         UINT y_mode[4][10];
182*437bfbebSnyanmisaka         UINT uv_mode[10][10];
183*437bfbebSnyanmisaka         UINT comp[5][2];
184*437bfbebSnyanmisaka         UINT comp_ref[5][2];
185*437bfbebSnyanmisaka         UINT single_ref[5][2][2];
186*437bfbebSnyanmisaka         UINT mv_mode[7][4];
187*437bfbebSnyanmisaka         UINT filter[4][3];
188*437bfbebSnyanmisaka         UINT mv_joint[4];
189*437bfbebSnyanmisaka         UINT sign[2][2];
190*437bfbebSnyanmisaka         UINT classes[2][12]; // orign classes[12]
191*437bfbebSnyanmisaka         UINT class0[2][2];
192*437bfbebSnyanmisaka         UINT bits[2][10][2];
193*437bfbebSnyanmisaka         UINT class0_fp[2][2][4];
194*437bfbebSnyanmisaka         UINT fp[2][4];
195*437bfbebSnyanmisaka         UINT class0_hp[2][2];
196*437bfbebSnyanmisaka         UINT hp[2][2];
197*437bfbebSnyanmisaka         UINT coef[4][2][2][6][6][3];
198*437bfbebSnyanmisaka         UINT eob[4][2][2][6][6][2];
199*437bfbebSnyanmisaka     } counts;
200*437bfbebSnyanmisaka     struct {
201*437bfbebSnyanmisaka         DXVA_prob_vp9 p_flag;
202*437bfbebSnyanmisaka         DXVA_prob_vp9 p_delta;
203*437bfbebSnyanmisaka         RK_U8 coef_flag[4][2][2][6][6][3];
204*437bfbebSnyanmisaka         RK_U8 coef_delta[4][2][2][6][6][3];
205*437bfbebSnyanmisaka     } prob_flag_delta;
206*437bfbebSnyanmisaka     USHORT mvscale[3][2];
207*437bfbebSnyanmisaka     CHAR txmode;
208*437bfbebSnyanmisaka     CHAR refmode;
209*437bfbebSnyanmisaka } DXVA_PicParams_VP9, *LPDXVA_PicParams_VP9;
210*437bfbebSnyanmisaka 
211*437bfbebSnyanmisaka typedef struct _DXVA_Slice_VPx_Short {
212*437bfbebSnyanmisaka     UINT BSNALunitDataLocation;
213*437bfbebSnyanmisaka     UINT SliceByteInBuffer;
214*437bfbebSnyanmisaka     USHORT wBadSliceChopping;
215*437bfbebSnyanmisaka } DXVA_Slice_VPx_Short, *LPDXVA_Slice_VPx_Short;
216*437bfbebSnyanmisaka 
217*437bfbebSnyanmisaka #endif
218*437bfbebSnyanmisaka 
219