NEW_MULTISYMBOL: adapt obmc syntax.

Change-Id: Iea00482779cd3fdc7f354d5c39684dd0752d0849
diff --git a/av1/common/entropy.c b/av1/common/entropy.c
index 69966a7..1978424 100644
--- a/av1/common/entropy.c
+++ b/av1/common/entropy.c
@@ -5703,9 +5703,10 @@
   AVERAGE_TILE_CDFS(drl_cdf)
 #endif
 
-// FIXME: cdfs not defined for motion_mode_prob, obmc_prob
+// FIXME: cdfs not defined for motion_mode_prob
 
 // FIXME: cdfs not defined for super_tx
+
 #if CONFIG_EXT_INTER
   AVERAGE_TILE_CDFS(inter_compound_mode_cdf)
 
@@ -5731,6 +5732,9 @@
   }
 #if CONFIG_NEW_MULTISYMBOL
   AVERAGE_TILE_CDFS(intra_inter_cdf)
+#if CONFIG_MOTION_VAR && CONFIG_WARPED_MOTION
+  AVERAGE_TILE_CDFS(obmc_cdf)
+#endif
 #endif
 }
 
diff --git a/av1/common/entropymode.c b/av1/common/entropymode.c
index 2a39922..6d6bc88 100644
--- a/av1/common/entropymode.c
+++ b/av1/common/entropymode.c
@@ -1390,6 +1390,34 @@
   252, 252, 252,
 #endif  // CONFIG_EXT_PARTITION
 };
+
+#if CONFIG_NEW_MULTISYMBOL
+static const aom_cdf_prob default_obmc_cdf[BLOCK_SIZES][CDF_SIZE(2)] = {
+#if CONFIG_CHROMA_2X2 || CONFIG_CHROMA_SUB8X8
+  { AOM_ICDF(255 * 128), AOM_ICDF(32768), 0 },
+  { AOM_ICDF(255 * 128), AOM_ICDF(32768), 0 },
+  { AOM_ICDF(255 * 128), AOM_ICDF(32768), 0 },
+#endif
+  { AOM_ICDF(255 * 128), AOM_ICDF(32768), 0 },
+  { AOM_ICDF(255 * 128), AOM_ICDF(32768), 0 },
+  { AOM_ICDF(255 * 128), AOM_ICDF(32768), 0 },
+  { AOM_ICDF(151 * 128), AOM_ICDF(32768), 0 },
+  { AOM_ICDF(153 * 128), AOM_ICDF(32768), 0 },
+  { AOM_ICDF(144 * 128), AOM_ICDF(32768), 0 },
+  { AOM_ICDF(178 * 128), AOM_ICDF(32768), 0 },
+  { AOM_ICDF(165 * 128), AOM_ICDF(32768), 0 },
+  { AOM_ICDF(160 * 128), AOM_ICDF(32768), 0 },
+  { AOM_ICDF(207 * 128), AOM_ICDF(32768), 0 },
+  { AOM_ICDF(195 * 128), AOM_ICDF(32768), 0 },
+  { AOM_ICDF(168 * 128), AOM_ICDF(32768), 0 },
+  { AOM_ICDF(244 * 128), AOM_ICDF(32768), 0 },
+#if CONFIG_EXT_PARTITION
+  { AOM_ICDF(252 * 128), AOM_ICDF(32768), 0 },
+  { AOM_ICDF(252 * 128), AOM_ICDF(32768), 0 },
+  { AOM_ICDF(252 * 128), AOM_ICDF(32768), 0 },
+#endif  // CONFIG_EXT_PARTITION
+};
+#endif  // CONFIG_NEW_MULTISYMBOL
 #endif
 
 #if CONFIG_DELTA_Q
@@ -4905,6 +4933,9 @@
 #endif
 #if CONFIG_MOTION_VAR && CONFIG_WARPED_MOTION
   av1_copy(fc->obmc_prob, default_obmc_prob);
+#if CONFIG_NEW_MULTISYMBOL
+  av1_copy(fc->obmc_cdf, default_obmc_cdf);
+#endif
 #endif  // CONFIG_MOTION_VAR && CONFIG_WARPED_MOTION
 #endif  // CONFIG_MOTION_VAR || CONFIG_WARPED_MOTION
 #if CONFIG_EXT_INTER
diff --git a/av1/common/entropymode.h b/av1/common/entropymode.h
index c8a1a3c..eb509bf 100644
--- a/av1/common/entropymode.h
+++ b/av1/common/entropymode.h
@@ -230,6 +230,9 @@
 
 #if CONFIG_MOTION_VAR && CONFIG_WARPED_MOTION
   aom_prob obmc_prob[BLOCK_SIZES];
+#if CONFIG_NEW_MULTISYMBOL
+  aom_cdf_prob obmc_cdf[BLOCK_SIZES][CDF_SIZE(2)];
+#endif  // CONFIG_NEW_MULTISYMBOL
 #endif  // CONFIG_MOTION_VAR && CONFIG_WARPED_MOTION
 #endif  // CONFIG_MOTION_VAR || CONFIG_WARPED_MOTION
   aom_prob intra_inter_prob[INTRA_INTER_CONTEXTS];
diff --git a/av1/decoder/decodemv.c b/av1/decoder/decodemv.c
index 5f3e83d..79dd298 100644
--- a/av1/decoder/decodemv.c
+++ b/av1/decoder/decodemv.c
@@ -342,7 +342,12 @@
   if (last_motion_mode_allowed == SIMPLE_TRANSLATION) return SIMPLE_TRANSLATION;
 #if CONFIG_MOTION_VAR && CONFIG_WARPED_MOTION
   if (last_motion_mode_allowed == OBMC_CAUSAL) {
+#if CONFIG_NEW_MULTISYMBOL
+    motion_mode =
+        aom_read_symbol(r, xd->tile_ctx->obmc_cdf[mbmi->sb_type], 2, ACCT_STR);
+#else
     motion_mode = aom_read(r, cm->fc->obmc_prob[mbmi->sb_type], ACCT_STR);
+#endif
     if (counts) ++counts->obmc[mbmi->sb_type][motion_mode];
     return (MOTION_MODE)(SIMPLE_TRANSLATION + motion_mode);
   } else {
diff --git a/av1/encoder/bitstream.c b/av1/encoder/bitstream.c
index 0fca4ca..cf209f3 100644
--- a/av1/encoder/bitstream.c
+++ b/av1/encoder/bitstream.c
@@ -609,9 +609,13 @@
 }
 
 #if CONFIG_MOTION_VAR || CONFIG_WARPED_MOTION
-static void write_motion_mode(const AV1_COMMON *cm, const MODE_INFO *mi,
-                              aom_writer *w) {
+static void write_motion_mode(const AV1_COMMON *cm, MACROBLOCKD *xd,
+                              const MODE_INFO *mi, aom_writer *w) {
   const MB_MODE_INFO *mbmi = &mi->mbmi;
+#if !CONFIG_NEW_MULTISYMBOL
+  (void)xd;
+#endif
+
 #if CONFIG_NCOBMC_ADAPT_WEIGHT
   MOTION_MODE last_motion_mode_allowed =
       motion_mode_allowed_wrapper(0,
@@ -629,8 +633,13 @@
   if (last_motion_mode_allowed == SIMPLE_TRANSLATION) return;
 #if CONFIG_MOTION_VAR && CONFIG_WARPED_MOTION
   if (last_motion_mode_allowed == OBMC_CAUSAL) {
+#if CONFIG_NEW_MULTISYMBOL
+    aom_write_symbol(w, mbmi->motion_mode == OBMC_CAUSAL,
+                     xd->tile_ctx->obmc_cdf[mbmi->sb_type], 2);
+#else
     aom_write(w, mbmi->motion_mode == OBMC_CAUSAL,
               cm->fc->obmc_prob[mbmi->sb_type]);
+#endif
   } else {
 #endif  // CONFIG_MOTION_VAR && CONFIG_WARPED_MOTION
     av1_write_token(w, av1_motion_mode_tree,
@@ -2281,7 +2290,7 @@
 #if CONFIG_EXT_INTER
       if (mbmi->ref_frame[1] != INTRA_FRAME)
 #endif  // CONFIG_EXT_INTER
-        write_motion_mode(cm, mi, w);
+        write_motion_mode(cm, xd, mi, w);
 #if CONFIG_NCOBMC_ADAPT_WEIGHT
     write_ncobmc_mode(cm, mi, w);
 #endif