Merge "Fix vp10 txfm on MSVC 2015." into nextgenv2
diff --git a/vp10/common/blockd.h b/vp10/common/blockd.h
index b6eeee5..90c596e 100644
--- a/vp10/common/blockd.h
+++ b/vp10/common/blockd.h
@@ -400,15 +400,44 @@
   1, 16, 12, 2
 };
 static const int num_ext_tx_set_intra[EXT_TX_SETS_INTRA] = {
-  1, 12, 5
+  1, 7, 5
 };
 
 #if EXT_TX_SIZES == 4
 static INLINE int get_ext_tx_set(TX_SIZE tx_size, BLOCK_SIZE bs,
                                  int is_inter) {
   if (tx_size > TX_32X32 || bs < BLOCK_8X8) return 0;
+#if USE_REDUCED_TXSET_FOR_16X16
+  if (tx_size == TX_32X32)
+    return is_inter ? 3 - USE_MSKTX_FOR_32X32 : 0;
+  return (tx_size == TX_16X16 ? 2 : 1);
+#else
   if (tx_size == TX_32X32)
     return is_inter ? 3 - 2 * USE_MSKTX_FOR_32X32 : 0;
+  return (tx_size == TX_16X16 && !is_inter ? 2 : 1);
+#endif  // USE_REDUCED_TXSET_FOR_16X16
+}
+
+static const int use_intra_ext_tx_for_txsize[EXT_TX_SETS_INTRA][TX_SIZES] = {
+  { 0, 0, 0, 0, },  // unused
+  { 1, 1, 0, 0, },
+  { 0, 0, 1, 0, },
+};
+
+static const int use_inter_ext_tx_for_txsize[EXT_TX_SETS_INTER][TX_SIZES] = {
+  { 0, 0, 0, 0, },  // unused
+  { 1, 1, (!USE_REDUCED_TXSET_FOR_16X16), USE_MSKTX_FOR_32X32, },
+  { 0, 0, USE_REDUCED_TXSET_FOR_16X16, 0, },
+  { 0, 0, 0, (!USE_MSKTX_FOR_32X32), },
+};
+
+#else  // EXT_TX_SIZES == 4
+
+static INLINE int get_ext_tx_set(TX_SIZE tx_size, BLOCK_SIZE bs,
+                                 int is_inter) {
+  (void) is_inter;
+  if (tx_size > TX_32X32 || bs < BLOCK_8X8) return 0;
+  if (tx_size == TX_32X32) return 0;
 #if USE_REDUCED_TXSET_FOR_16X16
   return (tx_size == TX_16X16 ? 2 : 1);
 #else
@@ -424,31 +453,8 @@
 
 static const int use_inter_ext_tx_for_txsize[EXT_TX_SETS_INTER][TX_SIZES] = {
   { 0, 0, 0, 0, },  // unused
-  { 1, 1, 1, USE_MSKTX_FOR_32X32, },
-  { 0, 0, 0, 0, },
-  { 0, 0, 0, (!USE_MSKTX_FOR_32X32), },
-};
-
-#else  // EXT_TX_SIZES == 4
-
-static INLINE int get_ext_tx_set(TX_SIZE tx_size, BLOCK_SIZE bs,
-                                 int is_inter) {
-  (void) is_inter;
-  if (tx_size > TX_32X32 || bs < BLOCK_8X8) return 0;
-  if (tx_size == TX_32X32) return 0;
-  return tx_size == TX_16X16 ? 2 : 1;
-}
-
-static const int use_intra_ext_tx_for_txsize[EXT_TX_SETS_INTRA][TX_SIZES] = {
-  { 0, 0, 0, 0, },  // unused
-  { 1, 1, 0, 0, },
-  { 0, 0, 1, 0, },
-};
-
-static const int use_inter_ext_tx_for_txsize[EXT_TX_SETS_INTER][TX_SIZES] = {
-  { 0, 0, 0, 0, },  // unused
-  { 1, 1, 0, 0, },
-  { 0, 0, 1, 0, },
+  { 1, 1, (!USE_REDUCED_TXSET_FOR_16X16), 0, },
+  { 0, 0, USE_REDUCED_TXSET_FOR_16X16, 0, },
   { 0, 0, 0, 1, },
 };
 #endif  // EXT_TX_SIZES == 4
@@ -456,7 +462,7 @@
 // Transform types used in each intra set
 static const int ext_tx_used_intra[EXT_TX_SETS_INTRA][TX_TYPES] = {
   {1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0},
-  {1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 0, 0, 0, 0},
+  {1, 1, 1, 1, 0, 0, 0, 0, 0, 1, 1, 1, 0, 0, 0, 0},
   {1, 1, 1, 1, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0},
 };
 
@@ -715,14 +721,7 @@
 }
 
 static INLINE int is_neighbor_overlappable(const MB_MODE_INFO *mbmi) {
-#if CONFIG_EXT_INTER
-  return (is_inter_block(mbmi) &&
-          !(has_second_ref(mbmi) && get_wedge_bits(mbmi->sb_type) &&
-            mbmi->use_wedge_interinter) &&
-          !(is_interintra_pred(mbmi)));
-#else
   return (is_inter_block(mbmi));
-#endif  // CONFIG_EXT_INTER
 }
 #endif  // CONFIG_OBMC
 
diff --git a/vp10/common/entropymode.c b/vp10/common/entropymode.c
index f1c8e30..e622ebc 100644
--- a/vp10/common/entropymode.c
+++ b/vp10/common/entropymode.c
@@ -976,13 +976,8 @@
     -DCT_DCT, 4,
     6, 8,
     -V_DCT, -H_DCT,
-    10, 16,
-    12, 14,
+    -ADST_ADST, 10,
     -ADST_DCT, -DCT_ADST,
-    -FLIPADST_DCT, -DCT_FLIPADST,
-    18, 20,
-    -ADST_ADST, -FLIPADST_FLIPADST,
-    -ADST_FLIPADST, -FLIPADST_ADST,
   }, {
     -IDTX, 2,
     -DCT_DCT, 4,
@@ -1041,50 +1036,50 @@
     },
   }, {
     {
-      {   8, 176,  32, 128, 128, 128, 128, 128, 128, 128, 128, },
-      {  10,  28,  32, 128, 176, 192, 208, 128, 128, 128, 128, },
-      {  10,  28,  32, 128, 176, 192,  48, 128, 128, 128, 128, },
-      {   9, 160,  32, 128, 128, 128, 128, 128, 128, 128, 128, },
-      {   8,  28,  32, 128,  96, 128, 128, 128, 160, 192, 128, },
-      {   7,  28,  32, 128, 160, 176, 192, 128, 128, 128, 128, },
-      {   7,  20,  32, 128, 160, 176,  64, 128, 128, 128, 128, },
-      {  10,  23,  32, 128, 160, 176,  64, 128, 128, 128, 128, },
-      {   8,  29,  32, 128, 160, 176, 192, 128, 128, 128, 128, },
-      {   3,  20,  32, 128,  96, 128, 128, 128, 160, 192, 128, },
+      {   8, 224,  32, 128, 64, 128, },
+      {  10,  32,  32, 128, 16, 192, },
+      {  10,  32,  32, 128, 16,  64, },
+      {   9, 200,  32, 128, 64, 128, },
+      {   8,   8,  32, 128, 224, 128, },
+      {  10,  32,  32, 128, 16, 192, },
+      {  10,  32,  32, 128, 16,  64, },
+      {  10,  23,  32, 128, 80, 176, },
+      {  10,  23,  32, 128, 80, 176, },
+      {  10,  32,  32, 128, 16,  64, },
     }, {
-      {   2, 176,  32, 128, 128, 128, 128, 128, 128, 128, 128, },
-      {   4,  28,  32, 128, 176, 192, 208, 128, 128, 128, 128, },
-      {   4,  28,  32, 128, 176, 192,  48, 128, 128, 128, 128, },
-      {   8, 160,  32, 128, 128, 128, 128, 128, 128, 128, 128, },
-      {   2,  28,  32, 128,  96, 128, 128, 128, 160, 192, 128, },
-      {   3,  28,  32, 128, 160, 176, 192, 128, 128, 128, 128, },
-      {   3,  26,  32, 128, 160, 176,  64, 128, 128, 128, 128, },
-      {   9,  24,  32, 128, 160, 176,  64, 128, 128, 128, 128, },
-      {   5,  24,  32, 128, 160, 176, 192, 128, 128, 128, 128, },
-      {   2,  25,  32, 128,  96, 128, 128, 128, 160, 192, 128, },
+      {   8, 224, 32, 128,  64, 128, },
+      {  10,  32, 32, 128,  16, 192, },
+      {  10,  32, 32, 128,  16,  64, },
+      {   9, 200, 32, 128,  64, 128, },
+      {   8,   8, 32, 128, 224, 128, },
+      {  10,  32, 32, 128,  16, 192, },
+      {  10,  32, 32, 128,  16,  64, },
+      {  10,  23, 32, 128,  80, 176, },
+      {  10,  23, 32, 128,  80, 176, },
+      {  10,  32, 32, 128,  16,  64, },
     }, {
-      {   2, 176,  32, 128, 128, 128, 128, 128, 128, 128, 128, },
-      {   1,  28,  32, 128, 176, 192, 208, 128, 128, 128, 128, },
-      {   1,  28,  32, 128, 176, 192,  48, 128, 128, 128, 128, },
-      {   4, 160,  32, 128, 128, 128, 128, 128, 128, 128, 128, },
-      {   2,  28,  32, 128,  96, 128, 128, 128, 160, 192, 128, },
-      {   2,  28,  32, 128, 160, 176, 192, 128, 128, 128, 128, },
-      {   3,  29,  32, 128, 160, 176,  64, 128, 128, 128, 128, },
-      {   4,  27,  32, 128, 160, 176,  64, 128, 128, 128, 128, },
-      {   2,  34,  32, 128, 160, 176, 192, 128, 128, 128, 128, },
-      {   1,  25,  32, 128,  96, 128, 128, 128, 160, 192, 128, },
+      {   8, 224, 32, 128,  64, 128, },
+      {  10,  32, 32, 128,  16, 192, },
+      {  10,  32, 32, 128,  16,  64, },
+      {   9, 200, 32, 128,  64, 128, },
+      {   8,   8, 32, 128, 224, 128, },
+      {  10,  32, 32, 128,  16, 192, },
+      {  10,  32, 32, 128,  16,  64, },
+      {  10,  23, 32, 128,  80, 176, },
+      {  10,  23, 32, 128,  80, 176, },
+      {  10,  32, 32, 128,  16,  64, },
 #if EXT_TX_SIZES == 4
     }, {
-      {   2, 176,  32, 128, 128, 128, 128, 128, 128, 128, 128, },
-      {   1,  12,  32, 128, 160, 176, 192, 128, 128, 128, 128, },
-      {   1,  17,  32, 128, 160, 176,  64, 128, 128, 128, 128, },
-      {   4,  41,  32, 128, 128, 128, 128, 128, 128, 128, 128, },
-      {   2,  17,  32, 128,  96, 128, 128, 128, 160, 192, 128, },
-      {   2,  14,  32, 128, 160, 176, 192, 128, 128, 128, 128, },
-      {   3,  19,  32, 128, 160, 176,  64, 128, 128, 128, 128, },
-      {   4,  27,  32, 128, 160, 176,  64, 128, 128, 128, 128, },
-      {   2,  34,  32, 128, 160, 176, 192, 128, 128, 128, 128, },
-      {   1,  15,  32, 128,  96, 128, 128, 128, 160, 192, 128, },
+      {   8, 224, 32, 128,  64, 128, },
+      {  10,  32, 32, 128,  16, 192, },
+      {  10,  32, 32, 128,  16,  64, },
+      {   9, 200, 32, 128,  64, 128, },
+      {   8,   8, 32, 128, 224, 128, },
+      {  10,  32, 32, 128,  16, 192, },
+      {  10,  32, 32, 128,  16,  64, },
+      {  10,  23, 32, 128,  80, 176, },
+      {  10,  23, 32, 128,  80, 176, },
+      {  10,  32, 32, 128,  16,  64, },
 #endif
     },
   }, {
diff --git a/vp10/common/reconinter.c b/vp10/common/reconinter.c
index 2d2563e..e5e2442 100644
--- a/vp10/common/reconinter.c
+++ b/vp10/common/reconinter.c
@@ -1402,6 +1402,19 @@
   }  // each mi in the left column
 }
 
+#if CONFIG_EXT_INTER
+void modify_neighbor_predictor_for_obmc(MB_MODE_INFO *mbmi) {
+  if (is_interintra_pred(mbmi)) {
+    mbmi->ref_frame[1] = NONE;
+  } else if (has_second_ref(mbmi) && get_wedge_bits(mbmi->sb_type) &&
+             mbmi->use_wedge_interinter) {
+    mbmi->use_wedge_interinter = 0;
+    mbmi->ref_frame[1] = NONE;
+  }
+  return;
+}
+#endif  // CONFIG_EXT_INTER
+
 void vp10_build_prediction_by_above_preds(VP10_COMMON *cm,
                                           MACROBLOCKD *xd,
                                           int mi_row, int mi_col,
@@ -1420,6 +1433,9 @@
     MODE_INFO *above_mi = xd->mi[mi_col_offset +
                                  mi_row_offset * xd->mi_stride];
     MB_MODE_INFO *above_mbmi = &above_mi->mbmi;
+#if CONFIG_EXT_INTER
+    MB_MODE_INFO backup_mbmi;
+#endif  // CONFIG_EXT_INTER
 
     mi_step = VPXMIN(xd->n8_w,
                      num_8x8_blocks_wide_lookup[above_mbmi->sb_type]);
@@ -1427,6 +1443,11 @@
     if (!is_neighbor_overlappable(above_mbmi))
       continue;
 
+#if CONFIG_EXT_INTER
+    backup_mbmi = *above_mbmi;
+    modify_neighbor_predictor_for_obmc(above_mbmi);
+#endif  // CONFIG_EXT_INTER
+
     for (j = 0; j < MAX_MB_PLANE; ++j) {
       struct macroblockd_plane *const pd = &xd->plane[j];
       setup_pred_plane(&pd->dst,
@@ -1488,6 +1509,9 @@
                                mi_x, mi_y);
       }
     }
+#if CONFIG_EXT_INTER
+    *above_mbmi = backup_mbmi;
+#endif  // CONFIG_EXT_INTER
   }
   xd->mb_to_left_edge   = -((mi_col * MI_SIZE) * 8);
 }
@@ -1513,6 +1537,9 @@
                                 mi_row_offset * xd->mi_stride];
     MB_MODE_INFO *left_mbmi = &left_mi->mbmi;
     const int is_compound = has_second_ref(left_mbmi);
+#if CONFIG_EXT_INTER
+    MB_MODE_INFO backup_mbmi;
+#endif  // CONFIG_EXT_INTER
 
     mi_step = VPXMIN(xd->n8_h,
                      num_8x8_blocks_high_lookup[left_mbmi->sb_type]);
@@ -1520,6 +1547,11 @@
     if (!is_neighbor_overlappable(left_mbmi))
       continue;
 
+#if CONFIG_EXT_INTER
+    backup_mbmi = *left_mbmi;
+    modify_neighbor_predictor_for_obmc(left_mbmi);
+#endif  // CONFIG_EXT_INTER
+
     for (j = 0; j < MAX_MB_PLANE; ++j) {
       struct macroblockd_plane *const pd = &xd->plane[j];
       setup_pred_plane(&pd->dst,
@@ -1581,6 +1613,9 @@
                                mi_x, mi_y);
       }
     }
+#if CONFIG_EXT_INTER
+    *left_mbmi = backup_mbmi;
+#endif  // CONFIG_EXT_INTER
   }
   xd->mb_to_top_edge    = -((mi_row * MI_SIZE) * 8);
 }
diff --git a/vp10/encoder/encoder.c b/vp10/encoder/encoder.c
index 437b366..21ed965 100644
--- a/vp10/encoder/encoder.c
+++ b/vp10/encoder/encoder.c
@@ -833,14 +833,18 @@
     cm->tile_height = clamp(cpi->oxcf.tile_rows, 1, 32);
     cm->tile_width  <<= MAX_MIB_SIZE_LOG2;
     cm->tile_height <<= MAX_MIB_SIZE_LOG2;
-  } else
-#endif  // CONFIG_EXT_PARTITION
-  {
+  } else {
     cm->tile_width  = clamp(cpi->oxcf.tile_columns, 1, 64);
     cm->tile_height = clamp(cpi->oxcf.tile_rows, 1, 64);
     cm->tile_width  <<= MAX_MIB_SIZE_LOG2 - 1;
     cm->tile_height <<= MAX_MIB_SIZE_LOG2 - 1;
   }
+#else
+  cm->tile_width  = clamp(cpi->oxcf.tile_columns, 1, 64);
+  cm->tile_height = clamp(cpi->oxcf.tile_rows, 1, 64);
+  cm->tile_width  <<= MAX_MIB_SIZE_LOG2;
+  cm->tile_height <<= MAX_MIB_SIZE_LOG2;
+#endif  // CONFIG_EXT_PARTITION
 
   cm->tile_width  = VPXMIN(cm->tile_width, cm->mi_cols);
   cm->tile_height = VPXMIN(cm->tile_height, cm->mi_rows);
diff --git a/vp10/encoder/rdopt.c b/vp10/encoder/rdopt.c
index 0d2dada..f2f8291 100644
--- a/vp10/encoder/rdopt.c
+++ b/vp10/encoder/rdopt.c
@@ -6387,10 +6387,16 @@
           joint_motion_search(cpi, x, bsize, frame_mv,
                               mi_row, mi_col, NULL, single_newmv, &rate_mv, 0);
         } else {
+#if CONFIG_REF_MV
+          vp10_set_mvcost(x, mbmi->ref_frame[0]);
+#endif  // CONFIG_REF_MV
           rate_mv  = vp10_mv_bit_cost(&frame_mv[refs[0]].as_mv,
                                       &x->mbmi_ext->ref_mvs[refs[0]][0].as_mv,
                                       x->nmvjointcost, x->mvcost,
                                       MV_COST_WEIGHT);
+#if CONFIG_REF_MV
+          vp10_set_mvcost(x, mbmi->ref_frame[1]);
+#endif  // CONFIG_REF_MV
           rate_mv += vp10_mv_bit_cost(&frame_mv[refs[1]].as_mv,
                                       &x->mbmi_ext->ref_mvs[refs[1]][0].as_mv,
                                       x->nmvjointcost, x->mvcost,
@@ -6417,9 +6423,15 @@
                             mi_row, mi_col,
                             single_newmv, &rate_mv, 0);
       } else {
+#if CONFIG_REF_MV
+        vp10_set_mvcost(x, mbmi->ref_frame[0]);
+#endif  // CONFIG_REF_MV
         rate_mv  = vp10_mv_bit_cost(&frame_mv[refs[0]].as_mv,
                                    &x->mbmi_ext->ref_mvs[refs[0]][0].as_mv,
                                    x->nmvjointcost, x->mvcost, MV_COST_WEIGHT);
+#if CONFIG_REF_MV
+        vp10_set_mvcost(x, mbmi->ref_frame[1]);
+#endif  // CONFIG_REF_MV
         rate_mv += vp10_mv_bit_cost(&frame_mv[refs[1]].as_mv,
                                    &x->mbmi_ext->ref_mvs[refs[1]][0].as_mv,
                                    x->nmvjointcost, x->mvcost, MV_COST_WEIGHT);
@@ -8433,8 +8445,10 @@
 
           if (!mv_check_bounds(x, &cur_mv.as_mv)) {
             INTERP_FILTER dummy_single_inter_filter[MB_MODE_COUNT]
-                                                   [MAX_REF_FRAMES];
-            int dummy_single_skippable[MB_MODE_COUNT][MAX_REF_FRAMES];
+                                                   [MAX_REF_FRAMES] =
+                                          { { 0 } };
+            int dummy_single_skippable[MB_MODE_COUNT][MAX_REF_FRAMES] =
+                                          { { 0 } };
             int dummy_disable_skip = 0;
 #if CONFIG_EXT_INTER
             int_mv dummy_single_newmvs[2][MAX_REF_FRAMES] =
diff --git a/vp10/encoder/speed_features.c b/vp10/encoder/speed_features.c
index cd1c91a..b3304a7 100644
--- a/vp10/encoder/speed_features.c
+++ b/vp10/encoder/speed_features.c
@@ -551,6 +551,12 @@
   else if (oxcf->mode == GOOD)
     set_good_speed_feature(cpi, cm, sf, oxcf->speed);
 
+#if CONFIG_REF_MV
+  // TODO(geza): Temporarily turn this off for ref-mv to fix tests.
+  //             Investigate/reimplement skip_recode better to enable this.
+  sf->allow_skip_recode = 0;
+#endif  // CONFIG_REF_MV
+
   // sf->partition_search_breakout_dist_thr is set assuming max 64x64
   // blocks. Normalise this if the blocks are bigger.
   if (MAX_SB_SIZE_LOG2 > 6) {