| 822 | // 2-Pass code |
| 823 | |
| 824 | static int init_pass2(MpegEncContext *s) |
| 825 | { |
| 826 | RateControlContext *rcc= &s->rc_context; |
| 827 | AVCodecContext *a= s->avctx; |
| 828 | int i, toobig; |
| 829 | double fps= 1/av_q2d(s->avctx->time_base); |
| 830 | double complexity[5]={0,0,0,0,0}; // aproximate bits at quant=1 |
| 831 | uint64_t const_bits[5]={0,0,0,0,0}; // quantizer independent bits |
| 832 | uint64_t all_const_bits; |
| 833 | uint64_t all_available_bits= (uint64_t)(s->bit_rate*(double)rcc->num_entries/fps); |
| 834 | double rate_factor=0; |
| 835 | double step; |
| 836 | //int last_i_frame=-10000000; |
| 837 | const int filter_size= (int)(a->qblur*4) | 1; |
| 838 | double expected_bits; |
| 839 | double *qscale, *blurred_qscale, qscale_sum; |
| 840 | |
| 841 | /* find complexity & const_bits & decide the pict_types */ |
| 842 | for(i=0; i<rcc->num_entries; i++){ |
| 843 | RateControlEntry *rce= &rcc->entry[i]; |
| 844 | |
| 845 | rce->new_pict_type= rce->pict_type; |
| 846 | rcc->i_cplx_sum [rce->pict_type] += rce->i_tex_bits*rce->qscale; |
| 847 | rcc->p_cplx_sum [rce->pict_type] += rce->p_tex_bits*rce->qscale; |
| 848 | rcc->mv_bits_sum[rce->pict_type] += rce->mv_bits; |
| 849 | rcc->frame_count[rce->pict_type] ++; |
| 850 | |
| 851 | complexity[rce->new_pict_type]+= (rce->i_tex_bits+ rce->p_tex_bits)*(double)rce->qscale; |
| 852 | const_bits[rce->new_pict_type]+= rce->mv_bits + rce->misc_bits; |
| 853 | } |
| 854 | all_const_bits= const_bits[FF_I_TYPE] + const_bits[FF_P_TYPE] + const_bits[FF_B_TYPE]; |
| 855 | |
| 856 | if(all_available_bits < all_const_bits){ |
| 857 | av_log(s->avctx, AV_LOG_ERROR, "requested bitrate is too low\n"); |
| 858 | return -1; |
| 859 | } |
| 860 | |
| 861 | qscale= av_malloc(sizeof(double)*rcc->num_entries); |
| 862 | blurred_qscale= av_malloc(sizeof(double)*rcc->num_entries); |
| 863 | toobig = 0; |
| 864 | |
| 865 | for(step=256*256; step>0.0000001; step*=0.5){ |
| 866 | expected_bits=0; |
| 867 | rate_factor+= step; |
| 868 | |
| 869 | rcc->buffer_index= s->avctx->rc_buffer_size/2; |
| 870 | |
| 871 | /* find qscale */ |
| 872 | for(i=0; i<rcc->num_entries; i++){ |
| 873 | qscale[i]= get_qscale(s, &rcc->entry[i], rate_factor, i); |
| 874 | } |
| 875 | assert(filter_size%2==1); |
| 876 | |
| 877 | /* fixed I/B QP relative to P mode */ |
| 878 | for(i=rcc->num_entries-1; i>=0; i--){ |
| 879 | RateControlEntry *rce= &rcc->entry[i]; |
| 880 | |
| 881 | qscale[i]= get_diff_limited_q(s, rce, qscale[i]); |
no test coverage detected