Mercurial > libavcodec.hg
diff ratecontrol.c @ 8227:596677256482 libavcodec
Implement the fields rc_max_available_vbv_use and
rc_min_vbv_overflow_use in AVCodecContext, and use their values in the
ratecontrol code rather than hardcoded ones.
See the thread: "[RFC] ratecontrol buffer size magic".
Patch by Baptiste Coudurier.
author | stefano |
---|---|
date | Sat, 29 Nov 2008 14:08:48 +0000 |
parents | dc1a7a6ec58d |
children | 7a463923ecd1 |
line wrap: on
line diff
--- a/ratecontrol.c Sat Nov 29 10:06:37 2008 +0000 +++ b/ratecontrol.c Sat Nov 29 14:08:48 2008 +0000 @@ -461,7 +461,7 @@ else if(d<0.0001) d=0.0001; q*= pow(d, 1.0/s->avctx->rc_buffer_aggressivity); - q_limit= bits2qp(rce, FFMAX((min_rate - buffer_size + rcc->buffer_index)*3, 1)); + q_limit= bits2qp(rce, FFMAX((min_rate - buffer_size + rcc->buffer_index) * s->avctx->rc_min_vbv_overflow_use, 1)); if(q > q_limit){ if(s->avctx->debug&FF_DEBUG_RC){ av_log(s->avctx, AV_LOG_DEBUG, "limiting QP %f -> %f\n", q, q_limit); @@ -476,7 +476,7 @@ else if(d<0.0001) d=0.0001; q/= pow(d, 1.0/s->avctx->rc_buffer_aggressivity); - q_limit= bits2qp(rce, FFMAX(rcc->buffer_index/3, 1)); + q_limit= bits2qp(rce, FFMAX(rcc->buffer_index * s->avctx->rc_max_available_vbv_use, 1)); if(q < q_limit){ if(s->avctx->debug&FF_DEBUG_RC){ av_log(s->avctx, AV_LOG_DEBUG, "limiting QP %f -> %f\n", q, q_limit);