summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorMarco <marpan@google.com>2016-02-10 16:59:09 -0800
committerMarco <marpan@google.com>2016-02-11 08:35:57 -0800
commit34d12d116051e4e9c877b601f9add06ad725f6e3 (patch)
treef3d23cc435ea2d5ac305c2d36dccfcf497f9243b
parentacc592b35abdb0e2ad60ba11bbdbcd0f08e8b4e8 (diff)
downloadlibvpx-34d12d116051e4e9c877b601f9add06ad725f6e3.tar
libvpx-34d12d116051e4e9c877b601f9add06ad725f6e3.tar.gz
libvpx-34d12d116051e4e9c877b601f9add06ad725f6e3.tar.bz2
libvpx-34d12d116051e4e9c877b601f9add06ad725f6e3.zip
vp9-resize: Force reference masking off for external dynamic-resizing.
An issue exists with reference_masking in non-rd pickmode for spatial scaling. It was kept off for internal dynamic resizing and svc, this change is to keep it off also for external dynamic resizing. Update to external resize test, and update TODO to re-enable this at frame level when references have same scale as source. Change-Id: If880a643572127def703ee5b2d16fd41bdbf256c
-rw-r--r--test/resize_test.cc2
-rw-r--r--vp9/encoder/vp9_encoder.c3
-rw-r--r--vp9/encoder/vp9_encoder.h1
-rw-r--r--vp9/encoder/vp9_speed_features.c12
4 files changed, 13 insertions, 5 deletions
diff --git a/test/resize_test.cc b/test/resize_test.cc
index 10f7fe22f..c5f05f310 100644
--- a/test/resize_test.cc
+++ b/test/resize_test.cc
@@ -387,6 +387,8 @@ class ResizeRealtimeTest : public ::libvpx_test::EncoderTest,
TEST_P(ResizeRealtimeTest, TestExternalResizeWorks) {
ResizingVideoSource video;
DefaultConfig();
+ // Disable internal resize for this test.
+ cfg_.rc_resize_allowed = 0;
change_bitrate_ = false;
ASSERT_NO_FATAL_FAILURE(RunLoop(&video));
diff --git a/vp9/encoder/vp9_encoder.c b/vp9/encoder/vp9_encoder.c
index bd9813a77..ff176fb93 100644
--- a/vp9/encoder/vp9_encoder.c
+++ b/vp9/encoder/vp9_encoder.c
@@ -1525,6 +1525,7 @@ void vp9_change_config(struct VP9_COMP *cpi, const VP9EncoderConfig *oxcf) {
if (last_w != cpi->oxcf.width || last_h != cpi->oxcf.height) {
cm->width = cpi->oxcf.width;
cm->height = cpi->oxcf.height;
+ cpi->external_resize = 1;
}
if (cpi->initial_width) {
@@ -1536,6 +1537,7 @@ void vp9_change_config(struct VP9_COMP *cpi, const VP9EncoderConfig *oxcf) {
alloc_compressor_data(cpi);
realloc_segmentation_maps(cpi);
cpi->initial_width = cpi->initial_height = 0;
+ cpi->external_resize = 0;
}
}
update_frame_size(cpi);
@@ -1671,6 +1673,7 @@ VP9_COMP *vp9_create_compressor(VP9EncoderConfig *oxcf,
cpi->use_svc = 0;
cpi->resize_state = 0;
+ cpi->external_resize = 0;
cpi->resize_avg_qp = 0;
cpi->resize_buffer_underflow = 0;
cpi->use_skin_detection = 0;
diff --git a/vp9/encoder/vp9_encoder.h b/vp9/encoder/vp9_encoder.h
index 838ceacd6..c486ac258 100644
--- a/vp9/encoder/vp9_encoder.h
+++ b/vp9/encoder/vp9_encoder.h
@@ -488,6 +488,7 @@ typedef struct VP9_COMP {
int resize_pending;
int resize_state;
+ int external_resize;
int resize_scale_num;
int resize_scale_den;
int resize_avg_qp;
diff --git a/vp9/encoder/vp9_speed_features.c b/vp9/encoder/vp9_speed_features.c
index b4f20fcd6..8a34fd9ad 100644
--- a/vp9/encoder/vp9_speed_features.c
+++ b/vp9/encoder/vp9_speed_features.c
@@ -303,11 +303,13 @@ static void set_rt_speed_feature(VP9_COMP *cpi, SPEED_FEATURES *sf,
FLAG_SKIP_INTRA_LOWVAR;
sf->adaptive_pred_interp_filter = 2;
- // Disable reference masking if using spatial scaling since
- // pred_mv_sad will not be set (since vp9_mv_pred will not
- // be called).
- // TODO(marpan/agrange): Fix this condition.
- sf->reference_masking = (cpi->oxcf.resize_mode != RESIZE_DYNAMIC &&
+ // Disable reference masking if using spatial scaling or for dynamic
+ // resizing (internal or external) since pred_mv_sad will not be set
+ // (since vp9_mv_pred will not be called).
+ // TODO(marpan): Fix this condition to allow reference masking for when
+ // all references have same resolution as source frame.
+ sf->reference_masking = (cpi->external_resize == 0 &&
+ cpi->oxcf.resize_mode != RESIZE_DYNAMIC &&
cpi->svc.number_spatial_layers == 1) ? 1 : 0;
sf->disable_filter_search_var_thresh = 50;