ncobmc_adapt_weight: read/write ncobmc mode
An ncobmc mode is selected for each squared block
(if motion_mode == ncobmc_adapt_weight) as opposed
to four in training
Change-Id: I81e5dfca3a6fec5a95c96b17f294530880cf8f88
diff --git a/av1/decoder/decodemv.c b/av1/decoder/decodemv.c
index b28f2d9..fe904de 100644
--- a/av1/decoder/decodemv.c
+++ b/av1/decoder/decodemv.c
@@ -359,22 +359,44 @@
}
#if CONFIG_NCOBMC_ADAPT_WEIGHT
-static void read_ncobmc_mode(AV1_COMMON *cm, MACROBLOCKD *xd, MODE_INFO *mi,
- NCOBMC_MODE ncobmc_mode[2], aom_reader *r) {
+static void read_ncobmc_mode(MACROBLOCKD *xd, MODE_INFO *mi,
+#ifndef TRAINING_WEIGHTS
+ NCOBMC_MODE ncobmc_mode[2],
+#else
+ NCOBMC_MODE ncobmc_mode[][4],
+#endif
+ aom_reader *r) {
MB_MODE_INFO *mbmi = &mi->mbmi;
FRAME_COUNTS *counts = xd->counts;
ADAPT_OVERLAP_BLOCK ao_block = adapt_overlap_block_lookup[mbmi->sb_type];
if (mbmi->motion_mode != NCOBMC_ADAPT_WEIGHT) return;
- ncobmc_mode[0] = aom_read_tree(r, av1_ncobmc_mode_tree,
- cm->fc->ncobmc_mode_prob[ao_block], ACCT_STR);
+#ifndef TRAINING_WEIGHTS
+ ncobmc_mode[0] = aom_read_symbol(r, xd->tile_ctx->ncobmc_mode_cdf[ao_block],
+ MAX_NCOBMC_MODES, ACCT_STR);
if (counts) ++counts->ncobmc_mode[ao_block][ncobmc_mode[0]];
if (mi_size_wide[mbmi->sb_type] != mi_size_high[mbmi->sb_type]) {
- ncobmc_mode[1] = aom_read_tree(
- r, av1_ncobmc_mode_tree, cm->fc->ncobmc_mode_prob[ao_block], ACCT_STR);
+ ncobmc_mode[1] = aom_read_symbol(r, xd->tile_ctx->ncobmc_mode_cdf[ao_block],
+ MAX_NCOBMC_MODES, ACCT_STR);
if (counts) ++counts->ncobmc_mode[ao_block][ncobmc_mode[1]];
}
+#else
+ int i;
+ for (i = 0; i < 4; ++i) {
+ ncobmc_mode[0][i] = aom_read_symbol(
+ r, xd->tile_ctx->ncobmc_mode_cdf[ao_block], MAX_NCOBMC_MODES, ACCT_STR);
+ if (counts) ++counts->ncobmc_mode[ao_block][ncobmc_mode[0][i]];
+ }
+ if (mi_size_wide[mbmi->sb_type] != mi_size_high[mbmi->sb_type]) {
+ for (i = 0; i < 4; ++i) {
+ ncobmc_mode[1][i] =
+ aom_read_symbol(r, xd->tile_ctx->ncobmc_mode_cdf[ao_block],
+ MAX_NCOBMC_MODES, ACCT_STR);
+ if (counts) ++counts->ncobmc_mode[ao_block][ncobmc_mode[1][i]];
+ }
+ }
+#endif
}
#endif
#endif // CONFIG_MOTION_VAR || CONFIG_WARPED_MOTION
@@ -2659,7 +2681,7 @@
mbmi->motion_mode = read_motion_mode(cm, xd, mi, r);
#if CONFIG_NCOBMC_ADAPT_WEIGHT
- read_ncobmc_mode(cm, xd, mi, mbmi->ncobmc_mode, r);
+ read_ncobmc_mode(xd, mi, mbmi->ncobmc_mode, r);
#endif
#if CONFIG_EXT_INTER && CONFIG_COMPOUND_SINGLEREF