273 lines · c
1/* SPDX-License-Identifier: GPL-2.0-only */2 3#ifndef _ROCKCHIP_AV1_ENTROPYMODE_H_4#define _ROCKCHIP_AV1_ENTROPYMODE_H_5 6#include <linux/types.h>7 8struct hantro_ctx;9 10#define AV1_INTER_MODE_CONTEXTS 1511#define AV1_INTRA_MODES 1312#define AV1_REF_CONTEXTS 313#define AV1_SWITCHABLE_FILTERS 3 /* number of switchable filters */14#define AV1_TX_SIZE_CONTEXTS 315#define BLOCK_SIZE_GROUPS 416#define BR_CDF_SIZE 417#define BWD_REFS 318#define CFL_ALLOWED_TYPES 219#define CFL_ALPHA_CONTEXTS 620#define CFL_ALPHABET_SIZE 1621#define CFL_JOINT_SIGNS 822#define CDF_SIZE(x) ((x) - 1)23#define COMP_GROUP_IDX_CONTEXTS 724#define COMP_INDEX_CONTEXTS 625#define COMP_INTER_CONTEXTS 526#define COMP_REF_TYPE_CONTEXTS 527#define COMPOUND_TYPES 328#define DC_SIGN_CONTEXTS 329#define DELTA_LF_PROBS 330#define DELTA_Q_PROBS 331#define DIRECTIONAL_MODES 832#define DRL_MODE_CONTEXTS 333#define EOB_COEF_CONTEXTS 934#define EXT_TX_SIZES 335#define EXT_TX_TYPES 1636#define EXTTX_SIZES 437#define FRAME_LF_COUNT 438#define FWD_REFS 439#define GLOBALMV_MODE_CONTEXTS 240#define ICDF(x) (32768U - (x))41#define INTER_COMPOUND_MODES 842#define INTERINTRA_MODES 443#define INTRA_INTER_CONTEXTS 444#define KF_MODE_CONTEXTS 545#define LEVEL_CONTEXTS 2146#define MAX_ANGLE_DELTA 347#define MAX_MB_SEGMENTS 848#define MAX_SEGMENTS 849#define MAX_TX_CATS 450#define MAX_TX_DEPTH 251#define MBSKIP_CONTEXTS 352#define MOTION_MODES 353#define MOTION_MODE_CONTEXTS 1054#define NEWMV_MODE_CONTEXTS 655#define NUM_BASE_LEVELS 256#define NUM_REF_FRAMES 857#define PALETTE_BLOCK_SIZES 758#define PALETTE_IDX_CONTEXTS 1859#define PALETTE_SIZES 760#define PALETTE_UV_MODE_CONTEXTS 261#define PALETTE_Y_MODE_CONTEXTS 362#define PARTITION_PLOFFSET 463#define NUM_PARTITION_CONTEXTS (4 * PARTITION_PLOFFSET)64#define PLANE_TYPES 265#define PREDICTION_PROBS 366#define REF_CONTEXTS 567#define REFMV_MODE_CONTEXTS 968#define SEG_TEMPORAL_PRED_CTXS 369#define SIG_COEF_CONTEXTS 4270#define SIG_COEF_CONTEXTS_EOB 471#define SINGLE_REFS 772#define SKIP_CONTEXTS 373#define SKIP_MODE_CONTEXTS 374#define SPATIAL_PREDICTION_PROBS 375#define SWITCHABLE_FILTER_CONTEXTS ((AV1_SWITCHABLE_FILTERS + 1) * 4)76#define TOKEN_CDF_Q_CTXS 477#define TX_SIZES 578#define TX_SIZE_CONTEXTS 279#define TX_TYPES 480#define TXB_SKIP_CONTEXTS 1381#define TXFM_PARTITION_CONTEXTS 2282#define UNI_COMP_REF_CONTEXTS 383#define UNIDIR_COMP_REFS 484#define UV_INTRA_MODES 1485#define VARTX_PART_CONTEXTS 2286#define ZEROMV_MODE_CONTEXTS 287 88enum blocksizetype {89 BLOCK_SIZE_AB4X4,90 BLOCK_SIZE_SB4X8,91 BLOCK_SIZE_SB8X4,92 BLOCK_SIZE_SB8X8,93 BLOCK_SIZE_SB8X16,94 BLOCK_SIZE_SB16X8,95 BLOCK_SIZE_MB16X16,96 BLOCK_SIZE_SB16X32,97 BLOCK_SIZE_SB32X16,98 BLOCK_SIZE_SB32X32,99 BLOCK_SIZE_SB32X64,100 BLOCK_SIZE_SB64X32,101 BLOCK_SIZE_SB64X64,102 BLOCK_SIZE_SB64X128,103 BLOCK_SIZE_SB128X64,104 BLOCK_SIZE_SB128X128,105 BLOCK_SIZE_SB4X16,106 BLOCK_SIZE_SB16X4,107 BLOCK_SIZE_SB8X32,108 BLOCK_SIZE_SB32X8,109 BLOCK_SIZE_SB16X64,110 BLOCK_SIZE_SB64X16,111 BLOCK_SIZE_TYPES,112 BLOCK_SIZES_ALL = BLOCK_SIZE_TYPES113};114 115enum filterintramodetype {116 FILTER_DC_PRED,117 FILTER_V_PRED,118 FILTER_H_PRED,119 FILTER_D153_PRED,120 FILTER_PAETH_PRED,121 FILTER_INTRA_MODES,122 FILTER_INTRA_UNUSED = 7123};124 125enum frametype {126 KEY_FRAME = 0,127 INTER_FRAME = 1,128 NUM_FRAME_TYPES,129};130 131enum txsize {132 TX_4X4 = 0,133 TX_8X8 = 1,134 TX_16X16 = 2,135 TX_32X32 = 3,136 TX_SIZE_MAX_SB,137};138 139enum { SIMPLE_TRANSLATION, OBMC_CAUSAL, MOTION_MODE_COUNT };140 141enum mb_prediction_mode {142 DC_PRED, /* average of above and left pixels */143 V_PRED, /* vertical prediction */144 H_PRED, /* horizontal prediction */145 D45_PRED, /* Directional 45 deg prediction [anti-clockwise from 0 deg hor] */146 D135_PRED, /* Directional 135 deg prediction [anti-clockwise from 0 deg hor] */147 D117_PRED, /* Directional 112 deg prediction [anti-clockwise from 0 deg hor] */148 D153_PRED, /* Directional 157 deg prediction [anti-clockwise from 0 deg hor] */149 D27_PRED, /* Directional 22 deg prediction [anti-clockwise from 0 deg hor] */150 D63_PRED, /* Directional 67 deg prediction [anti-clockwise from 0 deg hor] */151 SMOOTH_PRED,152 TM_PRED_AV1 = SMOOTH_PRED,153 SMOOTH_V_PRED, // Vertical interpolation154 SMOOTH_H_PRED, // Horizontal interpolation155 TM_PRED, /* Truemotion prediction */156 PAETH_PRED = TM_PRED,157 NEARESTMV,158 NEARMV,159 ZEROMV,160 NEWMV,161 NEAREST_NEARESTMV,162 NEAR_NEARMV,163 NEAREST_NEWMV,164 NEW_NEARESTMV,165 NEAR_NEWMV,166 NEW_NEARMV,167 ZERO_ZEROMV,168 NEW_NEWMV,169 SPLITMV,170 MB_MODE_COUNT171};172 173enum partitiontype {174 PARTITION_NONE,175 PARTITION_HORZ,176 PARTITION_VERT,177 PARTITION_SPLIT,178 PARTITION_TYPES179};180 181struct mvcdfs {182 u16 joint_cdf[3];183 u16 sign_cdf[2];184 u16 clsss_cdf[2][10];185 u16 clsss0_fp_cdf[2][2][3];186 u16 fp_cdf[2][3];187 u16 class0_hp_cdf[2];188 u16 hp_cdf[2];189 u16 class0_cdf[2];190 u16 bits_cdf[2][10];191};192 193struct av1cdfs {194 u16 partition_cdf[13][16];195 u16 kf_ymode_cdf[KF_MODE_CONTEXTS][KF_MODE_CONTEXTS][AV1_INTRA_MODES - 1];196 u16 segment_pred_cdf[PREDICTION_PROBS];197 u16 spatial_pred_seg_tree_cdf[SPATIAL_PREDICTION_PROBS][MAX_MB_SEGMENTS - 1];198 u16 mbskip_cdf[MBSKIP_CONTEXTS];199 u16 delta_q_cdf[DELTA_Q_PROBS];200 u16 delta_lf_multi_cdf[FRAME_LF_COUNT][DELTA_LF_PROBS];201 u16 delta_lf_cdf[DELTA_LF_PROBS];202 u16 skip_mode_cdf[SKIP_MODE_CONTEXTS];203 u16 vartx_part_cdf[VARTX_PART_CONTEXTS][1];204 u16 tx_size_cdf[MAX_TX_CATS][AV1_TX_SIZE_CONTEXTS][MAX_TX_DEPTH];205 u16 if_ymode_cdf[BLOCK_SIZE_GROUPS][AV1_INTRA_MODES - 1];206 u16 uv_mode_cdf[2][AV1_INTRA_MODES][AV1_INTRA_MODES - 1 + 1];207 u16 intra_inter_cdf[INTRA_INTER_CONTEXTS];208 u16 comp_inter_cdf[COMP_INTER_CONTEXTS];209 u16 single_ref_cdf[AV1_REF_CONTEXTS][SINGLE_REFS - 1];210 u16 comp_ref_type_cdf[COMP_REF_TYPE_CONTEXTS][1];211 u16 uni_comp_ref_cdf[UNI_COMP_REF_CONTEXTS][UNIDIR_COMP_REFS - 1][1];212 u16 comp_ref_cdf[AV1_REF_CONTEXTS][FWD_REFS - 1];213 u16 comp_bwdref_cdf[AV1_REF_CONTEXTS][BWD_REFS - 1];214 u16 newmv_cdf[NEWMV_MODE_CONTEXTS];215 u16 zeromv_cdf[ZEROMV_MODE_CONTEXTS];216 u16 refmv_cdf[REFMV_MODE_CONTEXTS];217 u16 drl_cdf[DRL_MODE_CONTEXTS];218 u16 interp_filter_cdf[SWITCHABLE_FILTER_CONTEXTS][AV1_SWITCHABLE_FILTERS - 1];219 struct mvcdfs mv_cdf;220 u16 obmc_cdf[BLOCK_SIZE_TYPES];221 u16 motion_mode_cdf[BLOCK_SIZE_TYPES][2];222 u16 inter_compound_mode_cdf[AV1_INTER_MODE_CONTEXTS][INTER_COMPOUND_MODES - 1];223 u16 compound_type_cdf[BLOCK_SIZE_TYPES][CDF_SIZE(COMPOUND_TYPES - 1)];224 u16 interintra_cdf[BLOCK_SIZE_GROUPS];225 u16 interintra_mode_cdf[BLOCK_SIZE_GROUPS][INTERINTRA_MODES - 1];226 u16 wedge_interintra_cdf[BLOCK_SIZE_TYPES];227 u16 wedge_idx_cdf[BLOCK_SIZE_TYPES][CDF_SIZE(16)];228 u16 palette_y_mode_cdf[PALETTE_BLOCK_SIZES][PALETTE_Y_MODE_CONTEXTS][1];229 u16 palette_uv_mode_cdf[PALETTE_UV_MODE_CONTEXTS][1];230 u16 palette_y_size_cdf[PALETTE_BLOCK_SIZES][PALETTE_SIZES - 1];231 u16 palette_uv_size_cdf[PALETTE_BLOCK_SIZES][PALETTE_SIZES - 1];232 u16 cfl_sign_cdf[CFL_JOINT_SIGNS - 1];233 u16 cfl_alpha_cdf[CFL_ALPHA_CONTEXTS][CFL_ALPHABET_SIZE - 1];234 u16 intrabc_cdf[1];235 u16 angle_delta_cdf[DIRECTIONAL_MODES][6];236 u16 filter_intra_mode_cdf[FILTER_INTRA_MODES - 1];237 u16 filter_intra_cdf[BLOCK_SIZES_ALL];238 u16 comp_group_idx_cdf[COMP_GROUP_IDX_CONTEXTS][CDF_SIZE(2)];239 u16 compound_idx_cdf[COMP_INDEX_CONTEXTS][CDF_SIZE(2)];240 u16 dummy0[14];241 // Palette index contexts; sizes 1/7, 2/6, 3/5 packed together242 u16 palette_y_color_index_cdf[PALETTE_IDX_CONTEXTS][8];243 u16 palette_uv_color_index_cdf[PALETTE_IDX_CONTEXTS][8];244 u16 tx_type_intra0_cdf[EXTTX_SIZES][AV1_INTRA_MODES][8];245 u16 tx_type_intra1_cdf[EXTTX_SIZES][AV1_INTRA_MODES][4];246 u16 tx_type_inter_cdf[2][EXTTX_SIZES][EXT_TX_TYPES];247 u16 txb_skip_cdf[TX_SIZES][TXB_SKIP_CONTEXTS][CDF_SIZE(2)];248 u16 eob_extra_cdf[TX_SIZES][PLANE_TYPES][EOB_COEF_CONTEXTS][CDF_SIZE(2)];249 u16 dummy1[5];250 u16 eob_flag_cdf16[PLANE_TYPES][2][4];251 u16 eob_flag_cdf32[PLANE_TYPES][2][8];252 u16 eob_flag_cdf64[PLANE_TYPES][2][8];253 u16 eob_flag_cdf128[PLANE_TYPES][2][8];254 u16 eob_flag_cdf256[PLANE_TYPES][2][8];255 u16 eob_flag_cdf512[PLANE_TYPES][2][16];256 u16 eob_flag_cdf1024[PLANE_TYPES][2][16];257 u16 coeff_base_eob_cdf[TX_SIZES][PLANE_TYPES][SIG_COEF_CONTEXTS_EOB][CDF_SIZE(3)];258 u16 coeff_base_cdf[TX_SIZES][PLANE_TYPES][SIG_COEF_CONTEXTS][CDF_SIZE(4) + 1];259 u16 dc_sign_cdf[PLANE_TYPES][DC_SIGN_CONTEXTS][CDF_SIZE(2)];260 u16 dummy2[2];261 u16 coeff_br_cdf[TX_SIZES][PLANE_TYPES][LEVEL_CONTEXTS][CDF_SIZE(BR_CDF_SIZE) + 1];262 u16 dummy3[16];263};264 265void rockchip_av1_store_cdfs(struct hantro_ctx *ctx,266 u32 refresh_frame_flags);267void rockchip_av1_get_cdfs(struct hantro_ctx *ctx, u32 ref_idx);268void rockchip_av1_set_default_cdfs(struct av1cdfs *cdfs,269 struct mvcdfs *cdfs_ndvc);270void rockchip_av1_default_coeff_probs(u32 base_qindex, void *ptr);271 272#endif /* _ROCKCHIP_AV1_ENTROPYMODE_H_ */273