NEW_MULTISYMBOL: adapt remaining bits in the magnitude. Reduce the number of contexts from 10 to 6. BUG=aomedia:830 Change-Id: If0ec302816975293b7dbd164c867feb66fa76847
diff --git a/av1/common/entropy.c b/av1/common/entropy.c index 7898d82..01d5452 100644 --- a/av1/common/entropy.c +++ b/av1/common/entropy.c
@@ -2255,6 +2255,7 @@ AVERAGE_TILE_CDFS(nmvc[j].comps[k].hp_cdf) AVERAGE_TILE_CDFS(nmvc[j].comps[k].class0_hp_cdf) AVERAGE_TILE_CDFS(nmvc[j].comps[k].class0_cdf) + AVERAGE_TILE_CDFS(nmvc[j].comps[k].bits_cdf) #endif } }
diff --git a/av1/common/entropymv.c b/av1/common/entropymv.c index 32e6c91..2d01913 100644 --- a/av1/common/entropymv.c +++ b/av1/common/entropymv.c
@@ -68,6 +68,12 @@ { AOM_ICDF(160 * 128), AOM_ICDF(32768), 0 }, { AOM_ICDF(128 * 128), AOM_ICDF(32768), 0 }, { AOM_ICDF(216 * 128), AOM_ICDF(32768), 0 }, + { { AOM_ICDF(128 * 196), AOM_ICDF(32768), 0 }, + { AOM_ICDF(128 * 198), AOM_ICDF(32768), 0 }, + { AOM_ICDF(128 * 208), AOM_ICDF(32768), 0 }, + { AOM_ICDF(128 * 224), AOM_ICDF(32768), 0 }, + { AOM_ICDF(128 * 245), AOM_ICDF(32768), 0 }, + { AOM_ICDF(128 * 240), AOM_ICDF(32768), 0 } }, // bits_cdf #endif }, { @@ -93,6 +99,12 @@ { AOM_ICDF(160 * 128), AOM_ICDF(32768), 0 }, { AOM_ICDF(128 * 128), AOM_ICDF(32768), 0 }, { AOM_ICDF(216 * 128), AOM_ICDF(32768), 0 }, + { { AOM_ICDF(128 * 196), AOM_ICDF(32768), 0 }, + { AOM_ICDF(128 * 198), AOM_ICDF(32768), 0 }, + { AOM_ICDF(128 * 208), AOM_ICDF(32768), 0 }, + { AOM_ICDF(128 * 224), AOM_ICDF(32768), 0 }, + { AOM_ICDF(128 * 245), AOM_ICDF(32768), 0 }, + { AOM_ICDF(128 * 240), AOM_ICDF(32768), 0 } }, // bits_cdf #endif } }, };
diff --git a/av1/common/entropymv.h b/av1/common/entropymv.h index 3f2c152..9ce089f 100644 --- a/av1/common/entropymv.h +++ b/av1/common/entropymv.h
@@ -66,6 +66,9 @@ #define CLASS0_BITS 1 /* bits at integer precision for class 0 */ #define CLASS0_SIZE (1 << CLASS0_BITS) #define MV_OFFSET_BITS (MV_CLASSES + CLASS0_BITS - 2) +#if CONFIG_NEW_MULTISYMBOL +#define MV_BITS_CONTEXTS 6 +#endif #define MV_FP_SIZE 4 #define MV_MAX_BITS (MV_CLASSES + CLASS0_BITS + 2) @@ -97,6 +100,7 @@ aom_cdf_prob class0_hp_cdf[CDF_SIZE(2)]; aom_cdf_prob hp_cdf[CDF_SIZE(2)]; aom_cdf_prob class0_cdf[CDF_SIZE(CLASS0_SIZE)]; + aom_cdf_prob bits_cdf[MV_BITS_CONTEXTS][CDF_SIZE(2)]; #endif } nmv_component;
diff --git a/av1/decoder/decodeframe.c b/av1/decoder/decodeframe.c index 8a28bf4..1ba7795 100644 --- a/av1/decoder/decodeframe.c +++ b/av1/decoder/decodeframe.c
@@ -5723,7 +5723,9 @@ if (!frame_is_intra_only(cm)) { av1_adapt_inter_frame_probs(cm); +#if !CONFIG_NEW_MULTISYMBOL av1_adapt_mv_probs(cm, cm->allow_high_precision_mv); +#endif av1_average_tile_inter_cdfs(&pbi->common, pbi->common.fc, tile_ctxs, cdf_ptrs, cm->tile_rows * cm->tile_cols); av1_average_tile_mv_cdfs(pbi->common.fc, tile_ctxs, cdf_ptrs,
diff --git a/av1/decoder/decodemv.c b/av1/decoder/decodemv.c index 2a27928..4591cc9 100644 --- a/av1/decoder/decodemv.c +++ b/av1/decoder/decodemv.c
@@ -1274,9 +1274,13 @@ } else { int i; const int n = mv_class + CLASS0_BITS - 1; // number of bits - d = 0; +#if CONFIG_NEW_MULTISYMBOL + for (i = 0; i < n; ++i) + d |= aom_read_symbol(r, mvcomp->bits_cdf[(i + 1) / 2], 2, ACCT_STR) << i; +#else for (i = 0; i < n; ++i) d |= aom_read(r, mvcomp->bits[i], ACCT_STR) << i; +#endif mag = CLASS0_SIZE << (mv_class + 2); }
diff --git a/av1/encoder/encodemv.c b/av1/encoder/encodemv.c index da3d0d5..f8a5469 100644 --- a/av1/encoder/encodemv.c +++ b/av1/encoder/encodemv.c
@@ -62,9 +62,13 @@ } else { int i; const int n = mv_class + CLASS0_BITS - 1; // number of bits +#if CONFIG_NEW_MULTISYMBOL + for (i = 0; i < n; ++i) + aom_write_symbol(w, (d >> i) & 1, mvcomp->bits_cdf[(i + 1) / 2], 2); +#else for (i = 0; i < n; ++i) aom_write(w, (d >> i) & 1, mvcomp->bits[i]); +#endif } - // Fractional bits #if CONFIG_INTRABC || CONFIG_AMVR if (precision > MV_SUBPEL_NONE)