]> granicus.if.org Git - libvpx/commitdiff
Added stricter Q control flag.
authorPaul Wilkins <paulwilkins@google.com>
Tue, 26 Feb 2013 16:53:03 +0000 (16:53 +0000)
committerPaul Wilkins <paulwilkins@google.com>
Wed, 6 Mar 2013 12:05:49 +0000 (12:05 +0000)
Added a variant of the one shot maxQ flag
for two pass that forces a fixed Q for the
normal inter frames. Disabled by default.
Also small adjustment to the Bits per MB
estimation.
Change-Id: I87efdfb2d094fe1340ca9ddae37470d7b278c8b8

vp9/encoder/vp9_onyx_if.c
vp9/encoder/vp9_onyx_int.h
vp9/encoder/vp9_ratectrl.c

index feb1e36c064036ed388333f7317a96ea03ca0803..a8a7a4c0729020f72e6f43d1eced675639639c22 100644 (file)
@@ -2751,7 +2751,15 @@ static void encode_frame_to_data_rate(VP9_COMP *cpi,
         cpi->active_best_quality * 15 / 16;
     }
   } else {
+#ifdef ONE_SHOT_Q_ESTIMATE
+#ifdef STRICT_ONE_SHOT_Q
+    cpi->active_best_quality = Q;
+#else
     cpi->active_best_quality = inter_minq[Q];
+#endif
+#else
+    cpi->active_best_quality = inter_minq[Q];
+#endif
 
     // For the constant/constrained quality mode we dont want
     // q to fall below the cq level.
index 9b509ea0b0c7c94ac7c9ddfaa12280d676b84b37..834ebf9c1f8e42bd7fd702649f3bb50b624c101b 100644 (file)
@@ -31,6 +31,7 @@
 
 // Experimental rate control switches
 // #define ONE_SHOT_Q_ESTIMATE 1
+// #define STRICT_ONE_SHOT_Q 1
 // #define DISABLE_RC_LONG_TERM_MEM 1
 
 // #define SPEEDSTATS 1
index a2a79574da020b6355e6c43e24d2f2f0cef34f28..d679aaf7ae3b372a0d6cb865a043f5b5d0b74ea0 100644 (file)
@@ -120,11 +120,14 @@ int vp9_bits_per_mb(FRAME_TYPE frame_type, int qindex,
   double q = vp9_convert_qindex_to_q(qindex);
 
   if (frame_type == KEY_FRAME) {
-    enumerator = 4500000;
+    enumerator = 4000000;
   } else {
-    enumerator = 2850000;
+    enumerator = 2500000;
   }
 
+  // Q based adjustment to baseline enumberator
+  enumerator += (int)(enumerator * q) >> 12;
+
   return (int)(0.5 + (enumerator * correction_factor / q));
 }