From 03246c031e427d290dc28bed2b81e48dd220ceff Mon Sep 17 00:00:00 2001 From: Joose Sainio Date: Wed, 18 May 2022 09:34:31 +0300 Subject: [PATCH] [cabac] Fix trskip writing --- src/encode_coding_tree.c | 20 ++++++++++---------- src/search.c | 2 +- src/transform.c | 2 -- 3 files changed, 11 insertions(+), 13 deletions(-) diff --git a/src/encode_coding_tree.c b/src/encode_coding_tree.c index c1267b9c..5eeda59a 100644 --- a/src/encode_coding_tree.c +++ b/src/encode_coding_tree.c @@ -345,8 +345,7 @@ void uvg_encode_ts_residual(encoder_state_t* const state, { //===== encode sign's ===== int sign = curr_coeff < 0; - CABAC_BIN(cabac, sign, "coeff_sign_flag"); - CABAC_FBITS_UPDATE(cabac, &cabac->ctx.transform_skip_sig[ + CABAC_FBITS_UPDATE(cabac, &cabac->ctx.transform_skip_res_sign[ uvg_sign_ctx_id_abs_ts(coeff, pos_x, pos_y, width, 0) ], sign, bits, "coeff_sign_flag"); maxCtxBins--; @@ -360,15 +359,15 @@ void uvg_encode_ts_residual(encoder_state_t* const state, remAbsLevel = modAbsCoeff - 1; unsigned gt1 = !!remAbsLevel; - CABAC_FBITS_UPDATE(cabac, &cabac->ctx.transform_skip_sig[ + CABAC_FBITS_UPDATE(cabac, &cabac->ctx.transform_skip_gt1[ uvg_lrg1_ctx_id_abs_ts(coeff, pos_x, pos_y, width, 0) - ], remAbsLevel & 1, bits, "abs_level_gtx_flag"); + ], gt1, bits, "abs_level_gtx_flag"); maxCtxBins--; if (gt1) { remAbsLevel -= 1; - CABAC_FBITS_UPDATE(cabac, &cabac->ctx.transform_skip_par, gt1, bits, "par_level_flag"); + CABAC_FBITS_UPDATE(cabac, &cabac->ctx.transform_skip_par, remAbsLevel & 1, bits, "par_level_flag"); maxCtxBins--; } } @@ -393,11 +392,7 @@ void uvg_encode_ts_residual(encoder_state_t* const state, if (absLevel >= cutoffVal) { unsigned gt2 = (absLevel >= (cutoffVal + 2)); - cabac->cur_ctx = &cabac->ctx.transform_skip_gt2[cutoffVal >> 1]; - CABAC_BIN(cabac, gt2, "abs_level_gtx_flag"); - CABAC_FBITS_UPDATE(cabac, &cabac->ctx.transform_skip_sig[ - kvz_lrg1_ctx_id_abs_ts(coeff, pos_x, pos_y, width, 0) - ], gt2, bits, "abs_level_gtx_flag"); + CABAC_FBITS_UPDATE(cabac, &cabac->ctx.transform_skip_gt2[cutoffVal >> 1], gt2, bits, "abs_level_gtx_flag"); maxCtxBins--; } cutoffVal += 2; @@ -1394,6 +1389,11 @@ bool uvg_write_split_flag(const encoder_state_t * const state, cabac_data_t* cab split_model += 3 * (split_num >> 1); cabac->cur_ctx = &(cabac->ctx.split_flag_model[split_model]); + if(cabac->only_count && !split_flag) { + + //printf("%hu %hu %d %d %d\n", state->search_cabac.ctx.split_flag_model[split_model].state[0], state->search_cabac.ctx.split_flag_model[split_model].state[1], + // split_model, x, y); + } CABAC_FBITS_UPDATE(cabac, &(cabac->ctx.split_flag_model[split_model]), split_flag, bits, "split_flag"); } diff --git a/src/search.c b/src/search.c index 980b530a..21587537 100644 --- a/src/search.c +++ b/src/search.c @@ -338,7 +338,7 @@ double uvg_cu_rd_cost_luma(const encoder_state_t *const state, } if (is_set && state->encoder_control->cfg.trskip_enable && width <= (1 << state->encoder_control->cfg.trskip_max_size)) { - CABAC_FBITS_UPDATE(cabac, &cabac->ctx.transform_skip_model_luma, tr_cu->tr_idx == MTS_SKIP, tr_tree_bits, "transform_skip_flag"); + CABAC_FBITS_UPDATE(cabac, &cabac->ctx.transform_skip_model_luma, pred_cu->tr_idx == MTS_SKIP, tr_tree_bits, "transform_skip_flag"); } // SSD between reconstruction and original diff --git a/src/transform.c b/src/transform.c index 3281d2c1..affb24a8 100644 --- a/src/transform.c +++ b/src/transform.c @@ -556,8 +556,6 @@ int uvg_quantize_residual_trskip( state, cur_cu, width, color, scan_order, 1, in_stride, width, ref_in, pred_in, skip.rec, skip.coeff, false, lmcs_chroma_adj); - skip.cost = uvg_pixels_calc_ssd(ref_in, skip.rec, in_stride, width, width); - skip.cost += uvg_get_coeff_cost(state, skip.coeff, NULL, width, 0, scan_order, 1) * state->frame->lambda; /* if (noskip.cost <= skip.cost) { *trskip_out = 0;