From a0be3faa6eda8cb84c5441f8c22bc84aed862ffb Mon Sep 17 00:00:00 2001
From: Paul Wilkins <paulwilkins@google.com>
Date: Fri, 2 Mar 2012 01:24:30 +0000
Subject: [PATCH] Allow for frame overheads in min frame bandwidth.

Change-Id: I6ade229ff400fe492709010ac5bada37f8afa73e
---
 vp8/encoder/firstpass.c | 7 ++++++-
 vp8/encoder/onyx_if.c   | 8 ++++++++
 vp8/encoder/ratectrl.h  | 2 ++
 3 files changed, 16 insertions(+), 1 deletion(-)

diff --git a/vp8/encoder/firstpass.c b/vp8/encoder/firstpass.c
index 28da58bb52..d63a1f9234 100644
--- a/vp8/encoder/firstpass.c
+++ b/vp8/encoder/firstpass.c
@@ -1286,7 +1286,12 @@ void vp8_init_second_pass(VP8_COMP *cpi)
     FIRSTPASS_STATS this_frame;
     FIRSTPASS_STATS *start_pos;
 
-    double two_pass_min_rate = (double)(cpi->oxcf.target_bandwidth * cpi->oxcf.two_pass_vbrmin_section / 100);
+    double lower_bounds_min_rate = FRAME_OVERHEAD_BITS*cpi->oxcf.frame_rate;
+    double two_pass_min_rate = (double)(cpi->oxcf.target_bandwidth
+                               * cpi->oxcf.two_pass_vbrmin_section / 100);
+
+    if (two_pass_min_rate < lower_bounds_min_rate)
+        two_pass_min_rate = lower_bounds_min_rate;
 
     zero_stats(cpi->twopass.total_stats);
     zero_stats(cpi->twopass.total_left_stats);
diff --git a/vp8/encoder/onyx_if.c b/vp8/encoder/onyx_if.c
index 925e247552..0d126067e0 100644
--- a/vp8/encoder/onyx_if.c
+++ b/vp8/encoder/onyx_if.c
@@ -1187,6 +1187,9 @@ void vp8_new_frame_rate(VP8_COMP *cpi, double framerate)
     cpi->av_per_frame_bandwidth        = (int)(cpi->oxcf.target_bandwidth / cpi->output_frame_rate);
     cpi->min_frame_bandwidth          = (int)(cpi->av_per_frame_bandwidth * cpi->oxcf.two_pass_vbrmin_section / 100);
 
+    if (cpi->min_frame_bandwidth < FRAME_OVERHEAD_BITS )
+        cpi->min_frame_bandwidth = FRAME_OVERHEAD_BITS;
+
     // Set Maximum gf/arf interval
     cpi->max_gf_interval = ((int)(cpi->output_frame_rate / 2.0) + 2);
 
@@ -3868,8 +3871,13 @@ static void Pass2Encode(VP8_COMP *cpi, unsigned long *size, unsigned char *dest,
 
     if (!cpi->common.refresh_alt_ref_frame)
     {
+        double lower_bounds_min_rate = FRAME_OVERHEAD_BITS*cpi->oxcf.frame_rate;
         double two_pass_min_rate = (double)(cpi->oxcf.target_bandwidth
             *cpi->oxcf.two_pass_vbrmin_section / 100);
+
+        if (two_pass_min_rate < lower_bounds_min_rate)
+           two_pass_min_rate = lower_bounds_min_rate;
+
         cpi->twopass.bits_left += (int64_t)(two_pass_min_rate / cpi->oxcf.frame_rate);
     }
 }
diff --git a/vp8/encoder/ratectrl.h b/vp8/encoder/ratectrl.h
index ac61a7c802..85d36fd6bf 100644
--- a/vp8/encoder/ratectrl.h
+++ b/vp8/encoder/ratectrl.h
@@ -13,6 +13,8 @@
 
 #include "onyx_int.h"
 
+#define FRAME_OVERHEAD_BITS 200
+
 extern void vp8_save_coding_context(VP8_COMP *cpi);
 extern void vp8_restore_coding_context(VP8_COMP *cpi);
 
-- 
GitLab