]> granicus.if.org Git - libvpx/commitdiff
Add frame header control to turn on PSNR_AQ mode
authorJingning Han <jingning@google.com>
Mon, 17 Dec 2018 22:24:35 +0000 (14:24 -0800)
committerJingning Han <jingning@google.com>
Mon, 17 Dec 2018 23:34:59 +0000 (15:34 -0800)
Change-Id: I46f695b15153c8c508f525a5673db24326371977

vp9/encoder/vp9_encoder.c
vp9/encoder/vp9_segmentation.c
vp9/encoder/vp9_segmentation.h

index df4223a235dd18c835b59ba9f4416833bea0439c..0b1d74a59cc8b1fc11ae929823f1c12accd34a91 100644 (file)
@@ -4142,6 +4142,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);
index 4a5a68e07a120a0dcb61bbf978e4cdbdb46f7ede..812d3fccd8e0ce56db8a260b5af0216debb7a04e 100644 (file)
@@ -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
index 7a2255f8b01e2f282a83623fdba766487588cf5d..aa34dc88bfe27a70a8a610aaa6c77533f45e13af 100644 (file)
@@ -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.
 //