diff --git a/vp9/encoder/vp9_onyx_if.c b/vp9/encoder/vp9_onyx_if.c index feb1e36c064036ed388333f7317a96ea03ca0803..a8a7a4c0729020f72e6f43d1eced675639639c22 100644 --- a/vp9/encoder/vp9_onyx_if.c +++ b/vp9/encoder/vp9_onyx_if.c @@ -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. diff --git a/vp9/encoder/vp9_onyx_int.h b/vp9/encoder/vp9_onyx_int.h index 9b509ea0b0c7c94ac7c9ddfaa12280d676b84b37..834ebf9c1f8e42bd7fd702649f3bb50b624c101b 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 a2a79574da020b6355e6c43e24d2f2f0cef34f28..d679aaf7ae3b372a0d6cb865a043f5b5d0b74ea0 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)); }