2023-12-05 14:45:09 +00:00
|
|
|
/*
|
|
|
|
* VVC CABAC decoder
|
|
|
|
*
|
|
|
|
* Copyright (C) 2022 Nuo Mi
|
|
|
|
*
|
|
|
|
* This file is part of FFmpeg.
|
|
|
|
*
|
|
|
|
* FFmpeg is free software; you can redistribute it and/or
|
|
|
|
* modify it under the terms of the GNU Lesser General Public
|
|
|
|
* License as published by the Free Software Foundation; either
|
|
|
|
* version 2.1 of the License, or (at your option) any later version.
|
|
|
|
*
|
|
|
|
* FFmpeg is distributed in the hope that it will be useful,
|
|
|
|
* but WITHOUT ANY WARRANTY; without even the implied warranty of
|
|
|
|
* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
|
|
|
|
* Lesser General Public License for more details.
|
|
|
|
*
|
|
|
|
* You should have received a copy of the GNU Lesser General Public
|
|
|
|
* License along with FFmpeg; if not, write to the Free Software
|
|
|
|
* Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA
|
|
|
|
*/
|
|
|
|
|
2024-04-04 02:14:58 +00:00
|
|
|
#ifndef AVCODEC_VVC_CABAC_H
|
|
|
|
#define AVCODEC_VVC_CABAC_H
|
2023-12-05 14:45:09 +00:00
|
|
|
|
2024-04-04 02:14:58 +00:00
|
|
|
#include "ctu.h"
|
2023-12-05 14:45:09 +00:00
|
|
|
|
|
|
|
int ff_vvc_cabac_init(VVCLocalContext *lc, int ctu_idx, int rx, int ry);
|
|
|
|
|
|
|
|
//sao
|
|
|
|
int ff_vvc_sao_merge_flag_decode(VVCLocalContext *lc);
|
|
|
|
int ff_vvc_sao_type_idx_decode(VVCLocalContext *lc);
|
|
|
|
int ff_vvc_sao_band_position_decode(VVCLocalContext *lc);
|
|
|
|
int ff_vvc_sao_offset_abs_decode(VVCLocalContext *lc);
|
|
|
|
int ff_vvc_sao_offset_sign_decode(VVCLocalContext *lc);
|
|
|
|
int ff_vvc_sao_eo_class_decode(VVCLocalContext *lc);
|
|
|
|
|
|
|
|
//alf
|
|
|
|
int ff_vvc_alf_ctb_flag(VVCLocalContext *lc, int rx, int ry, int c_idx);
|
|
|
|
int ff_vvc_alf_use_aps_flag(VVCLocalContext *lc);
|
|
|
|
int ff_vvc_alf_luma_prev_filter_idx(VVCLocalContext *lc);
|
|
|
|
int ff_vvc_alf_luma_fixed_filter_idx(VVCLocalContext *lc);
|
|
|
|
int ff_vvc_alf_ctb_filter_alt_idx(VVCLocalContext *lc, int c_idx, int num_chroma_filters);
|
|
|
|
int ff_vvc_alf_ctb_cc_idc(VVCLocalContext *lc, int rx, int ry, int idx, int cc_filters_signalled);
|
|
|
|
|
|
|
|
//coding_tree
|
|
|
|
int ff_vvc_split_cu_flag(VVCLocalContext* lc, int x0, int y0, int cb_width, int cb_height,
|
|
|
|
int ch_type, const VVCAllowedSplit *a);
|
|
|
|
VVCSplitMode ff_vvc_split_mode(VVCLocalContext *lc, int x0, int y0, int cb_width, int cb_height,
|
|
|
|
int cqt_depth, int mtt_depth, int ch_type, const VVCAllowedSplit *a);
|
|
|
|
int ff_vvc_non_inter_flag(VVCLocalContext *lc, int x0, int y0, int ch_type);
|
|
|
|
|
|
|
|
//coding unit
|
|
|
|
int ff_vvc_pred_mode_flag(VVCLocalContext *lc, int is_chroma);
|
|
|
|
int ff_vvc_pred_mode_plt_flag(VVCLocalContext *lc);
|
|
|
|
int ff_vvc_intra_bdpcm_luma_flag(VVCLocalContext *lc);
|
|
|
|
int ff_vvc_intra_bdpcm_luma_dir_flag(VVCLocalContext *lc);
|
|
|
|
int ff_vvc_intra_bdpcm_chroma_flag(VVCLocalContext *lc);
|
|
|
|
int ff_vvc_intra_bdpcm_chroma_dir_flag(VVCLocalContext *lc);
|
|
|
|
int ff_vvc_cu_skip_flag(VVCLocalContext *lc, const uint8_t *cu_skip_flag);
|
|
|
|
int ff_vvc_pred_mode_ibc_flag(VVCLocalContext *lc, int ch_type);
|
|
|
|
int ff_vvc_cu_coded_flag(VVCLocalContext *lc);
|
|
|
|
int ff_vvc_cu_qp_delta_abs(VVCLocalContext *lc);
|
|
|
|
int ff_vvc_cu_qp_delta_sign_flag(VVCLocalContext *lc);
|
|
|
|
int ff_vvc_sbt_flag(VVCLocalContext *lc);
|
|
|
|
int ff_vvc_sbt_quad_flag(VVCLocalContext *lc);
|
|
|
|
int ff_vvc_sbt_horizontal_flag(VVCLocalContext *lc);
|
|
|
|
int ff_vvc_sbt_pos_flag(VVCLocalContext *lc);
|
|
|
|
|
|
|
|
//intra
|
|
|
|
int ff_vvc_intra_mip_flag(VVCLocalContext *lc, const uint8_t *intra_mip_flag);
|
|
|
|
int ff_vvc_intra_mip_transposed_flag(VVCLocalContext *lc);
|
|
|
|
int ff_vvc_intra_mip_mode(VVCLocalContext *lc);
|
|
|
|
int ff_vvc_intra_luma_ref_idx(VVCLocalContext *lc);
|
|
|
|
int ff_vvc_intra_subpartitions_mode_flag(VVCLocalContext *lc);
|
|
|
|
enum IspType ff_vvc_isp_split_type(VVCLocalContext *lc, int intra_subpartitions_mode_flag);
|
|
|
|
int ff_vvc_intra_luma_mpm_flag(VVCLocalContext *lc);
|
|
|
|
int ff_vvc_intra_luma_not_planar_flag(VVCLocalContext *lc, int intra_subpartitions_mode_flag);
|
|
|
|
int ff_vvc_intra_luma_mpm_idx(VVCLocalContext *lc);
|
|
|
|
int ff_vvc_intra_luma_mpm_remainder(VVCLocalContext *lc);
|
|
|
|
int ff_vvc_cclm_mode_flag(VVCLocalContext *lc);
|
|
|
|
int ff_vvc_cclm_mode_idx(VVCLocalContext *lc);
|
|
|
|
int ff_vvc_intra_chroma_pred_mode(VVCLocalContext *lc);
|
|
|
|
|
|
|
|
//inter
|
|
|
|
int ff_vvc_general_merge_flag(VVCLocalContext *lc);
|
|
|
|
int ff_vvc_merge_subblock_flag(VVCLocalContext *lc);
|
|
|
|
int ff_vvc_merge_subblock_idx(VVCLocalContext *lc, int max_num_subblock_merge_cand);
|
|
|
|
int ff_vvc_regular_merge_flag(VVCLocalContext *lc, int cu_skip_flag);
|
|
|
|
int ff_vvc_merge_idx(VVCLocalContext *lc);
|
|
|
|
int ff_vvc_mmvd_merge_flag(VVCLocalContext *lc);
|
|
|
|
int ff_vvc_mmvd_cand_flag(VVCLocalContext *lc);
|
|
|
|
void ff_vvc_mmvd_offset_coding(VVCLocalContext *lc, Mv *mvd_offset, int ph_mmvd_fullpel_only_flag);
|
|
|
|
int ff_vvc_ciip_flag(VVCLocalContext *lc);
|
|
|
|
int ff_vvc_merge_gpm_partition_idx(VVCLocalContext *lc);
|
|
|
|
int ff_vvc_merge_gpm_idx(VVCLocalContext *lc, int idx);
|
|
|
|
PredFlag ff_vvc_pred_flag(VVCLocalContext *lc, int is_b);
|
|
|
|
int ff_vvc_inter_affine_flag(VVCLocalContext *lc);
|
|
|
|
int ff_vvc_cu_affine_type_flag(VVCLocalContext *lc);
|
|
|
|
int ff_vvc_sym_mvd_flag(VVCLocalContext *lc);
|
|
|
|
int ff_vvc_ref_idx_lx(VVCLocalContext *lc, uint8_t nb_refs);
|
|
|
|
int ff_vvc_abs_mvd_greater0_flag(VVCLocalContext *lc);
|
|
|
|
int ff_vvc_abs_mvd_greater1_flag(VVCLocalContext *lc);
|
|
|
|
int ff_vvc_abs_mvd_minus2(VVCLocalContext *lc);
|
|
|
|
int ff_vvc_mvd_sign_flag(VVCLocalContext *lc);
|
|
|
|
int ff_vvc_mvp_lx_flag(VVCLocalContext *lc);
|
|
|
|
int ff_vvc_amvr_shift(VVCLocalContext *lc, int inter_affine_flag, PredMode pred_mode, int has_amvr_flag);
|
|
|
|
int ff_vvc_bcw_idx(VVCLocalContext *lc, int no_backward_pred_flag);
|
|
|
|
|
|
|
|
//transform
|
|
|
|
int ff_vvc_tu_cb_coded_flag(VVCLocalContext *lc);
|
|
|
|
int ff_vvc_tu_cr_coded_flag(VVCLocalContext *lc, int tu_cb_coded_flag);
|
|
|
|
int ff_vvc_tu_y_coded_flag(VVCLocalContext *lc);
|
|
|
|
int ff_vvc_cu_chroma_qp_offset_flag(VVCLocalContext *lc);
|
|
|
|
int ff_vvc_cu_chroma_qp_offset_idx(VVCLocalContext *lc);
|
|
|
|
int ff_vvc_tu_joint_cbcr_residual_flag(VVCLocalContext *lc, int tu_cb_coded_flag, int tu_cr_coded_flag);
|
|
|
|
int ff_vvc_transform_skip_flag(VVCLocalContext *lc, int ctx);
|
|
|
|
int ff_vvc_residual_coding(VVCLocalContext *lc, TransformBlock *tb);
|
|
|
|
int ff_vvc_lfnst_idx(VVCLocalContext *lc, int inc);
|
|
|
|
int ff_vvc_mts_idx(VVCLocalContext *lc);
|
|
|
|
|
|
|
|
int ff_vvc_end_of_slice_flag_decode(VVCLocalContext *lc);
|
|
|
|
int ff_vvc_end_of_tile_one_bit(VVCLocalContext *lc);
|
|
|
|
int ff_vvc_end_of_subset_one_bit(VVCLocalContext *lc);
|
|
|
|
|
2024-04-04 02:14:58 +00:00
|
|
|
#endif //AVCODEC_VVC_CABAC_H
|