xref: /rockchip-linux_mpp/mpp/common/h264d_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 
18*437bfbebSnyanmisaka 
19*437bfbebSnyanmisaka #ifndef __H264D_SYNTAX_H__
20*437bfbebSnyanmisaka #define __H264D_SYNTAX_H__
21*437bfbebSnyanmisaka 
22*437bfbebSnyanmisaka #include "h264_syntax.h"
23*437bfbebSnyanmisaka #include "dxva_syntax.h"
24*437bfbebSnyanmisaka 
25*437bfbebSnyanmisaka /* H.264/AVC-specific structures */
26*437bfbebSnyanmisaka 
27*437bfbebSnyanmisaka /* H.264/AVC picture entry data structure */
28*437bfbebSnyanmisaka typedef struct _DXVA_PicEntry_H264 {
29*437bfbebSnyanmisaka     union {
30*437bfbebSnyanmisaka         struct {
31*437bfbebSnyanmisaka             RK_U8  Index7Bits : 7;
32*437bfbebSnyanmisaka             RK_U8  AssociatedFlag : 1;
33*437bfbebSnyanmisaka         };
34*437bfbebSnyanmisaka         RK_U8  bPicEntry;
35*437bfbebSnyanmisaka     };
36*437bfbebSnyanmisaka } DXVA_PicEntry_H264, *LPDXVA_PicEntry_H264;  /* 1 byte */
37*437bfbebSnyanmisaka 
38*437bfbebSnyanmisaka /* H.264/AVC picture parameters structure */
39*437bfbebSnyanmisaka typedef struct _DXVA_PicParams_H264 {
40*437bfbebSnyanmisaka     RK_U16  wFrameWidthInMbsMinus1;
41*437bfbebSnyanmisaka     RK_U16  wFrameHeightInMbsMinus1;
42*437bfbebSnyanmisaka     DXVA_PicEntry_H264  CurrPic; /* flag is bot field flag */
43*437bfbebSnyanmisaka     RK_U8   num_ref_frames;
44*437bfbebSnyanmisaka 
45*437bfbebSnyanmisaka     union {
46*437bfbebSnyanmisaka         struct {
47*437bfbebSnyanmisaka             RK_U16  field_pic_flag : 1;
48*437bfbebSnyanmisaka             RK_U16  MbaffFrameFlag : 1;
49*437bfbebSnyanmisaka             RK_U16  residual_colour_transform_flag : 1;
50*437bfbebSnyanmisaka             RK_U16  sp_for_switch_flag : 1;
51*437bfbebSnyanmisaka             RK_U16  chroma_format_idc : 2;
52*437bfbebSnyanmisaka             RK_U16  RefPicFlag : 1;
53*437bfbebSnyanmisaka             RK_U16  constrained_intra_pred_flag : 1;
54*437bfbebSnyanmisaka 
55*437bfbebSnyanmisaka             RK_U16  weighted_pred_flag : 1;
56*437bfbebSnyanmisaka             RK_U16  weighted_bipred_idc : 2;
57*437bfbebSnyanmisaka             RK_U16  MbsConsecutiveFlag : 1;
58*437bfbebSnyanmisaka             RK_U16  frame_mbs_only_flag : 1;
59*437bfbebSnyanmisaka             RK_U16  transform_8x8_mode_flag : 1;
60*437bfbebSnyanmisaka             RK_U16  MinLumaBipredSize8x8Flag : 1;
61*437bfbebSnyanmisaka             RK_U16  IntraPicFlag : 1;
62*437bfbebSnyanmisaka         };
63*437bfbebSnyanmisaka         RK_U16  wBitFields;
64*437bfbebSnyanmisaka     };
65*437bfbebSnyanmisaka     RK_U8   bit_depth_luma_minus8;
66*437bfbebSnyanmisaka     RK_U8   bit_depth_chroma_minus8;
67*437bfbebSnyanmisaka 
68*437bfbebSnyanmisaka     RK_U16  Reserved16Bits;
69*437bfbebSnyanmisaka     RK_U32  StatusReportFeedbackNumber;
70*437bfbebSnyanmisaka 
71*437bfbebSnyanmisaka     DXVA_PicEntry_H264  RefFrameList[16]; /* flag LT */
72*437bfbebSnyanmisaka     RK_S32  CurrFieldOrderCnt[2];
73*437bfbebSnyanmisaka     RK_S32  FieldOrderCntList[16][2];
74*437bfbebSnyanmisaka 
75*437bfbebSnyanmisaka     RK_S8   pic_init_qs_minus26;
76*437bfbebSnyanmisaka     RK_S8   chroma_qp_index_offset;   /* also used for QScb */
77*437bfbebSnyanmisaka     RK_S8   second_chroma_qp_index_offset; /* also for QScr */
78*437bfbebSnyanmisaka     RK_U8   ContinuationFlag;
79*437bfbebSnyanmisaka 
80*437bfbebSnyanmisaka     /* remainder for parsing */
81*437bfbebSnyanmisaka     RK_S8   pic_init_qp_minus26;
82*437bfbebSnyanmisaka     RK_U8   num_ref_idx_l0_active_minus1;
83*437bfbebSnyanmisaka     RK_U8   num_ref_idx_l1_active_minus1;
84*437bfbebSnyanmisaka     RK_U8   Reserved8BitsA;
85*437bfbebSnyanmisaka 
86*437bfbebSnyanmisaka     RK_U16  FrameNumList[16];
87*437bfbebSnyanmisaka     RK_U32  UsedForReferenceFlags;
88*437bfbebSnyanmisaka     RK_U16  NonExistingFrameFlags;
89*437bfbebSnyanmisaka     RK_U16  frame_num;
90*437bfbebSnyanmisaka 
91*437bfbebSnyanmisaka     RK_U8   log2_max_frame_num_minus4;
92*437bfbebSnyanmisaka     RK_U8   pic_order_cnt_type;
93*437bfbebSnyanmisaka     RK_U8   log2_max_pic_order_cnt_lsb_minus4;
94*437bfbebSnyanmisaka     RK_U8   delta_pic_order_always_zero_flag;
95*437bfbebSnyanmisaka 
96*437bfbebSnyanmisaka     RK_U8   direct_8x8_inference_flag;
97*437bfbebSnyanmisaka     RK_U8   entropy_coding_mode_flag;
98*437bfbebSnyanmisaka     RK_U8   pic_order_present_flag;
99*437bfbebSnyanmisaka     RK_U8   num_slice_groups_minus1;
100*437bfbebSnyanmisaka 
101*437bfbebSnyanmisaka     RK_U8   slice_group_map_type;
102*437bfbebSnyanmisaka     RK_U8   deblocking_filter_control_present_flag;
103*437bfbebSnyanmisaka     RK_U8   redundant_pic_cnt_present_flag;
104*437bfbebSnyanmisaka     RK_U8   Reserved8BitsB;
105*437bfbebSnyanmisaka 
106*437bfbebSnyanmisaka     RK_U16  slice_group_change_rate_minus1;
107*437bfbebSnyanmisaka 
108*437bfbebSnyanmisaka     //RK_U8   SliceGroupMap[810]; /* 4b/sgmu, Size BT.601 */
109*437bfbebSnyanmisaka 
110*437bfbebSnyanmisaka } DXVA_PicParams_H264, *LPDXVA_PicParams_H264;
111*437bfbebSnyanmisaka 
112*437bfbebSnyanmisaka /* H.264/AVC quantization weighting matrix data structure */
113*437bfbebSnyanmisaka typedef struct _DXVA_Qmatrix_H264 {
114*437bfbebSnyanmisaka     RK_U8   bScalingLists4x4[6][16];
115*437bfbebSnyanmisaka     RK_U8   bScalingLists8x8[6][64];
116*437bfbebSnyanmisaka 
117*437bfbebSnyanmisaka } DXVA_Qmatrix_H264, *LPDXVA_Qmatrix_H264;
118*437bfbebSnyanmisaka 
119*437bfbebSnyanmisaka /* H.264/AVC slice control data structure - short form */
120*437bfbebSnyanmisaka typedef struct _DXVA_Slice_H264_Short {
121*437bfbebSnyanmisaka     RK_U32  BSNALunitDataLocation; /* type 1..5 */
122*437bfbebSnyanmisaka     RK_U32  SliceBytesInBuffer; /* for off-host parse */
123*437bfbebSnyanmisaka     RK_U16  wBadSliceChopping;  /* for off-host parse */
124*437bfbebSnyanmisaka } DXVA_Slice_H264_Short, *LPDXVA_Slice_H264_Short;
125*437bfbebSnyanmisaka 
126*437bfbebSnyanmisaka /* H.264/AVC picture entry data structure - long form */
127*437bfbebSnyanmisaka typedef struct _DXVA_Slice_H264_Long {
128*437bfbebSnyanmisaka     RK_U32  BSNALunitDataLocation; /* type 1..5 */
129*437bfbebSnyanmisaka     RK_U32  SliceBytesInBuffer; /* for off-host parse */
130*437bfbebSnyanmisaka     RK_U16  wBadSliceChopping;  /* for off-host parse */
131*437bfbebSnyanmisaka 
132*437bfbebSnyanmisaka     RK_U16  first_mb_in_slice;
133*437bfbebSnyanmisaka     RK_U16  NumMbsForSlice;
134*437bfbebSnyanmisaka 
135*437bfbebSnyanmisaka 
136*437bfbebSnyanmisaka     RK_U8   slice_type;
137*437bfbebSnyanmisaka     RK_U8   num_ref_idx_l0_active_minus1;
138*437bfbebSnyanmisaka     RK_U8   num_ref_idx_l1_active_minus1;
139*437bfbebSnyanmisaka     DXVA_PicEntry_H264 RefPicList[3][32]; /* L0 & L1 */
140*437bfbebSnyanmisaka #if 0
141*437bfbebSnyanmisaka     RK_U16  BitOffsetToSliceData; /* after CABAC alignment */
142*437bfbebSnyanmisaka     RK_U8   luma_log2_weight_denom;
143*437bfbebSnyanmisaka     RK_U8   chroma_log2_weight_denom;
144*437bfbebSnyanmisaka     RK_S8   slice_alpha_c0_offset_div2;
145*437bfbebSnyanmisaka     RK_S8   slice_beta_offset_div2;
146*437bfbebSnyanmisaka     RK_U8   Reserved8Bits;
147*437bfbebSnyanmisaka     RK_S16  Weights[2][32][3][2]; /* L0 & L1; Y, Cb, Cr */
148*437bfbebSnyanmisaka     RK_S8   slice_qs_delta;
149*437bfbebSnyanmisaka     /* rest off-host parse */
150*437bfbebSnyanmisaka     RK_S8   slice_qp_delta;
151*437bfbebSnyanmisaka #endif
152*437bfbebSnyanmisaka     RK_U8   redundant_pic_cnt;
153*437bfbebSnyanmisaka     RK_U8   direct_spatial_mv_pred_flag;
154*437bfbebSnyanmisaka     RK_U8   cabac_init_idc;
155*437bfbebSnyanmisaka     RK_U8   disable_deblocking_filter_idc;
156*437bfbebSnyanmisaka     RK_U16  slice_id;
157*437bfbebSnyanmisaka     /* add parameter for setting hardware */
158*437bfbebSnyanmisaka     RK_U32  active_sps_id;
159*437bfbebSnyanmisaka     RK_U32  active_pps_id;
160*437bfbebSnyanmisaka     RK_U32  idr_pic_id;
161*437bfbebSnyanmisaka     RK_U32  idr_flag;
162*437bfbebSnyanmisaka     RK_U32  drpm_used_bitlen;
163*437bfbebSnyanmisaka     RK_U32  poc_used_bitlen;
164*437bfbebSnyanmisaka     RK_U32  nal_ref_idc;
165*437bfbebSnyanmisaka     RK_U32  profileIdc;
166*437bfbebSnyanmisaka } DXVA_Slice_H264_Long, *LPDXVA_Slice_H264_Long;
167*437bfbebSnyanmisaka 
168*437bfbebSnyanmisaka /* H.264/AVC macro block control command data structure */
169*437bfbebSnyanmisaka typedef struct _DXVA_MBctrl_H264 {
170*437bfbebSnyanmisaka     union {
171*437bfbebSnyanmisaka         struct {
172*437bfbebSnyanmisaka             RK_U32  bSliceID : 8;   /* 1 byte */
173*437bfbebSnyanmisaka             RK_U32  MbType5Bits : 5;
174*437bfbebSnyanmisaka             RK_U32  IntraMbFlag : 1;
175*437bfbebSnyanmisaka             RK_U32  mb_field_decoding_flag : 1;
176*437bfbebSnyanmisaka             RK_U32  transform_size_8x8_flag : 1;   /* 2 bytes */
177*437bfbebSnyanmisaka             RK_U32  HostResidDiff : 1;
178*437bfbebSnyanmisaka             RK_U32  DcBlockCodedCrFlag : 1;
179*437bfbebSnyanmisaka             RK_U32  DcBlockCodedCbFlag : 1;
180*437bfbebSnyanmisaka             RK_U32  DcBlockCodedYFlag : 1;
181*437bfbebSnyanmisaka             RK_U32  FilterInternalEdgesFlag : 1;
182*437bfbebSnyanmisaka             RK_U32  FilterLeftMbEdgeFlag : 1;
183*437bfbebSnyanmisaka             RK_U32  FilterTopMbEdgeFlag : 1;
184*437bfbebSnyanmisaka             RK_U32  ReservedBit : 1;
185*437bfbebSnyanmisaka             RK_U32  bMvQuantity : 8;   /* 4 bytes */
186*437bfbebSnyanmisaka         };
187*437bfbebSnyanmisaka         RK_U32  dwMBtype;                    /* 4 bytes so far */
188*437bfbebSnyanmisaka     };
189*437bfbebSnyanmisaka     RK_U16  CurrMbAddr;                  /* 6 bytes so far */
190*437bfbebSnyanmisaka     RK_U16  wPatternCode[3];/* YCbCr, 16 4x4 blks, 1b each */
191*437bfbebSnyanmisaka     /* 12 bytes so far */
192*437bfbebSnyanmisaka     RK_U8   bQpPrime[3];    /* Y, Cb, Cr, need just 7b QpY */
193*437bfbebSnyanmisaka     RK_U8   bMBresidDataQuantity;
194*437bfbebSnyanmisaka     RK_U32  dwMBdataLocation;  /* offset into resid buffer */
195*437bfbebSnyanmisaka     /* 20 bytes so far */
196*437bfbebSnyanmisaka     union {
197*437bfbebSnyanmisaka         struct {
198*437bfbebSnyanmisaka             /* start here for Intra MB's  (9 useful bytes in branch) */
199*437bfbebSnyanmisaka             RK_U16 LumaIntraPredModes[4];/* 16 blocks, 4b each */
200*437bfbebSnyanmisaka             /* 28 bytes so far */
201*437bfbebSnyanmisaka             union {
202*437bfbebSnyanmisaka                 struct {
203*437bfbebSnyanmisaka                     RK_U8  intra_chroma_pred_mode : 2;
204*437bfbebSnyanmisaka                     RK_U8  IntraPredAvailFlags : 5;
205*437bfbebSnyanmisaka                     RK_U8  ReservedIntraBit : 1;
206*437bfbebSnyanmisaka                 };
207*437bfbebSnyanmisaka                 RK_U8  bMbIntraStruct;        /* 29 bytes so far */
208*437bfbebSnyanmisaka             };
209*437bfbebSnyanmisaka             RK_U8 ReservedIntra24Bits[3];   /* 32 bytes total  */
210*437bfbebSnyanmisaka         };
211*437bfbebSnyanmisaka         struct {
212*437bfbebSnyanmisaka             /* start here for non-Intra MB's (12 bytes in branch)    */
213*437bfbebSnyanmisaka             RK_U8  bSubMbShapes;          /* 4 subMbs, 2b each */
214*437bfbebSnyanmisaka             RK_U8  bSubMbPredModes;       /* 4 subMBs, 2b each */
215*437bfbebSnyanmisaka             /* 22 bytes so far */
216*437bfbebSnyanmisaka             RK_U16 wMvBuffOffset;     /* offset into MV buffer */
217*437bfbebSnyanmisaka             RK_U8  bRefPicSelect[2][4];     /* 32 bytes total */
218*437bfbebSnyanmisaka         };
219*437bfbebSnyanmisaka     };
220*437bfbebSnyanmisaka } DXVA_MBctrl_H264, *LPDXVA_MBctrl_H264;
221*437bfbebSnyanmisaka 
222*437bfbebSnyanmisaka /* H.264/AVC IndexA and IndexB data structure */
223*437bfbebSnyanmisaka typedef struct _DXVA_DeblockIndexAB_H264 {
224*437bfbebSnyanmisaka     RK_U8   bIndexAinternal; /* 6b - could get from MB CC */
225*437bfbebSnyanmisaka     RK_U8   bIndexBinternal; /* 6b - could get from MB CC */
226*437bfbebSnyanmisaka 
227*437bfbebSnyanmisaka     RK_U8   bIndexAleft0;
228*437bfbebSnyanmisaka     RK_U8   bIndexBleft0;
229*437bfbebSnyanmisaka 
230*437bfbebSnyanmisaka     RK_U8   bIndexAleft1;
231*437bfbebSnyanmisaka     RK_U8   bIndexBleft1;
232*437bfbebSnyanmisaka 
233*437bfbebSnyanmisaka     RK_U8   bIndexAtop0;
234*437bfbebSnyanmisaka     RK_U8   bIndexBtop0;
235*437bfbebSnyanmisaka 
236*437bfbebSnyanmisaka     RK_U8   bIndexAtop1;
237*437bfbebSnyanmisaka     RK_U8   bIndexBtop1;
238*437bfbebSnyanmisaka } DXVA_DeblockIndexAB_H264, *LPDXVA_DeblockIndexAB_H264;
239*437bfbebSnyanmisaka /* 10 bytes in struct */
240*437bfbebSnyanmisaka 
241*437bfbebSnyanmisaka /* H.264/AVC deblocking filter control data structure */
242*437bfbebSnyanmisaka typedef struct _DXVA_Deblock_H264 {
243*437bfbebSnyanmisaka     RK_U16  CurrMbAddr; /* dup info */   /* 2 bytes so far */
244*437bfbebSnyanmisaka     union {
245*437bfbebSnyanmisaka         struct {
246*437bfbebSnyanmisaka             RK_U8  ReservedBit : 1;
247*437bfbebSnyanmisaka             RK_U8  FieldModeCurrentMbFlag : 1; /* dup info */
248*437bfbebSnyanmisaka             RK_U8  FieldModeLeftMbFlag : 1;
249*437bfbebSnyanmisaka             RK_U8  FieldModeAboveMbFlag : 1;
250*437bfbebSnyanmisaka             RK_U8  FilterInternal8x8EdgesFlag : 1;
251*437bfbebSnyanmisaka             RK_U8  FilterInternal4x4EdgesFlag : 1;
252*437bfbebSnyanmisaka             RK_U8  FilterLeftMbEdgeFlag : 1;
253*437bfbebSnyanmisaka             RK_U8  FilterTopMbEdgeFlag : 1;
254*437bfbebSnyanmisaka         };
255*437bfbebSnyanmisaka         RK_U8  FirstByte;
256*437bfbebSnyanmisaka     };
257*437bfbebSnyanmisaka     RK_U8   Reserved8Bits;      /* 4 bytes so far */
258*437bfbebSnyanmisaka 
259*437bfbebSnyanmisaka     RK_U8   bbSinternalLeftVert; /* 2 bits per bS */
260*437bfbebSnyanmisaka     RK_U8   bbSinternalMidVert;
261*437bfbebSnyanmisaka 
262*437bfbebSnyanmisaka     RK_U8   bbSinternalRightVert;
263*437bfbebSnyanmisaka     RK_U8   bbSinternalTopHorz;  /* 8 bytes so far */
264*437bfbebSnyanmisaka 
265*437bfbebSnyanmisaka     RK_U8   bbSinternalMidHorz;
266*437bfbebSnyanmisaka     RK_U8   bbSinternalBotHorz;       /* 10 bytes so far */
267*437bfbebSnyanmisaka 
268*437bfbebSnyanmisaka     RK_U16  wbSLeft0; /* 4 bits per bS (1 wasted) */
269*437bfbebSnyanmisaka     RK_U16  wbSLeft1; /* 4 bits per bS (1 wasted) */
270*437bfbebSnyanmisaka 
271*437bfbebSnyanmisaka     RK_U16  wbSTop0;  /* 4 bits per bS (1 wasted) */
272*437bfbebSnyanmisaka     RK_U16  wbSTop1;  /* 4b (2 wasted)  18 bytes so far*/
273*437bfbebSnyanmisaka 
274*437bfbebSnyanmisaka     DXVA_DeblockIndexAB_H264  IndexAB[3]; /* Y, Cb, Cr */
275*437bfbebSnyanmisaka 
276*437bfbebSnyanmisaka } DXVA_Deblock_H264, *LPDXVA_Deblock_H264;/* 48 bytes */
277*437bfbebSnyanmisaka 
278*437bfbebSnyanmisaka /* H.264/AVC film grain characteristics data structure */
279*437bfbebSnyanmisaka typedef struct _DXVA_FilmGrainCharacteristics {
280*437bfbebSnyanmisaka 
281*437bfbebSnyanmisaka     RK_U16  wFrameWidthInMbsMinus1;
282*437bfbebSnyanmisaka     RK_U16  wFrameHeightInMbsMinus1;
283*437bfbebSnyanmisaka 
284*437bfbebSnyanmisaka     DXVA_PicEntry_H264  InPic; /* flag is bot field flag */
285*437bfbebSnyanmisaka     DXVA_PicEntry_H264  OutPic; /* flag is field pic flag */
286*437bfbebSnyanmisaka 
287*437bfbebSnyanmisaka     RK_U16  PicOrderCnt_offset;
288*437bfbebSnyanmisaka     RK_S32  CurrPicOrderCnt;
289*437bfbebSnyanmisaka     RK_U32  StatusReportFeedbackNumber;
290*437bfbebSnyanmisaka 
291*437bfbebSnyanmisaka     RK_U8   model_id;
292*437bfbebSnyanmisaka     RK_U8   separate_colour_description_present_flag;
293*437bfbebSnyanmisaka     RK_U8   film_grain_bit_depth_luma_minus8;
294*437bfbebSnyanmisaka     RK_U8   film_grain_bit_depth_chroma_minus8;
295*437bfbebSnyanmisaka 
296*437bfbebSnyanmisaka     RK_U8   film_grain_full_range_flag;
297*437bfbebSnyanmisaka     RK_U8   film_grain_colour_primaries;
298*437bfbebSnyanmisaka     RK_U8   film_grain_transfer_characteristics;
299*437bfbebSnyanmisaka     RK_U8   film_grain_matrix_coefficients;
300*437bfbebSnyanmisaka 
301*437bfbebSnyanmisaka     RK_U8   blending_mode_id;
302*437bfbebSnyanmisaka     RK_U8   log2_scale_factor;
303*437bfbebSnyanmisaka 
304*437bfbebSnyanmisaka     RK_U8   comp_model_present_flag[4];
305*437bfbebSnyanmisaka     RK_U8   num_intensity_intervals_minus1[4];
306*437bfbebSnyanmisaka     RK_U8   num_model_values_minus1[4];
307*437bfbebSnyanmisaka 
308*437bfbebSnyanmisaka     RK_U8   intensity_interval_lower_bound[3][16];
309*437bfbebSnyanmisaka     RK_U8   intensity_interval_upper_bound[3][16];
310*437bfbebSnyanmisaka     RK_S16  comp_model_value[3][16][8];
311*437bfbebSnyanmisaka } DXVA_FilmGrainChar_H264, *LPDXVA_FilmGrainChar_H264;
312*437bfbebSnyanmisaka 
313*437bfbebSnyanmisaka /* H.264/AVC status reporting data structure */
314*437bfbebSnyanmisaka typedef struct _DXVA_Status_H264 {
315*437bfbebSnyanmisaka     RK_U32  StatusReportFeedbackNumber;
316*437bfbebSnyanmisaka     DXVA_PicEntry_H264  CurrPic; /* flag is bot field flag */
317*437bfbebSnyanmisaka     RK_U8   field_pic_flag;
318*437bfbebSnyanmisaka     RK_U8   bDXVA_Func;
319*437bfbebSnyanmisaka     RK_U8   bBufType;
320*437bfbebSnyanmisaka     RK_U8   bStatus;
321*437bfbebSnyanmisaka     RK_U8   bReserved8Bits;
322*437bfbebSnyanmisaka     RK_U16  wNumMbsAffected;
323*437bfbebSnyanmisaka } DXVA_Status_H264, *LPDXVA_Status_H264;
324*437bfbebSnyanmisaka 
325*437bfbebSnyanmisaka /* H.264 MVC picture parameters structure */
326*437bfbebSnyanmisaka typedef struct _DXVA_PicParams_H264_MVC {
327*437bfbebSnyanmisaka     RK_U16  wFrameWidthInMbsMinus1;
328*437bfbebSnyanmisaka     RK_U16  wFrameHeightInMbsMinus1;
329*437bfbebSnyanmisaka     DXVA_PicEntry_H264  CurrPic; /* flag is bot field flag */
330*437bfbebSnyanmisaka     RK_U8   num_ref_frames;
331*437bfbebSnyanmisaka 
332*437bfbebSnyanmisaka     union {
333*437bfbebSnyanmisaka         struct {
334*437bfbebSnyanmisaka             RK_U16  field_pic_flag : 1;
335*437bfbebSnyanmisaka             RK_U16  MbaffFrameFlag : 1;
336*437bfbebSnyanmisaka             RK_U16  residual_colour_transform_flag : 1;
337*437bfbebSnyanmisaka             RK_U16  sp_for_switch_flag : 1;
338*437bfbebSnyanmisaka             RK_U16  chroma_format_idc : 2;
339*437bfbebSnyanmisaka             RK_U16  RefPicFlag : 1;
340*437bfbebSnyanmisaka             RK_U16  constrained_intra_pred_flag : 1;
341*437bfbebSnyanmisaka 
342*437bfbebSnyanmisaka             RK_U16  weighted_pred_flag : 1;
343*437bfbebSnyanmisaka             RK_U16  weighted_bipred_idc : 2;
344*437bfbebSnyanmisaka             RK_U16  MbsConsecutiveFlag : 1;
345*437bfbebSnyanmisaka             RK_U16  frame_mbs_only_flag : 1;
346*437bfbebSnyanmisaka             RK_U16  transform_8x8_mode_flag : 1;
347*437bfbebSnyanmisaka             RK_U16  MinLumaBipredSize8x8Flag : 1;
348*437bfbebSnyanmisaka             RK_U16  IntraPicFlag : 1;
349*437bfbebSnyanmisaka         };
350*437bfbebSnyanmisaka         RK_U16  wBitFields;
351*437bfbebSnyanmisaka     };
352*437bfbebSnyanmisaka     RK_U8   bit_depth_luma_minus8;
353*437bfbebSnyanmisaka     RK_U8   bit_depth_chroma_minus8;
354*437bfbebSnyanmisaka 
355*437bfbebSnyanmisaka     RK_U16  Reserved16Bits;
356*437bfbebSnyanmisaka     RK_U32  StatusReportFeedbackNumber;
357*437bfbebSnyanmisaka 
358*437bfbebSnyanmisaka     DXVA_PicEntry_H264  RefFrameList[16]; /* flag LT */
359*437bfbebSnyanmisaka     RK_S32  CurrFieldOrderCnt[2];
360*437bfbebSnyanmisaka     RK_S32  FieldOrderCntList[16][2];
361*437bfbebSnyanmisaka 
362*437bfbebSnyanmisaka     RK_S8   pic_init_qs_minus26;
363*437bfbebSnyanmisaka     RK_S8   chroma_qp_index_offset;   /* also used for QScb */
364*437bfbebSnyanmisaka     RK_S8   second_chroma_qp_index_offset; /* also for QScr */
365*437bfbebSnyanmisaka     RK_U8   ContinuationFlag;
366*437bfbebSnyanmisaka 
367*437bfbebSnyanmisaka     /* remainder for parsing */
368*437bfbebSnyanmisaka     RK_S8   pic_init_qp_minus26;
369*437bfbebSnyanmisaka     RK_U8   num_ref_idx_l0_active_minus1;
370*437bfbebSnyanmisaka     RK_U8   num_ref_idx_l1_active_minus1;
371*437bfbebSnyanmisaka     RK_U8   Reserved8BitsA;
372*437bfbebSnyanmisaka 
373*437bfbebSnyanmisaka     RK_U16  FrameNumList[16];
374*437bfbebSnyanmisaka     RK_U16  LongTermPicNumList[16];
375*437bfbebSnyanmisaka     RK_U32  UsedForReferenceFlags;
376*437bfbebSnyanmisaka     RK_U16  NonExistingFrameFlags;
377*437bfbebSnyanmisaka     RK_U16  frame_num;
378*437bfbebSnyanmisaka 
379*437bfbebSnyanmisaka     RK_U8   log2_max_frame_num_minus4;
380*437bfbebSnyanmisaka     RK_U8   pic_order_cnt_type;
381*437bfbebSnyanmisaka     RK_U8   log2_max_pic_order_cnt_lsb_minus4;
382*437bfbebSnyanmisaka     RK_U8   delta_pic_order_always_zero_flag;
383*437bfbebSnyanmisaka 
384*437bfbebSnyanmisaka     RK_U8   direct_8x8_inference_flag;
385*437bfbebSnyanmisaka     RK_U8   entropy_coding_mode_flag;
386*437bfbebSnyanmisaka     RK_U8   pic_order_present_flag;
387*437bfbebSnyanmisaka     RK_U8   num_slice_groups_minus1;
388*437bfbebSnyanmisaka 
389*437bfbebSnyanmisaka     RK_U8   slice_group_map_type;
390*437bfbebSnyanmisaka     RK_U8   deblocking_filter_control_present_flag;
391*437bfbebSnyanmisaka     RK_U8   redundant_pic_cnt_present_flag;
392*437bfbebSnyanmisaka     RK_U8   Reserved8BitsB;
393*437bfbebSnyanmisaka     /* SliceGroupMap is not needed for MVC, as MVC is for high profile only */
394*437bfbebSnyanmisaka     RK_U16  slice_group_change_rate_minus1;
395*437bfbebSnyanmisaka     /* Following are H.264 MVC Specific parameters */
396*437bfbebSnyanmisaka     RK_S8   num_views_minus1;
397*437bfbebSnyanmisaka     RK_U16  view_id[16];
398*437bfbebSnyanmisaka     RK_U8   num_anchor_refs_l0[16];
399*437bfbebSnyanmisaka     RK_U16  anchor_ref_l0[16][16];
400*437bfbebSnyanmisaka     RK_U8   num_anchor_refs_l1[16];
401*437bfbebSnyanmisaka     RK_U16  anchor_ref_l1[16][16];
402*437bfbebSnyanmisaka     RK_U8   num_non_anchor_refs_l0[16];
403*437bfbebSnyanmisaka     RK_U16  non_anchor_ref_l0[16][16];
404*437bfbebSnyanmisaka     RK_U8   num_non_anchor_refs_l1[16];
405*437bfbebSnyanmisaka     RK_U16  non_anchor_ref_l1[16][16];
406*437bfbebSnyanmisaka 
407*437bfbebSnyanmisaka     RK_U16  curr_view_id;
408*437bfbebSnyanmisaka     RK_U8   anchor_pic_flag;
409*437bfbebSnyanmisaka     RK_U8   inter_view_flag;
410*437bfbebSnyanmisaka     RK_U16  ViewIDList[16];
411*437bfbebSnyanmisaka     //!< add in Rock-Chip RKVDEC IP
412*437bfbebSnyanmisaka     RK_U16  curr_layer_id;
413*437bfbebSnyanmisaka     RK_U16  RefPicColmvUsedFlags;
414*437bfbebSnyanmisaka     RK_U16  RefPicFiledFlags;
415*437bfbebSnyanmisaka     RK_U8   RefPicLayerIdList[16];
416*437bfbebSnyanmisaka     RK_U8   scaleing_list_enable_flag;
417*437bfbebSnyanmisaka     RK_U16  UsedForInTerviewflags;
418*437bfbebSnyanmisaka 
419*437bfbebSnyanmisaka     //!< extensive
420*437bfbebSnyanmisaka     RK_U32  spspps_update;
421*437bfbebSnyanmisaka 
422*437bfbebSnyanmisaka     //!< for fpga test
423*437bfbebSnyanmisaka     RK_U16 seq_parameter_set_id;
424*437bfbebSnyanmisaka     RK_U16 pps_seq_parameter_set_id;
425*437bfbebSnyanmisaka     RK_U16 pps_pic_parameter_set_id;
426*437bfbebSnyanmisaka     RK_U16 profile_idc;
427*437bfbebSnyanmisaka     RK_U8  constraint_set3_flag;
428*437bfbebSnyanmisaka     RK_U8  qpprime_y_zero_transform_bypass_flag;
429*437bfbebSnyanmisaka     RK_U8  mvc_extension_enable;
430*437bfbebSnyanmisaka 
431*437bfbebSnyanmisaka } DXVA_PicParams_H264_MVC, *LPDXVA_PicParams_H264_MVC;
432*437bfbebSnyanmisaka 
433*437bfbebSnyanmisaka 
434*437bfbebSnyanmisaka 
435*437bfbebSnyanmisaka typedef struct h264d_syntax_t {
436*437bfbebSnyanmisaka     RK_U32                  num;
437*437bfbebSnyanmisaka     DXVA2_DecodeBufferDesc *buf;
438*437bfbebSnyanmisaka } H264dSyntax_t;
439*437bfbebSnyanmisaka 
440*437bfbebSnyanmisaka #endif /*__H264D_SYNTAX_H__*/
441*437bfbebSnyanmisaka 
442