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