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;