diff options
author | Jerome Jiang <jianj@google.com> | 2017-05-12 15:57:23 -0700 |
---|---|---|
committer | Jerome Jiang <jianj@google.com> | 2017-05-12 15:57:23 -0700 |
commit | 1fcd5cca3c810d37b8d81c69b6ebfe04c9f4cd4c (patch) | |
tree | c2300b20e1fb9aa210d2659212221eaa10348d25 /vp9 | |
parent | 0d88e15454b632d92404dd6a7181c58d9985e2a2 (diff) | |
download | libvpx-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.c | 4 | ||||
-rw-r--r-- | vp9/encoder/vp9_encoder.h | 2 | ||||
-rw-r--r-- | vp9/encoder/vp9_speed_features.c | 5 |
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; } |