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) {