23#ifndef AVCODEC_VVC_CTU_H
24#define AVCODEC_VVC_CTU_H
33#define MAX_CTU_SIZE 128
35#define MAX_CU_SIZE MAX_CTU_SIZE
39#define MAX_PALETTE_CU_SIZE 64
41#define MAX_PARTS_IN_CTU ((MAX_CTU_SIZE >> MIN_CU_LOG2) * (MAX_CTU_SIZE >> MIN_CU_LOG2))
47#define MAX_TUS_IN_CU 64
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)
55#define CHROMA_EXTRA_BEFORE 1
56#define CHROMA_EXTRA_AFTER 2
58#define LUMA_EXTRA_BEFORE 3
59#define LUMA_EXTRA_AFTER 4
61#define BILINEAR_EXTRA_BEFORE 0
62#define BILINEAR_EXTRA_AFTER 1
63#define BILINEAR_EXTRA 1
65#define SCALED_INT(pos) ((pos) >> 10)
67#define MAX_CONTROL_POINTS 3
69#define AFFINE_MIN_BLOCK_SIZE 4
71#define MRG_MAX_NUM_CANDS 6
72#define MAX_NUM_HMVP_CANDS 5
74#define SAO_PADDING_SIZE 1
76#define ALF_PADDING_SIZE 8
77#define ALF_BLOCK_SIZE 4
79#define ALF_BORDER_LUMA 3
80#define ALF_BORDER_CHROMA 2
82#define ALF_VB_POS_ABOVE_LUMA 4
83#define ALF_VB_POS_ABOVE_CHROMA 2
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)
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)
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)])
364#define VVC_CONTEXTS 378
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)
static void bit_depth(AudioStatsContext *s, const uint64_t *const mask, uint8_t *depth)
static int parse(AVCodecParserContext *s, AVCodecContext *avctx, const uint8_t **poutbuf, int *poutbuf_size, const uint8_t *buf, int buf_size)
Context Adaptive Binary Arithmetic Coder.
#define ALF_MAX_FILTER_SIZE
#define AFFINE_MIN_BLOCK_SIZE
#define ALF_GRADIENT_SIZE
void ff_vvc_ctu_free_cus(CodingUnit **cus)
#define MAX_NUM_HMVP_CANDS
#define MAX_CONTROL_POINTS
void ff_vvc_decode_neighbour(VVCLocalContext *lc, int x_ctb, int y_ctb, int rx, int ry, int rs)
void ff_vvc_ep_init_stat_coeff(EntryPoint *ep, int bit_depth, int persistent_rice_adaptation_enabled_flag)
void ff_vvc_channel_range(int *start, int *end, VVCTreeType tree_type, uint8_t chroma_format_idc)
#define EDGE_EMU_BUFFER_STRIDE
int ff_vvc_get_qPy(const VVCFrameContext *fc, int xc, int yc)
void ff_vvc_set_neighbour_available(VVCLocalContext *lc, int x0, int y0, int w, int h)
int ff_vvc_coding_tree_unit(VVCLocalContext *lc, int ctu_idx, int rs, int rx, int ry)
parse a CTU
static const uint16_t fc[]
static const int8_t mv[256][2]
@ VVC_MAX_NUM_PALETTE_PREDICTOR_SIZE
#define DECLARE_ALIGNED(n, t, v)
Declare a variable that is aligned in memory.
uint8_t ctb_flag[3]
alf_ctb_flag[]
uint8_t alf_ctb_filter_alt_idx[2]
alf_ctb_filter_alt_idx[]
uint8_t ctb_filt_set_idx_y
AlfCtbFiltSetIdxY.
uint8_t ctb_cc_idc[2]
alf_ctb_cc_cb_idc, alf_ctb_cc_cr_idc
int max_y[2][VVC_MAX_REF_ENTRIES]
int apply_lfnst_flag[VVC_MAX_SAMPLE_ARRAYS]
ApplyLfnstFlag[].
TransformUnit * head
RefStruct reference.
enum PredMode pred_mode
PredMode.
Palette plt[VVC_MAX_SAMPLE_ARRAYS]
int mip_chroma_direct_flag
MipChromaDirectFlag.
int bdpcm_flag[VVC_MAX_SAMPLE_ARRAYS]
BdpcmFlag.
uint8_t sbt_horizontal_flag
enum IspType isp_split_type
IntraSubPartitionsSplitType.
struct CodingUnit * next
RefStruct reference.
uint8_t skip_flag
cu_skip_flag;
IntraPredMode intra_pred_mode_y
IntraPredModeY.
uint8_t intra_luma_ref_idx
IntraLumaRefLineIdx[][].
IntraPredMode intra_pred_mode_c
IntraPredModeC.
int num_intra_subpartitions
TransformUnit * tail
RefStruct reference.
struct CodingUnit::@377377256006074143206227277326325371142325360110 tus
uint8_t intra_mip_flag
intra_mip_flag
int8_t qp[4]
QpY, Qp′Cb, Qp′Cr, Qp′CbCr.
MvField hmvp[MAX_NUM_HMVP_CANDS]
HmvpCandList.
int num_hmvp_ibc
NumHmvpIbcCand.
MvField hmvp_ibc[MAX_NUM_HMVP_CANDS]
HmvpIbcCandList.
int stat_coeff[VVC_MAX_SAMPLE_ARRAYS]
StatCoeff.
VVCCabacState cabac_state[VVC_CONTEXTS]
Palette pp[VVC_MAX_SAMPLE_ARRAYS]
Mv mv[2][MAX_CONTROL_POINTS]
uint8_t hpel_if_idx
hpelIfIdx
int8_t ref_idx[2]
refIdxL0, refIdxL1
MotionModelIdc motion_model_idc
MotionModelIdc.
uint8_t hpel_if_idx
hpelIfIdx
int8_t ref_idx[2]
refIdxL0, refIdxL1
uint8_t ciip_flag
ciip_flag
int16_t x
horizontal component of motion vector
int16_t y
vertical component of motion vector
uint16_t entries[VVC_MAX_NUM_PALETTE_PREDICTOR_SIZE]
uint8_t inter_affine_flag
int16_t diff_mv_y[2][AFFINE_MIN_BLOCK_SIZE *AFFINE_MIN_BLOCK_SIZE]
diffMvLX
uint8_t merge_subblock_flag
uint8_t general_merge_flag
uint8_t gpm_partition_idx
int16_t diff_mv_x[2][AFFINE_MIN_BLOCK_SIZE *AFFINE_MIN_BLOCK_SIZE]
diffMvLX
int offset_sign[3][4]
sao_offset_sign
int16_t offset_val[3][5]
SaoOffsetVal.
uint8_t band_position[3]
sao_band_position
int eo_class[3]
sao_eo_class
int offset_abs[3][4]
sao_offset_abs
uint8_t type_idx[3]
sao_type_idx
struct VVCLocalContext::@341344066320375062105147172263124117020342060326::@055222342063040312177217323172174124065003301256 alf
only accessed in ff_vvc_alf_filter() during the alf processing stage
int cu_qg_top_left_y
CuQgTopLeftY.
struct VVCLocalContext::@341344066320375062105147172263124117020342060326::@103125161133210147111054051001007356327371002074 sao
only accessed in ff_vvc_sao_filter() during the sao processing stage
int cu_qg_top_left_x
CuQgTopLeftX.
uint8_t buffer_luma[(MAX_CTU_SIZE+2 *ALF_PADDING_SIZE) *EDGE_EMU_BUFFER_STRIDE *2]
uint8_t ciip_tmp[MAX_PB_SIZE *MAX_PB_SIZE *2]
uint8_t is_cu_qp_delta_coded
IsCuQpDeltaCoded.
int lfnst_zero_out_sig_coeff_flag
LfnstZeroOutSigCoeffFlag.
int32_t gradient_tmp[ALF_GRADIENT_SIZE *ALF_GRADIENT_SIZE *ALF_NUM_DIR]
int mts_dc_only
MtsDcOnly.
int infer_tu_cbf_luma
InferTuCbfLuma.
int prev_tu_cbf_y
prevTuCbfY;
struct VVCLocalContext::@341344066320375062105147172263124117020342060326::@073072245072044000206134265330343062236310026066 pred
only accessed in ff_vvc_predict_inter() and ff_vvc_predict_ciip() during the inter and reconstruction...
int16_t clip_tmp[ALF_MAX_FILTER_SIZE]
uint8_t edge_emu_buffer[EDGE_EMU_BUFFER_STRIDE *EDGE_EMU_BUFFER_STRIDE *2]
uint8_t ctb_up_right_flag
struct VVCLocalContext::@021361013100205372061325107241166327104062156055 lmcs
int sbt_num_fourths_tb0
SbtNumFourthsTb0.
int16_t tmp1[MAX_PB_SIZE *MAX_PB_SIZE]
uint8_t buffer_chroma[(MAX_CTU_SIZE+2 *ALF_PADDING_SIZE) *EDGE_EMU_BUFFER_STRIDE *2]
uint8_t buffer[(MAX_CTU_SIZE+2 *SAO_PADDING_SIZE) *EDGE_EMU_BUFFER_STRIDE *2]
int16_t coeff_tmp[ALF_MAX_FILTER_SIZE]
ReconstructedArea ras[2][MAX_PARTS_IN_CTU]
int chroma_qp_offset[3]
CuQpOffsetCb, CuQpOffsetCr, CuQpOffsetCbCr.
int16_t prof_tmp[MAX_PB_SIZE *MAX_PB_SIZE]
int mts_zero_out_sig_coeff_flag
MtsZeroOutSigCoeffFlag;.
int is_cu_chroma_qp_offset_coded
IsCuChromaQpOffsetCoded.
int16_t tmp[MAX_PB_SIZE *MAX_PB_SIZE]
int lfnst_dc_only
LfnstDcOnly.