Mercurial > libavcodec.hg
comparison ratecontrol.c @ 1806:2721e1859e19 libavcodec
normalize adaptive quantizatiuon fix (based upon a patch by (Jindrich Makovicka <makovick at kmlinux dot fjfi dot cvut dot cz>))
author | michael |
---|---|
date | Sat, 14 Feb 2004 13:37:58 +0000 |
parents | 07a484280a82 |
children | 18b8b2dcc037 |
comparison
equal
deleted
inserted
replaced
1805:5dd5b2052f5b | 1806:2721e1859e19 |
---|---|
543 bits_tab[i]= bits; | 543 bits_tab[i]= bits; |
544 } | 544 } |
545 | 545 |
546 /* handle qmin/qmax cliping */ | 546 /* handle qmin/qmax cliping */ |
547 if(s->flags&CODEC_FLAG_NORMALIZE_AQP){ | 547 if(s->flags&CODEC_FLAG_NORMALIZE_AQP){ |
548 float factor= bits_sum/cplx_sum; | |
548 for(i=0; i<s->mb_num; i++){ | 549 for(i=0; i<s->mb_num; i++){ |
549 float newq= q*cplx_tab[i]/bits_tab[i]; | 550 float newq= q*cplx_tab[i]/bits_tab[i]; |
550 newq*= bits_sum/cplx_sum; | 551 newq*= factor; |
551 | 552 |
552 if (newq > qmax){ | 553 if (newq > qmax){ |
553 bits_sum -= bits_tab[i]; | 554 bits_sum -= bits_tab[i]; |
554 cplx_sum -= cplx_tab[i]*q/qmax; | 555 cplx_sum -= cplx_tab[i]*q/qmax; |
555 } | 556 } |
556 else if(newq < qmin){ | 557 else if(newq < qmin){ |
557 bits_sum -= bits_tab[i]; | 558 bits_sum -= bits_tab[i]; |
558 cplx_sum -= cplx_tab[i]*q/qmin; | 559 cplx_sum -= cplx_tab[i]*q/qmin; |
559 } | 560 } |
560 } | 561 } |
562 if(bits_sum < 0.001) bits_sum= 0.001; | |
563 if(cplx_sum < 0.001) cplx_sum= 0.001; | |
561 } | 564 } |
562 | 565 |
563 for(i=0; i<s->mb_num; i++){ | 566 for(i=0; i<s->mb_num; i++){ |
564 const int mb_xy= s->mb_index2xy[i]; | 567 const int mb_xy= s->mb_index2xy[i]; |
565 float newq= q*cplx_tab[i]/bits_tab[i]; | 568 float newq= q*cplx_tab[i]/bits_tab[i]; |