1
0
mirror of https://github.com/FFmpeg/FFmpeg.git synced 2025-08-04 22:03:09 +02:00

avcodec/vvc/intra: add ff_vvc_palette_derive_scale

Signed-off-by: Wu Jianhua <toqsxw@outlook.com>
This commit is contained in:
Wu Jianhua
2025-05-14 21:40:16 +08:00
committed by Nuo Mi
parent 3ecf8f8766
commit fd85f83608
2 changed files with 33 additions and 20 deletions

View File

@ -336,29 +336,30 @@ static void derive_qp(const VVCLocalContext *lc, const TransformUnit *tu, Transf
tb->bd_offset = (1 << tb->bd_shift) >> 1; tb->bd_offset = (1 << tb->bd_shift) >> 1;
} }
static const uint8_t rem6[63 + 8 * 6 + 1] = {
0, 1, 2, 3, 4, 5, 0, 1, 2, 3, 4, 5, 0, 1, 2, 3, 4, 5, 0, 1, 2, 3, 4, 5,
0, 1, 2, 3, 4, 5, 0, 1, 2, 3, 4, 5, 0, 1, 2, 3, 4, 5, 0, 1, 2, 3, 4, 5,
0, 1, 2, 3, 4, 5, 0, 1, 2, 3, 4, 5, 0, 1, 2, 3, 4, 5, 0, 1, 2, 3, 4, 5,
0, 1, 2, 3, 4, 5, 0, 1, 2, 3, 4, 5, 0, 1, 2, 3, 4, 5, 0, 1, 2, 3, 4, 5,
0, 1, 2, 3, 4, 5, 0, 1, 2, 3, 4, 5, 0, 1, 2, 3,
};
static const uint8_t div6[63 + 8 * 6 + 1] = {
0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 1, 1, 2, 2, 2, 2, 2, 2, 3, 3, 3, 3, 3, 3,
4, 4, 4, 4, 4, 4, 5, 5, 5, 5, 5, 5, 6, 6, 6, 6, 6, 6, 7, 7, 7, 7, 7, 7,
8, 8, 8, 8, 8, 8, 9, 9, 9, 9, 9, 9, 10, 10, 10, 10, 10, 10, 11, 11, 11, 11, 11, 11,
12, 12, 12, 12, 12, 12, 13, 13, 13, 13, 13, 13, 14, 14, 14, 14, 14, 14, 15, 15, 15, 15, 15, 15,
16, 16, 16, 16, 16, 16, 17, 17, 17, 17, 17, 17, 18, 18, 18, 18,
};
const static int level_scale[2][6] = {
{ 40, 45, 51, 57, 64, 72 },
{ 57, 64, 72, 80, 90, 102 }
};
//8.7.3 Scaling process for transform coefficients //8.7.3 Scaling process for transform coefficients
static av_always_inline int derive_scale(const TransformBlock *tb, const int sh_dep_quant_used_flag) static av_always_inline int derive_scale(const TransformBlock *tb, const int sh_dep_quant_used_flag)
{ {
static const uint8_t rem6[63 + 8 * 6 + 1] = {
0, 1, 2, 3, 4, 5, 0, 1, 2, 3, 4, 5, 0, 1, 2, 3, 4, 5, 0, 1, 2, 3, 4, 5,
0, 1, 2, 3, 4, 5, 0, 1, 2, 3, 4, 5, 0, 1, 2, 3, 4, 5, 0, 1, 2, 3, 4, 5,
0, 1, 2, 3, 4, 5, 0, 1, 2, 3, 4, 5, 0, 1, 2, 3, 4, 5, 0, 1, 2, 3, 4, 5,
0, 1, 2, 3, 4, 5, 0, 1, 2, 3, 4, 5, 0, 1, 2, 3, 4, 5, 0, 1, 2, 3, 4, 5,
0, 1, 2, 3, 4, 5, 0, 1, 2, 3, 4, 5, 0, 1, 2, 3,
};
static const uint8_t div6[63 + 8 * 6 + 1] = {
0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 1, 1, 2, 2, 2, 2, 2, 2, 3, 3, 3, 3, 3, 3,
4, 4, 4, 4, 4, 4, 5, 5, 5, 5, 5, 5, 6, 6, 6, 6, 6, 6, 7, 7, 7, 7, 7, 7,
8, 8, 8, 8, 8, 8, 9, 9, 9, 9, 9, 9, 10, 10, 10, 10, 10, 10, 11, 11, 11, 11, 11, 11,
12, 12, 12, 12, 12, 12, 13, 13, 13, 13, 13, 13, 14, 14, 14, 14, 14, 14, 15, 15, 15, 15, 15, 15,
16, 16, 16, 16, 16, 16, 17, 17, 17, 17, 17, 17, 18, 18, 18, 18,
};
const static int level_scale[2][6] = {
{ 40, 45, 51, 57, 64, 72 },
{ 57, 64, 72, 80, 90, 102 }
};
const int addin = sh_dep_quant_used_flag && !tb->ts; const int addin = sh_dep_quant_used_flag && !tb->ts;
const int qp = tb->qp + addin; const int qp = tb->qp + addin;
@ -658,6 +659,17 @@ static void ibc_fill_vir_buf(const VVCLocalContext *lc, const CodingUnit *cu)
} }
} }
int ff_vvc_palette_derive_scale(VVCLocalContext *lc, const TransformUnit *tu, TransformBlock *tb)
{
const VVCSPS *sps = lc->fc->ps.sps;
const int qp_prime_ts_min = 4 + 6 * sps->r->sps_min_qp_prime_ts;
int qp;
derive_qp(lc, tu, tb);
qp = FFMAX(qp_prime_ts_min, tb->qp);
return level_scale[0][rem6[qp]] << div6[qp];
}
int ff_vvc_reconstruct(VVCLocalContext *lc, const int rs, const int rx, const int ry) int ff_vvc_reconstruct(VVCLocalContext *lc, const int rs, const int rx, const int ry)
{ {
const VVCFrameContext *fc = lc->fc; const VVCFrameContext *fc = lc->fc;

View File

@ -45,5 +45,6 @@ int ff_vvc_intra_pred_angle_derive(int pred_mode);
int ff_vvc_intra_inv_angle_derive(int pred_mode); int ff_vvc_intra_inv_angle_derive(int pred_mode);
int ff_vvc_wide_angle_mode_mapping(const CodingUnit *cu, int ff_vvc_wide_angle_mode_mapping(const CodingUnit *cu,
int tb_width, int tb_height, int c_idx, int pred_mode_intra); int tb_width, int tb_height, int c_idx, int pred_mode_intra);
int ff_vvc_palette_derive_scale(VVCLocalContext *lc, const TransformUnit *tu, TransformBlock *tb);
#endif // AVCODEC_VVC_INTRA_H #endif // AVCODEC_VVC_INTRA_H