FG8 combined test 1 (CT1): Test 1, Test 3, Test 4 and Test 11 Combined tests for FG8 context reduction activity: Tests 1,3,4 and 11 STATS_CHANGED
diff --git a/av1/common/token_cdfs.h b/av1/common/token_cdfs.h index bf30e3c..c4725c1 100644 --- a/av1/common/token_cdfs.h +++ b/av1/common/token_cdfs.h
@@ -1679,6 +1679,500 @@ #endif // CONFIG_ENTROPY_PARA #if CONFIG_ENTROPY_PARA +#if CONFIG_EOB_PT_CTX_REDUCTION +static const aom_cdf_prob + av1_default_eob_extra_cdfs[TOKEN_CDF_Q_CTXS][TX_SIZES][PLANE_TYPES] + [EOB_COEF_CONTEXTS][CDF_SIZE(2)] = { + { + { + { + { AOM_CDF2(16384), 0 }, + { AOM_CDF2(16384), 0 }, + { AOM_CDF2(16384), 0 }, + { AOM_CDF2(16384), 0 }, + { AOM_CDF2(16384), 0 }, + { AOM_CDF2(16384), 0 }, + { AOM_CDF2(16384), 0 }, + { AOM_CDF2(16384), 0 }, + { AOM_CDF2(16384), 0 }, + }, + { + { AOM_CDF2(16384), 0 }, + { AOM_CDF2(16384), 0 }, + { AOM_CDF2(16384), 0 }, + { AOM_CDF2(16384), 0 }, + { AOM_CDF2(16384), 0 }, + { AOM_CDF2(16384), 0 }, + { AOM_CDF2(16384), 0 }, + { AOM_CDF2(16384), 0 }, + { AOM_CDF2(16384), 0 }, + }, + }, + { + { + { AOM_CDF2(16384), 0 }, + { AOM_CDF2(16384), 0 }, + { AOM_CDF2(16384), 0 }, + { AOM_CDF2(16384), 0 }, + { AOM_CDF2(16384), 0 }, + { AOM_CDF2(16384), 0 }, + { AOM_CDF2(16384), 0 }, + { AOM_CDF2(16384), 0 }, + { AOM_CDF2(16384), 0 }, + }, + { + { AOM_CDF2(16384), 0 }, + { AOM_CDF2(16384), 0 }, + { AOM_CDF2(16384), 0 }, + { AOM_CDF2(16384), 0 }, + { AOM_CDF2(16384), 0 }, + { AOM_CDF2(16384), 0 }, + { AOM_CDF2(16384), 0 }, + { AOM_CDF2(16384), 0 }, + { AOM_CDF2(16384), 0 }, + }, + }, + { + { + { AOM_CDF2(16384), 0 }, + { AOM_CDF2(16384), 0 }, + { AOM_CDF2(16384), 0 }, + { AOM_CDF2(16384), 0 }, + { AOM_CDF2(16384), 0 }, + { AOM_CDF2(16384), 0 }, + { AOM_CDF2(16384), 0 }, + { AOM_CDF2(16384), 0 }, + { AOM_CDF2(16384), 0 }, + }, + { + { AOM_CDF2(16384), 0 }, + { AOM_CDF2(16384), 0 }, + { AOM_CDF2(16384), 0 }, + { AOM_CDF2(16384), 0 }, + { AOM_CDF2(16384), 0 }, + { AOM_CDF2(16384), 0 }, + { AOM_CDF2(16384), 0 }, + { AOM_CDF2(16384), 0 }, + { AOM_CDF2(16384), 0 }, + }, + }, + { + { + { AOM_CDF2(16384), 0 }, + { AOM_CDF2(16384), 0 }, + { AOM_CDF2(16384), 0 }, + { AOM_CDF2(16384), 0 }, + { AOM_CDF2(16384), 0 }, + { AOM_CDF2(16384), 0 }, + { AOM_CDF2(16384), 0 }, + { AOM_CDF2(16384), 0 }, + { AOM_CDF2(16384), 0 }, + }, + { + { AOM_CDF2(16384), 0 }, + { AOM_CDF2(16384), 0 }, + { AOM_CDF2(16384), 0 }, + { AOM_CDF2(16384), 0 }, + { AOM_CDF2(16384), 0 }, + { AOM_CDF2(16384), 0 }, + { AOM_CDF2(16384), 0 }, + { AOM_CDF2(16384), 0 }, + { AOM_CDF2(16384), 0 }, + }, + }, + { + { + { AOM_CDF2(16384), 0 }, + { AOM_CDF2(16384), 0 }, + { AOM_CDF2(16384), 0 }, + { AOM_CDF2(16384), 0 }, + { AOM_CDF2(16384), 0 }, + { AOM_CDF2(16384), 0 }, + { AOM_CDF2(16384), 0 }, + { AOM_CDF2(16384), 0 }, + { AOM_CDF2(16384), 0 }, + }, + { + { AOM_CDF2(16384), 0 }, + { AOM_CDF2(16384), 0 }, + { AOM_CDF2(16384), 0 }, + { AOM_CDF2(16384), 0 }, + { AOM_CDF2(16384), 0 }, + { AOM_CDF2(16384), 0 }, + { AOM_CDF2(16384), 0 }, + { AOM_CDF2(16384), 0 }, + { AOM_CDF2(16384), 0 }, + }, + }, + }, + { + { + { + { AOM_CDF2(16384), 0 }, + { AOM_CDF2(16384), 0 }, + { AOM_CDF2(16384), 0 }, + { AOM_CDF2(16384), 0 }, + { AOM_CDF2(16384), 0 }, + { AOM_CDF2(16384), 0 }, + { AOM_CDF2(16384), 0 }, + { AOM_CDF2(16384), 0 }, + { AOM_CDF2(16384), 0 }, + }, + { + { AOM_CDF2(16384), 0 }, + { AOM_CDF2(16384), 0 }, + { AOM_CDF2(16384), 0 }, + { AOM_CDF2(16384), 0 }, + { AOM_CDF2(16384), 0 }, + { AOM_CDF2(16384), 0 }, + { AOM_CDF2(16384), 0 }, + { AOM_CDF2(16384), 0 }, + { AOM_CDF2(16384), 0 }, + }, + }, + { + { + { AOM_CDF2(16384), 0 }, + { AOM_CDF2(16384), 0 }, + { AOM_CDF2(16384), 0 }, + { AOM_CDF2(16384), 0 }, + { AOM_CDF2(16384), 0 }, + { AOM_CDF2(16384), 0 }, + { AOM_CDF2(16384), 0 }, + { AOM_CDF2(16384), 0 }, + { AOM_CDF2(16384), 0 }, + }, + { + { AOM_CDF2(16384), 0 }, + { AOM_CDF2(16384), 0 }, + { AOM_CDF2(16384), 0 }, + { AOM_CDF2(16384), 0 }, + { AOM_CDF2(16384), 0 }, + { AOM_CDF2(16384), 0 }, + { AOM_CDF2(16384), 0 }, + { AOM_CDF2(16384), 0 }, + { AOM_CDF2(16384), 0 }, + }, + }, + { + { + { AOM_CDF2(16384), 0 }, + { AOM_CDF2(16384), 0 }, + { AOM_CDF2(16384), 0 }, + { AOM_CDF2(16384), 0 }, + { AOM_CDF2(16384), 0 }, + { AOM_CDF2(16384), 0 }, + { AOM_CDF2(16384), 0 }, + { AOM_CDF2(16384), 0 }, + { AOM_CDF2(16384), 0 }, + }, + { + { AOM_CDF2(16384), 0 }, + { AOM_CDF2(16384), 0 }, + { AOM_CDF2(16384), 0 }, + { AOM_CDF2(16384), 0 }, + { AOM_CDF2(16384), 0 }, + { AOM_CDF2(16384), 0 }, + { AOM_CDF2(16384), 0 }, + { AOM_CDF2(16384), 0 }, + { AOM_CDF2(16384), 0 }, + }, + }, + { + { + { AOM_CDF2(16384), 0 }, + { AOM_CDF2(16384), 0 }, + { AOM_CDF2(16384), 0 }, + { AOM_CDF2(16384), 0 }, + { AOM_CDF2(16384), 0 }, + { AOM_CDF2(16384), 0 }, + { AOM_CDF2(16384), 0 }, + { AOM_CDF2(16384), 0 }, + { AOM_CDF2(16384), 0 }, + }, + { + { AOM_CDF2(16384), 0 }, + { AOM_CDF2(16384), 0 }, + { AOM_CDF2(16384), 0 }, + { AOM_CDF2(16384), 0 }, + { AOM_CDF2(16384), 0 }, + { AOM_CDF2(16384), 0 }, + { AOM_CDF2(16384), 0 }, + { AOM_CDF2(16384), 0 }, + { AOM_CDF2(16384), 0 }, + }, + }, + { + { + { AOM_CDF2(16384), 0 }, + { AOM_CDF2(16384), 0 }, + { AOM_CDF2(16384), 0 }, + { AOM_CDF2(16384), 0 }, + { AOM_CDF2(16384), 0 }, + { AOM_CDF2(16384), 0 }, + { AOM_CDF2(16384), 0 }, + { AOM_CDF2(16384), 0 }, + { AOM_CDF2(16384), 0 }, + }, + { + { AOM_CDF2(16384), 0 }, + { AOM_CDF2(16384), 0 }, + { AOM_CDF2(16384), 0 }, + { AOM_CDF2(16384), 0 }, + { AOM_CDF2(16384), 0 }, + { AOM_CDF2(16384), 0 }, + { AOM_CDF2(16384), 0 }, + { AOM_CDF2(16384), 0 }, + { AOM_CDF2(16384), 0 }, + }, + }, + }, + { + { + { + { AOM_CDF2(16384), 0 }, + { AOM_CDF2(16384), 0 }, + { AOM_CDF2(16384), 0 }, + { AOM_CDF2(16384), 0 }, + { AOM_CDF2(16384), 0 }, + { AOM_CDF2(16384), 0 }, + { AOM_CDF2(16384), 0 }, + { AOM_CDF2(16384), 0 }, + { AOM_CDF2(16384), 0 }, + }, + { + { AOM_CDF2(16384), 0 }, + { AOM_CDF2(16384), 0 }, + { AOM_CDF2(16384), 0 }, + { AOM_CDF2(16384), 0 }, + { AOM_CDF2(16384), 0 }, + { AOM_CDF2(16384), 0 }, + { AOM_CDF2(16384), 0 }, + { AOM_CDF2(16384), 0 }, + { AOM_CDF2(16384), 0 }, + }, + }, + { + { + { AOM_CDF2(16384), 0 }, + { AOM_CDF2(16384), 0 }, + { AOM_CDF2(16384), 0 }, + { AOM_CDF2(16384), 0 }, + { AOM_CDF2(16384), 0 }, + { AOM_CDF2(16384), 0 }, + { AOM_CDF2(16384), 0 }, + { AOM_CDF2(16384), 0 }, + { AOM_CDF2(16384), 0 }, + }, + { + { AOM_CDF2(16384), 0 }, + { AOM_CDF2(16384), 0 }, + { AOM_CDF2(16384), 0 }, + { AOM_CDF2(16384), 0 }, + { AOM_CDF2(16384), 0 }, + { AOM_CDF2(16384), 0 }, + { AOM_CDF2(16384), 0 }, + { AOM_CDF2(16384), 0 }, + { AOM_CDF2(16384), 0 }, + }, + }, + { + { + { AOM_CDF2(16384), 0 }, + { AOM_CDF2(16384), 0 }, + { AOM_CDF2(16384), 0 }, + { AOM_CDF2(16384), 0 }, + { AOM_CDF2(16384), 0 }, + { AOM_CDF2(16384), 0 }, + { AOM_CDF2(16384), 0 }, + { AOM_CDF2(16384), 0 }, + { AOM_CDF2(16384), 0 }, + }, + { + { AOM_CDF2(16384), 0 }, + { AOM_CDF2(16384), 0 }, + { AOM_CDF2(16384), 0 }, + { AOM_CDF2(16384), 0 }, + { AOM_CDF2(16384), 0 }, + { AOM_CDF2(16384), 0 }, + { AOM_CDF2(16384), 0 }, + { AOM_CDF2(16384), 0 }, + { AOM_CDF2(16384), 0 }, + }, + }, + { + { + { AOM_CDF2(16384), 0 }, + { AOM_CDF2(16384), 0 }, + { AOM_CDF2(16384), 0 }, + { AOM_CDF2(16384), 0 }, + { AOM_CDF2(16384), 0 }, + { AOM_CDF2(16384), 0 }, + { AOM_CDF2(16384), 0 }, + { AOM_CDF2(16384), 0 }, + { AOM_CDF2(16384), 0 }, + }, + { + { AOM_CDF2(16384), 0 }, + { AOM_CDF2(16384), 0 }, + { AOM_CDF2(16384), 0 }, + { AOM_CDF2(16384), 0 }, + { AOM_CDF2(16384), 0 }, + { AOM_CDF2(16384), 0 }, + { AOM_CDF2(16384), 0 }, + { AOM_CDF2(16384), 0 }, + { AOM_CDF2(16384), 0 }, + }, + }, + { + { + { AOM_CDF2(16384), 0 }, + { AOM_CDF2(16384), 0 }, + { AOM_CDF2(16384), 0 }, + { AOM_CDF2(16384), 0 }, + { AOM_CDF2(16384), 0 }, + { AOM_CDF2(16384), 0 }, + { AOM_CDF2(16384), 0 }, + { AOM_CDF2(16384), 0 }, + { AOM_CDF2(16384), 0 }, + }, + { + { AOM_CDF2(16384), 0 }, + { AOM_CDF2(16384), 0 }, + { AOM_CDF2(16384), 0 }, + { AOM_CDF2(16384), 0 }, + { AOM_CDF2(16384), 0 }, + { AOM_CDF2(16384), 0 }, + { AOM_CDF2(16384), 0 }, + { AOM_CDF2(16384), 0 }, + { AOM_CDF2(16384), 0 }, + }, + }, + }, + { + { + { + { AOM_CDF2(16384), 0 }, + { AOM_CDF2(16384), 0 }, + { AOM_CDF2(16384), 0 }, + { AOM_CDF2(16384), 0 }, + { AOM_CDF2(16384), 0 }, + { AOM_CDF2(16384), 0 }, + { AOM_CDF2(16384), 0 }, + { AOM_CDF2(16384), 0 }, + { AOM_CDF2(16384), 0 }, + }, + { + { AOM_CDF2(16384), 0 }, + { AOM_CDF2(16384), 0 }, + { AOM_CDF2(16384), 0 }, + { AOM_CDF2(16384), 0 }, + { AOM_CDF2(16384), 0 }, + { AOM_CDF2(16384), 0 }, + { AOM_CDF2(16384), 0 }, + { AOM_CDF2(16384), 0 }, + { AOM_CDF2(16384), 0 }, + }, + }, + { + { + { AOM_CDF2(16384), 0 }, + { AOM_CDF2(16384), 0 }, + { AOM_CDF2(16384), 0 }, + { AOM_CDF2(16384), 0 }, + { AOM_CDF2(16384), 0 }, + { AOM_CDF2(16384), 0 }, + { AOM_CDF2(16384), 0 }, + { AOM_CDF2(16384), 0 }, + { AOM_CDF2(16384), 0 }, + }, + { + { AOM_CDF2(16384), 0 }, + { AOM_CDF2(16384), 0 }, + { AOM_CDF2(16384), 0 }, + { AOM_CDF2(16384), 0 }, + { AOM_CDF2(16384), 0 }, + { AOM_CDF2(16384), 0 }, + { AOM_CDF2(16384), 0 }, + { AOM_CDF2(16384), 0 }, + { AOM_CDF2(16384), 0 }, + }, + }, + { + { + { AOM_CDF2(16384), 0 }, + { AOM_CDF2(16384), 0 }, + { AOM_CDF2(16384), 0 }, + { AOM_CDF2(16384), 0 }, + { AOM_CDF2(16384), 0 }, + { AOM_CDF2(16384), 0 }, + { AOM_CDF2(16384), 0 }, + { AOM_CDF2(16384), 0 }, + { AOM_CDF2(16384), 0 }, + }, + { + { AOM_CDF2(16384), 0 }, + { AOM_CDF2(16384), 0 }, + { AOM_CDF2(16384), 0 }, + { AOM_CDF2(16384), 0 }, + { AOM_CDF2(16384), 0 }, + { AOM_CDF2(16384), 0 }, + { AOM_CDF2(16384), 0 }, + { AOM_CDF2(16384), 0 }, + { AOM_CDF2(16384), 0 }, + }, + }, + { + { + { AOM_CDF2(16384), 0 }, + { AOM_CDF2(16384), 0 }, + { AOM_CDF2(16384), 0 }, + { AOM_CDF2(16384), 0 }, + { AOM_CDF2(16384), 0 }, + { AOM_CDF2(16384), 0 }, + { AOM_CDF2(16384), 0 }, + { AOM_CDF2(16384), 0 }, + { AOM_CDF2(16384), 0 }, + }, + { + { AOM_CDF2(16384), 0 }, + { AOM_CDF2(16384), 0 }, + { AOM_CDF2(16384), 0 }, + { AOM_CDF2(16384), 0 }, + { AOM_CDF2(16384), 0 }, + { AOM_CDF2(16384), 0 }, + { AOM_CDF2(16384), 0 }, + { AOM_CDF2(16384), 0 }, + { AOM_CDF2(16384), 0 }, + }, + }, + { + { + { AOM_CDF2(16384), 0 }, + { AOM_CDF2(16384), 0 }, + { AOM_CDF2(16384), 0 }, + { AOM_CDF2(16384), 0 }, + { AOM_CDF2(16384), 0 }, + { AOM_CDF2(16384), 0 }, + { AOM_CDF2(16384), 0 }, + { AOM_CDF2(16384), 0 }, + { AOM_CDF2(16384), 0 }, + }, + { + { AOM_CDF2(16384), 0 }, + { AOM_CDF2(16384), 0 }, + { AOM_CDF2(16384), 0 }, + { AOM_CDF2(16384), 0 }, + { AOM_CDF2(16384), 0 }, + { AOM_CDF2(16384), 0 }, + { AOM_CDF2(16384), 0 }, + { AOM_CDF2(16384), 0 }, + { AOM_CDF2(16384), 0 }, + }, + }, + }, + }; +#else static const aom_cdf_prob av1_default_eob_extra_cdfs[TOKEN_CDF_Q_CTXS][TX_SIZES][PLANE_TYPES] [EOB_COEF_CONTEXTS][CDF_SIZE(2)] = { @@ -2171,6 +2665,7 @@ }, }, }; +#endif #else static const aom_cdf_prob av1_default_eob_extra_cdfs[TOKEN_CDF_Q_CTXS][TX_SIZES][PLANE_TYPES]
diff --git a/av1/decoder/decodemv.c b/av1/decoder/decodemv.c index 686dc9a..d0f60dd 100644 --- a/av1/decoder/decodemv.c +++ b/av1/decoder/decodemv.c
@@ -2785,10 +2785,14 @@ const int num_of_bits_for_this_offset = (shell_class == 0) ? 1 : shell_class; for (int i = 0; i < num_of_bits_for_this_offset; ++i) { +#if CONFIG_CTX_MV_SHELL_OFFSET_OTHER + shell_cls_offset |= aom_read_bit(r, ACCT_INFO("offset")) << i; +#else shell_cls_offset |= aom_read_symbol(r, ctx->shell_offset_other_class_cdf[0][i], 2, ACCT_INFO("offset")) << i; +#endif } }
diff --git a/av1/decoder/decodetxb.c b/av1/decoder/decodetxb.c index 68a4b65..58ec2d6 100644 --- a/av1/decoder/decodetxb.c +++ b/av1/decoder/decodetxb.c
@@ -526,7 +526,9 @@ #endif ) { MACROBLOCKD *const xd = &dcb->xd; +#if !CONFIG_EOB_PT_CTX_REDUCTION const PLANE_TYPE plane_type = get_plane_type(plane); +#endif FRAME_CONTEXT *const ec_ctx = xd->tile_ctx; #if CONFIG_EOB_POS_LUMA const int is_inter = is_inter_block(xd->mi[0], xd->tree_type); @@ -534,8 +536,9 @@ #else const int pl_ctx = plane_type; #endif // CONFIG_EOB_POS_LUMA - +#if !CONFIG_EOB_PT_CTX_REDUCTION const TX_SIZE txs_ctx = get_txsize_entropy_ctx(tx_size); +#endif eob_info *eob_data = dcb->eob_data[plane] + dcb->txb_offset[plane]; uint16_t *const eob = &(eob_data->eob); eob_info *bob_data = dcb->bob_data[plane] + dcb->txb_offset[plane]; @@ -620,10 +623,17 @@ const int eob_offset_bits = av1_eob_offset_bits[eob_pt]; if (eob_offset_bits > 0) { +#if !CONFIG_EOB_PT_CTX_REDUCTION const int eob_ctx = eob_pt - 3; +#endif int bit = +#if CONFIG_EOB_PT_CTX_REDUCTION + aom_read_symbol(r, ec_ctx->eob_extra_cdf[0][0][0], 2, + ACCT_INFO("eob_extra_cdf")); +#else aom_read_symbol(r, ec_ctx->eob_extra_cdf[txs_ctx][plane_type][eob_ctx], 2, ACCT_INFO("eob_extra_cdf")); +#endif if (bit) { eob_extra += (1 << (eob_offset_bits - 1)); } @@ -1306,11 +1316,16 @@ ACCT_INFO("sign", "dc_sign_cdf", "plane_y_or_u")); #endif // CONFIG_IMPROVEIDTX } else { +#if CONFIG_BY_PASS_V_SIGN + sign = aom_read_literal( + r, 1, ACCT_INFO("sign", "v_dc_sign_cdf", "plane_v")); +#else int32_t tmp_sign = 0; if (c < xd->eob_u) tmp_sign = xd->tmp_sign[tmp_sign_idx]; sign = aom_read_symbol(r, ec_ctx->v_dc_sign_cdf[tmp_sign][dc_sign_ctx], 2, ACCT_INFO("sign", "v_dc_sign_cdf", "plane_v")); +#endif } if (plane == AOM_PLANE_U) xd->tmp_sign[tmp_sign_idx] = (sign ? 2 : 1); #else @@ -1318,7 +1333,7 @@ 2, ACCT_INFO("sign", "dc_sign_cdf")); #endif // CONFIG_CONTEXT_DERIVATION } else { -#if CONFIG_CONTEXT_DERIVATION +#if CONFIG_CONTEXT_DERIVATION && CONFIG_CTX_V_AC_SIGN == 0 if (plane == AOM_PLANE_Y || plane == AOM_PLANE_U) sign = aom_read_bit(r, ACCT_INFO("sign", "plane_y_or_u")); else {
diff --git a/av1/encoder/block.h b/av1/encoder/block.h index b4f58fc..68a32d2 100644 --- a/av1/encoder/block.h +++ b/av1/encoder/block.h
@@ -279,8 +279,10 @@ #if CONFIG_CONTEXT_DERIVATION //! Cost for encoding the AOM_PLANE_V txfm coefficient dc_sign int v_dc_sign_cost[CROSS_COMPONENT_CONTEXTS][DC_SIGN_CONTEXTS][2]; +#if CONFIG_CTX_V_AC_SIGN == 0 //! Cost for encoding the AOM_PLANE_V txfm coefficient ac_sign int v_ac_sign_cost[CROSS_COMPONENT_CONTEXTS][2]; +#endif #endif // CONFIG_CONTEXT_DERIVATION //! Cost for encoding an increment to the coefficient int lps_cost[LEVEL_CONTEXTS][COEFF_BASE_RANGE + 1 + COEFF_BASE_RANGE + 1];
diff --git a/av1/encoder/encodemv.c b/av1/encoder/encodemv.c index f7e5ef6..1eb7329 100644 --- a/av1/encoder/encodemv.c +++ b/av1/encoder/encodemv.c
@@ -350,8 +350,12 @@ const int num_of_bits_for_this_offset = (shell_class == 0) ? 1 : shell_class; for (int i = 0; i < num_of_bits_for_this_offset; ++i) { +#if CONFIG_CTX_MV_SHELL_OFFSET_OTHER + aom_write_bit(w, (shell_cls_offset >> i) & 1); +#else aom_write_symbol(w, (shell_cls_offset >> i) & 1, mvctx->shell_offset_other_class_cdf[0][i], 2); +#endif } }
diff --git a/av1/encoder/encodetxb.c b/av1/encoder/encodetxb.c index 2147b18..ac7563d 100644 --- a/av1/encoder/encodetxb.c +++ b/av1/encoder/encodetxb.c
@@ -252,7 +252,9 @@ #endif int eob_extra; const int eob_pt = get_eob_pos_token(eob, &eob_extra); +#if !CONFIG_EOB_PT_CTX_REDUCTION TX_SIZE txs_ctx = get_txsize_entropy_ctx(tx_size); +#endif const int eob_multi_size = txsize_log2_minus4[tx_size]; #if CONFIG_EOB_POS_LUMA @@ -326,14 +328,24 @@ const int eob_offset_bits = av1_eob_offset_bits[eob_pt]; if (eob_offset_bits > 0) { +#if !CONFIG_EOB_PT_CTX_REDUCTION int eob_ctx = eob_pt - 3; +#endif int eob_shift = eob_offset_bits - 1; int bit = (eob_extra & (1 << eob_shift)) ? 1 : 0; #if CONFIG_ENTROPY_STATS +#if CONFIG_EOB_PT_CTX_REDUCTION + counts->eob_extra[cdf_idx][0][0][0][bit]++; +#else counts->eob_extra[cdf_idx][txs_ctx][plane][eob_ctx][bit]++; +#endif #endif // CONFIG_ENTROPY_STATS if (allow_update_cdf) +#if CONFIG_EOB_PT_CTX_REDUCTION + update_cdf(ec_ctx->eob_extra_cdf[0][0][0], bit, 2); +#else update_cdf(ec_ctx->eob_extra_cdf[txs_ctx][plane][eob_ctx], bit, 2); +#endif } } @@ -732,8 +744,10 @@ TX_SIZE tx_size, int eob) { MACROBLOCKD *xd = &x->e_mbd; FRAME_CONTEXT *ec_ctx = xd->tile_ctx; +#if !CONFIG_EOB_PT_CTX_REDUCTION const PLANE_TYPE plane_type = get_plane_type(plane); const TX_SIZE txs_ctx = get_txsize_entropy_ctx(tx_size); +#endif #if CONFIG_EOB_POS_LUMA const int is_inter = is_inter_block(xd->mi[0], xd->tree_type); const int pl_ctx = get_eob_plane_ctx(plane, is_inter); @@ -777,11 +791,17 @@ } const int eob_offset_bits = av1_eob_offset_bits[eob_pt]; if (eob_offset_bits > 0) { +#if !CONFIG_EOB_PT_CTX_REDUCTION const int eob_ctx = eob_pt - 3; +#endif int eob_shift = eob_offset_bits - 1; int bit = (eob_extra & (1 << eob_shift)) ? 1 : 0; +#if CONFIG_EOB_PT_CTX_REDUCTION + aom_write_symbol(w, bit, ec_ctx->eob_extra_cdf[0][0][0], 2); +#else aom_write_symbol(w, bit, ec_ctx->eob_extra_cdf[txs_ctx][plane_type][eob_ctx], 2); +#endif #if CONFIG_BYPASS_IMPROVEMENT // Zero out top bit; write (eob_offset_bits - 1) lsb bits. eob_extra &= (1 << (eob_offset_bits - 1)) - 1; @@ -1575,10 +1595,14 @@ #if CONFIG_CONTEXT_DERIVATION if (plane == AOM_PLANE_U) xd->tmp_sign[tmp_sign_idx] = (sign ? 2 : 1); if (plane == AOM_PLANE_V) { +#if CONFIG_BY_PASS_V_SIGN + aom_write_literal(w, sign, 1); +#else aom_write_symbol( w, sign, ec_ctx->v_dc_sign_cdf[xd->tmp_sign[tmp_sign_idx]][dc_sign_ctx], 2); +#endif } else { #if CONFIG_IMPROVEIDTX aom_write_symbol( @@ -1595,7 +1619,7 @@ 2); #endif // CONFIG_CONTEXT_DERIVATION } else { -#if CONFIG_CONTEXT_DERIVATION +#if CONFIG_CONTEXT_DERIVATION && CONFIG_CTX_V_AC_SIGN == 0 if (plane == AOM_PLANE_U) xd->tmp_sign[scan[c]] = (sign ? 2 : 1); if (plane == AOM_PLANE_Y || plane == AOM_PLANE_U) aom_write_bit(w, sign); @@ -2420,12 +2444,16 @@ } if (c == 0) return cost; } else { +#if CONFIG_CTX_V_AC_SIGN + cost += av1_cost_literal(1); +#else if (plane == AOM_PLANE_V) { const int sign01 = (sign ^ sign) - sign; cost += coeff_costs->v_ac_sign_cost[xd->tmp_sign[pos]][sign01]; } else { cost += av1_cost_literal(1); } +#endif } #else if (c) { @@ -2537,6 +2565,9 @@ cost += coeff_costs->dc_sign_cost[dc_ph_group][dc_sign_ctx][sign01]; } } else { +#if CONFIG_CTX_V_AC_SIGN + cost += av1_cost_literal(1); +#else if (plane == AOM_PLANE_V) { const int sign = AOMSIGN(v); const int sign01 = (sign ^ sign) - sign; @@ -2544,6 +2575,7 @@ } else { cost += av1_cost_literal(1); } +#endif } #else #if CONFIG_CONTEXT_DERIVATION @@ -3392,10 +3424,14 @@ else cost += txb_costs->dc_sign_cost[dc_ph_group][dc_sign_ctx][sign]; } else { +#if CONFIG_CTX_V_AC_SIGN + cost += av1_cost_literal(1); +#else if (plane == AOM_PLANE_V) cost += txb_costs->v_ac_sign_cost[tmp_sign[ci]][sign]; else cost += av1_cost_literal(1); +#endif } #else if (ci == 0) { @@ -3581,10 +3617,14 @@ else cost += txb_costs->dc_sign_cost[dc_ph_group][dc_sign_ctx][sign]; } else { +#if CONFIG_CTX_V_AC_SIGN + cost += av1_cost_literal(1); +#else if (plane == AOM_PLANE_V) cost += txb_costs->v_ac_sign_cost[tmp_sign[ci]][sign]; else cost += av1_cost_literal(1); +#endif } #else if (ci == 0) {
diff --git a/av1/encoder/mv_prec.c b/av1/encoder/mv_prec.c index 61db6e6..14f24cf 100644 --- a/av1/encoder/mv_prec.c +++ b/av1/encoder/mv_prec.c
@@ -477,8 +477,12 @@ } else { const int num_of_bits_for_this_offset = shell_class; for (int i = 0; i < num_of_bits_for_this_offset; ++i) { +#if CONFIG_CTX_MV_SHELL_OFFSET_OTHER + total_rate += av1_cost_literal(1); +#else total_rate += get_symbol_cost(mvctx->shell_offset_other_class_cdf[0][i], (shell_cls_offset >> i) & 1); +#endif update_cdf(mvctx->shell_offset_other_class_cdf[0][i], (shell_cls_offset >> i) & 1, 2); }
diff --git a/av1/encoder/rd.c b/av1/encoder/rd.c index 8063f5e..e5c94ce 100644 --- a/av1/encoder/rd.c +++ b/av1/encoder/rd.c
@@ -1374,8 +1374,13 @@ fc->coeff_base_bob_cdf[ctx], NULL); #endif // CONFIG_IMPROVEIDTX for (int ctx = 0; ctx < EOB_COEF_CONTEXTS; ++ctx) +#if CONFIG_EOB_PT_CTX_REDUCTION + av1_cost_tokens_from_cdf(pcost->eob_extra_cost[ctx], + fc->eob_extra_cdf[0][0][0], NULL); +#else av1_cost_tokens_from_cdf(pcost->eob_extra_cost[ctx], fc->eob_extra_cdf[tx_size][plane][ctx], NULL); +#endif #if CONFIG_IMPROVEIDTX for (int gr = 0; gr < DC_SIGN_GROUPS; ++gr) { for (int ctx = 0; ctx < DC_SIGN_CONTEXTS; ++ctx) { @@ -1390,13 +1395,23 @@ #endif // CONFIG_IMPROVEIDTX #if CONFIG_CONTEXT_DERIVATION if (plane == PLANE_TYPE_UV) { - for (int i = 0; i < CROSS_COMPONENT_CONTEXTS; ++i) - for (int ctx = 0; ctx < DC_SIGN_CONTEXTS; ++ctx) + for (int i = 0; i < CROSS_COMPONENT_CONTEXTS; ++i) { + for (int ctx = 0; ctx < DC_SIGN_CONTEXTS; ++ctx) { +#if CONFIG_BY_PASS_V_SIGN + pcost->v_dc_sign_cost[i][ctx][0] = av1_cost_literal(1); + pcost->v_dc_sign_cost[i][ctx][1] = av1_cost_literal(1); +#else av1_cost_tokens_from_cdf(pcost->v_dc_sign_cost[i][ctx], fc->v_dc_sign_cdf[i][ctx], NULL); - for (int i = 0; i < CROSS_COMPONENT_CONTEXTS; ++i) +#endif + } + } +#if CONFIG_CTX_V_AC_SIGN == 0 + for (int i = 0; i < CROSS_COMPONENT_CONTEXTS; ++i) { av1_cost_tokens_from_cdf(pcost->v_ac_sign_cost[i], fc->v_ac_sign_cdf[i], NULL); + } +#endif } #endif // CONFIG_CONTEXT_DERIVATION
diff --git a/av1/encoder/trellis_quant.c b/av1/encoder/trellis_quant.c index 05fbadd..ad29864 100644 --- a/av1/encoder/trellis_quant.c +++ b/av1/encoder/trellis_quant.c
@@ -152,10 +152,14 @@ else cost += txb_costs->dc_sign_cost[dc_ph_group][dc_sign_ctx][sign]; } else { +#if CONFIG_CTX_V_AC_SIGN + cost += av1_cost_literal(1); +#else if (plane == AOM_PLANE_V) cost += txb_costs->v_ac_sign_cost[t_sign][sign]; else cost += av1_cost_literal(1); +#endif } #else if (ci == 0) { @@ -225,16 +229,24 @@ int diag_ctx, int plane, const LV_MAP_COEFF_COST *txb_costs, int q_i, int t_sign, int sign) { +#if CONFIG_CTX_V_AC_SIGN + (void)t_sign; + (void)sign; +#endif int base_ctx = diag_ctx + (coeff_ctx & 15); int mid_ctx = coeff_ctx >> 4; const int(*base_cost_ptr)[TCQ_CTXS][8] = plane > 0 ? txb_costs->base_cost_uv : txb_costs->base_cost; int cost = base_cost_ptr[base_ctx][q_i][AOMMIN(abs_qc, 3)]; if (abs_qc != 0) { +#if CONFIG_CTX_V_AC_SIGN + cost += av1_cost_literal(1); +#else if (plane == AOM_PLANE_V) cost += txb_costs->v_ac_sign_cost[t_sign][sign]; else cost += av1_cost_literal(1); +#endif if (abs_qc > NUM_BASE_LEVELS) { if (plane == 0) { cost += get_br_cost_tcq(abs_qc, txb_costs->lps_cost[mid_ctx]); @@ -274,10 +286,14 @@ else cost += txb_costs->dc_sign_cost[dc_ph_group][dc_sign_ctx][sign]; } else { +#if CONFIG_CTX_V_AC_SIGN + cost += av1_cost_literal(1); +#else if (plane == AOM_PLANE_V) cost += txb_costs->v_ac_sign_cost[tmp_sign[ci]][sign]; else cost += av1_cost_literal(1); +#endif } if (plane > 0) { if (limits) {
diff --git a/av1/encoder/x86/trellis_quant_avx2.c b/av1/encoder/x86/trellis_quant_avx2.c index 50a4fb2..c7e1b34 100644 --- a/av1/encoder/x86/trellis_quant_avx2.c +++ b/av1/encoder/x86/trellis_quant_avx2.c
@@ -317,9 +317,15 @@ const LV_MAP_COEFF_COST *txb_costs, int plane, int t_sign, int sign) { int cost = 0; +#if CONFIG_CTX_V_AC_SIGN + (void)t_sign; + (void)sign; + cost += av1_cost_literal(1); +#else if (plane == AOM_PLANE_V) { cost += txb_costs->v_ac_sign_cost[t_sign][sign] - av1_cost_literal(1); } +#endif if (abs_qc > NUM_BASE_LEVELS) { int mid_ctx = coeff_ctx >> 4; if (plane == 0) { @@ -348,9 +354,13 @@ cost += txb_costs->dc_sign_cost[dc_ph_group][dc_sign_ctx][sign]; } } else { +#if CONFIG_CTX_V_AC_SIGN + cost += av1_cost_literal(1); +#else if (plane == AOM_PLANE_V) { cost += txb_costs->v_ac_sign_cost[t_sign][sign] - av1_cost_literal(1); } +#endif } if (plane > 0) { if (abs_qc > LF_NUM_BASE_LEVELS) { @@ -364,9 +374,13 @@ } } } else { +#if CONFIG_CTX_V_AC_SIGN + cost += av1_cost_literal(1); +#else if (plane == AOM_PLANE_V) { cost += txb_costs->v_ac_sign_cost[t_sign][sign] - av1_cost_literal(1); } +#endif if (plane > 0) { if (abs_qc > NUM_BASE_LEVELS) { int br_ctx = 0; /* get_br_ctx_eob_chroma */
diff --git a/build/cmake/aom_config_defaults.cmake b/build/cmake/aom_config_defaults.cmake index 9a0b17b..7b209ce 100644 --- a/build/cmake/aom_config_defaults.cmake +++ b/build/cmake/aom_config_defaults.cmake
@@ -146,6 +146,11 @@ set_aom_config_var(CONFIG_PARAKIT_COLLECT_DATA 0 "enables data collection for ParaKit training.") +set_aom_config_var(CONFIG_CTX_V_AC_SIGN 1 "FG8-Test1.") +set_aom_config_var(CONFIG_CTX_MV_SHELL_OFFSET_OTHER 1 "FG8-Test3.") +set_aom_config_var(CONFIG_EOB_PT_CTX_REDUCTION 1 "FG8-Test4.") +set_aom_config_var(CONFIG_BY_PASS_V_SIGN 1 "FG8-Test11.") + # AV2 experiment flags. set_aom_config_var(CONFIG_IMPROVEIDTX 1 "AV2 enable improved identity transform coding.")