1*437bfbebSnyanmisaka /* 2*437bfbebSnyanmisaka * Copyright 2015 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 __H265E_SLICE_H__ 18*437bfbebSnyanmisaka #define __H265E_SLICE_H__ 19*437bfbebSnyanmisaka 20*437bfbebSnyanmisaka #include "rk_type.h" 21*437bfbebSnyanmisaka #include "mpp_err.h" 22*437bfbebSnyanmisaka #include "mpp_list.h" 23*437bfbebSnyanmisaka #include "h265e_dpb.h" 24*437bfbebSnyanmisaka #include "h265_syntax.h" 25*437bfbebSnyanmisaka #include "h265e_enctropy.h" 26*437bfbebSnyanmisaka #include "h265e_context_table.h" 27*437bfbebSnyanmisaka 28*437bfbebSnyanmisaka #define MIN_PU_SIZE 4 29*437bfbebSnyanmisaka #define MIN_TU_SIZE 4 30*437bfbebSnyanmisaka #define MAX_NUM_SPU_W (64 / MIN_PU_SIZE) // maximum number of SPU in horizontal line 31*437bfbebSnyanmisaka 32*437bfbebSnyanmisaka /* 33*437bfbebSnyanmisaka * For H.265 encoder slice header process. 34*437bfbebSnyanmisaka * Remove some syntax that encoder not supported. 35*437bfbebSnyanmisaka * Field, mbaff, B slice are not supported yet. 36*437bfbebSnyanmisaka */ 37*437bfbebSnyanmisaka typedef struct H265eDpbFrm_t H265eDpbFrm; 38*437bfbebSnyanmisaka 39*437bfbebSnyanmisaka typedef struct DataCu_t { 40*437bfbebSnyanmisaka RK_U8 m_cuSize[256]; 41*437bfbebSnyanmisaka RK_U8 m_cuDepth[256]; 42*437bfbebSnyanmisaka RK_U32 pixelX; 43*437bfbebSnyanmisaka RK_U32 pixelY; 44*437bfbebSnyanmisaka RK_U32 cur_addr; 45*437bfbebSnyanmisaka RK_U32 tile_start_x; 46*437bfbebSnyanmisaka RK_U32 tile_end_x; 47*437bfbebSnyanmisaka RK_U32 tile_end_y; 48*437bfbebSnyanmisaka } DataCu; 49*437bfbebSnyanmisaka 50*437bfbebSnyanmisaka typedef struct TileInfo_t { 51*437bfbebSnyanmisaka RK_U32 tile_start_x; 52*437bfbebSnyanmisaka RK_U32 tile_end_x; 53*437bfbebSnyanmisaka RK_U32 tile_start_y; 54*437bfbebSnyanmisaka RK_U32 tile_end_y; 55*437bfbebSnyanmisaka RK_U32 mb_total; 56*437bfbebSnyanmisaka RK_U32 ctu_addr; 57*437bfbebSnyanmisaka } TileInfo; 58*437bfbebSnyanmisaka 59*437bfbebSnyanmisaka typedef struct H265eReferencePictureSet_e { 60*437bfbebSnyanmisaka RK_S32 m_deltaRIdxMinus1; 61*437bfbebSnyanmisaka RK_S32 m_deltaRPS; 62*437bfbebSnyanmisaka RK_S32 m_numRefIdc; 63*437bfbebSnyanmisaka RK_S32 m_refIdc[MAX_REFS + 1]; 64*437bfbebSnyanmisaka 65*437bfbebSnyanmisaka // Parameters for long term references 66*437bfbebSnyanmisaka RK_U32 check_lt_msb[MAX_REFS]; 67*437bfbebSnyanmisaka RK_S32 m_pocLSBLT[MAX_REFS]; 68*437bfbebSnyanmisaka RK_S32 m_deltaPOCMSBCycleLT[MAX_REFS]; 69*437bfbebSnyanmisaka RK_U32 m_deltaPocMSBPresentFlag[MAX_REFS]; 70*437bfbebSnyanmisaka 71*437bfbebSnyanmisaka RK_S32 m_numberOfPictures; 72*437bfbebSnyanmisaka RK_S32 num_negative_pic; 73*437bfbebSnyanmisaka RK_S32 num_positive_pic; 74*437bfbebSnyanmisaka RK_S32 delta_poc[MAX_REFS]; 75*437bfbebSnyanmisaka RK_U32 m_used[MAX_REFS]; 76*437bfbebSnyanmisaka RK_U32 m_ref[MAX_REFS]; 77*437bfbebSnyanmisaka RK_S32 poc[MAX_REFS]; 78*437bfbebSnyanmisaka RK_S32 m_RealPoc[MAX_REFS]; 79*437bfbebSnyanmisaka 80*437bfbebSnyanmisaka RK_U32 m_interRPSPrediction; 81*437bfbebSnyanmisaka RK_S32 num_long_term_pic; // Zero when disabled 82*437bfbebSnyanmisaka } H265eReferencePictureSet; 83*437bfbebSnyanmisaka 84*437bfbebSnyanmisaka typedef struct H265eRPSList_e { 85*437bfbebSnyanmisaka RK_S32 m_numberOfReferencePictureSets; 86*437bfbebSnyanmisaka H265eReferencePictureSet *m_referencePictureSets; 87*437bfbebSnyanmisaka } H265eRPSList; 88*437bfbebSnyanmisaka 89*437bfbebSnyanmisaka typedef struct H265eRefPicListModification_e { 90*437bfbebSnyanmisaka RK_U32 m_refPicListModificationFlagL0; 91*437bfbebSnyanmisaka RK_U32 m_refPicListModificationFlagL1; 92*437bfbebSnyanmisaka RK_U32 m_RefPicSetIdxL0[REF_PIC_LIST_NUM_IDX]; 93*437bfbebSnyanmisaka RK_U32 m_RefPicSetIdxL1[REF_PIC_LIST_NUM_IDX]; 94*437bfbebSnyanmisaka } H265eRefPicListModification; 95*437bfbebSnyanmisaka 96*437bfbebSnyanmisaka typedef struct ProfileTierLevel_e { 97*437bfbebSnyanmisaka RK_S32 m_profileSpace; 98*437bfbebSnyanmisaka RK_S32 m_tierFlag; 99*437bfbebSnyanmisaka RK_S32 m_profileIdc; 100*437bfbebSnyanmisaka RK_S32 m_profileCompatibilityFlag[32]; 101*437bfbebSnyanmisaka RK_S32 m_levelIdc; 102*437bfbebSnyanmisaka RK_S32 m_progressiveSourceFlag; 103*437bfbebSnyanmisaka RK_S32 m_interlacedSourceFlag; 104*437bfbebSnyanmisaka RK_S32 m_nonPackedConstraintFlag; 105*437bfbebSnyanmisaka RK_S32 m_frameOnlyConstraintFlag; 106*437bfbebSnyanmisaka RK_S32 m_max12bitConstraintFlag; 107*437bfbebSnyanmisaka RK_S32 m_max10bitConstraintFlag; 108*437bfbebSnyanmisaka RK_S32 m_max8bitConstraintFlag; 109*437bfbebSnyanmisaka RK_S32 m_max422chromaConstraintFlag; 110*437bfbebSnyanmisaka RK_S32 m_max420chromaConstraintFlag; 111*437bfbebSnyanmisaka RK_S32 m_maxMonochromaConstraintFlag; 112*437bfbebSnyanmisaka RK_S32 m_intraConstraintFlag; 113*437bfbebSnyanmisaka RK_S32 m_onePictureConstraintFlag; 114*437bfbebSnyanmisaka RK_S32 m_lowerBitRateConstraintFlag; 115*437bfbebSnyanmisaka } ProfileTierLevel; 116*437bfbebSnyanmisaka 117*437bfbebSnyanmisaka typedef struct H265ePTL_e { 118*437bfbebSnyanmisaka ProfileTierLevel m_generalPTL; 119*437bfbebSnyanmisaka ProfileTierLevel m_subLayerPTL[6]; // max. value of max_sub_layers_minus1 is 6 120*437bfbebSnyanmisaka RK_S32 m_subLayerProfilePresentFlag[6]; 121*437bfbebSnyanmisaka RK_S32 m_subLayerLevelPresentFlag[6]; 122*437bfbebSnyanmisaka } H265ePTL; 123*437bfbebSnyanmisaka 124*437bfbebSnyanmisaka typedef struct TimeingInfo_e { 125*437bfbebSnyanmisaka RK_U32 m_timingInfoPresentFlag; 126*437bfbebSnyanmisaka RK_U32 m_numUnitsInTick; 127*437bfbebSnyanmisaka RK_U32 m_timeScale; 128*437bfbebSnyanmisaka RK_U32 m_pocProportionalToTimingFlag; 129*437bfbebSnyanmisaka RK_U32 m_numTicksPocDiffOneMinus1; 130*437bfbebSnyanmisaka } TimingInfo; 131*437bfbebSnyanmisaka 132*437bfbebSnyanmisaka typedef struct H265HrdSubLayerInfo_e { 133*437bfbebSnyanmisaka RK_U32 fixedPicRateFlag; 134*437bfbebSnyanmisaka RK_U32 fixedPicRateWithinCvsFlag; 135*437bfbebSnyanmisaka RK_U32 picDurationInTcMinus1; 136*437bfbebSnyanmisaka RK_U32 lowDelayHrdFlag; 137*437bfbebSnyanmisaka RK_U32 cpbCntMinus1; 138*437bfbebSnyanmisaka RK_U32 bitRateValueMinus1[MAX_CPB_CNT][2]; 139*437bfbebSnyanmisaka RK_U32 cpbSizeValue[MAX_CPB_CNT][2]; 140*437bfbebSnyanmisaka RK_U32 ducpbSizeValue[MAX_CPB_CNT][2]; 141*437bfbebSnyanmisaka RK_U32 cbrFlag[MAX_CPB_CNT][2]; 142*437bfbebSnyanmisaka RK_U32 duBitRateValue[MAX_CPB_CNT][2]; 143*437bfbebSnyanmisaka } H265eHrdSubLayerInfo; 144*437bfbebSnyanmisaka 145*437bfbebSnyanmisaka typedef struct H265eHrdParameters_e { 146*437bfbebSnyanmisaka RK_U32 m_nalHrdParametersPresentFlag; 147*437bfbebSnyanmisaka RK_U32 m_vclHrdParametersPresentFlag; 148*437bfbebSnyanmisaka RK_U32 m_subPicHrdParamsPresentFlag; 149*437bfbebSnyanmisaka RK_U32 m_tickDivisorMinus2; 150*437bfbebSnyanmisaka RK_U32 m_duCpbRemovalDelayLengthMinus1; 151*437bfbebSnyanmisaka RK_U32 m_subPicCpbParamsInPicTimingSEIFlag; 152*437bfbebSnyanmisaka RK_U32 m_dpbOutputDelayDuLengthMinus1; 153*437bfbebSnyanmisaka RK_U32 m_bitRateScale; 154*437bfbebSnyanmisaka RK_U32 m_cpbSizeScale; 155*437bfbebSnyanmisaka RK_U32 m_ducpbSizeScale; 156*437bfbebSnyanmisaka RK_U32 m_initialCpbRemovalDelayLengthMinus1; 157*437bfbebSnyanmisaka RK_U32 m_cpbRemovalDelayLengthMinus1; 158*437bfbebSnyanmisaka RK_U32 m_dpbOutputDelayLengthMinus1; 159*437bfbebSnyanmisaka H265eHrdSubLayerInfo m_HRD[MAX_SUB_LAYERS]; 160*437bfbebSnyanmisaka } H265eHrdParameters; 161*437bfbebSnyanmisaka 162*437bfbebSnyanmisaka typedef struct H265eVps_e { 163*437bfbebSnyanmisaka RK_S32 m_VPSId; 164*437bfbebSnyanmisaka RK_U32 m_maxTLayers; 165*437bfbebSnyanmisaka RK_U32 m_maxLayers; 166*437bfbebSnyanmisaka RK_U32 m_bTemporalIdNestingFlag; 167*437bfbebSnyanmisaka 168*437bfbebSnyanmisaka RK_U32 m_numReorderPics[MAX_SUB_LAYERS]; 169*437bfbebSnyanmisaka RK_U32 m_maxDecPicBuffering[MAX_SUB_LAYERS]; 170*437bfbebSnyanmisaka RK_U32 m_maxLatencyIncrease[MAX_SUB_LAYERS]; // Really max latency increase plus 1 (value 0 expresses no limit) 171*437bfbebSnyanmisaka 172*437bfbebSnyanmisaka RK_U32 m_numHrdParameters; 173*437bfbebSnyanmisaka RK_U32 m_maxNuhReservedZeroLayerId; 174*437bfbebSnyanmisaka H265eHrdParameters *m_hrdParameters; 175*437bfbebSnyanmisaka RK_U32 *m_hrdOpSetIdx; 176*437bfbebSnyanmisaka RK_U32 *m_cprmsPresentFlag; 177*437bfbebSnyanmisaka RK_U32 m_numOpSets; 178*437bfbebSnyanmisaka RK_U32 m_layerIdIncludedFlag[MAX_VPS_OP_SETS_PLUS1][MAX_VPS_NUH_RESERVED_ZERO_LAYER_ID_PLUS1]; 179*437bfbebSnyanmisaka 180*437bfbebSnyanmisaka H265ePTL m_ptl; 181*437bfbebSnyanmisaka TimingInfo m_timingInfo; 182*437bfbebSnyanmisaka } H265eVps; 183*437bfbebSnyanmisaka 184*437bfbebSnyanmisaka typedef struct H265eCropInfo_e { 185*437bfbebSnyanmisaka RK_U32 m_enabledFlag; 186*437bfbebSnyanmisaka RK_S32 m_winLeftOffset; 187*437bfbebSnyanmisaka RK_S32 m_winRightOffset; 188*437bfbebSnyanmisaka RK_S32 m_winTopOffset; 189*437bfbebSnyanmisaka RK_S32 m_winBottomOffset; 190*437bfbebSnyanmisaka } H265eCropInfo; 191*437bfbebSnyanmisaka 192*437bfbebSnyanmisaka typedef struct H265eVuiInfo_e { 193*437bfbebSnyanmisaka RK_U32 m_aspectRatioInfoPresentFlag; 194*437bfbebSnyanmisaka RK_S32 m_aspectRatioIdc; 195*437bfbebSnyanmisaka RK_S32 m_sarWidth; 196*437bfbebSnyanmisaka RK_S32 m_sarHeight; 197*437bfbebSnyanmisaka RK_U32 m_overscanInfoPresentFlag; 198*437bfbebSnyanmisaka RK_U32 m_overscanAppropriateFlag; 199*437bfbebSnyanmisaka RK_U32 m_videoSignalTypePresentFlag; 200*437bfbebSnyanmisaka RK_S32 m_videoFormat; 201*437bfbebSnyanmisaka RK_U32 m_videoFullRangeFlag; 202*437bfbebSnyanmisaka RK_U32 m_colourDescriptionPresentFlag; 203*437bfbebSnyanmisaka RK_S32 m_colourPrimaries; 204*437bfbebSnyanmisaka RK_S32 m_transferCharacteristics; 205*437bfbebSnyanmisaka RK_S32 m_matrixCoefficients; 206*437bfbebSnyanmisaka RK_U32 m_chromaLocInfoPresentFlag; 207*437bfbebSnyanmisaka RK_S32 m_chromaSampleLocTypeTopField; 208*437bfbebSnyanmisaka RK_S32 m_chromaSampleLocTypeBottomField; 209*437bfbebSnyanmisaka RK_U32 m_neutralChromaIndicationFlag; 210*437bfbebSnyanmisaka RK_U32 m_fieldSeqFlag; 211*437bfbebSnyanmisaka 212*437bfbebSnyanmisaka H265eCropInfo m_defaultDisplayWindow; 213*437bfbebSnyanmisaka RK_U32 m_frameFieldInfoPresentFlag; 214*437bfbebSnyanmisaka RK_U32 m_hrdParametersPresentFlag; 215*437bfbebSnyanmisaka RK_U32 m_bitstreamRestrictionFlag; 216*437bfbebSnyanmisaka RK_U32 m_tilesFixedStructureFlag; 217*437bfbebSnyanmisaka RK_U32 m_motionVectorsOverPicBoundariesFlag; 218*437bfbebSnyanmisaka RK_U32 m_restrictedRefPicListsFlag; 219*437bfbebSnyanmisaka RK_S32 m_minSpatialSegmentationIdc; 220*437bfbebSnyanmisaka RK_S32 m_maxBytesPerPicDenom; 221*437bfbebSnyanmisaka RK_S32 m_maxBitsPerMinCuDenom; 222*437bfbebSnyanmisaka RK_S32 m_log2MaxMvLengthHorizontal; 223*437bfbebSnyanmisaka RK_S32 m_log2MaxMvLengthVertical; 224*437bfbebSnyanmisaka H265eHrdParameters m_hrdParameters; 225*437bfbebSnyanmisaka TimingInfo m_timingInfo; 226*437bfbebSnyanmisaka } H265eVuiInfo; 227*437bfbebSnyanmisaka 228*437bfbebSnyanmisaka typedef struct H265eSps_e { 229*437bfbebSnyanmisaka 230*437bfbebSnyanmisaka RK_S32 m_SPSId; 231*437bfbebSnyanmisaka RK_S32 m_VPSId; 232*437bfbebSnyanmisaka RK_S32 m_chromaFormatIdc; 233*437bfbebSnyanmisaka RK_U32 m_colorPlaneFlag; 234*437bfbebSnyanmisaka RK_U32 m_maxTLayers; // maximum number of temporal layers 235*437bfbebSnyanmisaka 236*437bfbebSnyanmisaka // Structure 237*437bfbebSnyanmisaka RK_U32 m_picWidthInLumaSamples; 238*437bfbebSnyanmisaka RK_U32 m_picHeightInLumaSamples; 239*437bfbebSnyanmisaka 240*437bfbebSnyanmisaka RK_S32 m_log2MinCodingBlockSize; 241*437bfbebSnyanmisaka RK_S32 m_log2DiffMaxMinCodingBlockSize; 242*437bfbebSnyanmisaka RK_U32 m_maxCUSize; 243*437bfbebSnyanmisaka RK_U32 m_maxCUDepth; 244*437bfbebSnyanmisaka RK_U32 m_addCUDepth; 245*437bfbebSnyanmisaka 246*437bfbebSnyanmisaka H265eCropInfo m_conformanceWindow; 247*437bfbebSnyanmisaka 248*437bfbebSnyanmisaka H265eRPSList m_RPSList; 249*437bfbebSnyanmisaka RK_U32 m_bLongTermRefsPresent; 250*437bfbebSnyanmisaka RK_U32 m_TMVPFlagsPresent; 251*437bfbebSnyanmisaka RK_S32 m_numReorderPics[MAX_SUB_LAYERS]; 252*437bfbebSnyanmisaka 253*437bfbebSnyanmisaka // Tool list 254*437bfbebSnyanmisaka RK_U32 m_quadtreeTULog2MaxSize; 255*437bfbebSnyanmisaka RK_U32 m_quadtreeTULog2MinSize; 256*437bfbebSnyanmisaka RK_U32 m_quadtreeTUMaxDepthInter; 257*437bfbebSnyanmisaka RK_U32 m_quadtreeTUMaxDepthIntra; 258*437bfbebSnyanmisaka RK_U32 m_usePCM; 259*437bfbebSnyanmisaka RK_U32 m_pcmLog2MaxSize; 260*437bfbebSnyanmisaka RK_U32 m_pcmLog2MinSize; 261*437bfbebSnyanmisaka RK_U32 m_useAMP; 262*437bfbebSnyanmisaka 263*437bfbebSnyanmisaka // Parameter 264*437bfbebSnyanmisaka RK_S32 m_bitDepthY; 265*437bfbebSnyanmisaka RK_S32 m_bitDepthC; 266*437bfbebSnyanmisaka RK_S32 m_qpBDOffsetY; 267*437bfbebSnyanmisaka RK_S32 m_qpBDOffsetC; 268*437bfbebSnyanmisaka 269*437bfbebSnyanmisaka RK_U32 m_useLossless; 270*437bfbebSnyanmisaka 271*437bfbebSnyanmisaka RK_U32 m_pcmBitDepthLuma; 272*437bfbebSnyanmisaka RK_U32 m_pcmBitDepthChroma; 273*437bfbebSnyanmisaka RK_U32 m_bPCMFilterDisableFlag; 274*437bfbebSnyanmisaka 275*437bfbebSnyanmisaka RK_U32 m_bitsForPOC; 276*437bfbebSnyanmisaka RK_U32 m_numLongTermRefPicSPS; 277*437bfbebSnyanmisaka RK_U32 m_ltRefPicPocLsbSps[33]; 278*437bfbebSnyanmisaka RK_U32 m_usedByCurrPicLtSPSFlag[33]; 279*437bfbebSnyanmisaka 280*437bfbebSnyanmisaka // Max physical transform size 281*437bfbebSnyanmisaka RK_U32 m_maxTrSize; 282*437bfbebSnyanmisaka 283*437bfbebSnyanmisaka RK_S32 m_iAMPAcc[MAX_CU_DEPTH]; 284*437bfbebSnyanmisaka RK_U32 m_bUseSAO; 285*437bfbebSnyanmisaka 286*437bfbebSnyanmisaka RK_U32 m_bTemporalIdNestingFlag; // temporal_id_nesting_flag 287*437bfbebSnyanmisaka 288*437bfbebSnyanmisaka RK_U32 m_scalingListEnabledFlag; //TODO: replaced with scaling_list_mode 289*437bfbebSnyanmisaka RK_U32 m_scalingListPresentFlag; 290*437bfbebSnyanmisaka RK_U32 m_maxDecPicBuffering[MAX_SUB_LAYERS]; 291*437bfbebSnyanmisaka 292*437bfbebSnyanmisaka RK_U32 m_maxLatencyIncrease[MAX_SUB_LAYERS]; // Really max latency increase plus 1 (value 0 expresses no limit) 293*437bfbebSnyanmisaka 294*437bfbebSnyanmisaka RK_U32 m_useDF; 295*437bfbebSnyanmisaka RK_U32 m_useStrongIntraSmoothing; 296*437bfbebSnyanmisaka 297*437bfbebSnyanmisaka RK_S32 m_vuiParametersPresentFlag; 298*437bfbebSnyanmisaka H265eVuiInfo vui; 299*437bfbebSnyanmisaka H265ePTL *m_ptl; 300*437bfbebSnyanmisaka RK_U32 zscan2raster[MAX_NUM_SPU_W * MAX_NUM_SPU_W]; 301*437bfbebSnyanmisaka RK_U32 raster2zscan[MAX_NUM_SPU_W * MAX_NUM_SPU_W]; 302*437bfbebSnyanmisaka RK_U32 raster2pelx[MAX_NUM_SPU_W * MAX_NUM_SPU_W]; 303*437bfbebSnyanmisaka RK_U32 raster2pely[MAX_NUM_SPU_W * MAX_NUM_SPU_W]; 304*437bfbebSnyanmisaka } H265eSps; 305*437bfbebSnyanmisaka 306*437bfbebSnyanmisaka typedef struct H265ePps_e { 307*437bfbebSnyanmisaka RK_U32 m_PPSId; // pic_parameter_set_id 308*437bfbebSnyanmisaka RK_U32 m_SPSId; // seq_parameter_set_id 309*437bfbebSnyanmisaka RK_S32 m_picInitQPMinus26; 310*437bfbebSnyanmisaka RK_U32 m_useDQP; 311*437bfbebSnyanmisaka RK_U32 m_bConstrainedIntraPred; // constrained_intra_pred_flag 312*437bfbebSnyanmisaka RK_U32 m_bSliceChromaQpFlag; // slicelevel_chroma_qp_flag 313*437bfbebSnyanmisaka 314*437bfbebSnyanmisaka // access channel 315*437bfbebSnyanmisaka H265eSps *m_sps; 316*437bfbebSnyanmisaka RK_U32 m_maxCuDQPDepth; 317*437bfbebSnyanmisaka RK_U32 m_minCuDQPSize; 318*437bfbebSnyanmisaka 319*437bfbebSnyanmisaka RK_S32 m_chromaCbQpOffset; 320*437bfbebSnyanmisaka RK_S32 m_chromaCrQpOffset; 321*437bfbebSnyanmisaka 322*437bfbebSnyanmisaka RK_U32 m_numRefIdxL0DefaultActive; 323*437bfbebSnyanmisaka RK_U32 m_numRefIdxL1DefaultActive; 324*437bfbebSnyanmisaka 325*437bfbebSnyanmisaka RK_U32 m_bUseWeightPred; // Use of Weighting Prediction (P_SLICE) 326*437bfbebSnyanmisaka RK_U32 m_useWeightedBiPred; // Use of Weighting Bi-Prediction (B_SLICE) 327*437bfbebSnyanmisaka RK_U32 m_outputFlagPresentFlag; // Indicates the presence of output_flag in slice header 328*437bfbebSnyanmisaka 329*437bfbebSnyanmisaka RK_U32 m_transquantBypassEnableFlag; // Indicates presence of cu_transquant_bypass_flag in CUs. 330*437bfbebSnyanmisaka RK_U32 m_useTransformSkip; 331*437bfbebSnyanmisaka RK_U32 m_entropyCodingSyncEnabledFlag; //!< Indicates the presence of wavefronts 332*437bfbebSnyanmisaka 333*437bfbebSnyanmisaka 334*437bfbebSnyanmisaka RK_S32 m_signHideFlag; 335*437bfbebSnyanmisaka RK_S32 m_tiles_enabled_flag; 336*437bfbebSnyanmisaka RK_U32 m_bTileUniformSpacing; 337*437bfbebSnyanmisaka RK_S32 m_nNumTileColumnsMinus1; 338*437bfbebSnyanmisaka RK_S32 m_nTileColumnWidthArray[33]; 339*437bfbebSnyanmisaka RK_S32 m_nNumTileRowsMinus1; 340*437bfbebSnyanmisaka RK_S32 m_nTileRowHeightArray[128]; 341*437bfbebSnyanmisaka RK_U32 m_loopFilterAcrossTilesEnabledFlag; 342*437bfbebSnyanmisaka 343*437bfbebSnyanmisaka RK_U32 m_cabacInitPresentFlag; 344*437bfbebSnyanmisaka RK_U32 m_encCABACTableIdx; // Used to transmit table selection across slices 345*437bfbebSnyanmisaka 346*437bfbebSnyanmisaka RK_U32 m_sliceHeaderExtensionPresentFlag; 347*437bfbebSnyanmisaka RK_U32 m_deblockingFilterControlPresentFlag; 348*437bfbebSnyanmisaka RK_U32 m_LFCrossSliceBoundaryFlag; 349*437bfbebSnyanmisaka RK_U32 m_deblockingFilterOverrideEnabledFlag; 350*437bfbebSnyanmisaka RK_U32 m_picDisableDeblockingFilterFlag; 351*437bfbebSnyanmisaka RK_S32 m_deblockingFilterBetaOffsetDiv2; //< beta offset for deblocking filter 352*437bfbebSnyanmisaka RK_S32 m_deblockingFilterTcOffsetDiv2; //< tc offset for deblocking filter 353*437bfbebSnyanmisaka RK_U32 m_scalingListPresentFlag; 354*437bfbebSnyanmisaka 355*437bfbebSnyanmisaka // TComScalingList* m_scalingList; //!< ScalingList class pointer 356*437bfbebSnyanmisaka RK_U32 m_listsModificationPresentFlag; 357*437bfbebSnyanmisaka RK_U32 m_log2ParallelMergeLevelMinus2; 358*437bfbebSnyanmisaka RK_S32 m_numExtraSliceHeaderBits; 359*437bfbebSnyanmisaka } H265ePps; 360*437bfbebSnyanmisaka 361*437bfbebSnyanmisaka typedef struct H265eSlice_e { 362*437bfbebSnyanmisaka 363*437bfbebSnyanmisaka RK_U32 m_saoEnabledFlag; 364*437bfbebSnyanmisaka RK_U32 m_saoEnabledFlagChroma; ///< SAO Cb&Cr enabled flag 365*437bfbebSnyanmisaka RK_S32 m_ppsId; ///< picture parameter set ID 366*437bfbebSnyanmisaka RK_U32 m_picOutputFlag; ///< pic_output_flag 367*437bfbebSnyanmisaka RK_S32 poc; 368*437bfbebSnyanmisaka RK_S32 gop_idx; 369*437bfbebSnyanmisaka RK_S32 last_idr; 370*437bfbebSnyanmisaka 371*437bfbebSnyanmisaka H265eReferencePictureSet *m_rps; 372*437bfbebSnyanmisaka H265eReferencePictureSet m_localRPS; 373*437bfbebSnyanmisaka RK_S32 m_bdIdx; 374*437bfbebSnyanmisaka H265eRefPicListModification m_RefPicListModification; 375*437bfbebSnyanmisaka H265eContextModel_t m_contextModels[MAX_OFF_CTX_MOD]; 376*437bfbebSnyanmisaka H265eCabacCtx m_cabac; 377*437bfbebSnyanmisaka 378*437bfbebSnyanmisaka enum NALUnitType m_nalUnitType; ///< Nal unit type for the slice 379*437bfbebSnyanmisaka SliceType m_sliceType; 380*437bfbebSnyanmisaka 381*437bfbebSnyanmisaka RK_S32 temporal_id; 382*437bfbebSnyanmisaka RK_U32 m_IsGenB; 383*437bfbebSnyanmisaka RK_S32 m_sliceQp; 384*437bfbebSnyanmisaka RK_U32 m_dependentSliceSegmentFlag; 385*437bfbebSnyanmisaka RK_U32 m_deblockingFilterDisable; 386*437bfbebSnyanmisaka RK_U32 m_deblockingFilterOverrideFlag; //< offsets for deblocking filter inherit from PPS 387*437bfbebSnyanmisaka RK_S32 m_deblockingFilterBetaOffsetDiv2; //< beta offset for deblocking filter 388*437bfbebSnyanmisaka RK_S32 m_deblockingFilterTcOffsetDiv2; //< tc offset for deblocking filter 389*437bfbebSnyanmisaka RK_S32 m_numRefIdx[2]; // for multiple reference of current slice 390*437bfbebSnyanmisaka 391*437bfbebSnyanmisaka RK_U32 m_bCheckLDC; 392*437bfbebSnyanmisaka 393*437bfbebSnyanmisaka // Data 394*437bfbebSnyanmisaka RK_S32 m_sliceQpDelta; 395*437bfbebSnyanmisaka RK_S32 m_sliceQpDeltaCb; 396*437bfbebSnyanmisaka RK_S32 m_sliceQpDeltaCr; 397*437bfbebSnyanmisaka H265eDpbFrm *m_refPicList[2][MAX_REFS + 1]; 398*437bfbebSnyanmisaka RK_S32 m_refPOCList[2][MAX_REFS + 1]; 399*437bfbebSnyanmisaka RK_U32 m_bIsUsedAsLongTerm[2][MAX_REFS + 1]; 400*437bfbebSnyanmisaka 401*437bfbebSnyanmisaka // referenced slice? 402*437bfbebSnyanmisaka RK_U32 is_referenced; 403*437bfbebSnyanmisaka 404*437bfbebSnyanmisaka // access channel 405*437bfbebSnyanmisaka H265eSps* m_sps; 406*437bfbebSnyanmisaka H265ePps* m_pps; 407*437bfbebSnyanmisaka H265eVps* m_vps; 408*437bfbebSnyanmisaka RK_U32 m_colFromL0Flag; // collocated picture from List0 flag 409*437bfbebSnyanmisaka 410*437bfbebSnyanmisaka RK_U32 m_colRefIdx; 411*437bfbebSnyanmisaka RK_U32 m_maxNumMergeCand; 412*437bfbebSnyanmisaka 413*437bfbebSnyanmisaka RK_U32 m_sliceCurEndCUAddr; 414*437bfbebSnyanmisaka RK_U32 m_nextSlice; 415*437bfbebSnyanmisaka RK_U32 m_sliceBits; 416*437bfbebSnyanmisaka RK_U32 m_sliceSegmentBits; 417*437bfbebSnyanmisaka RK_U32 m_bFinalized; 418*437bfbebSnyanmisaka 419*437bfbebSnyanmisaka RK_U32 m_tileOffstForMultES; 420*437bfbebSnyanmisaka 421*437bfbebSnyanmisaka RK_U32* m_substreamSizes; 422*437bfbebSnyanmisaka 423*437bfbebSnyanmisaka // TComScalingList* m_scalingList; //!< pointer of quantization matrix 424*437bfbebSnyanmisaka RK_U32 m_cabacInitFlag; 425*437bfbebSnyanmisaka 426*437bfbebSnyanmisaka RK_U32 m_bLMvdL1Zero; 427*437bfbebSnyanmisaka RK_S32 m_numEntryPointOffsets; 428*437bfbebSnyanmisaka RK_U32 m_temporalLayerNonReferenceFlag; 429*437bfbebSnyanmisaka RK_U32 m_LFCrossSliceBoundaryFlag; 430*437bfbebSnyanmisaka RK_U32 m_enableTMVPFlag; 431*437bfbebSnyanmisaka 432*437bfbebSnyanmisaka RK_U32 slice_reserved_flag; 433*437bfbebSnyanmisaka RK_U32 no_output_of_prior_pics_flag; 434*437bfbebSnyanmisaka RK_U32 slice_header_extension_length; 435*437bfbebSnyanmisaka RK_U32 ref_pic_list_modification_flag_l0; 436*437bfbebSnyanmisaka RK_U32 lst_entry_l0; 437*437bfbebSnyanmisaka RK_U32 tot_poc_num; 438*437bfbebSnyanmisaka RK_U32 num_long_term_sps; 439*437bfbebSnyanmisaka RK_U32 num_long_term_pics; 440*437bfbebSnyanmisaka } H265eSlice; 441*437bfbebSnyanmisaka 442*437bfbebSnyanmisaka #ifdef __cplusplus 443*437bfbebSnyanmisaka extern "C" { 444*437bfbebSnyanmisaka #endif 445*437bfbebSnyanmisaka 446*437bfbebSnyanmisaka void h265e_slice_set_ref_list(H265eDpbFrm *frame_list, H265eSlice *slice); 447*437bfbebSnyanmisaka void h265e_slice_set_ref_poc_list(H265eSlice *slice); 448*437bfbebSnyanmisaka void h265e_slice_init(void *ctx, EncFrmStatus curr); 449*437bfbebSnyanmisaka RK_S32 h265e_code_slice_skip_frame(void *ctx, H265eSlice *slice, RK_U8 *buf, RK_S32 len); 450*437bfbebSnyanmisaka H265eDpbFrm* get_lt_ref_pic(H265eDpbFrm *frame_list, H265eSlice *slice, RK_S32 poc, RK_U32 pocHasMsb); 451*437bfbebSnyanmisaka 452*437bfbebSnyanmisaka #ifdef __cplusplus 453*437bfbebSnyanmisaka } 454*437bfbebSnyanmisaka #endif 455*437bfbebSnyanmisaka 456*437bfbebSnyanmisaka #endif /* __H265E_SLICE_H__ */ 457