diff options
author | John Koleszar <jkoleszar@google.com> | 2011-04-19 14:05:27 -0400 |
---|---|---|
committer | John Koleszar <jkoleszar@google.com> | 2011-04-25 13:47:20 -0400 |
commit | 454cbc96b7c81109b1d7fd24df1da99ba30f5207 (patch) | |
tree | d3d5bd66ff9d6fc927a8cb49037f52a1a9154b0b /vp8/encoder | |
parent | aa926fbd273c7d62d43487f73f2f3cdce7bec5a8 (diff) | |
download | libvpx-454cbc96b7c81109b1d7fd24df1da99ba30f5207.tar libvpx-454cbc96b7c81109b1d7fd24df1da99ba30f5207.tar.gz libvpx-454cbc96b7c81109b1d7fd24df1da99ba30f5207.tar.bz2 libvpx-454cbc96b7c81109b1d7fd24df1da99ba30f5207.zip |
Limit size of initial keyframe in one-pass.
Rather than using a default size of 1/2 or 3/2 seconds for the first
frame, use a fraction of the initial buffer level to give the
application some control.
This will likely undergo further refinement as size limits on key
frames are currently under discussion on codec-devel@, but this gives
much better behavior for small buffer sizes as a starting point.
Change-Id: Ieba55b86517b81e51e6f0a9fe27aabba295acab0
Diffstat (limited to 'vp8/encoder')
-rw-r--r-- | vp8/encoder/onyx_if.c | 23 |
1 files changed, 12 insertions, 11 deletions
diff --git a/vp8/encoder/onyx_if.c b/vp8/encoder/onyx_if.c index cbaab5fb0..4208f1fe4 100644 --- a/vp8/encoder/onyx_if.c +++ b/vp8/encoder/onyx_if.c @@ -1459,10 +1459,6 @@ static void init_config(VP8_PTR ptr, VP8_CONFIG *oxcf) cpi->avg_frame_qindex = cpi->oxcf.worst_allowed_q; // Initialise the starting buffer levels - cpi->oxcf.starting_buffer_level = - rescale(cpi->oxcf.starting_buffer_level, - cpi->oxcf.target_bandwidth, 1000); - cpi->buffer_level = cpi->oxcf.starting_buffer_level; cpi->bits_off_target = cpi->oxcf.starting_buffer_level; @@ -1635,6 +1631,10 @@ void vp8_change_config(VP8_PTR ptr, VP8_CONFIG *oxcf) // Convert target bandwidth from Kbit/s to Bit/s cpi->oxcf.target_bandwidth *= 1000; + cpi->oxcf.starting_buffer_level = + rescale(cpi->oxcf.starting_buffer_level, + cpi->oxcf.target_bandwidth, 1000); + // Set or reset optimal and maximum buffer levels. if (cpi->oxcf.optimal_buffer_level == 0) cpi->oxcf.optimal_buffer_level = cpi->oxcf.target_bandwidth / 8; @@ -2661,16 +2661,17 @@ static int pick_frame_size(VP8_COMP *cpi) if (cpi->pass == 2) vp8_calc_auto_iframe_target_size(cpi); - // 1 Pass there is no information on which to base size so use bandwidth per second * fixed fraction else #endif - cpi->this_frame_target = cpi->oxcf.target_bandwidth / 2; - - // in error resilient mode the first frame is bigger since it likely contains - // all the static background - if (cpi->oxcf.error_resilient_mode == 1 || (cpi->compressor_speed == 2)) { - cpi->this_frame_target *= 3; // 5; + /* 1 Pass there is no information on which to base size so use + * bandwidth per second * fraction of the initial buffer + * level + */ + cpi->this_frame_target = cpi->oxcf.starting_buffer_level / 2; + + if(cpi->this_frame_target > cpi->oxcf.target_bandwidth * 3 / 2) + cpi->this_frame_target = cpi->oxcf.target_bandwidth * 3 / 2; } // Key frame from VFW/auto-keyframe/first frame |