ncobmc_adapt_weight: add motion mode cdf

Add a new default motion_mode_cdf supporting this
experiment.
Also define the costs for the ncobmc mode tokens.

Change-Id: Iebab044e4a34e3d2a94c18893107d82055cc9c77
diff --git a/av1/common/entropymode.c b/av1/common/entropymode.c
index 62e7cce..c3e3f54 100644
--- a/av1/common/entropymode.c
+++ b/av1/common/entropymode.c
@@ -743,28 +743,7 @@
 #endif  // CONFIG_EXT_PARTITION
       { 208 }, { 208 }, { 208 }, { 208 },
     };
-#else
-// TODO(weitinglin): The default probability is copied from warped motion right
-//                   now as a place holder. It needs to be fined tuned after
-//                   NCOBMC_ADAPT_WEIGHT is actually implemented. Also needs to
-//                   change this section appropriately once warped motion is
-//                   supported.
-const aom_tree_index av1_motion_mode_tree[TREE_SIZE(MOTION_MODES)] = {
-  -SIMPLE_TRANSLATION, 2, -OBMC_CAUSAL, -NCOBMC_ADAPT_WEIGHT,
-};
-static const aom_prob default_motion_mode_prob[BLOCK_SIZES][MOTION_MODES - 1] =
-    {
-#if CONFIG_CHROMA_2X2 || CONFIG_CHROMA_SUB8X8
-      { 255, 200 }, { 255, 200 }, { 255, 200 },
-#endif
-      { 255, 200 }, { 255, 200 }, { 255, 200 }, { 151, 200 }, { 153, 200 },
-      { 144, 200 }, { 178, 200 }, { 165, 200 }, { 160, 200 }, { 207, 200 },
-      { 195, 200 }, { 168, 200 }, { 244, 200 },
-#if CONFIG_EXT_PARTITION
-      { 252, 200 }, { 252, 200 }, { 252, 200 },
-#endif  // CONFIG_EXT_PARTITION
-    };
-#endif
+
 static const aom_cdf_prob
     default_motion_mode_cdf[BLOCK_SIZES][CDF_SIZE(MOTION_MODES)] = {
 #if CONFIG_CHROMA_2X2 || CONFIG_CHROMA_SUB8X8
@@ -796,6 +775,55 @@
       { AOM_ICDF(255 * 128), AOM_ICDF(32768), 0 },
     };
 
+#else
+// TODO(weitinglin): The default probability is copied from warped motion right
+//                   now as a place holder. It needs to be fined tuned after
+//                   NCOBMC_ADAPT_WEIGHT is actually implemented. Also needs to
+//                   change this section appropriately once warped motion is
+//                   supported.
+const aom_tree_index av1_motion_mode_tree[TREE_SIZE(MOTION_MODES)] = {
+  -SIMPLE_TRANSLATION, 2, -OBMC_CAUSAL, -NCOBMC_ADAPT_WEIGHT,
+};
+static const aom_prob default_motion_mode_prob[BLOCK_SIZES][MOTION_MODES - 1] =
+    {
+#if CONFIG_CHROMA_2X2 || CONFIG_CHROMA_SUB8X8
+      { 255, 200 }, { 255, 200 }, { 255, 200 },
+#endif
+      { 255, 200 }, { 255, 200 }, { 255, 200 }, { 151, 200 }, { 153, 200 },
+      { 144, 200 }, { 178, 200 }, { 165, 200 }, { 160, 200 }, { 207, 200 },
+      { 195, 200 }, { 168, 200 }, { 244, 200 },
+#if CONFIG_EXT_PARTITION
+      { 252, 200 }, { 252, 200 }, { 252, 200 },
+#endif  // CONFIG_EXT_PARTITION
+    };
+static const aom_cdf_prob
+    default_motion_mode_cdf[BLOCK_SIZES][CDF_SIZE(MOTION_MODES)] = {
+#if CONFIG_CHROMA_2X2 || CONFIG_CHROMA_SUB8X8
+      { AOM_ICDF(16384), AOM_ICDF(24576), AOM_ICDF(32768), 0 },
+      { AOM_ICDF(16384), AOM_ICDF(24576), AOM_ICDF(32768), 0 },
+      { AOM_ICDF(16384), AOM_ICDF(24576), AOM_ICDF(32768), 0 },
+#endif
+      { AOM_ICDF(16384), AOM_ICDF(24576), AOM_ICDF(32768), 0 },
+      { AOM_ICDF(16384), AOM_ICDF(24576), AOM_ICDF(32768), 0 },
+      { AOM_ICDF(16384), AOM_ICDF(24576), AOM_ICDF(32768), 0 },
+      { AOM_ICDF(7936), AOM_ICDF(19091), AOM_ICDF(32768), 0 },
+      { AOM_ICDF(4991), AOM_ICDF(19205), AOM_ICDF(32768), 0 },
+      { AOM_ICDF(4992), AOM_ICDF(19314), AOM_ICDF(32768), 0 },
+      { AOM_ICDF(15104), AOM_ICDF(21590), AOM_ICDF(32768), 0 },
+      { AOM_ICDF(9855), AOM_ICDF(21043), AOM_ICDF(32768), 0 },
+      { AOM_ICDF(12800), AOM_ICDF(22238), AOM_ICDF(32768), 0 },
+      { AOM_ICDF(24320), AOM_ICDF(26498), AOM_ICDF(32768), 0 },
+      { AOM_ICDF(26496), AOM_ICDF(28995), AOM_ICDF(32768), 0 },
+      { AOM_ICDF(25216), AOM_ICDF(28166), AOM_ICDF(32768), 0 },
+      { AOM_ICDF(30592), AOM_ICDF(31238), AOM_ICDF(32768), 0 },
+#if CONFIG_EXT_PARTITION
+      { AOM_ICDF(32256), AOM_ICDF(32656), AOM_ICDF(32768), 0 },
+      { AOM_ICDF(32256), AOM_ICDF(32656), AOM_ICDF(32768), 0 },
+      { AOM_ICDF(32256), AOM_ICDF(32656), AOM_ICDF(32768), 0 },
+#endif
+    };
+#endif  // CONFIG_NCOBMC_ADAPT_WEIGHT
+
 #elif !CONFIG_MOTION_VAR && CONFIG_WARPED_MOTION
 
 const aom_tree_index av1_motion_mode_tree[TREE_SIZE(MOTION_MODES)] = {
diff --git a/av1/common/entropymode.h b/av1/common/entropymode.h
index 2bdb39e..61525c0 100644
--- a/av1/common/entropymode.h
+++ b/av1/common/entropymode.h
@@ -220,6 +220,7 @@
   aom_cdf_prob motion_mode_cdf[BLOCK_SIZES_ALL][CDF_SIZE(MOTION_MODES)];
 #if CONFIG_NCOBMC_ADAPT_WEIGHT && CONFIG_MOTION_VAR
   aom_prob ncobmc_mode_prob[ADAPT_OVERLAP_BLOCKS][MAX_NCOBMC_MODES - 1];
+  aom_cdf_prob ncobmc_mode_cdf[BLOCK_SIZES][CDF_SIZE(MAX_NCOBMC_MODES)];
 #endif
 #if CONFIG_MOTION_VAR && CONFIG_WARPED_MOTION
   aom_prob obmc_prob[BLOCK_SIZES_ALL];
diff --git a/av1/decoder/decodeframe.c b/av1/decoder/decodeframe.c
index c69318c..ee5cce7 100644
--- a/av1/decoder/decodeframe.c
+++ b/av1/decoder/decodeframe.c
@@ -4964,10 +4964,10 @@
 
 #if CONFIG_NCOBMC_ADAPT_WEIGHT && CONFIG_MOTION_VAR
     for (i = 0; i < ADAPT_OVERLAP_BLOCKS; ++i) {
-      for (j = 0; j < MAX_NCOBMC_MODES - 1; ++j)
+      for (int j = 0; j < MAX_NCOBMC_MODES - 1; ++j)
         av1_diff_update_prob(&r, &fc->ncobmc_mode_prob[i][j], ACCT_STR);
     }
-#endif
+#endif  // CONFIG_NCOBMC_ADAPT_WEIGHT && CONFIG_MOTION_VAR
 
 #if !CONFIG_NEW_MULTISYMBOL
     for (i = 0; i < INTRA_INTER_CONTEXTS; i++)
diff --git a/av1/encoder/encoder.h b/av1/encoder/encoder.h
index 27931ee..b59f9ab 100644
--- a/av1/encoder/encoder.h
+++ b/av1/encoder/encoder.h
@@ -562,6 +562,9 @@
 #if CONFIG_MOTION_VAR && CONFIG_WARPED_MOTION
   int motion_mode_cost1[BLOCK_SIZES_ALL][2];
 #endif  // CONFIG_MOTION_VAR && CONFIG_WARPED_MOTION
+#if CONFIG_MOTION_VAR && CONFIG_NCOBMC_ADAPT_WEIGHT
+  int ncobmc_mode_cost[ADAPT_OVERLAP_BLOCKS][MAX_NCOBMC_MODES];
+#endif  // CONFIG_MOTION_VAR && CONFIG_NCOBMC_ADAPT_WEIGHT
 #endif  // CONFIG_MOTION_VAR || CONFIG_WARPED_MOTION
   int intra_uv_mode_cost[INTRA_MODES][INTRA_MODES];
   int y_mode_costs[INTRA_MODES][INTRA_MODES][INTRA_MODES];
diff --git a/av1/encoder/rd.c b/av1/encoder/rd.c
index bb2ba61..ce7776f 100644
--- a/av1/encoder/rd.c
+++ b/av1/encoder/rd.c
@@ -469,6 +469,12 @@
         cpi->motion_mode_cost1[i][1] = av1_cost_bit(cm->fc->obmc_prob[i], 1);
       }
 #endif  // CONFIG_MOTION_VAR && CONFIG_WARPED_MOTION
+#if CONFIG_MOTION_VAR && CONFIG_NCOBMC_ADAPT_WEIGHT
+      for (i = ADAPT_OVERLAP_BLOCK_8X8; i < ADAPT_OVERLAP_BLOCKS; ++i) {
+        av1_cost_tokens((int *)cpi->ncobmc_mode_cost[i],
+                        cm->fc->ncobmc_mode_prob[i], av1_ncobmc_mode_tree);
+      }
+#endif
 #endif  // CONFIG_MOTION_VAR || CONFIG_WARPED_MOTION
     }
   }