summaryrefslogtreecommitdiff
path: root/vp9
diff options
context:
space:
mode:
authorYury Gitman <yuryg@google.com>2016-08-08 21:29:40 +0000
committerGerrit Code Review <noreply-gerritcodereview@google.com>2016-08-08 21:29:42 +0000
commitc37d012ada8e985adcfecbb4591d276f7e427eb0 (patch)
tree30ceeb59ecf3a5a50024d28e895735f5f94c86c0 /vp9
parentcfd92dab18639c7f1198393ce04613e6d2b126eb (diff)
parent7a730d5901e095093dcbc7201f2f2c72d566317d (diff)
downloadlibvpx-c37d012ada8e985adcfecbb4591d276f7e427eb0.tar
libvpx-c37d012ada8e985adcfecbb4591d276f7e427eb0.tar.gz
libvpx-c37d012ada8e985adcfecbb4591d276f7e427eb0.tar.bz2
libvpx-c37d012ada8e985adcfecbb4591d276f7e427eb0.zip
Merge "Add cpi parameter for forcing segmentation update"
Diffstat (limited to 'vp9')
-rw-r--r--vp9/encoder/vp9_aq_360.c3
-rw-r--r--vp9/encoder/vp9_aq_complexity.c2
-rw-r--r--vp9/encoder/vp9_aq_cyclicrefresh.c2
-rw-r--r--vp9/encoder/vp9_aq_variance.c2
-rw-r--r--vp9/encoder/vp9_encodeframe.c4
-rw-r--r--vp9/encoder/vp9_encoder.h3
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