]> granicus.if.org Git - libvpx/commitdiff
Allow q adjustment for VPX_CQ and VPX_CBR.
authorpaulwilkins <paulwilkins@google.com>
Mon, 9 Mar 2015 17:12:33 +0000 (17:12 +0000)
committerpaulwilkins <paulwilkins@google.com>
Mon, 9 Mar 2015 17:13:55 +0000 (17:13 +0000)
Adjustment previously only enabled in VBR mode.

This patch allows adjustment of min and max q for CBR
and adjustment of max q only for CQ mode.

Change-Id: Id5e583f3d50453cd544fc57249acacd946457482

vp9/encoder/vp9_firstpass.c
vp9/encoder/vp9_ratectrl.c

index 6c8bbdb6d5d8d1815afee9e13f9bc534040444ea..046c641707f768d57c1babddcef47503ab640383 100644 (file)
@@ -2621,11 +2621,13 @@ void vp9_twopass_postencode_update(VP9_COMP *cpi) {
   ++twopass->gf_group.index;
 
   // If the rate control is drifting consider adjustment to min or maxq.
-  if ((cpi->oxcf.rc_mode == VPX_VBR) &&
+  if ((cpi->oxcf.rc_mode != VPX_Q) &&
       (cpi->twopass.gf_zeromotion_pct < VLOW_MOTION_THRESHOLD) &&
       !cpi->rc.is_src_frame_alt_ref) {
     const int maxq_adj_limit =
       rc->worst_quality - twopass->active_worst_quality;
+    const int minq_adj_limit =
+      (cpi->oxcf.rc_mode == VPX_CQ) ? 0 : MINQ_ADJ_LIMIT;
 
     // Undershoot.
     if (rc->rate_error_estimate > cpi->oxcf.under_shoot_pct) {
@@ -2650,7 +2652,7 @@ void vp9_twopass_postencode_update(VP9_COMP *cpi) {
         --twopass->extend_maxq;
     }
 
-    twopass->extend_minq = clamp(twopass->extend_minq, 0, MINQ_ADJ_LIMIT);
+    twopass->extend_minq = clamp(twopass->extend_minq, 0, minq_adj_limit);
     twopass->extend_maxq = clamp(twopass->extend_maxq, 0, maxq_adj_limit);
   }
 }
index f33fe51000e7780d2fed92622975f9cd0203d24c..a11e09851dac5fd3ebd17269b5a9d369887e9b19 100644 (file)
@@ -1050,7 +1050,7 @@ static int rc_pick_q_and_bounds_two_pass(const VP9_COMP *cpi,
 
   // Extension to max or min Q if undershoot or overshoot is outside
   // the permitted range.
-  if ((cpi->oxcf.rc_mode == VPX_VBR) &&
+  if ((cpi->oxcf.rc_mode != VPX_Q) &&
       (cpi->twopass.gf_zeromotion_pct < VLOW_MOTION_THRESHOLD)) {
     if (frame_is_intra_only(cm) ||
         (!rc->is_src_frame_alt_ref &&