Recover tile coding performance
After porting tile coding from VP9 to VP10, some performance
degradation was seen because of the difference between VP9 and
Vp10 baseline. This patch disabled some features in VP10 while
tile coding is turned on. Also, an encoder control API was added
back for this use case.
Change-Id: I8f736db8388408a8cc35320a2f80abb02906571c
diff --git a/vp10/common/blockd.h b/vp10/common/blockd.h
index 92a0885..fb3f44b 100644
--- a/vp10/common/blockd.h
+++ b/vp10/common/blockd.h
@@ -519,7 +519,11 @@
int pick_intra_filter(int angle);
#endif // CONFIG_EXT_INTRA
+#if CONFIG_EXT_TILE
+#define FIXED_TX_TYPE 1
+#else
#define FIXED_TX_TYPE 0
+#endif
static INLINE TX_TYPE get_default_tx_type(PLANE_TYPE plane_type,
const MACROBLOCKD *xd,
diff --git a/vp10/decoder/decoder.c b/vp10/decoder/decoder.c
index d3fee85..a158ee8 100644
--- a/vp10/decoder/decoder.c
+++ b/vp10/decoder/decoder.c
@@ -399,7 +399,13 @@
swap_frame_buffers(pbi);
- vpx_extend_frame_inner_borders(cm->frame_to_show);
+#if CONFIG_EXT_TILE
+ // For now, we only extend the frame borders when the whole frame is decoded.
+ // Later, if needed, extend the border for the decoded tile on the frame
+ // border.
+ if (pbi->dec_tile_row == -1 && pbi->dec_tile_col == -1)
+#endif // CONFIG_EXT_TILE
+ vpx_extend_frame_inner_borders(cm->frame_to_show);
vpx_clear_system_state();
diff --git a/vp10/encoder/speed_features.c b/vp10/encoder/speed_features.c
index c50b949..25766bb 100644
--- a/vp10/encoder/speed_features.c
+++ b/vp10/encoder/speed_features.c
@@ -494,7 +494,7 @@
sf->disable_filter_search_var_thresh = 0;
sf->adaptive_interp_filter_search = 0;
sf->allow_partition_search_skip = 0;
-#if CONFIG_EXT_REFS
+#if CONFIG_EXT_REFS || CONFIG_EXT_TILE
sf->use_upsampled_references = 0;
#else
sf->use_upsampled_references = 1;
@@ -530,7 +530,11 @@
sf->simple_model_rd_from_var = 0;
// Set this at the appropriate speed levels
+#if CONFIG_EXT_TILE
+ sf->use_transform_domain_distortion = 1;
+#else
sf->use_transform_domain_distortion = 0;
+#endif
if (oxcf->mode == REALTIME)
set_rt_speed_feature(cpi, sf, oxcf->speed, oxcf->content);
diff --git a/vp10/vp10_cx_iface.c b/vp10/vp10_cx_iface.c
index 5f4c003..169c9dd 100644
--- a/vp10/vp10_cx_iface.c
+++ b/vp10/vp10_cx_iface.c
@@ -1158,6 +1158,14 @@
}
}
+static vpx_codec_err_t ctrl_use_reference(vpx_codec_alg_priv_t *ctx,
+ va_list args) {
+ const int reference_flag = va_arg(args, int);
+
+ vp10_use_as_reference(ctx->cpi, reference_flag);
+ return VPX_CODEC_OK;
+}
+
static vpx_codec_err_t ctrl_set_roi_map(vpx_codec_alg_priv_t *ctx,
va_list args) {
(void)ctx;
@@ -1254,6 +1262,7 @@
static vpx_codec_ctrl_fn_map_t encoder_ctrl_maps[] = {
{VP8_COPY_REFERENCE, ctrl_copy_reference},
+ {VP8E_USE_REFERENCE, ctrl_use_reference},
// Setters
{VP8_SET_REFERENCE, ctrl_set_reference},
diff --git a/vpx/vp8cx.h b/vpx/vp8cx.h
index 7504c0e..d9764a4 100644
--- a/vpx/vp8cx.h
+++ b/vpx/vp8cx.h
@@ -141,6 +141,12 @@
* \sa #vpx_codec_control
*/
enum vp8e_enc_control_id {
+ /*!\brief Codec control function to set which reference frame encoder can use.
+ *
+ * Supported in codecs: VP8, VP9
+ */
+ VP8E_USE_REFERENCE = 7,
+
/*!\brief Codec control function to pass an ROI map to encoder.
*
* Supported in codecs: VP8, VP9
@@ -703,6 +709,8 @@
*
*/
+VPX_CTRL_USE_TYPE_DEPRECATED(VP8E_USE_REFERENCE, int)
+#define VPX_CTRL_VP8E_USE_REFERENCE
VPX_CTRL_USE_TYPE(VP8E_SET_FRAME_FLAGS, int)
#define VPX_CTRL_VP8E_SET_FRAME_FLAGS
VPX_CTRL_USE_TYPE(VP8E_SET_TEMPORAL_LAYER_ID, int)