diff options
Diffstat (limited to 'vp9')
-rw-r--r-- | vp9/encoder/vp9_aq_360.c | 3 | ||||
-rw-r--r-- | vp9/encoder/vp9_aq_complexity.c | 2 | ||||
-rw-r--r-- | vp9/encoder/vp9_aq_cyclicrefresh.c | 2 | ||||
-rw-r--r-- | vp9/encoder/vp9_aq_variance.c | 2 | ||||
-rw-r--r-- | vp9/encoder/vp9_encodeframe.c | 4 | ||||
-rw-r--r-- | vp9/encoder/vp9_encoder.h | 3 |
6 files changed, 11 insertions, 5 deletions
diff --git a/vp9/encoder/vp9_aq_360.c b/vp9/encoder/vp9_aq_360.c index f27384f31..dba017ffc 100644 --- a/vp9/encoder/vp9_aq_360.c +++ b/vp9/encoder/vp9_aq_360.c @@ -41,7 +41,8 @@ void vp9_360aq_frame_setup(VP9_COMP *cpi) { struct segmentation *seg = &cm->seg; int i; - if (frame_is_intra_only(cm) || cm->error_resilient_mode) { + if (frame_is_intra_only(cm) || cpi->force_update_segmentation || + cm->error_resilient_mode) { vp9_enable_segmentation(seg); vp9_clearall_segfeatures(seg); diff --git a/vp9/encoder/vp9_aq_complexity.c b/vp9/encoder/vp9_aq_complexity.c index e21e5ec43..bd3812036 100644 --- a/vp9/encoder/vp9_aq_complexity.c +++ b/vp9/encoder/vp9_aq_complexity.c @@ -52,7 +52,7 @@ void vp9_setup_in_frame_q_adj(VP9_COMP *cpi) { vpx_clear_system_state(); if (frame_is_intra_only(cm) || cm->error_resilient_mode || - cpi->refresh_alt_ref_frame || + cpi->refresh_alt_ref_frame || cpi->force_update_segmentation || (cpi->refresh_golden_frame && !cpi->rc.is_src_frame_alt_ref)) { int segment; const int aq_strength = get_aq_c_strength(cm->base_qindex, cm->bit_depth); diff --git a/vp9/encoder/vp9_aq_cyclicrefresh.c b/vp9/encoder/vp9_aq_cyclicrefresh.c index e09f5e063..072d92e4e 100644 --- a/vp9/encoder/vp9_aq_cyclicrefresh.c +++ b/vp9/encoder/vp9_aq_cyclicrefresh.c @@ -502,7 +502,7 @@ void vp9_cyclic_refresh_setup(VP9_COMP *const cpi) { if (cm->current_video_frame == 0) cr->low_content_avg = 0.0; // Don't apply refresh on key frame or temporal enhancement layer frames. if (!apply_cyclic_refresh || (cm->frame_type == KEY_FRAME) || - (cpi->svc.temporal_layer_id > 0)) { + (cpi->force_update_segmentation) || (cpi->svc.temporal_layer_id > 0)) { // Set segmentation map to 0 and disable. unsigned char *const seg_map = cpi->segmentation_map; memset(seg_map, 0, cm->mi_rows * cm->mi_cols); diff --git a/vp9/encoder/vp9_aq_variance.c b/vp9/encoder/vp9_aq_variance.c index eec1499d3..a3b414b8c 100644 --- a/vp9/encoder/vp9_aq_variance.c +++ b/vp9/encoder/vp9_aq_variance.c @@ -49,7 +49,7 @@ void vp9_vaq_frame_setup(VP9_COMP *cpi) { int i; if (frame_is_intra_only(cm) || cm->error_resilient_mode || - cpi->refresh_alt_ref_frame || + cpi->refresh_alt_ref_frame || cpi->force_update_segmentation || (cpi->refresh_golden_frame && !cpi->rc.is_src_frame_alt_ref)) { vp9_enable_segmentation(seg); vp9_clearall_segfeatures(seg); diff --git a/vp9/encoder/vp9_encodeframe.c b/vp9/encoder/vp9_encodeframe.c index 6b352924a..dbfa518bd 100644 --- a/vp9/encoder/vp9_encodeframe.c +++ b/vp9/encoder/vp9_encodeframe.c @@ -1338,7 +1338,9 @@ static void rd_pick_sb_modes(VP9_COMP *cpi, TileDataEnc *tile_data, if (aq_mode == VARIANCE_AQ) { const int energy = bsize <= BLOCK_16X16 ? x->mb_energy : vp9_block_energy(cpi, x, bsize); + if (cm->frame_type == KEY_FRAME || cpi->refresh_alt_ref_frame || + cpi->force_update_segmentation || (cpi->refresh_golden_frame && !cpi->rc.is_src_frame_alt_ref)) { mi->segment_id = vp9_vaq_segment_id(energy); } else { @@ -1348,7 +1350,7 @@ static void rd_pick_sb_modes(VP9_COMP *cpi, TileDataEnc *tile_data, } x->rdmult = set_segment_rdmult(cpi, x, mi->segment_id); } else if (aq_mode == EQUATOR360_AQ) { - if (cm->frame_type == KEY_FRAME) { + if (cm->frame_type == KEY_FRAME || cpi->force_update_segmentation) { mi->segment_id = vp9_360aq_segment_id(mi_row, cm->mi_rows); } else { const uint8_t *const map = diff --git a/vp9/encoder/vp9_encoder.h b/vp9/encoder/vp9_encoder.h index 1abfaced6..cfbe7a784 100644 --- a/vp9/encoder/vp9_encoder.h +++ b/vp9/encoder/vp9_encoder.h @@ -477,6 +477,9 @@ typedef struct VP9_COMP { TWO_PASS twopass; + // Force recalculation of segment_ids for each mode info + uint8_t force_update_segmentation; + YV12_BUFFER_CONFIG alt_ref_buffer; #if CONFIG_INTERNAL_STATS |