FFmpeg
ctu.h
Go to the documentation of this file.
1 /*
2  * VVC CTU(Coding Tree Unit) parser
3  *
4  * Copyright (C) 2022 Nuo Mi
5  *
6  * This file is part of FFmpeg.
7  *
8  * FFmpeg is free software; you can redistribute it and/or
9  * modify it under the terms of the GNU Lesser General Public
10  * License as published by the Free Software Foundation; either
11  * version 2.1 of the License, or (at your option) any later version.
12  *
13  * FFmpeg is distributed in the hope that it will be useful,
14  * but WITHOUT ANY WARRANTY; without even the implied warranty of
15  * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
16  * Lesser General Public License for more details.
17  *
18  * You should have received a copy of the GNU Lesser General Public
19  * License along with FFmpeg; if not, write to the Free Software
20  * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA
21  */
22 
23 #ifndef AVCODEC_VVC_CTU_H
24 #define AVCODEC_VVC_CTU_H
25 
26 #include <stdbool.h>
27 
28 #include "libavcodec/cabac.h"
29 #include "libavutil/mem_internal.h"
30 
31 #include "dec.h"
32 
33 #define MAX_CTU_SIZE 128
34 
35 #define MAX_CU_SIZE MAX_CTU_SIZE
36 #define MIN_CU_SIZE 4
37 #define MIN_CU_LOG2 2
38 #define MAX_CU_DEPTH 7
39 #define MAX_PALETTE_CU_SIZE 64
40 
41 #define MAX_PARTS_IN_CTU ((MAX_CTU_SIZE >> MIN_CU_LOG2) * (MAX_CTU_SIZE >> MIN_CU_LOG2))
42 
43 #define MIN_PU_SIZE 4
44 
45 #define MAX_TB_SIZE 64
46 #define MIN_TU_SIZE 4
47 #define MAX_TUS_IN_CU 64
48 
49 #define MAX_QP 63
50 
51 #define MAX_PB_SIZE 128
52 #define MAX_SCALING_RATIO 8
53 #define EDGE_EMU_BUFFER_STRIDE ((MAX_PB_SIZE + 32) * MAX_SCALING_RATIO)
54 
55 #define CHROMA_EXTRA_BEFORE 1
56 #define CHROMA_EXTRA_AFTER 2
57 #define CHROMA_EXTRA 3
58 #define LUMA_EXTRA_BEFORE 3
59 #define LUMA_EXTRA_AFTER 4
60 #define LUMA_EXTRA 7
61 #define BILINEAR_EXTRA_BEFORE 0
62 #define BILINEAR_EXTRA_AFTER 1
63 #define BILINEAR_EXTRA 1
64 
65 #define SCALED_INT(pos) ((pos) >> 10)
66 
67 #define MAX_CONTROL_POINTS 3
68 
69 #define AFFINE_MIN_BLOCK_SIZE 4
70 
71 #define MRG_MAX_NUM_CANDS 6
72 #define MAX_NUM_HMVP_CANDS 5
73 
74 #define SAO_PADDING_SIZE 1
75 
76 #define ALF_PADDING_SIZE 8
77 #define ALF_BLOCK_SIZE 4
78 
79 #define ALF_BORDER_LUMA 3
80 #define ALF_BORDER_CHROMA 2
81 
82 #define ALF_VB_POS_ABOVE_LUMA 4
83 #define ALF_VB_POS_ABOVE_CHROMA 2
84 
85 #define ALF_GRADIENT_STEP 2
86 #define ALF_GRADIENT_BORDER 2
87 #define ALF_GRADIENT_SIZE ((MAX_CU_SIZE + ALF_GRADIENT_BORDER * 2) / ALF_GRADIENT_STEP)
88 #define ALF_NUM_DIR 4
89 
90 
91 /**
92  * Value of the luma sample at position (x, y) in the 2D array tab.
93  */
94 #define SAMPLE(tab, x, y) ((tab)[(y) * s->pps->width + (x)])
95 #define SAMPLE_CTB(tab, x, y) ((tab)[(y) * min_cb_width + (x)])
96 #define CTB(tab, x, y) ((tab)[(y) * fc->ps.pps->ctb_width + (x)])
97 
98 enum SAOType {
102 };
103 
109 };
110 
111 typedef struct NeighbourAvailable {
112  int cand_left;
113  int cand_up;
114  int cand_up_left;
115  int cand_up_right;
116  int cand_up_right_sap;
118 
119 enum IspType{
123 };
124 
125 typedef enum VVCSplitMode {
132 } VVCSplitMode;
133 
134 typedef enum MtsIdx {
140 } MtsIdx;
141 
142 typedef struct TransformBlock {
143  uint8_t has_coeffs;
144  uint8_t c_idx;
145  uint8_t ts; ///< transform_skip_flag
146  int x0;
147  int y0;
148 
149  int tb_width;
153 
158 
159  int qp;
161  int bd_shift;
163 
164  int *coeffs;
166 
167 typedef enum VVCTreeType {
171 } VVCTreeType;
172 
173 typedef struct TransformUnit {
174  int x0;
175  int y0;
176  int width;
177  int height;
178  bool avail[CHROMA + 1]; // contains luma/chroma block
179 
180  uint8_t joint_cbcr_residual_flag; ///< tu_joint_cbcr_residual_flag
181 
182  uint8_t coded_flag[VVC_MAX_SAMPLE_ARRAYS]; ///< tu_y_coded_flag, tu_cb_coded_flag, tu_cr_coded_flag
183  uint8_t nb_tbs;
185 
186  struct TransformUnit *next; ///< RefStruct reference
187 } TransformUnit;
188 
189 typedef enum PredMode {
195 } PredMode;
196 
197 typedef struct Mv {
198  int x; ///< horizontal component of motion vector
199  int y; ///< vertical component of motion vector
200 } Mv;
201 
202 typedef struct MvField {
203  DECLARE_ALIGNED(8, Mv, mv)[2]; ///< mvL0, vvL1
204  int8_t ref_idx[2]; ///< refIdxL0, refIdxL1
205  uint8_t hpel_if_idx; ///< hpelIfIdx
206  uint8_t bcw_idx; ///< bcwIdx
207  uint8_t pred_flag;
208  uint8_t ciip_flag; ///< ciip_flag
209 } MvField;
210 
211 typedef struct DMVRInfo {
212  DECLARE_ALIGNED(8, Mv, mv)[2]; ///< mvL0, vvL1
213  uint8_t dmvr_enabled;
214 } DMVRInfo;
215 
216 typedef enum MotionModelIdc {
221 
222 typedef enum PredFlag {
223  PF_INTRA = 0x0,
224  PF_L0 = 0x1,
225  PF_L1 = 0x2,
226  PF_BI = 0x3,
227  PF_IBC = PF_L0 | 0x4,
228  PF_PLT = 0x8,
229 } PredFlag;
230 
231 typedef enum IntraPredMode {
242 } IntraPredMode;
243 
244 typedef struct MotionInfo {
245  MotionModelIdc motion_model_idc; ///< MotionModelIdc
246  int8_t ref_idx[2]; ///< refIdxL0, refIdxL1
247  uint8_t hpel_if_idx; ///< hpelIfIdx
248  uint8_t bcw_idx; ///< bcwIdx
250 
252 
254 } MotionInfo;
255 
256 typedef struct PredictionUnit {
259  //InterPredIdc inter_pred_idc;
261 
262  //subblock predict
264 
265  uint8_t merge_gpm_flag;
268 
270 
272 
273  // for regular prediction only
274  uint8_t dmvr_flag;
275  uint8_t bdof_flag;
276 
279  int cb_prof_flag[2];
281 
282 typedef struct Palette {
283  uint8_t size;
285 } Palette;
286 
287 typedef struct CodingUnit {
289  int x0;
290  int y0;
291  int cb_width;
293  int ch_type;
295 
296  uint8_t coded_flag;
297 
298  uint8_t sbt_flag;
300  uint8_t sbt_pos_flag;
301 
304 
306 
307  uint8_t intra_luma_ref_idx; ///< IntraLumaRefLineIdx[][]
308  uint8_t intra_mip_flag; ///< intra_mip_flag
309  uint8_t skip_flag; ///< cu_skip_flag;
310 
311  //inter
312  uint8_t ciip_flag;
313 
314  // Inferred parameters
315  enum IspType isp_split_type; ///< IntraSubPartitionsSplitType
316 
317  enum PredMode pred_mode; ///< PredMode
318 
320 
321  IntraPredMode intra_pred_mode_y; ///< IntraPredModeY
322  IntraPredMode intra_pred_mode_c; ///< IntraPredModeC
323  int mip_chroma_direct_flag; ///< MipChromaDirectFlag
324 
325  int bdpcm_flag[VVC_MAX_SAMPLE_ARRAYS]; ///< BdpcmFlag
326 
327  int apply_lfnst_flag[VVC_MAX_SAMPLE_ARRAYS]; ///< ApplyLfnstFlag[]
328 
329  struct {
330  TransformUnit *head; ///< RefStruct reference
331  TransformUnit *tail; ///< RefStruct reference
332  } tus;
333 
334  int8_t qp[4]; ///< QpY, Qp′Cb, Qp′Cr, Qp′CbCr
335 
337 
339 
340  struct CodingUnit *next; ///< RefStruct reference
341 } CodingUnit;
342 
343 typedef struct CTU {
345  int max_y_idx[2];
346  int has_dmvr;
347 } CTU;
348 
349 typedef struct ReconstructedArea {
350  int x;
351  int y;
352  int w;
353  int h;
355 
356 typedef struct VVCCabacState {
357  uint16_t state[2];
358  uint8_t shift[2];
359 } VVCCabacState;
360 
361 // VVC_CONTEXTS matched with SYNTAX_ELEMENT_LAST, it's checked by cabac_init_state.
362 #define VVC_CONTEXTS 378
363 typedef struct EntryPoint {
364  int8_t qp_y; ///< QpY
365 
366  int stat_coeff[VVC_MAX_SAMPLE_ARRAYS]; ///< StatCoeff
367 
368  Palette pp[VVC_MAX_SAMPLE_ARRAYS]; // PalettePredictor
369 
372 
374  int ctu_end;
375 
376  uint8_t is_first_qg; // first quantization group
377 
378  MvField hmvp[MAX_NUM_HMVP_CANDS]; ///< HmvpCandList
379  int num_hmvp; ///< NumHmvpCand
380  MvField hmvp_ibc[MAX_NUM_HMVP_CANDS]; ///< HmvpIbcCandList
381  int num_hmvp_ibc; ///< NumHmvpIbcCand
382 } EntryPoint;
383 
384 typedef struct VVCLocalContext {
385  uint8_t ctb_left_flag;
386  uint8_t ctb_up_flag;
391 
392  /* *2 for high bit depths */
402 
403  struct {
404  int sbt_num_fourths_tb0; ///< SbtNumFourthsTb0
405 
406  uint8_t is_cu_qp_delta_coded; ///< IsCuQpDeltaCoded
407  int cu_qg_top_left_x; ///< CuQgTopLeftX
408  int cu_qg_top_left_y; ///< CuQgTopLeftY
409  int is_cu_chroma_qp_offset_coded; ///< IsCuChromaQpOffsetCoded
410  int chroma_qp_offset[3]; ///< CuQpOffsetCb, CuQpOffsetCr, CuQpOffsetCbCr
411 
412  int infer_tu_cbf_luma; ///< InferTuCbfLuma
413  int prev_tu_cbf_y; ///< prevTuCbfY;
414 
415  int lfnst_dc_only; ///< LfnstDcOnly
416  int lfnst_zero_out_sig_coeff_flag; ///< LfnstZeroOutSigCoeffFlag
417 
418  int mts_dc_only; ///< MtsDcOnly
419  int mts_zero_out_sig_coeff_flag; ///< MtsZeroOutSigCoeffFlag;
420  } parse;
421 
422  struct {
423  // lmcs cache, for recon only
425  int x_vpdu;
426  int y_vpdu;
427  } lmcs;
428 
431  int num_ras[2];
432 
434 
435 #define BOUNDARY_LEFT_SLICE (1 << 0)
436 #define BOUNDARY_LEFT_TILE (1 << 1)
437 #define BOUNDARY_LEFT_SUBPIC (1 << 2)
438 #define BOUNDARY_UPPER_SLICE (1 << 3)
439 #define BOUNDARY_UPPER_TILE (1 << 4)
440 #define BOUNDARY_UPPER_SUBPIC (1 << 5)
441  /* properties of the boundary of the current CTB for the purposes
442  * of the deblocking filter */
444 
448  int *coeffs;
450 
451 typedef struct VVCAllowedSplit {
452  int qt;
453  int btv;
454  int bth;
455  int ttv;
456  int tth;
458 
459 typedef struct SAOParams {
460  int offset_abs[3][4]; ///< sao_offset_abs
461  int offset_sign[3][4]; ///< sao_offset_sign
462 
463  uint8_t band_position[3]; ///< sao_band_position
464 
465  int eo_class[3]; ///< sao_eo_class
466 
467  int16_t offset_val[3][5]; ///< SaoOffsetVal
468 
469  uint8_t type_idx[3]; ///< sao_type_idx
470 } SAOParams;
471 
472 typedef struct ALFParams {
473  uint8_t ctb_flag[3]; ///< alf_ctb_flag[]
474  uint8_t ctb_filt_set_idx_y; ///< AlfCtbFiltSetIdxY
475  uint8_t alf_ctb_filter_alt_idx[2]; ///< alf_ctb_filter_alt_idx[]
476  uint8_t ctb_cc_idc[2]; ///< alf_ctb_cc_cb_idc, alf_ctb_cc_cr_idc
477 } ALFParams;
478 
479 typedef struct VVCRect {
480  int l; // left
481  int t; // top
482  int r; // right
483  int b; // bottom
484 } VVCRect;
485 
486 /**
487  * parse a CTU
488  * @param lc local context for CTU
489  * @param ctb_idx CTB(CTU) address in the current slice
490  * @param rs raster order for the CTU.
491  * @param rx raster order x for the CTU.
492  * @param ry raster order y for the CTU.
493  * @return AVERROR
494  */
495 int ff_vvc_coding_tree_unit(VVCLocalContext *lc, int ctu_idx, int rs, int rx, int ry);
496 
497 //utils
498 void ff_vvc_set_neighbour_available(VVCLocalContext *lc, int x0, int y0, int w, int h);
499 void ff_vvc_decode_neighbour(VVCLocalContext *lc, int x_ctb, int y_ctb, int rx, int ry, int rs);
500 void ff_vvc_ctu_free_cus(CodingUnit **cus);
501 int ff_vvc_get_qPy(const VVCFrameContext *fc, int xc, int yc);
502 void ff_vvc_ep_init_stat_coeff(EntryPoint *ep, int bit_depth, int persistent_rice_adaptation_enabled_flag);
503 void ff_vvc_channel_range(int *start, int *end, VVCTreeType tree_type, uint8_t chroma_format_idc);
504 
505 #endif // AVCODEC_VVC_CTU_H
SAO_PADDING_SIZE
#define SAO_PADDING_SIZE
Definition: ctu.h:74
VVCCabacState
Definition: ctu.h:356
MotionModelIdc
MotionModelIdc
Definition: ctu.h:216
DMVRInfo
Definition: ctu.h:211
cabac.h
VVCLocalContext::mts_zero_out_sig_coeff_flag
int mts_zero_out_sig_coeff_flag
MtsZeroOutSigCoeffFlag;.
Definition: ctu.h:419
TransformBlock::tb_width
int tb_width
Definition: ctu.h:149
mem_internal.h
MotionInfo::mv
Mv mv[2][MAX_CONTROL_POINTS]
Definition: ctu.h:251
MOTION_TRANSLATION
@ MOTION_TRANSLATION
Definition: ctu.h:217
CTU::max_y_idx
int max_y_idx[2]
Definition: ctu.h:345
MotionInfo
Definition: ctu.h:244
TransformUnit::height
int height
Definition: ctu.h:177
SAO_EDGE
@ SAO_EDGE
Definition: ctu.h:101
ReconstructedArea::h
int h
Definition: ctu.h:353
INTRA_T_CCLM
@ INTRA_T_CCLM
Definition: ctu.h:241
PF_IBC
@ PF_IBC
Definition: ctu.h:227
CodingUnit
Definition: hevcdec.h:292
CodingUnit::act_enabled_flag
uint8_t act_enabled_flag
Definition: ctu.h:305
VVCLocalContext::alf_buffer_chroma
uint8_t alf_buffer_chroma[(MAX_CTU_SIZE+2 *ALF_PADDING_SIZE) *EDGE_EMU_BUFFER_STRIDE *2]
Definition: ctu.h:400
PredictionUnit::gpm_partition_idx
uint8_t gpm_partition_idx
Definition: ctu.h:266
CodingUnit::head
TransformUnit * head
RefStruct reference.
Definition: ctu.h:330
VVCLocalContext::tmp
int16_t tmp[MAX_PB_SIZE *MAX_PB_SIZE]
Definition: ctu.h:394
TransformUnit::nb_tbs
uint8_t nb_tbs
Definition: ctu.h:183
CodingUnit::bdpcm_flag
int bdpcm_flag[VVC_MAX_SAMPLE_ARRAYS]
BdpcmFlag.
Definition: ctu.h:325
PF_BI
@ PF_BI
Definition: ctu.h:226
MODE_IBC
@ MODE_IBC
Definition: ctu.h:194
TransformBlock::min_scan_y
int min_scan_y
Definition: ctu.h:157
VVC_MAX_REF_ENTRIES
@ VVC_MAX_REF_ENTRIES
Definition: vvc.h:115
VVCLocalContext::ciip_tmp
uint8_t ciip_tmp[MAX_PB_SIZE *MAX_PB_SIZE *2]
Definition: ctu.h:397
MAX_NUM_HMVP_CANDS
#define MAX_NUM_HMVP_CANDS
Definition: ctu.h:72
w
uint8_t w
Definition: llviddspenc.c:38
VVCCabacState::state
uint16_t state[2]
Definition: ctu.h:357
VVCLocalContext::mts_dc_only
int mts_dc_only
MtsDcOnly.
Definition: ctu.h:418
ALF_GRADIENT_SIZE
#define ALF_GRADIENT_SIZE
Definition: ctu.h:87
NeighbourAvailable::cand_left
int cand_left
Definition: hevcdec.h:318
CodingUnit::intra_mip_flag
uint8_t intra_mip_flag
intra_mip_flag
Definition: ctu.h:308
NeighbourAvailable::cand_up
int cand_up
Definition: hevcdec.h:319
VVCLocalContext::sc
SliceContext * sc
Definition: ctu.h:445
SAOParams::offset_sign
int offset_sign[3][4]
sao_offset_sign
Definition: dsp.h:36
SPLIT_BT_HOR
@ SPLIT_BT_HOR
Definition: ctu.h:128
NeighbourAvailable::cand_up_right
int cand_up_right
Definition: hevcdec.h:321
TransformUnit::x0
int x0
Definition: ctu.h:174
SAO_NOT_APPLIED
@ SAO_NOT_APPLIED
Definition: ctu.h:99
INTRA_VDIAG
@ INTRA_VDIAG
Definition: ctu.h:238
TransformBlock::min_scan_x
int min_scan_x
Definition: ctu.h:156
VVCSplitMode
VVCSplitMode
Definition: ctu.h:125
ReconstructedArea
Definition: ctu.h:349
VVC_MAX_NUM_PALETTE_PREDICTOR_SIZE
@ VVC_MAX_NUM_PALETTE_PREDICTOR_SIZE
Definition: vvc.h:159
VVCRect::t
int t
Definition: ctu.h:481
TransformBlock::max_scan_y
int max_scan_y
Definition: ctu.h:155
bit_depth
static void bit_depth(AudioStatsContext *s, const uint64_t *const mask, uint8_t *depth)
Definition: af_astats.c:246
VVCLocalContext::ras
ReconstructedArea ras[2][MAX_PARTS_IN_CTU]
Definition: ctu.h:430
VVCLocalContext::ctb_up_right_flag
uint8_t ctb_up_right_flag
Definition: ctu.h:387
VVCLocalContext::coeffs
int * coeffs
Definition: ctu.h:448
VVCLocalContext::lfnst_zero_out_sig_coeff_flag
int lfnst_zero_out_sig_coeff_flag
LfnstZeroOutSigCoeffFlag.
Definition: ctu.h:416
TransformBlock::max_scan_x
int max_scan_x
Definition: ctu.h:154
Mv::y
int y
vertical component of motion vector
Definition: ctu.h:199
SAO_BAND
@ SAO_BAND
Definition: ctu.h:100
VVCAllowedSplit::btv
int btv
Definition: ctu.h:453
SPLIT_QT
@ SPLIT_QT
Definition: ctu.h:131
VVCLocalContext::lfnst_dc_only
int lfnst_dc_only
LfnstDcOnly.
Definition: ctu.h:415
SAOType
SAOType
Definition: hevcdec.h:164
SPLIT_BT_VER
@ SPLIT_BT_VER
Definition: ctu.h:130
CodingUnit::ch_type
int ch_type
Definition: ctu.h:293
PredictionUnit::gpm_mv
MvField gpm_mv[2]
Definition: ctu.h:267
CodingUnit::plt
Palette plt[VVC_MAX_SAMPLE_ARRAYS]
Definition: ctu.h:336
VVCLocalContext::sao_buffer
uint8_t sao_buffer[(MAX_CTU_SIZE+2 *SAO_PADDING_SIZE) *EDGE_EMU_BUFFER_STRIDE *2]
Definition: ctu.h:398
VVCLocalContext::fc
VVCFrameContext * fc
Definition: ctu.h:446
PredictionUnit
Definition: hevcdec.h:325
EntryPoint::stat_coeff
int stat_coeff[VVC_MAX_SAMPLE_ARRAYS]
StatCoeff.
Definition: ctu.h:366
EDGE_EMU_BUFFER_STRIDE
#define EDGE_EMU_BUFFER_STRIDE
Definition: ctu.h:53
CodingUnit::apply_lfnst_flag
int apply_lfnst_flag[VVC_MAX_SAMPLE_ARRAYS]
ApplyLfnstFlag[].
Definition: ctu.h:327
VVCLocalContext::tmp1
int16_t tmp1[MAX_PB_SIZE *MAX_PB_SIZE]
Definition: ctu.h:395
TransformBlock::c_idx
uint8_t c_idx
Definition: ctu.h:144
SPLIT_TT_VER
@ SPLIT_TT_VER
Definition: ctu.h:129
CodingUnit::sbt_pos_flag
uint8_t sbt_pos_flag
Definition: ctu.h:300
VVCLocalContext::ctb_up_left_flag
uint8_t ctb_up_left_flag
Definition: ctu.h:388
TransformBlock::x0
int x0
Definition: ctu.h:146
VVCRect
Definition: ctu.h:479
ISP_VER_SPLIT
@ ISP_VER_SPLIT
Definition: ctu.h:122
CodingUnit::cb_width
int cb_width
Definition: ctu.h:291
MAX_PB_SIZE
#define MAX_PB_SIZE
Definition: ctu.h:51
PF_L1
@ PF_L1
Definition: ctu.h:225
CodingUnit::pu
PredictionUnit pu
Definition: ctu.h:338
SAO_EO_VERT
@ SAO_EO_VERT
Definition: ctu.h:106
MTS_DCT2_DCT2
@ MTS_DCT2_DCT2
Definition: ctu.h:135
SPLIT_NONE
@ SPLIT_NONE
Definition: ctu.h:126
EntryPoint::cabac_state
VVCCabacState cabac_state[VVC_CONTEXTS]
Definition: ctu.h:370
TransformUnit::avail
bool avail[CHROMA+1]
Definition: ctu.h:178
ISP_HOR_SPLIT
@ ISP_HOR_SPLIT
Definition: ctu.h:121
TransformBlock::y0
int y0
Definition: ctu.h:147
TransformUnit::next
struct TransformUnit * next
RefStruct reference.
Definition: ctu.h:186
ReconstructedArea::x
int x
Definition: ctu.h:350
fc
#define fc(width, name, range_min, range_max)
Definition: cbs_av1.c:493
CodingUnit::cqt_depth
int cqt_depth
Definition: ctu.h:294
VVCLocalContext::edge_emu_buffer
uint8_t edge_emu_buffer[EDGE_EMU_BUFFER_STRIDE *EDGE_EMU_BUFFER_STRIDE *2]
Definition: ctu.h:393
CodingUnit::tree_type
VVCTreeType tree_type
Definition: ctu.h:288
Palette::size
uint8_t size
Definition: ctu.h:283
PredictionUnit::bdof_flag
uint8_t bdof_flag
Definition: ctu.h:275
CodingUnit::mts_idx
MtsIdx mts_idx
Definition: ctu.h:303
TransformUnit::coded_flag
uint8_t coded_flag[VVC_MAX_SAMPLE_ARRAYS]
tu_y_coded_flag, tu_cb_coded_flag, tu_cr_coded_flag
Definition: ctu.h:182
VVCLocalContext::parse
struct VVCLocalContext::@313 parse
VVCLocalContext::num_ras
int num_ras[2]
Definition: ctu.h:431
NeighbourAvailable::cand_up_right_sap
int cand_up_right_sap
Definition: hevcdec.h:322
VVCLocalContext::alf_gradient_tmp
int32_t alf_gradient_tmp[ALF_GRADIENT_SIZE *ALF_GRADIENT_SIZE *ALF_NUM_DIR]
Definition: ctu.h:401
PF_INTRA
@ PF_INTRA
Definition: ctu.h:223
CTU
Definition: ctu.h:343
EntryPoint::is_first_qg
uint8_t is_first_qg
Definition: ctu.h:376
VVCLocalContext::alf_buffer_luma
uint8_t alf_buffer_luma[(MAX_CTU_SIZE+2 *ALF_PADDING_SIZE) *EDGE_EMU_BUFFER_STRIDE *2]
Definition: ctu.h:399
CodingUnit::sbt_flag
uint8_t sbt_flag
Definition: ctu.h:298
VVCTreeType
VVCTreeType
Definition: ctu.h:167
MOTION_6_PARAMS_AFFINE
@ MOTION_6_PARAMS_AFFINE
Definition: ctu.h:219
IspType
IspType
Definition: ctu.h:119
SAOParams::offset_abs
int offset_abs[3][4]
sao_offset_abs
Definition: dsp.h:35
ff_vvc_coding_tree_unit
int ff_vvc_coding_tree_unit(VVCLocalContext *lc, int ctu_idx, int rs, int rx, int ry)
parse a CTU
Definition: ctu.c:2767
TransformBlock::rect_non_ts_flag
int rect_non_ts_flag
Definition: ctu.h:160
VVCLocalContext
Definition: ctu.h:384
MvField::pred_flag
uint8_t pred_flag
Definition: ctu.h:207
INTRA_HORZ
@ INTRA_HORZ
Definition: ctu.h:235
EntryPoint::qp_y
int8_t qp_y
QpY.
Definition: ctu.h:364
TransformBlock::log2_tb_width
int log2_tb_width
Definition: ctu.h:151
CodingUnit::intra_luma_ref_idx
uint8_t intra_luma_ref_idx
IntraLumaRefLineIdx[][].
Definition: ctu.h:307
SAO_EO_45D
@ SAO_EO_45D
Definition: ctu.h:108
MOTION_4_PARAMS_AFFINE
@ MOTION_4_PARAMS_AFFINE
Definition: ctu.h:218
ALF_NUM_DIR
#define ALF_NUM_DIR
Definition: ctu.h:88
SPLIT_TT_HOR
@ SPLIT_TT_HOR
Definition: ctu.h:127
ff_vvc_ep_init_stat_coeff
void ff_vvc_ep_init_stat_coeff(EntryPoint *ep, int bit_depth, int persistent_rice_adaptation_enabled_flag)
Definition: ctu.c:2873
MAX_CTU_SIZE
#define MAX_CTU_SIZE
Definition: ctu.h:33
MotionInfo::motion_model_idc
MotionModelIdc motion_model_idc
MotionModelIdc.
Definition: ctu.h:245
MvField::ciip_flag
uint8_t ciip_flag
ciip_flag
Definition: ctu.h:208
MotionInfo::num_sb_y
int num_sb_y
Definition: ctu.h:253
VVC_CONTEXTS
#define VVC_CONTEXTS
Definition: ctu.h:362
ff_vvc_decode_neighbour
void ff_vvc_decode_neighbour(VVCLocalContext *lc, int x_ctb, int y_ctb, int rx, int ry, int rs)
Definition: ctu.c:2798
TransformUnit
Definition: hevcdec.h:335
VVCAllowedSplit::bth
int bth
Definition: ctu.h:454
DUAL_TREE_LUMA
@ DUAL_TREE_LUMA
Definition: ctu.h:169
SliceContext
Definition: mss12.h:70
SAOParams::offset_val
int16_t offset_val[3][5]
SaoOffsetVal.
Definition: dsp.h:42
PredictionUnit::mmvd_merge_flag
uint8_t mmvd_merge_flag
Definition: ctu.h:258
TransformBlock::bd_offset
int bd_offset
Definition: ctu.h:162
Palette::entries
uint16_t entries[VVC_MAX_NUM_PALETTE_PREDICTOR_SIZE]
Definition: ctu.h:284
VVCAllowedSplit::qt
int qt
Definition: ctu.h:452
TransformBlock::tb_height
int tb_height
Definition: ctu.h:150
EntryPoint::num_hmvp_ibc
int num_hmvp_ibc
NumHmvpIbcCand.
Definition: ctu.h:381
TransformBlock::ts
uint8_t ts
transform_skip_flag
Definition: ctu.h:145
CodingUnit::intra_pred_mode_y
IntraPredMode intra_pred_mode_y
IntraPredModeY.
Definition: ctu.h:321
DECLARE_ALIGNED
#define DECLARE_ALIGNED(n, t, v)
Definition: mem_internal.h:104
ALF_PADDING_SIZE
#define ALF_PADDING_SIZE
Definition: ctu.h:76
DMVRInfo::dmvr_enabled
uint8_t dmvr_enabled
Definition: ctu.h:213
MotionInfo::hpel_if_idx
uint8_t hpel_if_idx
hpelIfIdx
Definition: ctu.h:247
EntryPoint::cc
CABACContext cc
Definition: ctu.h:371
EntryPoint::ctu_end
int ctu_end
Definition: ctu.h:374
PredictionUnit::merge_gpm_flag
uint8_t merge_gpm_flag
Definition: ctu.h:265
PredictionUnit::cb_prof_flag
int cb_prof_flag[2]
Definition: ctu.h:279
CodingUnit::sbt_horizontal_flag
uint8_t sbt_horizontal_flag
Definition: ctu.h:299
VVCLocalContext::infer_tu_cbf_luma
int infer_tu_cbf_luma
InferTuCbfLuma.
Definition: ctu.h:412
MvField
Definition: hevcdec.h:310
VVCLocalContext::end_of_tiles_x
int end_of_tiles_x
Definition: ctu.h:389
INTRA_INVALID
@ INTRA_INVALID
Definition: ctu.h:232
AFFINE_MIN_BLOCK_SIZE
#define AFFINE_MIN_BLOCK_SIZE
Definition: ctu.h:69
CodingUnit::coded_flag
uint8_t coded_flag
Definition: ctu.h:296
VVCLocalContext::ctb_up_flag
uint8_t ctb_up_flag
Definition: ctu.h:386
PredictionUnit::diff_mv_x
int16_t diff_mv_x[2][AFFINE_MIN_BLOCK_SIZE *AFFINE_MIN_BLOCK_SIZE]
diffMvLX
Definition: ctu.h:277
VVCRect::l
int l
Definition: ctu.h:480
CTU::has_dmvr
int has_dmvr
Definition: ctu.h:346
CodingUnit::lfnst_idx
int lfnst_idx
Definition: ctu.h:302
MAX_CONTROL_POINTS
#define MAX_CONTROL_POINTS
Definition: ctu.h:67
VVCLocalContext::na
NeighbourAvailable na
Definition: ctu.h:433
CodingUnit::intra_pred_mode_c
IntraPredMode intra_pred_mode_c
IntraPredModeC.
Definition: ctu.h:322
MvField::hpel_if_idx
uint8_t hpel_if_idx
hpelIfIdx
Definition: ctu.h:205
SAOParams::eo_class
int eo_class[3]
sao_eo_class
Definition: dsp.h:40
ALFParams::ctb_cc_idc
uint8_t ctb_cc_idc[2]
alf_ctb_cc_cb_idc, alf_ctb_cc_cr_idc
Definition: ctu.h:476
VVCAllowedSplit::tth
int tth
Definition: ctu.h:456
VVCAllowedSplit::ttv
int ttv
Definition: ctu.h:455
CTU::max_y
int max_y[2][VVC_MAX_REF_ENTRIES]
Definition: ctu.h:344
CodingUnit::tus
struct CodingUnit::@312 tus
VVCLocalContext::boundary_flags
int boundary_flags
Definition: ctu.h:443
PredictionUnit::mi
MotionInfo mi
Definition: ctu.h:271
Mv::x
int x
horizontal component of motion vector
Definition: ctu.h:198
VVCAllowedSplit
Definition: ctu.h:451
EntryPoint::hmvp
MvField hmvp[MAX_NUM_HMVP_CANDS]
HmvpCandList.
Definition: ctu.h:378
MODE_PLT
@ MODE_PLT
Definition: ctu.h:193
ISP_NO_SPLIT
@ ISP_NO_SPLIT
Definition: ctu.h:120
NeighbourAvailable::cand_up_left
int cand_up_left
Definition: hevcdec.h:320
ff_vvc_ctu_free_cus
void ff_vvc_ctu_free_cus(CodingUnit **cus)
Definition: ctu.c:2846
SAO_EO_HORIZ
@ SAO_EO_HORIZ
Definition: ctu.h:105
VVCLocalContext::prev_tu_cbf_y
int prev_tu_cbf_y
prevTuCbfY;
Definition: ctu.h:413
VVCLocalContext::cu_qg_top_left_x
int cu_qg_top_left_x
CuQgTopLeftX.
Definition: ctu.h:407
CodingUnit::x0
int x0
Definition: ctu.h:289
TransformUnit::tbs
TransformBlock tbs[VVC_MAX_SAMPLE_ARRAYS]
Definition: ctu.h:184
DMVRInfo::mv
Mv mv[2]
mvL0, vvL1
Definition: ctu.h:212
EntryPoint
Definition: ctu.h:363
TransformBlock::coeffs
int * coeffs
Definition: ctu.h:164
TransformBlock::bd_shift
int bd_shift
Definition: ctu.h:161
VVCRect::b
int b
Definition: ctu.h:483
ff_vvc_set_neighbour_available
void ff_vvc_set_neighbour_available(VVCLocalContext *lc, int x0, int y0, int w, int h)
Definition: ctu.c:2831
INTRA_PLANAR
@ INTRA_PLANAR
Definition: ctu.h:233
INTRA_DC
@ INTRA_DC
Definition: ctu.h:234
TransformUnit::width
int width
Definition: ctu.h:176
SAOEOClass
SAOEOClass
Definition: hevcdec.h:171
PF_L0
@ PF_L0
Definition: ctu.h:224
SAOParams
Definition: dsp.h:34
VVCLocalContext::cu
CodingUnit * cu
Definition: ctu.h:429
EntryPoint::pp
Palette pp[VVC_MAX_SAMPLE_ARRAYS]
Definition: ctu.h:368
VVCLocalContext::lmcs
struct VVCLocalContext::@314 lmcs
MotionInfo::bcw_idx
uint8_t bcw_idx
bcwIdx
Definition: ctu.h:248
INTRA_VERT
@ INTRA_VERT
Definition: ctu.h:237
PredictionUnit::dmvr_flag
uint8_t dmvr_flag
Definition: ctu.h:274
VVCLocalContext::chroma_qp_offset
int chroma_qp_offset[3]
CuQpOffsetCb, CuQpOffsetCr, CuQpOffsetCbCr.
Definition: ctu.h:410
NeighbourAvailable
Definition: hevcdec.h:316
IntraPredMode
IntraPredMode
Definition: hevcdec.h:126
MODE_SKIP
@ MODE_SKIP
Definition: ctu.h:192
VVCLocalContext::sbt_num_fourths_tb0
int sbt_num_fourths_tb0
SbtNumFourthsTb0.
Definition: ctu.h:404
CHROMA
@ CHROMA
Definition: vf_waveform.c:49
ALFParams::alf_ctb_filter_alt_idx
uint8_t alf_ctb_filter_alt_idx[2]
alf_ctb_filter_alt_idx[]
Definition: ctu.h:475
PredictionUnit::inter_affine_flag
uint8_t inter_affine_flag
Definition: ctu.h:260
MotionInfo::pred_flag
PredFlag pred_flag
Definition: ctu.h:249
INTRA_DIAG
@ INTRA_DIAG
Definition: ctu.h:236
CodingUnit::cb_height
int cb_height
Definition: ctu.h:292
TransformBlock::log2_tb_height
int log2_tb_height
Definition: ctu.h:152
CodingUnit::tail
TransformUnit * tail
RefStruct reference.
Definition: ctu.h:331
MAX_PARTS_IN_CTU
#define MAX_PARTS_IN_CTU
Definition: ctu.h:41
DUAL_TREE_CHROMA
@ DUAL_TREE_CHROMA
Definition: ctu.h:170
TransformBlock::has_coeffs
uint8_t has_coeffs
Definition: ctu.h:143
INTRA_L_CCLM
@ INTRA_L_CCLM
Definition: ctu.h:240
PredFlag
PredFlag
Definition: ctu.h:222
PredMode
PredMode
Definition: hevcdec.h:107
MotionInfo::num_sb_x
int num_sb_x
Definition: ctu.h:253
PredictionUnit::sym_mvd_flag
int sym_mvd_flag
Definition: ctu.h:269
TransformBlock
Definition: ctu.h:142
CodingUnit::pred_mode
enum PredMode pred_mode
PredMode.
Definition: hevcdec.h:296
VVCCabacState::shift
uint8_t shift[2]
Definition: ctu.h:358
VVCRect::r
int r
Definition: ctu.h:482
VVCLocalContext::tmp2
int16_t tmp2[MAX_PB_SIZE *MAX_PB_SIZE]
Definition: ctu.h:396
ALFParams::ctb_filt_set_idx_y
uint8_t ctb_filt_set_idx_y
AlfCtbFiltSetIdxY.
Definition: ctu.h:474
SAOParams::type_idx
uint8_t type_idx[3]
sao_type_idx
Definition: dsp.h:44
ff_vvc_get_qPy
int ff_vvc_get_qPy(const VVCFrameContext *fc, int xc, int yc)
Definition: ctu.c:2865
EntryPoint::num_hmvp
int num_hmvp
NumHmvpCand.
Definition: ctu.h:379
ff_vvc_channel_range
void ff_vvc_channel_range(int *start, int *end, VVCTreeType tree_type, uint8_t chroma_format_idc)
Definition: ctu.c:2882
PredictionUnit::general_merge_flag
uint8_t general_merge_flag
Definition: ctu.h:257
VVCLocalContext::end_of_tiles_y
int end_of_tiles_y
Definition: ctu.h:390
TransformUnit::y0
int y0
Definition: ctu.h:175
PredictionUnit::diff_mv_y
int16_t diff_mv_y[2][AFFINE_MIN_BLOCK_SIZE *AFFINE_MIN_BLOCK_SIZE]
diffMvLX
Definition: ctu.h:278
CodingUnit::next
struct CodingUnit * next
RefStruct reference.
Definition: ctu.h:340
MvField::mv
Mv mv[2]
mvL0, vvL1
Definition: hevcdec.h:311
ALFParams
Definition: ctu.h:472
Mv
Definition: hevcdec.h:305
VVCLocalContext::chroma_scale
int chroma_scale
Definition: ctu.h:424
EntryPoint::hmvp_ibc
MvField hmvp_ibc[MAX_NUM_HMVP_CANDS]
HmvpIbcCandList.
Definition: ctu.h:380
MvField::ref_idx
int8_t ref_idx[2]
refIdxL0, refIdxL1
Definition: hevcdec.h:312
PF_PLT
@ PF_PLT
Definition: ctu.h:228
VVCLocalContext::x_vpdu
int x_vpdu
Definition: ctu.h:425
ReconstructedArea::w
int w
Definition: ctu.h:352
SINGLE_TREE
@ SINGLE_TREE
Definition: ctu.h:168
VVCLocalContext::y_vpdu
int y_vpdu
Definition: ctu.h:426
PredFlag
PredFlag
Definition: hevcdec.h:119
MotionInfo::ref_idx
int8_t ref_idx[2]
refIdxL0, refIdxL1
Definition: ctu.h:246
SAO_EO_135D
@ SAO_EO_135D
Definition: ctu.h:107
TransformBlock::qp
int qp
Definition: ctu.h:159
CodingUnit::isp_split_type
enum IspType isp_split_type
IntraSubPartitionsSplitType.
Definition: ctu.h:315
VVCFrameContext
Definition: dec.h:117
CodingUnit::mip_chroma_direct_flag
int mip_chroma_direct_flag
MipChromaDirectFlag.
Definition: ctu.h:323
Palette
Definition: flashsv2enc.c:83
ALFParams::ctb_flag
uint8_t ctb_flag[3]
alf_ctb_flag[]
Definition: ctu.h:473
MvField::bcw_idx
uint8_t bcw_idx
bcwIdx
Definition: ctu.h:206
int32_t
int32_t
Definition: audioconvert.c:56
CodingUnit::skip_flag
uint8_t skip_flag
cu_skip_flag;
Definition: ctu.h:309
EntryPoint::ctu_start
int ctu_start
Definition: ctu.h:373
MODE_INTER
@ MODE_INTER
Definition: ctu.h:190
MTS_DST7_DST7
@ MTS_DST7_DST7
Definition: ctu.h:136
PredMode
PredMode
Definition: ctu.h:189
MTS_DST7_DCT8
@ MTS_DST7_DCT8
Definition: ctu.h:137
TransformUnit::joint_cbcr_residual_flag
uint8_t joint_cbcr_residual_flag
tu_joint_cbcr_residual_flag
Definition: ctu.h:180
h
h
Definition: vp9dsp_template.c:2070
VVCLocalContext::ep
EntryPoint * ep
Definition: ctu.h:447
SAOParams::band_position
uint8_t band_position[3]
sao_band_position
Definition: dsp.h:38
IntraPredMode
IntraPredMode
Definition: ctu.h:231
VVCLocalContext::cu_qg_top_left_y
int cu_qg_top_left_y
CuQgTopLeftY.
Definition: ctu.h:408
INTRA_LT_CCLM
@ INTRA_LT_CCLM
Definition: ctu.h:239
CodingUnit::ciip_flag
uint8_t ciip_flag
Definition: ctu.h:312
MTS_DCT8_DCT8
@ MTS_DCT8_DCT8
Definition: ctu.h:139
CABACContext
Definition: cabac.h:41
PredictionUnit::merge_subblock_flag
uint8_t merge_subblock_flag
Definition: ctu.h:263
VVC_MAX_SAMPLE_ARRAYS
@ VVC_MAX_SAMPLE_ARRAYS
Definition: vvc.h:77
CodingUnit::num_intra_subpartitions
int num_intra_subpartitions
Definition: ctu.h:319
VVCLocalContext::ctb_left_flag
uint8_t ctb_left_flag
Definition: ctu.h:385
MtsIdx
MtsIdx
Definition: ctu.h:134
MODE_INTRA
@ MODE_INTRA
Definition: ctu.h:191
VVCLocalContext::is_cu_chroma_qp_offset_coded
int is_cu_chroma_qp_offset_coded
IsCuChromaQpOffsetCoded.
Definition: ctu.h:409
ReconstructedArea::y
int y
Definition: ctu.h:351
VVCLocalContext::is_cu_qp_delta_coded
uint8_t is_cu_qp_delta_coded
IsCuQpDeltaCoded.
Definition: ctu.h:406
CodingUnit::y0
int y0
Definition: ctu.h:290
dec.h
CodingUnit::qp
int8_t qp[4]
QpY, Qp′Cb, Qp′Cr, Qp′CbCr.
Definition: ctu.h:334
MTS_DCT8_DST7
@ MTS_DCT8_DST7
Definition: ctu.h:138