summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
-rw-r--r--vp9/encoder/vp9_onyx_if.c8
-rw-r--r--vp9/encoder/vp9_onyx_int.h1
-rw-r--r--vp9/encoder/vp9_ratectrl.c7
3 files changed, 14 insertions, 2 deletions
diff --git a/vp9/encoder/vp9_onyx_if.c b/vp9/encoder/vp9_onyx_if.c
index 6335827cf..23e4f8acf 100644
--- a/vp9/encoder/vp9_onyx_if.c
+++ b/vp9/encoder/vp9_onyx_if.c
@@ -2845,7 +2845,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.
diff --git a/vp9/encoder/vp9_onyx_int.h b/vp9/encoder/vp9_onyx_int.h
index 3dc4772ef..75331755b 100644
--- 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
diff --git a/vp9/encoder/vp9_ratectrl.c b/vp9/encoder/vp9_ratectrl.c
index a2a79574d..d679aaf7a 100644
--- a/vp9/encoder/vp9_ratectrl.c
+++ b/vp9/encoder/vp9_ratectrl.c
@@ -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));
}