shithub: libvpx

Download patch

ref: 72a6201050280193250746227b11021075842d69
parent: f4e383f3d1fe110437ff62183df24b3eabc59a7d
parent: db6ad0138c811763d1fcf8e4082834dc92fa9071
author: Paul Wilkins <paulwilkins@google.com>
date: Tue Mar 5 23:32:22 EST 2013

Merge "Added stricter Q control flag." into experimental

--- a/vp9/encoder/vp9_onyx_if.c
+++ b/vp9/encoder/vp9_onyx_if.c
@@ -2845,7 +2845,15 @@
         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.
--- a/vp9/encoder/vp9_onyx_int.h
+++ b/vp9/encoder/vp9_onyx_int.h
@@ -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
--- a/vp9/encoder/vp9_ratectrl.c
+++ b/vp9/encoder/vp9_ratectrl.c
@@ -120,10 +120,13 @@
   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));
 }