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 #define ALF_MAX_BLOCKS_IN_CTU (MAX_CTU_SIZE * MAX_CTU_SIZE / ALF_BLOCK_SIZE / ALF_BLOCK_SIZE)
91 #define ALF_MAX_FILTER_SIZE (ALF_MAX_BLOCKS_IN_CTU * ALF_NUM_COEFF_LUMA)
92 
93 /**
94  * Value of the luma sample at position (x, y) in the 2D array tab.
95  */
96 #define SAMPLE(tab, x, y) ((tab)[(y) * s->pps->width + (x)])
97 #define SAMPLE_CTB(tab, x, y) ((tab)[(y) * min_cb_width + (x)])
98 #define CTB(tab, x, y) ((tab)[(y) * fc->ps.pps->ctb_width + (x)])
99 
100 enum SAOType {
104 };
105 
111 };
112 
113 typedef struct NeighbourAvailable {
114  int cand_left;
115  int cand_up;
116  int cand_up_left;
117  int cand_up_right;
118  int cand_up_right_sap;
120 
121 enum IspType{
125 };
126 
127 typedef enum VVCSplitMode {
134 } VVCSplitMode;
135 
136 typedef enum MtsIdx {
142 } MtsIdx;
143 
144 typedef struct TransformBlock {
145  uint8_t has_coeffs;
146  uint8_t c_idx;
147  uint8_t ts; ///< transform_skip_flag
148  int x0;
149  int y0;
150 
151  int tb_width;
155 
160 
161  int qp;
163  int bd_shift;
165 
166  int *coeffs;
168 
169 typedef enum VVCTreeType {
173 } VVCTreeType;
174 
175 typedef struct TransformUnit {
176  int x0;
177  int y0;
178  int width;
179  int height;
180  bool avail[CHROMA + 1]; // contains luma/chroma block
181 
182  uint8_t joint_cbcr_residual_flag; ///< tu_joint_cbcr_residual_flag
183 
184  uint8_t coded_flag[VVC_MAX_SAMPLE_ARRAYS]; ///< tu_y_coded_flag, tu_cb_coded_flag, tu_cr_coded_flag
185  uint8_t nb_tbs;
187 
188  struct TransformUnit *next; ///< RefStruct reference
189 } TransformUnit;
190 
191 typedef enum PredMode {
197 } PredMode;
198 
199 typedef struct Mv {
200  int x; ///< horizontal component of motion vector
201  int y; ///< vertical component of motion vector
202 } Mv;
203 
204 typedef struct MvField {
205  DECLARE_ALIGNED(8, Mv, mv)[2]; ///< mvL0, vvL1
206  int8_t ref_idx[2]; ///< refIdxL0, refIdxL1
207  uint8_t hpel_if_idx; ///< hpelIfIdx
208  uint8_t bcw_idx; ///< bcwIdx
209  uint8_t pred_flag;
210  uint8_t ciip_flag; ///< ciip_flag
211 } MvField;
212 
213 typedef struct DMVRInfo {
214  DECLARE_ALIGNED(8, Mv, mv)[2]; ///< mvL0, vvL1
215  uint8_t dmvr_enabled;
216 } DMVRInfo;
217 
218 typedef enum MotionModelIdc {
223 
224 typedef enum PredFlag {
225  PF_INTRA = 0x0,
226  PF_L0 = 0x1,
227  PF_L1 = 0x2,
228  PF_BI = 0x3,
229  PF_IBC = PF_L0 | 0x4,
230  PF_PLT = 0x8,
231 } PredFlag;
232 
233 typedef enum IntraPredMode {
244 } IntraPredMode;
245 
246 typedef struct MotionInfo {
247  MotionModelIdc motion_model_idc; ///< MotionModelIdc
248  int8_t ref_idx[2]; ///< refIdxL0, refIdxL1
249  uint8_t hpel_if_idx; ///< hpelIfIdx
250  uint8_t bcw_idx; ///< bcwIdx
252 
254 
256 } MotionInfo;
257 
258 typedef struct PredictionUnit {
261  //InterPredIdc inter_pred_idc;
263 
264  //subblock predict
266 
267  uint8_t merge_gpm_flag;
270 
272 
274 
275  // for regular prediction only
276  uint8_t dmvr_flag;
277  uint8_t bdof_flag;
278 
281  int cb_prof_flag[2];
283 
284 typedef struct Palette {
285  uint8_t size;
287 } Palette;
288 
289 typedef struct CodingUnit {
291  int x0;
292  int y0;
293  int cb_width;
295  int ch_type;
297 
298  uint8_t coded_flag;
299 
300  uint8_t sbt_flag;
302  uint8_t sbt_pos_flag;
303 
306 
308 
309  uint8_t intra_luma_ref_idx; ///< IntraLumaRefLineIdx[][]
310  uint8_t intra_mip_flag; ///< intra_mip_flag
311  uint8_t skip_flag; ///< cu_skip_flag;
312 
313  //inter
314  uint8_t ciip_flag;
315 
316  // Inferred parameters
317  enum IspType isp_split_type; ///< IntraSubPartitionsSplitType
318 
319  enum PredMode pred_mode; ///< PredMode
320 
322 
323  IntraPredMode intra_pred_mode_y; ///< IntraPredModeY
324  IntraPredMode intra_pred_mode_c; ///< IntraPredModeC
325  int mip_chroma_direct_flag; ///< MipChromaDirectFlag
326 
327  int bdpcm_flag[VVC_MAX_SAMPLE_ARRAYS]; ///< BdpcmFlag
328 
329  int apply_lfnst_flag[VVC_MAX_SAMPLE_ARRAYS]; ///< ApplyLfnstFlag[]
330 
331  struct {
332  TransformUnit *head; ///< RefStruct reference
333  TransformUnit *tail; ///< RefStruct reference
334  } tus;
335 
336  int8_t qp[4]; ///< QpY, Qp′Cb, Qp′Cr, Qp′CbCr
337 
339 
341 
342  struct CodingUnit *next; ///< RefStruct reference
343 } CodingUnit;
344 
345 typedef struct CTU {
347  int max_y_idx[2];
348  int has_dmvr;
349 } CTU;
350 
351 typedef struct ReconstructedArea {
352  int x;
353  int y;
354  int w;
355  int h;
357 
358 typedef struct VVCCabacState {
359  uint16_t state[2];
360  uint8_t shift[2];
361 } VVCCabacState;
362 
363 // VVC_CONTEXTS matched with SYNTAX_ELEMENT_LAST, it's checked by cabac_init_state.
364 #define VVC_CONTEXTS 378
365 typedef struct EntryPoint {
366  int8_t qp_y; ///< QpY
367 
368  uint8_t is_first_qg; // first quantization group
369 
371  int ctu_end;
372 
373  int stat_coeff[VVC_MAX_SAMPLE_ARRAYS]; ///< StatCoeff
374 
377 
378  Palette pp[VVC_MAX_SAMPLE_ARRAYS]; // PalettePredictor
379 
380  MvField hmvp[MAX_NUM_HMVP_CANDS]; ///< HmvpCandList
381  int num_hmvp; ///< NumHmvpCand
382  MvField hmvp_ibc[MAX_NUM_HMVP_CANDS]; ///< HmvpIbcCandList
383  int num_hmvp_ibc; ///< NumHmvpIbcCand
384 } EntryPoint;
385 
386 typedef struct VVCLocalContext {
387  uint8_t ctb_left_flag;
388  uint8_t ctb_up_flag;
393 
394  struct {
395  int sbt_num_fourths_tb0; ///< SbtNumFourthsTb0
396 
397  uint8_t is_cu_qp_delta_coded; ///< IsCuQpDeltaCoded
398  int cu_qg_top_left_x; ///< CuQgTopLeftX
399  int cu_qg_top_left_y; ///< CuQgTopLeftY
400  int is_cu_chroma_qp_offset_coded; ///< IsCuChromaQpOffsetCoded
401  int chroma_qp_offset[3]; ///< CuQpOffsetCb, CuQpOffsetCr, CuQpOffsetCbCr
402 
403  int infer_tu_cbf_luma; ///< InferTuCbfLuma
404  int prev_tu_cbf_y; ///< prevTuCbfY;
405 
406  int lfnst_dc_only; ///< LfnstDcOnly
407  int lfnst_zero_out_sig_coeff_flag; ///< LfnstZeroOutSigCoeffFlag
408 
409  int mts_dc_only; ///< MtsDcOnly
410  int mts_zero_out_sig_coeff_flag; ///< MtsZeroOutSigCoeffFlag;
411  } parse;
412 
413  struct {
414  // lmcs cache, for recon only
416  int x_vpdu;
417  int y_vpdu;
418  } lmcs;
419 
423  int *coeffs;
424 
426 
427 #define BOUNDARY_LEFT_SLICE (1 << 0)
428 #define BOUNDARY_LEFT_TILE (1 << 1)
429 #define BOUNDARY_LEFT_SUBPIC (1 << 2)
430 #define BOUNDARY_UPPER_SLICE (1 << 3)
431 #define BOUNDARY_UPPER_TILE (1 << 4)
432 #define BOUNDARY_UPPER_SUBPIC (1 << 5)
433  /* properties of the boundary of the current CTB for the purposes
434  * of the deblocking filter */
436 
437  int num_ras[2];
439 
441 
442  union {
443  struct {
444  /* *2 for high bit depths */
448  union {
451  };
452  } pred; ///< only accessed in ff_vvc_predict_inter() and ff_vvc_predict_ciip()
453  ///< during the inter and reconstruction stages
454  struct {
456  } sao; ///< only accessed in ff_vvc_sao_filter() during the sao processing stage
457  struct {
463  } alf; ///< only accessed in ff_vvc_alf_filter() during the alf processing stage
464  };
466 
467 typedef struct VVCAllowedSplit {
468  int qt;
469  int btv;
470  int bth;
471  int ttv;
472  int tth;
474 
475 typedef struct SAOParams {
476  int offset_abs[3][4]; ///< sao_offset_abs
477  int offset_sign[3][4]; ///< sao_offset_sign
478 
479  uint8_t band_position[3]; ///< sao_band_position
480 
481  int eo_class[3]; ///< sao_eo_class
482 
483  int16_t offset_val[3][5]; ///< SaoOffsetVal
484 
485  uint8_t type_idx[3]; ///< sao_type_idx
486 } SAOParams;
487 
488 typedef struct ALFParams {
489  uint8_t ctb_flag[3]; ///< alf_ctb_flag[]
490  uint8_t ctb_filt_set_idx_y; ///< AlfCtbFiltSetIdxY
491  uint8_t alf_ctb_filter_alt_idx[2]; ///< alf_ctb_filter_alt_idx[]
492  uint8_t ctb_cc_idc[2]; ///< alf_ctb_cc_cb_idc, alf_ctb_cc_cr_idc
493 } ALFParams;
494 
495 typedef struct VVCRect {
496  int l; // left
497  int t; // top
498  int r; // right
499  int b; // bottom
500 } VVCRect;
501 
502 /**
503  * parse a CTU
504  * @param lc local context for CTU
505  * @param ctb_idx CTB(CTU) address in the current slice
506  * @param rs raster order for the CTU.
507  * @param rx raster order x for the CTU.
508  * @param ry raster order y for the CTU.
509  * @return AVERROR
510  */
511 int ff_vvc_coding_tree_unit(VVCLocalContext *lc, int ctu_idx, int rs, int rx, int ry);
512 
513 //utils
514 void ff_vvc_set_neighbour_available(VVCLocalContext *lc, int x0, int y0, int w, int h);
515 void ff_vvc_decode_neighbour(VVCLocalContext *lc, int x_ctb, int y_ctb, int rx, int ry, int rs);
516 void ff_vvc_ctu_free_cus(CodingUnit **cus);
517 int ff_vvc_get_qPy(const VVCFrameContext *fc, int xc, int yc);
518 void ff_vvc_ep_init_stat_coeff(EntryPoint *ep, int bit_depth, int persistent_rice_adaptation_enabled_flag);
519 void ff_vvc_channel_range(int *start, int *end, VVCTreeType tree_type, uint8_t chroma_format_idc);
520 
521 #endif // AVCODEC_VVC_CTU_H
SAO_PADDING_SIZE
#define SAO_PADDING_SIZE
Definition: ctu.h:74
VVCCabacState
Definition: ctu.h:358
MotionModelIdc
MotionModelIdc
Definition: ctu.h:218
DMVRInfo
Definition: ctu.h:213
cabac.h
VVCLocalContext::mts_zero_out_sig_coeff_flag
int mts_zero_out_sig_coeff_flag
MtsZeroOutSigCoeffFlag;.
Definition: ctu.h:410
TransformBlock::tb_width
int tb_width
Definition: ctu.h:151
mem_internal.h
MotionInfo::mv
Mv mv[2][MAX_CONTROL_POINTS]
Definition: ctu.h:253
MOTION_TRANSLATION
@ MOTION_TRANSLATION
Definition: ctu.h:219
CTU::max_y_idx
int max_y_idx[2]
Definition: ctu.h:347
MotionInfo
Definition: ctu.h:246
TransformUnit::height
int height
Definition: ctu.h:179
SAO_EDGE
@ SAO_EDGE
Definition: ctu.h:103
ReconstructedArea::h
int h
Definition: ctu.h:355
INTRA_T_CCLM
@ INTRA_T_CCLM
Definition: ctu.h:243
PF_IBC
@ PF_IBC
Definition: ctu.h:229
CodingUnit
Definition: hevcdec.h:290
CodingUnit::act_enabled_flag
uint8_t act_enabled_flag
Definition: ctu.h:307
PredictionUnit::gpm_partition_idx
uint8_t gpm_partition_idx
Definition: ctu.h:268
CodingUnit::head
TransformUnit * head
RefStruct reference.
Definition: ctu.h:332
VVCLocalContext::tmp
int16_t tmp[MAX_PB_SIZE *MAX_PB_SIZE]
Definition: ctu.h:446
TransformUnit::nb_tbs
uint8_t nb_tbs
Definition: ctu.h:185
CodingUnit::bdpcm_flag
int bdpcm_flag[VVC_MAX_SAMPLE_ARRAYS]
BdpcmFlag.
Definition: ctu.h:327
VVCLocalContext::parse
struct VVCLocalContext::@339 parse
PF_BI
@ PF_BI
Definition: ctu.h:228
MODE_IBC
@ MODE_IBC
Definition: ctu.h:196
TransformBlock::min_scan_y
int min_scan_y
Definition: ctu.h:159
VVCLocalContext::ciip_tmp
uint8_t ciip_tmp[MAX_PB_SIZE *MAX_PB_SIZE *2]
Definition: ctu.h:450
MAX_NUM_HMVP_CANDS
#define MAX_NUM_HMVP_CANDS
Definition: ctu.h:72
VVCLocalContext::clip_tmp
int16_t clip_tmp[ALF_MAX_FILTER_SIZE]
Definition: ctu.h:462
VVCCabacState::state
uint16_t state[2]
Definition: ctu.h:359
VVCLocalContext::mts_dc_only
int mts_dc_only
MtsDcOnly.
Definition: ctu.h:409
ALF_GRADIENT_SIZE
#define ALF_GRADIENT_SIZE
Definition: ctu.h:87
NeighbourAvailable::cand_left
int cand_left
Definition: hevcdec.h:316
CodingUnit::intra_mip_flag
uint8_t intra_mip_flag
intra_mip_flag
Definition: ctu.h:310
NeighbourAvailable::cand_up
int cand_up
Definition: hevcdec.h:317
VVCLocalContext::sc
SliceContext * sc
Definition: ctu.h:420
SAOParams::offset_sign
int offset_sign[3][4]
sao_offset_sign
Definition: dsp.h:36
SPLIT_BT_HOR
@ SPLIT_BT_HOR
Definition: ctu.h:130
NeighbourAvailable::cand_up_right
int cand_up_right
Definition: hevcdec.h:319
TransformUnit::x0
int x0
Definition: ctu.h:176
SAO_NOT_APPLIED
@ SAO_NOT_APPLIED
Definition: ctu.h:101
VVCLocalContext::prof_tmp
int16_t prof_tmp[MAX_PB_SIZE *MAX_PB_SIZE]
Definition: ctu.h:449
INTRA_VDIAG
@ INTRA_VDIAG
Definition: ctu.h:240
TransformBlock::min_scan_x
int min_scan_x
Definition: ctu.h:158
VVCLocalContext::alf
struct VVCLocalContext::@341::@345 alf
only accessed in ff_vvc_alf_filter() during the alf processing stage
VVCSplitMode
VVCSplitMode
Definition: ctu.h:127
ReconstructedArea
Definition: ctu.h:351
VVCRect::t
int t
Definition: ctu.h:497
TransformBlock::max_scan_y
int max_scan_y
Definition: ctu.h:157
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:438
VVCLocalContext::ctb_up_right_flag
uint8_t ctb_up_right_flag
Definition: ctu.h:389
VVCLocalContext::coeffs
int * coeffs
Definition: ctu.h:423
VVCLocalContext::pred
struct VVCLocalContext::@341::@343 pred
only accessed in ff_vvc_predict_inter() and ff_vvc_predict_ciip() during the inter and reconstruction...
VVCLocalContext::lfnst_zero_out_sig_coeff_flag
int lfnst_zero_out_sig_coeff_flag
LfnstZeroOutSigCoeffFlag.
Definition: ctu.h:407
TransformBlock::max_scan_x
int max_scan_x
Definition: ctu.h:156
Mv::y
int y
vertical component of motion vector
Definition: ctu.h:201
SAO_BAND
@ SAO_BAND
Definition: ctu.h:102
VVCAllowedSplit::btv
int btv
Definition: ctu.h:469
SPLIT_QT
@ SPLIT_QT
Definition: ctu.h:133
VVCLocalContext::lfnst_dc_only
int lfnst_dc_only
LfnstDcOnly.
Definition: ctu.h:406
SAOType
SAOType
Definition: hevcdec.h:162
VVC_MAX_REF_ENTRIES
@ VVC_MAX_REF_ENTRIES
Definition: vvc.h:115
SPLIT_BT_VER
@ SPLIT_BT_VER
Definition: ctu.h:132
CodingUnit::ch_type
int ch_type
Definition: ctu.h:295
PredictionUnit::gpm_mv
MvField gpm_mv[2]
Definition: ctu.h:269
CodingUnit::plt
Palette plt[VVC_MAX_SAMPLE_ARRAYS]
Definition: ctu.h:338
VVCLocalContext::fc
VVCFrameContext * fc
Definition: ctu.h:421
PredictionUnit
Definition: hevcdec.h:323
EntryPoint::stat_coeff
int stat_coeff[VVC_MAX_SAMPLE_ARRAYS]
StatCoeff.
Definition: ctu.h:373
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:329
VVCLocalContext::tmp1
int16_t tmp1[MAX_PB_SIZE *MAX_PB_SIZE]
Definition: ctu.h:447
TransformBlock::c_idx
uint8_t c_idx
Definition: ctu.h:146
SPLIT_TT_VER
@ SPLIT_TT_VER
Definition: ctu.h:131
CodingUnit::sbt_pos_flag
uint8_t sbt_pos_flag
Definition: ctu.h:302
VVCLocalContext::ctb_up_left_flag
uint8_t ctb_up_left_flag
Definition: ctu.h:390
TransformBlock::x0
int x0
Definition: ctu.h:148
VVCRect
Definition: ctu.h:495
ISP_VER_SPLIT
@ ISP_VER_SPLIT
Definition: ctu.h:124
CodingUnit::cb_width
int cb_width
Definition: ctu.h:293
MAX_PB_SIZE
#define MAX_PB_SIZE
Definition: ctu.h:51
PF_L1
@ PF_L1
Definition: ctu.h:227
CodingUnit::pu
PredictionUnit pu
Definition: ctu.h:340
SAO_EO_VERT
@ SAO_EO_VERT
Definition: ctu.h:108
MTS_DCT2_DCT2
@ MTS_DCT2_DCT2
Definition: ctu.h:137
SPLIT_NONE
@ SPLIT_NONE
Definition: ctu.h:128
EntryPoint::cabac_state
VVCCabacState cabac_state[VVC_CONTEXTS]
Definition: ctu.h:376
TransformUnit::avail
bool avail[CHROMA+1]
Definition: ctu.h:180
ISP_HOR_SPLIT
@ ISP_HOR_SPLIT
Definition: ctu.h:123
TransformBlock::y0
int y0
Definition: ctu.h:149
TransformUnit::next
struct TransformUnit * next
RefStruct reference.
Definition: ctu.h:188
ReconstructedArea::x
int x
Definition: ctu.h:352
fc
#define fc(width, name, range_min, range_max)
Definition: cbs_av1.c:494
CodingUnit::cqt_depth
int cqt_depth
Definition: ctu.h:296
VVCLocalContext::edge_emu_buffer
uint8_t edge_emu_buffer[EDGE_EMU_BUFFER_STRIDE *EDGE_EMU_BUFFER_STRIDE *2]
Definition: ctu.h:445
CodingUnit::tree_type
VVCTreeType tree_type
Definition: ctu.h:290
Palette::size
uint8_t size
Definition: ctu.h:285
PredictionUnit::bdof_flag
uint8_t bdof_flag
Definition: ctu.h:277
CodingUnit::mts_idx
MtsIdx mts_idx
Definition: ctu.h:305
VVCLocalContext::sao
struct VVCLocalContext::@341::@344 sao
only accessed in ff_vvc_sao_filter() during the sao processing stage
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:184
VVCLocalContext::num_ras
int num_ras[2]
Definition: ctu.h:437
NeighbourAvailable::cand_up_right_sap
int cand_up_right_sap
Definition: hevcdec.h:320
PF_INTRA
@ PF_INTRA
Definition: ctu.h:225
CTU
Definition: ctu.h:345
VVCLocalContext::lmcs
struct VVCLocalContext::@340 lmcs
EntryPoint::is_first_qg
uint8_t is_first_qg
Definition: ctu.h:368
CodingUnit::sbt_flag
uint8_t sbt_flag
Definition: ctu.h:300
VVCTreeType
VVCTreeType
Definition: ctu.h:169
MOTION_6_PARAMS_AFFINE
@ MOTION_6_PARAMS_AFFINE
Definition: ctu.h:221
IspType
IspType
Definition: ctu.h:121
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:2808
TransformBlock::rect_non_ts_flag
int rect_non_ts_flag
Definition: ctu.h:162
VVCLocalContext
Definition: ctu.h:386
MvField::pred_flag
uint8_t pred_flag
Definition: ctu.h:209
VVCLocalContext::buffer_luma
uint8_t buffer_luma[(MAX_CTU_SIZE+2 *ALF_PADDING_SIZE) *EDGE_EMU_BUFFER_STRIDE *2]
Definition: ctu.h:458
VVCLocalContext::gradient_tmp
int32_t gradient_tmp[ALF_GRADIENT_SIZE *ALF_GRADIENT_SIZE *ALF_NUM_DIR]
Definition: ctu.h:460
INTRA_HORZ
@ INTRA_HORZ
Definition: ctu.h:237
EntryPoint::qp_y
int8_t qp_y
QpY.
Definition: ctu.h:366
TransformBlock::log2_tb_width
int log2_tb_width
Definition: ctu.h:153
CodingUnit::intra_luma_ref_idx
uint8_t intra_luma_ref_idx
IntraLumaRefLineIdx[][].
Definition: ctu.h:309
SAO_EO_45D
@ SAO_EO_45D
Definition: ctu.h:110
MOTION_4_PARAMS_AFFINE
@ MOTION_4_PARAMS_AFFINE
Definition: ctu.h:220
ALF_NUM_DIR
#define ALF_NUM_DIR
Definition: ctu.h:88
SPLIT_TT_HOR
@ SPLIT_TT_HOR
Definition: ctu.h:129
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:2914
MAX_CTU_SIZE
#define MAX_CTU_SIZE
Definition: ctu.h:33
MotionInfo::motion_model_idc
MotionModelIdc motion_model_idc
MotionModelIdc.
Definition: ctu.h:247
MvField::ciip_flag
uint8_t ciip_flag
ciip_flag
Definition: ctu.h:210
VVC_MAX_SAMPLE_ARRAYS
@ VVC_MAX_SAMPLE_ARRAYS
Definition: vvc.h:77
MotionInfo::num_sb_y
int num_sb_y
Definition: ctu.h:255
VVC_CONTEXTS
#define VVC_CONTEXTS
Definition: ctu.h:364
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:2839
TransformUnit
Definition: hevcdec.h:333
VVCAllowedSplit::bth
int bth
Definition: ctu.h:470
DUAL_TREE_LUMA
@ DUAL_TREE_LUMA
Definition: ctu.h:171
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:260
TransformBlock::bd_offset
int bd_offset
Definition: ctu.h:164
Palette::entries
uint16_t entries[VVC_MAX_NUM_PALETTE_PREDICTOR_SIZE]
Definition: ctu.h:286
VVCAllowedSplit::qt
int qt
Definition: ctu.h:468
TransformBlock::tb_height
int tb_height
Definition: ctu.h:152
EntryPoint::num_hmvp_ibc
int num_hmvp_ibc
NumHmvpIbcCand.
Definition: ctu.h:383
TransformBlock::ts
uint8_t ts
transform_skip_flag
Definition: ctu.h:147
CodingUnit::intra_pred_mode_y
IntraPredMode intra_pred_mode_y
IntraPredModeY.
Definition: ctu.h:323
DECLARE_ALIGNED
#define DECLARE_ALIGNED(n, t, v)
Definition: mem_internal.h:104
VVCLocalContext::buffer
uint8_t buffer[(MAX_CTU_SIZE+2 *SAO_PADDING_SIZE) *EDGE_EMU_BUFFER_STRIDE *2]
Definition: ctu.h:455
ALF_PADDING_SIZE
#define ALF_PADDING_SIZE
Definition: ctu.h:76
DMVRInfo::dmvr_enabled
uint8_t dmvr_enabled
Definition: ctu.h:215
MotionInfo::hpel_if_idx
uint8_t hpel_if_idx
hpelIfIdx
Definition: ctu.h:249
EntryPoint::cc
CABACContext cc
Definition: ctu.h:375
EntryPoint::ctu_end
int ctu_end
Definition: ctu.h:371
PredictionUnit::merge_gpm_flag
uint8_t merge_gpm_flag
Definition: ctu.h:267
PredictionUnit::cb_prof_flag
int cb_prof_flag[2]
Definition: ctu.h:281
CodingUnit::sbt_horizontal_flag
uint8_t sbt_horizontal_flag
Definition: ctu.h:301
CodingUnit::tus
struct CodingUnit::@338 tus
VVCLocalContext::infer_tu_cbf_luma
int infer_tu_cbf_luma
InferTuCbfLuma.
Definition: ctu.h:403
MvField
Definition: hevcdec.h:308
VVCLocalContext::end_of_tiles_x
int end_of_tiles_x
Definition: ctu.h:391
INTRA_INVALID
@ INTRA_INVALID
Definition: ctu.h:234
AFFINE_MIN_BLOCK_SIZE
#define AFFINE_MIN_BLOCK_SIZE
Definition: ctu.h:69
CodingUnit::coded_flag
uint8_t coded_flag
Definition: ctu.h:298
VVCLocalContext::ctb_up_flag
uint8_t ctb_up_flag
Definition: ctu.h:388
PredictionUnit::diff_mv_x
int16_t diff_mv_x[2][AFFINE_MIN_BLOCK_SIZE *AFFINE_MIN_BLOCK_SIZE]
diffMvLX
Definition: ctu.h:279
VVCRect::l
int l
Definition: ctu.h:496
CTU::has_dmvr
int has_dmvr
Definition: ctu.h:348
CodingUnit::lfnst_idx
int lfnst_idx
Definition: ctu.h:304
MAX_CONTROL_POINTS
#define MAX_CONTROL_POINTS
Definition: ctu.h:67
VVCLocalContext::na
NeighbourAvailable na
Definition: ctu.h:440
CodingUnit::intra_pred_mode_c
IntraPredMode intra_pred_mode_c
IntraPredModeC.
Definition: ctu.h:324
MvField::hpel_if_idx
uint8_t hpel_if_idx
hpelIfIdx
Definition: ctu.h:207
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:492
VVCAllowedSplit::tth
int tth
Definition: ctu.h:472
VVCAllowedSplit::ttv
int ttv
Definition: ctu.h:471
CTU::max_y
int max_y[2][VVC_MAX_REF_ENTRIES]
Definition: ctu.h:346
VVCLocalContext::boundary_flags
int boundary_flags
Definition: ctu.h:435
PredictionUnit::mi
MotionInfo mi
Definition: ctu.h:273
Mv::x
int x
horizontal component of motion vector
Definition: ctu.h:200
VVCAllowedSplit
Definition: ctu.h:467
EntryPoint::hmvp
MvField hmvp[MAX_NUM_HMVP_CANDS]
HmvpCandList.
Definition: ctu.h:380
MODE_PLT
@ MODE_PLT
Definition: ctu.h:195
ISP_NO_SPLIT
@ ISP_NO_SPLIT
Definition: ctu.h:122
NeighbourAvailable::cand_up_left
int cand_up_left
Definition: hevcdec.h:318
ff_vvc_ctu_free_cus
void ff_vvc_ctu_free_cus(CodingUnit **cus)
Definition: ctu.c:2887
ALF_MAX_FILTER_SIZE
#define ALF_MAX_FILTER_SIZE
Definition: ctu.h:91
SAO_EO_HORIZ
@ SAO_EO_HORIZ
Definition: ctu.h:107
VVCLocalContext::prev_tu_cbf_y
int prev_tu_cbf_y
prevTuCbfY;
Definition: ctu.h:404
VVCLocalContext::cu_qg_top_left_x
int cu_qg_top_left_x
CuQgTopLeftX.
Definition: ctu.h:398
CodingUnit::x0
int x0
Definition: ctu.h:291
TransformUnit::tbs
TransformBlock tbs[VVC_MAX_SAMPLE_ARRAYS]
Definition: ctu.h:186
DMVRInfo::mv
Mv mv[2]
mvL0, vvL1
Definition: ctu.h:214
EntryPoint
Definition: ctu.h:365
TransformBlock::coeffs
int * coeffs
Definition: ctu.h:166
TransformBlock::bd_shift
int bd_shift
Definition: ctu.h:163
VVCRect::b
int b
Definition: ctu.h:499
ff_vvc_set_neighbour_available
void ff_vvc_set_neighbour_available(VVCLocalContext *lc, int x0, int y0, int w, int h)
Definition: ctu.c:2872
INTRA_PLANAR
@ INTRA_PLANAR
Definition: ctu.h:235
INTRA_DC
@ INTRA_DC
Definition: ctu.h:236
TransformUnit::width
int width
Definition: ctu.h:178
SAOEOClass
SAOEOClass
Definition: hevcdec.h:169
PF_L0
@ PF_L0
Definition: ctu.h:226
SAOParams
Definition: dsp.h:34
VVCLocalContext::cu
CodingUnit * cu
Definition: ctu.h:425
EntryPoint::pp
Palette pp[VVC_MAX_SAMPLE_ARRAYS]
Definition: ctu.h:378
MotionInfo::bcw_idx
uint8_t bcw_idx
bcwIdx
Definition: ctu.h:250
INTRA_VERT
@ INTRA_VERT
Definition: ctu.h:239
PredictionUnit::dmvr_flag
uint8_t dmvr_flag
Definition: ctu.h:276
VVCLocalContext::chroma_qp_offset
int chroma_qp_offset[3]
CuQpOffsetCb, CuQpOffsetCr, CuQpOffsetCbCr.
Definition: ctu.h:401
NeighbourAvailable
Definition: hevcdec.h:314
IntraPredMode
IntraPredMode
Definition: hevcdec.h:124
MODE_SKIP
@ MODE_SKIP
Definition: ctu.h:194
VVCLocalContext::sbt_num_fourths_tb0
int sbt_num_fourths_tb0
SbtNumFourthsTb0.
Definition: ctu.h:395
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:491
PredictionUnit::inter_affine_flag
uint8_t inter_affine_flag
Definition: ctu.h:262
MotionInfo::pred_flag
PredFlag pred_flag
Definition: ctu.h:251
INTRA_DIAG
@ INTRA_DIAG
Definition: ctu.h:238
CodingUnit::cb_height
int cb_height
Definition: ctu.h:294
TransformBlock::log2_tb_height
int log2_tb_height
Definition: ctu.h:154
CodingUnit::tail
TransformUnit * tail
RefStruct reference.
Definition: ctu.h:333
MAX_PARTS_IN_CTU
#define MAX_PARTS_IN_CTU
Definition: ctu.h:41
DUAL_TREE_CHROMA
@ DUAL_TREE_CHROMA
Definition: ctu.h:172
TransformBlock::has_coeffs
uint8_t has_coeffs
Definition: ctu.h:145
INTRA_L_CCLM
@ INTRA_L_CCLM
Definition: ctu.h:242
PredFlag
PredFlag
Definition: ctu.h:224
VVC_MAX_NUM_PALETTE_PREDICTOR_SIZE
@ VVC_MAX_NUM_PALETTE_PREDICTOR_SIZE
Definition: vvc.h:159
PredMode
PredMode
Definition: hevcdec.h:105
MotionInfo::num_sb_x
int num_sb_x
Definition: ctu.h:255
PredictionUnit::sym_mvd_flag
int sym_mvd_flag
Definition: ctu.h:271
TransformBlock
Definition: ctu.h:144
CodingUnit::pred_mode
enum PredMode pred_mode
PredMode.
Definition: hevcdec.h:294
VVCCabacState::shift
uint8_t shift[2]
Definition: ctu.h:360
VVCRect::r
int r
Definition: ctu.h:498
ALFParams::ctb_filt_set_idx_y
uint8_t ctb_filt_set_idx_y
AlfCtbFiltSetIdxY.
Definition: ctu.h:490
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:2906
EntryPoint::num_hmvp
int num_hmvp
NumHmvpCand.
Definition: ctu.h:381
ff_vvc_channel_range
void ff_vvc_channel_range(int *start, int *end, VVCTreeType tree_type, uint8_t chroma_format_idc)
Definition: ctu.c:2923
PredictionUnit::general_merge_flag
uint8_t general_merge_flag
Definition: ctu.h:259
VVCLocalContext::end_of_tiles_y
int end_of_tiles_y
Definition: ctu.h:392
TransformUnit::y0
int y0
Definition: ctu.h:177
PredictionUnit::diff_mv_y
int16_t diff_mv_y[2][AFFINE_MIN_BLOCK_SIZE *AFFINE_MIN_BLOCK_SIZE]
diffMvLX
Definition: ctu.h:280
CodingUnit::next
struct CodingUnit * next
RefStruct reference.
Definition: ctu.h:342
MvField::mv
Mv mv[2]
mvL0, vvL1
Definition: hevcdec.h:309
ALFParams
Definition: ctu.h:488
Mv
Definition: hevcdec.h:303
VVCLocalContext::chroma_scale
int chroma_scale
Definition: ctu.h:415
EntryPoint::hmvp_ibc
MvField hmvp_ibc[MAX_NUM_HMVP_CANDS]
HmvpIbcCandList.
Definition: ctu.h:382
MvField::ref_idx
int8_t ref_idx[2]
refIdxL0, refIdxL1
Definition: hevcdec.h:310
PF_PLT
@ PF_PLT
Definition: ctu.h:230
VVCLocalContext::x_vpdu
int x_vpdu
Definition: ctu.h:416
ReconstructedArea::w
int w
Definition: ctu.h:354
w
uint8_t w
Definition: llvidencdsp.c:39
SINGLE_TREE
@ SINGLE_TREE
Definition: ctu.h:170
VVCLocalContext::y_vpdu
int y_vpdu
Definition: ctu.h:417
PredFlag
PredFlag
Definition: hevcdec.h:117
MotionInfo::ref_idx
int8_t ref_idx[2]
refIdxL0, refIdxL1
Definition: ctu.h:248
SAO_EO_135D
@ SAO_EO_135D
Definition: ctu.h:109
TransformBlock::qp
int qp
Definition: ctu.h:161
CodingUnit::isp_split_type
enum IspType isp_split_type
IntraSubPartitionsSplitType.
Definition: ctu.h:317
VVCFrameContext
Definition: dec.h:122
CodingUnit::mip_chroma_direct_flag
int mip_chroma_direct_flag
MipChromaDirectFlag.
Definition: ctu.h:325
Palette
Definition: flashsv2enc.c:83
ALFParams::ctb_flag
uint8_t ctb_flag[3]
alf_ctb_flag[]
Definition: ctu.h:489
MvField::bcw_idx
uint8_t bcw_idx
bcwIdx
Definition: ctu.h:208
int32_t
int32_t
Definition: audioconvert.c:56
CodingUnit::skip_flag
uint8_t skip_flag
cu_skip_flag;
Definition: ctu.h:311
EntryPoint::ctu_start
int ctu_start
Definition: ctu.h:370
MODE_INTER
@ MODE_INTER
Definition: ctu.h:192
MTS_DST7_DST7
@ MTS_DST7_DST7
Definition: ctu.h:138
PredMode
PredMode
Definition: ctu.h:191
VVCLocalContext::buffer_chroma
uint8_t buffer_chroma[(MAX_CTU_SIZE+2 *ALF_PADDING_SIZE) *EDGE_EMU_BUFFER_STRIDE *2]
Definition: ctu.h:459
MTS_DST7_DCT8
@ MTS_DST7_DCT8
Definition: ctu.h:139
TransformUnit::joint_cbcr_residual_flag
uint8_t joint_cbcr_residual_flag
tu_joint_cbcr_residual_flag
Definition: ctu.h:182
h
h
Definition: vp9dsp_template.c:2070
VVCLocalContext::ep
EntryPoint * ep
Definition: ctu.h:422
SAOParams::band_position
uint8_t band_position[3]
sao_band_position
Definition: dsp.h:38
VVCLocalContext::coeff_tmp
int16_t coeff_tmp[ALF_MAX_FILTER_SIZE]
Definition: ctu.h:461
IntraPredMode
IntraPredMode
Definition: ctu.h:233
VVCLocalContext::cu_qg_top_left_y
int cu_qg_top_left_y
CuQgTopLeftY.
Definition: ctu.h:399
INTRA_LT_CCLM
@ INTRA_LT_CCLM
Definition: ctu.h:241
CodingUnit::ciip_flag
uint8_t ciip_flag
Definition: ctu.h:314
MTS_DCT8_DCT8
@ MTS_DCT8_DCT8
Definition: ctu.h:141
CABACContext
Definition: cabac.h:41
PredictionUnit::merge_subblock_flag
uint8_t merge_subblock_flag
Definition: ctu.h:265
CodingUnit::num_intra_subpartitions
int num_intra_subpartitions
Definition: ctu.h:321
VVCLocalContext::ctb_left_flag
uint8_t ctb_left_flag
Definition: ctu.h:387
MtsIdx
MtsIdx
Definition: ctu.h:136
MODE_INTRA
@ MODE_INTRA
Definition: ctu.h:193
VVCLocalContext::is_cu_chroma_qp_offset_coded
int is_cu_chroma_qp_offset_coded
IsCuChromaQpOffsetCoded.
Definition: ctu.h:400
ReconstructedArea::y
int y
Definition: ctu.h:353
VVCLocalContext::is_cu_qp_delta_coded
uint8_t is_cu_qp_delta_coded
IsCuQpDeltaCoded.
Definition: ctu.h:397
CodingUnit::y0
int y0
Definition: ctu.h:292
dec.h
CodingUnit::qp
int8_t qp[4]
QpY, Qp′Cb, Qp′Cr, Qp′CbCr.
Definition: ctu.h:336
MTS_DCT8_DST7
@ MTS_DCT8_DST7
Definition: ctu.h:140