Mercurial > libavcodec.hg
comparison ratecontrol.c @ 3676:dac97d2d69d5 libavcodec
seems the output of that code is never used
| author | michael |
|---|---|
| date | Mon, 04 Sep 2006 21:11:54 +0000 |
| parents | be8084e35485 |
| children | 4f547f0da680 |
comparison
equal
deleted
inserted
replaced
| 3675:bce9f52584c3 | 3676:dac97d2d69d5 |
|---|---|
| 791 RateControlContext *rcc= &s->rc_context; | 791 RateControlContext *rcc= &s->rc_context; |
| 792 AVCodecContext *a= s->avctx; | 792 AVCodecContext *a= s->avctx; |
| 793 int i; | 793 int i; |
| 794 double fps= 1/av_q2d(s->avctx->time_base); | 794 double fps= 1/av_q2d(s->avctx->time_base); |
| 795 double complexity[5]={0,0,0,0,0}; // aproximate bits at quant=1 | 795 double complexity[5]={0,0,0,0,0}; // aproximate bits at quant=1 |
| 796 double avg_quantizer[5]; | |
| 797 uint64_t const_bits[5]={0,0,0,0,0}; // quantizer idependant bits | 796 uint64_t const_bits[5]={0,0,0,0,0}; // quantizer idependant bits |
| 798 uint64_t available_bits[5]; | |
| 799 uint64_t all_const_bits; | 797 uint64_t all_const_bits; |
| 800 uint64_t all_available_bits= (uint64_t)(s->bit_rate*(double)rcc->num_entries/fps); | 798 uint64_t all_available_bits= (uint64_t)(s->bit_rate*(double)rcc->num_entries/fps); |
| 801 double rate_factor=0; | 799 double rate_factor=0; |
| 802 double step; | 800 double step; |
| 803 //int last_i_frame=-10000000; | 801 //int last_i_frame=-10000000; |
| 823 if(all_available_bits < all_const_bits){ | 821 if(all_available_bits < all_const_bits){ |
| 824 av_log(s->avctx, AV_LOG_ERROR, "requested bitrate is too low\n"); | 822 av_log(s->avctx, AV_LOG_ERROR, "requested bitrate is too low\n"); |
| 825 return -1; | 823 return -1; |
| 826 } | 824 } |
| 827 | 825 |
| 828 /* find average quantizers */ | |
| 829 avg_quantizer[P_TYPE]=0; | |
| 830 for(step=256*256; step>0.0000001; step*=0.5){ | |
| 831 double expected_bits=0; | |
| 832 avg_quantizer[P_TYPE]+= step; | |
| 833 | |
| 834 avg_quantizer[I_TYPE]= avg_quantizer[P_TYPE]*ABS(s->avctx->i_quant_factor) + s->avctx->i_quant_offset; | |
| 835 avg_quantizer[B_TYPE]= avg_quantizer[P_TYPE]*ABS(s->avctx->b_quant_factor) + s->avctx->b_quant_offset; | |
| 836 | |
| 837 expected_bits= | |
| 838 + all_const_bits | |
| 839 + complexity[I_TYPE]/avg_quantizer[I_TYPE] | |
| 840 + complexity[P_TYPE]/avg_quantizer[P_TYPE] | |
| 841 + complexity[B_TYPE]/avg_quantizer[B_TYPE]; | |
| 842 | |
| 843 if(expected_bits < all_available_bits) avg_quantizer[P_TYPE]-= step; | |
| 844 //printf("%f %lld %f\n", expected_bits, all_available_bits, avg_quantizer[P_TYPE]); | |
| 845 } | |
| 846 //printf("qp_i:%f, qp_p:%f, qp_b:%f\n", avg_quantizer[I_TYPE],avg_quantizer[P_TYPE],avg_quantizer[B_TYPE]); | |
| 847 | |
| 848 for(i=0; i<5; i++){ | |
| 849 available_bits[i]= const_bits[i] + complexity[i]/avg_quantizer[i]; | |
| 850 } | |
| 851 //printf("%lld %lld %lld %lld\n", available_bits[I_TYPE], available_bits[P_TYPE], available_bits[B_TYPE], all_available_bits); | |
| 852 | |
| 853 qscale= av_malloc(sizeof(double)*rcc->num_entries); | 826 qscale= av_malloc(sizeof(double)*rcc->num_entries); |
| 854 blured_qscale= av_malloc(sizeof(double)*rcc->num_entries); | 827 blured_qscale= av_malloc(sizeof(double)*rcc->num_entries); |
| 855 | 828 |
| 856 for(step=256*256; step>0.0000001; step*=0.5){ | 829 for(step=256*256; step>0.0000001; step*=0.5){ |
| 857 expected_bits=0; | 830 expected_bits=0; |
