Experiment probability precision for lv-map coding
Experiment probability precision for binary coding in the lv-map
coding system.
Change-Id: I8d9c49eee6dc7ca7970390fa5febe25b80bfab3c
diff --git a/av1/encoder/encodetxb.c b/av1/encoder/encodetxb.c
index 121970f..63c0e5a 100644
--- a/av1/encoder/encodetxb.c
+++ b/av1/encoder/encodetxb.c
@@ -125,16 +125,15 @@
if (c == seg_eob - 1) break;
#if LV_MAP_PROB
- aom_write_symbol(w, is_nz, fc->nz_map_cdf[txs_ctx][plane_type][coeff_ctx],
- 2);
+ aom_write_bin(w, is_nz, fc->nz_map_cdf[txs_ctx][plane_type][coeff_ctx], 2);
#else
aom_write(w, is_nz, nz_map[coeff_ctx]);
#endif
if (is_nz) {
#if LV_MAP_PROB
- aom_write_symbol(w, c == (eob - 1),
- fc->eob_flag_cdf[txs_ctx][plane_type][eob_ctx], 2);
+ aom_write_bin(w, c == (eob - 1),
+ fc->eob_flag_cdf[txs_ctx][plane_type][eob_ctx], 2);
#else
aom_write(w, c == (eob - 1), eob_flag[eob_ctx]);
#endif
@@ -165,9 +164,8 @@
assert(veob <= height);
int el_ctx = get_empty_line_ctx(c, eob_ls);
#if LV_MAP_PROB
- aom_write_symbol(w, veob == 0,
- fc->empty_line_cdf[txs_ctx][plane_type][tx_class][el_ctx],
- 2);
+ aom_write_bin(w, veob == 0,
+ fc->empty_line_cdf[txs_ctx][plane_type][tx_class][el_ctx], 2);
#else
aom_write(w, veob == 0,
fc->empty_line[txs_ctx][plane_type][tx_class][el_ctx]);
@@ -179,15 +177,15 @@
int coeff_ctx = get_nz_map_ctx(tcoeff, coeff_idx, bwl, height, tx_type);
if (r + 1 != height) {
#if LV_MAP_PROB
- aom_write_symbol(w, is_nz,
- fc->nz_map_cdf[txs_ctx][plane_type][coeff_ctx], 2);
+ aom_write_bin(w, is_nz,
+ fc->nz_map_cdf[txs_ctx][plane_type][coeff_ctx], 2);
#else
aom_write(w, is_nz, nz_map[coeff_ctx]);
#endif
if (is_nz) {
int eob_ctx = get_hv_eob_ctx(c, r, eob_ls);
#if LV_MAP_PROB
- aom_write_symbol(
+ aom_write_bin(
w, r == veob - 1,
fc->hv_eob_cdf[txs_ctx][plane_type][tx_class][eob_ctx], 2);
#else
@@ -222,9 +220,8 @@
int16_t heob = eob_ls[r];
int el_ctx = get_empty_line_ctx(r, eob_ls);
#if LV_MAP_PROB
- aom_write_symbol(w, heob == 0,
- fc->empty_line_cdf[txs_ctx][plane_type][tx_class][el_ctx],
- 2);
+ aom_write_bin(w, heob == 0,
+ fc->empty_line_cdf[txs_ctx][plane_type][tx_class][el_ctx], 2);
#else
aom_write(w, heob == 0,
fc->empty_line[txs_ctx][plane_type][tx_class][el_ctx]);
@@ -236,15 +233,15 @@
int coeff_ctx = get_nz_map_ctx(tcoeff, coeff_idx, bwl, height, tx_type);
if (c + 1 != width) {
#if LV_MAP_PROB
- aom_write_symbol(w, is_nz,
- fc->nz_map_cdf[txs_ctx][plane_type][coeff_ctx], 2);
+ aom_write_bin(w, is_nz,
+ fc->nz_map_cdf[txs_ctx][plane_type][coeff_ctx], 2);
#else
aom_write(w, is_nz, nz_map[coeff_ctx]);
#endif
if (is_nz) {
int eob_ctx = get_hv_eob_ctx(r, c, eob_ls);
#if LV_MAP_PROB
- aom_write_symbol(
+ aom_write_bin(
w, c == heob - 1,
fc->hv_eob_cdf[txs_ctx][plane_type][tx_class][eob_ctx], 2);
#else
@@ -280,8 +277,8 @@
(void)blk_col;
#if LV_MAP_PROB
- aom_write_symbol(w, eob == 0,
- ec_ctx->txb_skip_cdf[txs_ctx][txb_ctx->txb_skip_ctx], 2);
+ aom_write_bin(w, eob == 0,
+ ec_ctx->txb_skip_cdf[txs_ctx][txb_ctx->txb_skip_ctx], 2);
#else
aom_write(w, eob == 0, ec_ctx->txb_skip[txs_ctx][txb_ctx->txb_skip_ctx]);
#endif
@@ -301,8 +298,8 @@
const int eob_offset = width + height;
const int eob_mode = eob > eob_offset;
#if LV_MAP_PROB
- aom_write_symbol(w, eob_mode,
- ec_ctx->eob_mode_cdf[txs_ctx][plane_type][tx_class], 2);
+ aom_write_bin(w, eob_mode,
+ ec_ctx->eob_mode_cdf[txs_ctx][plane_type][tx_class], 2);
#else
aom_write(w, eob_mode, ec_ctx->eob_mode[txs_ctx][plane_type][tx_class]);
#endif
@@ -340,16 +337,16 @@
if (level == i + 1) {
#if LV_MAP_PROB
- aom_write_symbol(
- w, 1, ec_ctx->coeff_base_cdf[txs_ctx][plane_type][i][ctx], 2);
+ aom_write_bin(w, 1, ec_ctx->coeff_base_cdf[txs_ctx][plane_type][i][ctx],
+ 2);
#else
aom_write(w, 1, coeff_base[ctx]);
#endif
if (c == 0) {
#if LV_MAP_PROB
- aom_write_symbol(
- w, sign, ec_ctx->dc_sign_cdf[plane_type][txb_ctx->dc_sign_ctx],
- 2);
+ aom_write_bin(w, sign,
+ ec_ctx->dc_sign_cdf[plane_type][txb_ctx->dc_sign_ctx],
+ 2);
#else
aom_write(w, sign, ec_ctx->dc_sign[plane_type][txb_ctx->dc_sign_ctx]);
#endif
@@ -360,8 +357,8 @@
}
#if LV_MAP_PROB
- aom_write_symbol(w, 0,
- ec_ctx->coeff_base_cdf[txs_ctx][plane_type][i][ctx], 2);
+ aom_write_bin(w, 0, ec_ctx->coeff_base_cdf[txs_ctx][plane_type][i][ctx],
+ 2);
#else
aom_write(w, 0, coeff_base[ctx]);
#endif
@@ -380,8 +377,8 @@
if (c == 0) {
#if LV_MAP_PROB
- aom_write_symbol(
- w, sign, ec_ctx->dc_sign_cdf[plane_type][txb_ctx->dc_sign_ctx], 2);
+ aom_write_bin(w, sign,
+ ec_ctx->dc_sign_cdf[plane_type][txb_ctx->dc_sign_ctx], 2);
#else
aom_write(w, sign, ec_ctx->dc_sign[plane_type][txb_ctx->dc_sign_ctx]);
#endif
@@ -404,20 +401,20 @@
br_set_idx = coeff_to_br_index[base_range];
for (idx = 0; idx < BASE_RANGE_SETS; ++idx) {
- aom_write_symbol(w, idx == br_set_idx,
- ec_ctx->coeff_br_cdf[txs_ctx][plane_type][idx][ctx], 2);
+ aom_write_bin(w, idx == br_set_idx,
+ ec_ctx->coeff_br_cdf[txs_ctx][plane_type][idx][ctx], 2);
if (idx == br_set_idx) {
br_base = br_index_to_coeff[br_set_idx];
br_offset = base_range - br_base;
int extra_bits = (1 << br_extra_bits[idx]) - 1;
for (int tok = 0; tok < extra_bits; ++tok) {
if (tok == br_offset) {
- aom_write_symbol(
- w, 1, ec_ctx->coeff_lps_cdf[txs_ctx][plane_type][ctx], 2);
+ aom_write_bin(w, 1, ec_ctx->coeff_lps_cdf[txs_ctx][plane_type][ctx],
+ 2);
break;
}
- aom_write_symbol(w, 0,
- ec_ctx->coeff_lps_cdf[txs_ctx][plane_type][ctx], 2);
+ aom_write_bin(w, 0, ec_ctx->coeff_lps_cdf[txs_ctx][plane_type][ctx],
+ 2);
}
// aom_write_literal(w, br_offset, br_extra_bits[idx]);
break;
@@ -429,16 +426,14 @@
for (idx = 0; idx < COEFF_BASE_RANGE; ++idx) {
if (level == (idx + 1 + NUM_BASE_LEVELS)) {
#if LV_MAP_PROB
- aom_write_symbol(w, 1, ec_ctx->coeff_lps_cdf[txs_ctx][plane_type][ctx],
- 2);
+ aom_write_bin(w, 1, ec_ctx->coeff_lps_cdf[txs_ctx][plane_type][ctx], 2);
#else
aom_write(w, 1, ec_ctx->coeff_lps[txs_ctx][plane_type][ctx]);
#endif
break;
}
#if LV_MAP_PROB
- aom_write_symbol(w, 0, ec_ctx->coeff_lps_cdf[txs_ctx][plane_type][ctx],
- 2);
+ aom_write_bin(w, 0, ec_ctx->coeff_lps_cdf[txs_ctx][plane_type][ctx], 2);
#else
aom_write(w, 0, ec_ctx->coeff_lps[txs_ctx][plane_type][ctx]);
#endif
@@ -2004,13 +1999,13 @@
++(*nz_map_count)[coeff_ctx][is_nz];
#if LV_MAP_PROB
- update_cdf(fc->nz_map_cdf[txsize_ctx][plane_type][coeff_ctx], is_nz, 2);
+ update_bin(fc->nz_map_cdf[txsize_ctx][plane_type][coeff_ctx], is_nz, 2);
#endif
if (is_nz) {
++counts->eob_flag[txsize_ctx][plane_type][eob_ctx][c == (eob - 1)];
#if LV_MAP_PROB
- update_cdf(fc->eob_flag_cdf[txsize_ctx][plane_type][eob_ctx],
+ update_bin(fc->eob_flag_cdf[txsize_ctx][plane_type][eob_ctx],
c == (eob - 1), 2);
#endif
}
@@ -2040,7 +2035,7 @@
int el_ctx = get_empty_line_ctx(c, eob_ls);
++counts->empty_line[txs_ctx][plane_type][tx_class][el_ctx][veob == 0];
#if LV_MAP_PROB
- update_cdf(fc->empty_line_cdf[txs_ctx][plane_type][tx_class][el_ctx],
+ update_bin(fc->empty_line_cdf[txs_ctx][plane_type][tx_class][el_ctx],
veob == 0, 2);
#endif
if (veob) {
@@ -2052,14 +2047,14 @@
get_nz_map_ctx(tcoeff, coeff_idx, bwl, height, tx_type);
++(*nz_map_count)[coeff_ctx][is_nz];
#if LV_MAP_PROB
- update_cdf(fc->nz_map_cdf[txs_ctx][plane_type][coeff_ctx], is_nz, 2);
+ update_bin(fc->nz_map_cdf[txs_ctx][plane_type][coeff_ctx], is_nz, 2);
#endif
if (is_nz) {
int eob_ctx = get_hv_eob_ctx(c, r, eob_ls);
++counts->hv_eob[txs_ctx][plane_type][tx_class][eob_ctx]
[r == veob - 1];
#if LV_MAP_PROB
- update_cdf(fc->hv_eob_cdf[txs_ctx][plane_type][tx_class][eob_ctx],
+ update_bin(fc->hv_eob_cdf[txs_ctx][plane_type][tx_class][eob_ctx],
r == veob - 1, 2);
#endif
}
@@ -2090,7 +2085,7 @@
int el_ctx = get_empty_line_ctx(r, eob_ls);
++counts->empty_line[txs_ctx][plane_type][tx_class][el_ctx][heob == 0];
#if LV_MAP_PROB
- update_cdf(fc->empty_line_cdf[txs_ctx][plane_type][tx_class][el_ctx],
+ update_bin(fc->empty_line_cdf[txs_ctx][plane_type][tx_class][el_ctx],
heob == 0, 2);
#endif
if (heob) {
@@ -2102,14 +2097,14 @@
get_nz_map_ctx(tcoeff, coeff_idx, bwl, height, tx_type);
++(*nz_map_count)[coeff_ctx][is_nz];
#if LV_MAP_PROB
- update_cdf(fc->nz_map_cdf[txs_ctx][plane_type][coeff_ctx], is_nz, 2);
+ update_bin(fc->nz_map_cdf[txs_ctx][plane_type][coeff_ctx], is_nz, 2);
#endif
if (is_nz) {
int eob_ctx = get_hv_eob_ctx(r, c, eob_ls);
++counts->hv_eob[txs_ctx][plane_type][tx_class][eob_ctx]
[c == heob - 1];
#if LV_MAP_PROB
- update_cdf(fc->hv_eob_cdf[txs_ctx][plane_type][tx_class][eob_ctx],
+ update_bin(fc->hv_eob_cdf[txs_ctx][plane_type][tx_class][eob_ctx],
c == heob - 1, 2);
#endif
}
@@ -2157,7 +2152,7 @@
++td->counts->txb_skip[txsize_ctx][txb_ctx.txb_skip_ctx][eob == 0];
#if LV_MAP_PROB
- update_cdf(ec_ctx->txb_skip_cdf[txsize_ctx][txb_ctx.txb_skip_ctx], eob == 0,
+ update_bin(ec_ctx->txb_skip_cdf[txsize_ctx][txb_ctx.txb_skip_ctx], eob == 0,
2);
#endif
x->mbmi_ext->txb_skip_ctx[plane][block] = txb_ctx.txb_skip_ctx;
@@ -2186,7 +2181,7 @@
const TX_SIZE txs_ctx = get_txsize_context(tx_size);
++td->counts->eob_mode[txs_ctx][plane_type][tx_class][eob_mode];
#if LV_MAP_PROB
- update_cdf(ec_ctx->eob_mode_cdf[txs_ctx][plane_type][tx_class], eob_mode,
+ update_bin(ec_ctx->eob_mode_cdf[txs_ctx][plane_type][tx_class], eob_mode,
2);
#endif
if (eob_mode == 0) {
@@ -2222,7 +2217,7 @@
if (level == i + 1) {
++td->counts->coeff_base[txsize_ctx][plane_type][i][ctx][1];
#if LV_MAP_PROB
- update_cdf(ec_ctx->coeff_base_cdf[txsize_ctx][plane_type][i][ctx], 1,
+ update_bin(ec_ctx->coeff_base_cdf[txsize_ctx][plane_type][i][ctx], 1,
2);
#endif
if (c == 0) {
@@ -2230,7 +2225,7 @@
++td->counts->dc_sign[plane_type][dc_sign_ctx][v < 0];
#if LV_MAP_PROB
- update_cdf(ec_ctx->dc_sign_cdf[plane_type][dc_sign_ctx], v < 0, 2);
+ update_bin(ec_ctx->dc_sign_cdf[plane_type][dc_sign_ctx], v < 0, 2);
#endif
x->mbmi_ext->dc_sign_ctx[plane][block] = dc_sign_ctx;
}
@@ -2239,7 +2234,7 @@
}
++td->counts->coeff_base[txsize_ctx][plane_type][i][ctx][0];
#if LV_MAP_PROB
- update_cdf(ec_ctx->coeff_base_cdf[txsize_ctx][plane_type][i][ctx], 0, 2);
+ update_bin(ec_ctx->coeff_base_cdf[txsize_ctx][plane_type][i][ctx], 0, 2);
#endif
update_eob = AOMMAX(update_eob, c);
}
@@ -2259,7 +2254,7 @@
++td->counts->dc_sign[plane_type][dc_sign_ctx][v < 0];
#if LV_MAP_PROB
- update_cdf(ec_ctx->dc_sign_cdf[plane_type][dc_sign_ctx], v < 0, 2);
+ update_bin(ec_ctx->dc_sign_cdf[plane_type][dc_sign_ctx], v < 0, 2);
#endif
x->mbmi_ext->dc_sign_ctx[plane][block] = dc_sign_ctx;
}
@@ -2279,7 +2274,7 @@
int br_offset = base_range - br_base;
++td->counts->coeff_br[txsize_ctx][plane_type][idx][ctx][1];
#if LV_MAP_PROB
- update_cdf(ec_ctx->coeff_br_cdf[txsize_ctx][plane_type][idx][ctx], 1,
+ update_bin(ec_ctx->coeff_br_cdf[txsize_ctx][plane_type][idx][ctx], 1,
2);
#endif
int extra_bits = (1 << br_extra_bits[idx]) - 1;
@@ -2287,21 +2282,21 @@
if (br_offset == tok) {
++td->counts->coeff_lps[txsize_ctx][plane_type][ctx][1];
#if LV_MAP_PROB
- update_cdf(ec_ctx->coeff_lps_cdf[txsize_ctx][plane_type][ctx], 1,
+ update_bin(ec_ctx->coeff_lps_cdf[txsize_ctx][plane_type][ctx], 1,
2);
#endif
break;
}
++td->counts->coeff_lps[txsize_ctx][plane_type][ctx][0];
#if LV_MAP_PROB
- update_cdf(ec_ctx->coeff_lps_cdf[txsize_ctx][plane_type][ctx], 0, 2);
+ update_bin(ec_ctx->coeff_lps_cdf[txsize_ctx][plane_type][ctx], 0, 2);
#endif
}
break;
}
++td->counts->coeff_br[txsize_ctx][plane_type][idx][ctx][0];
#if LV_MAP_PROB
- update_cdf(ec_ctx->coeff_br_cdf[txsize_ctx][plane_type][idx][ctx], 0, 2);
+ update_bin(ec_ctx->coeff_br_cdf[txsize_ctx][plane_type][idx][ctx], 0, 2);
#endif
}
#else // BR_NODE
@@ -2309,13 +2304,13 @@
if (level == (idx + 1 + NUM_BASE_LEVELS)) {
++td->counts->coeff_lps[txsize_ctx][plane_type][ctx][1];
#if LV_MAP_PROB
- update_cdf(ec_ctx->coeff_lps_cdf[txsize_ctx][plane_type][ctx], 1, 2);
+ update_bin(ec_ctx->coeff_lps_cdf[txsize_ctx][plane_type][ctx], 1, 2);
#endif
break;
}
++td->counts->coeff_lps[txsize_ctx][plane_type][ctx][0];
#if LV_MAP_PROB
- update_cdf(ec_ctx->coeff_lps_cdf[txsize_ctx][plane_type][ctx], 0, 2);
+ update_bin(ec_ctx->coeff_lps_cdf[txsize_ctx][plane_type][ctx], 0, 2);
#endif
}
if (idx < COEFF_BASE_RANGE) continue;