Mercurial > libavcodec.hg
comparison 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 |
comparison
equal
deleted
inserted
replaced
8226:ee1b8c54a603 | 8227:596677256482 |
---|---|
459 double d= 2*(buffer_size - expected_size)/buffer_size; | 459 double d= 2*(buffer_size - expected_size)/buffer_size; |
460 if(d>1.0) d=1.0; | 460 if(d>1.0) d=1.0; |
461 else if(d<0.0001) d=0.0001; | 461 else if(d<0.0001) d=0.0001; |
462 q*= pow(d, 1.0/s->avctx->rc_buffer_aggressivity); | 462 q*= pow(d, 1.0/s->avctx->rc_buffer_aggressivity); |
463 | 463 |
464 q_limit= bits2qp(rce, FFMAX((min_rate - buffer_size + rcc->buffer_index)*3, 1)); | 464 q_limit= bits2qp(rce, FFMAX((min_rate - buffer_size + rcc->buffer_index) * s->avctx->rc_min_vbv_overflow_use, 1)); |
465 if(q > q_limit){ | 465 if(q > q_limit){ |
466 if(s->avctx->debug&FF_DEBUG_RC){ | 466 if(s->avctx->debug&FF_DEBUG_RC){ |
467 av_log(s->avctx, AV_LOG_DEBUG, "limiting QP %f -> %f\n", q, q_limit); | 467 av_log(s->avctx, AV_LOG_DEBUG, "limiting QP %f -> %f\n", q, q_limit); |
468 } | 468 } |
469 q= q_limit; | 469 q= q_limit; |
474 double d= 2*expected_size/buffer_size; | 474 double d= 2*expected_size/buffer_size; |
475 if(d>1.0) d=1.0; | 475 if(d>1.0) d=1.0; |
476 else if(d<0.0001) d=0.0001; | 476 else if(d<0.0001) d=0.0001; |
477 q/= pow(d, 1.0/s->avctx->rc_buffer_aggressivity); | 477 q/= pow(d, 1.0/s->avctx->rc_buffer_aggressivity); |
478 | 478 |
479 q_limit= bits2qp(rce, FFMAX(rcc->buffer_index/3, 1)); | 479 q_limit= bits2qp(rce, FFMAX(rcc->buffer_index * s->avctx->rc_max_available_vbv_use, 1)); |
480 if(q < q_limit){ | 480 if(q < q_limit){ |
481 if(s->avctx->debug&FF_DEBUG_RC){ | 481 if(s->avctx->debug&FF_DEBUG_RC){ |
482 av_log(s->avctx, AV_LOG_DEBUG, "limiting QP %f -> %f\n", q, q_limit); | 482 av_log(s->avctx, AV_LOG_DEBUG, "limiting QP %f -> %f\n", q, q_limit); |
483 } | 483 } |
484 q= q_limit; | 484 q= q_limit; |