xref: /rockchip-linux_mpp/mpp/codec/enc/h265/h265e_slice.h (revision 437bfbeb9567cca9cd9080e3f6954aa9d6a94f18)
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