]> granicus.if.org Git - libvpx/commitdiff
Speed setting correction to max q estimate.
authorPaul Wilkins <paulwilkins@google.com>
Fri, 28 Mar 2014 16:56:14 +0000 (16:56 +0000)
committerPaul Wilkins <paulwilkins@google.com>
Tue, 1 Apr 2014 16:03:04 +0000 (17:03 +0100)
Use a crude correction factor to correct for
lower compression efficiency at higher encode
speeds when estimating the max Q for the
clip.

Change-Id: I5ae377647f4adf5e91d700a8791fb3b8f70efc73

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

index 6d36b7cf5522a124c2cdd154ddae32895568d141..b5d08d2eb262bb0751a7917d1f4430df865a810b 100644 (file)
@@ -911,6 +911,7 @@ int vp9_twopass_worst_quality(VP9_COMP *cpi, FIRSTPASS_STATS *fpstats,
 
   const double section_err = fpstats->coded_error / fpstats->count;
   const double err_per_mb = section_err / num_mbs;
+  const double speed_term = 1.0 + ((double)cpi->speed * 0.04);
 
   if (section_target_bandwitdh <= 0)
     return rc->worst_quality;          // Highest value allowed
@@ -924,8 +925,8 @@ int vp9_twopass_worst_quality(VP9_COMP *cpi, FIRSTPASS_STATS *fpstats,
   for (q = rc->best_quality; q < rc->worst_quality; ++q) {
     const double err_correction_factor = calc_correction_factor(err_per_mb,
                                              ERR_DIVISOR, 0.5, 0.90, q);
-    const int bits_per_mb_at_this_q = vp9_rc_bits_per_mb(INTER_FRAME, q,
-                                                         err_correction_factor);
+    const int bits_per_mb_at_this_q =
+      vp9_rc_bits_per_mb(INTER_FRAME, q, (err_correction_factor * speed_term));
     if (bits_per_mb_at_this_q <= target_norm_bits_per_mb)
       break;
   }
index c62d31293cd8679075941eaa3bab6e530d59b9e3..36edba5f30d3269e108e09c4653ba7154bc07eb7 100644 (file)
@@ -1010,7 +1010,7 @@ void vp9_rc_compute_frame_size_bounds(const VP9_COMP *cpi,
         *frame_over_shoot_limit  = this_frame_target * 9 / 8;
         *frame_under_shoot_limit = this_frame_target * 7 / 8;
       } else {
-        // Stron overshoot limit for constrained quality
+        // Strong overshoot limit for constrained quality
         if (cpi->oxcf.end_usage == USAGE_CONSTRAINED_QUALITY) {
           *frame_over_shoot_limit  = this_frame_target * 11 / 8;
           *frame_under_shoot_limit = this_frame_target * 2 / 8;