summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorJingning Han <jingning@google.com>2018-12-18 15:49:48 +0000
committerGerrit Code Review <noreply-gerritcodereview@google.com>2018-12-18 15:49:48 +0000
commit98fc585cba5f058a9c746e987df3689ae531a0e3 (patch)
treeaf041aecf36dc8af6d569bbca4d31d7763f82e5d
parent2057c4e49575d84f652544550d2afceabec3e075 (diff)
parent7ec4a4b3eb3b9927ea84e8d3710bfb450cdf5931 (diff)
downloadlibvpx-98fc585cba5f058a9c746e987df3689ae531a0e3.tar
libvpx-98fc585cba5f058a9c746e987df3689ae531a0e3.tar.gz
libvpx-98fc585cba5f058a9c746e987df3689ae531a0e3.tar.bz2
libvpx-98fc585cba5f058a9c746e987df3689ae531a0e3.zip
Merge "Add frame header control to turn on PSNR_AQ mode"
-rw-r--r--vp9/encoder/vp9_encoder.c2
-rw-r--r--vp9/encoder/vp9_segmentation.c13
-rw-r--r--vp9/encoder/vp9_segmentation.h2
3 files changed, 17 insertions, 0 deletions
diff --git a/vp9/encoder/vp9_encoder.c b/vp9/encoder/vp9_encoder.c
index fb1b5ff5c..b10b91c98 100644
--- a/vp9/encoder/vp9_encoder.c
+++ b/vp9/encoder/vp9_encoder.c
@@ -4104,6 +4104,8 @@ static void encode_with_recode_loop(VP9_COMP *cpi, size_t *size,
vp9_setup_in_frame_q_adj(cpi);
} else if (oxcf->aq_mode == LOOKAHEAD_AQ) {
vp9_alt_ref_aq_setup_map(cpi->alt_ref_aq, cpi);
+ } else if (oxcf->aq_mode == PSNR_AQ) {
+ vp9_psnr_aq_mode_setup(&cm->seg);
}
vp9_encode_frame(cpi);
diff --git a/vp9/encoder/vp9_segmentation.c b/vp9/encoder/vp9_segmentation.c
index 4a5a68e07..812d3fccd 100644
--- a/vp9/encoder/vp9_segmentation.c
+++ b/vp9/encoder/vp9_segmentation.c
@@ -46,6 +46,19 @@ void vp9_clear_segdata(struct segmentation *seg, int segment_id,
seg->feature_data[segment_id][feature_id] = 0;
}
+void vp9_psnr_aq_mode_setup(struct segmentation *seg) {
+ int i;
+
+ vp9_enable_segmentation(seg);
+ vp9_clearall_segfeatures(seg);
+ seg->abs_delta = SEGMENT_DELTADATA;
+
+ for (i = 0; i < MAX_SEGMENTS; ++i) {
+ vp9_set_segdata(seg, i, SEG_LVL_ALT_Q, 2 * (i - (MAX_SEGMENTS / 2)));
+ vp9_enable_segfeature(seg, i, SEG_LVL_ALT_Q);
+ }
+}
+
// Based on set of segment counts calculate a probability tree
static void calc_segtree_probs(int *segcounts, vpx_prob *segment_tree_probs) {
// Work out probabilities of each segment
diff --git a/vp9/encoder/vp9_segmentation.h b/vp9/encoder/vp9_segmentation.h
index 7a2255f8b..aa34dc88b 100644
--- a/vp9/encoder/vp9_segmentation.h
+++ b/vp9/encoder/vp9_segmentation.h
@@ -26,6 +26,8 @@ void vp9_disable_segfeature(struct segmentation *seg, int segment_id,
void vp9_clear_segdata(struct segmentation *seg, int segment_id,
SEG_LVL_FEATURES feature_id);
+void vp9_psnr_aq_mode_setup(struct segmentation *seg);
+
// The values given for each segment can be either deltas (from the default
// value chosen for the frame) or absolute values.
//