From a0be3faa6eda8cb84c5441f8c22bc84aed862ffb Mon Sep 17 00:00:00 2001 From: Paul Wilkins 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 28da58bb5..d63a1f923 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 925e24755..0d126067e 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 ac61a7c80..85d36fd6b 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); -- 2.40.0