summaryrefslogtreecommitdiff
path: root/vp9
diff options
context:
space:
mode:
authorJerome Jiang <jianj@google.com>2017-05-12 15:57:23 -0700
committerJerome Jiang <jianj@google.com>2017-05-12 15:57:23 -0700
commit1fcd5cca3c810d37b8d81c69b6ebfe04c9f4cd4c (patch)
treec2300b20e1fb9aa210d2659212221eaa10348d25 /vp9
parent0d88e15454b632d92404dd6a7181c58d9985e2a2 (diff)
downloadlibvpx-1fcd5cca3c810d37b8d81c69b6ebfe04c9f4cd4c.tar
libvpx-1fcd5cca3c810d37b8d81c69b6ebfe04c9f4cd4c.tar.gz
libvpx-1fcd5cca3c810d37b8d81c69b6ebfe04c9f4cd4c.tar.bz2
libvpx-1fcd5cca3c810d37b8d81c69b6ebfe04c9f4cd4c.zip
vp9: speed 8: Fix seg fault in partition copy when drop frames.
BUG=webm:1433 Change-Id: I4f3984ef28660d3218d48007d7c977bdbdaf8af6
Diffstat (limited to 'vp9')
-rw-r--r--vp9/encoder/vp9_encoder.c4
-rw-r--r--vp9/encoder/vp9_encoder.h2
-rw-r--r--vp9/encoder/vp9_speed_features.c5
3 files changed, 9 insertions, 2 deletions
diff --git a/vp9/encoder/vp9_encoder.c b/vp9/encoder/vp9_encoder.c
index 32878dcc8..0cb279664 100644
--- a/vp9/encoder/vp9_encoder.c
+++ b/vp9/encoder/vp9_encoder.c
@@ -4077,12 +4077,14 @@ static void encode_frame_to_data_rate(VP9_COMP *cpi, size_t *size,
++cm->current_video_frame;
cpi->ext_refresh_frame_flags_pending = 0;
cpi->svc.rc_drop_superframe = 1;
+ cpi->last_frame_dropped = 1;
// TODO(marpan): Advancing the svc counters on dropped frames can break
// the referencing scheme for the fixed svc patterns defined in
// vp9_one_pass_cbr_svc_start_layer(). Look into fixing this issue, but
// for now, don't advance the svc frame counters on dropped frame.
// if (cpi->use_svc)
// vp9_inc_frame_in_layer(cpi);
+
return;
}
}
@@ -4100,6 +4102,8 @@ static void encode_frame_to_data_rate(VP9_COMP *cpi, size_t *size,
encode_with_recode_loop(cpi, size, dest);
}
+ cpi->last_frame_dropped = 0;
+
// Disable segmentation if it decrease rate/distortion ratio
if (cpi->oxcf.aq_mode == LOOKAHEAD_AQ)
vp9_try_disable_lookahead_aq(cpi, size, dest);
diff --git a/vp9/encoder/vp9_encoder.h b/vp9/encoder/vp9_encoder.h
index c47926168..672c83bfd 100644
--- a/vp9/encoder/vp9_encoder.h
+++ b/vp9/encoder/vp9_encoder.h
@@ -704,6 +704,8 @@ typedef struct VP9_COMP {
uint8_t *prev_variance_low;
uint8_t *copied_frame_cnt;
uint8_t max_copied_frame;
+ // If the last frame is dropped, we don't copy partition.
+ uint8_t last_frame_dropped;
// For each superblock: keeps track of the last time (in frame distance) the
// the superblock did not have low source sad.
diff --git a/vp9/encoder/vp9_speed_features.c b/vp9/encoder/vp9_speed_features.c
index 0884b8405..7917c63bf 100644
--- a/vp9/encoder/vp9_speed_features.c
+++ b/vp9/encoder/vp9_speed_features.c
@@ -565,8 +565,9 @@ static void set_rt_speed_feature_framesize_independent(
if (speed >= 8) {
sf->adaptive_rd_thresh = 4;
// Enable partition copy
- if (!cpi->use_svc && !cpi->resize_pending && cpi->resize_state == ORIG &&
- !cpi->external_resize && cpi->oxcf.resize_mode == RESIZE_NONE) {
+ if (!cpi->last_frame_dropped && !cpi->use_svc && !cpi->resize_pending &&
+ cpi->resize_state == ORIG && !cpi->external_resize &&
+ cpi->oxcf.resize_mode == RESIZE_NONE) {
sf->copy_partition_flag = 1;
cpi->max_copied_frame = 4;
}