MCPcopy Create free account
hub / github.com/FFmpeg/FFmpeg / init_pass2

Function init_pass2

libavcodec/ratecontrol.c:824–961  ·  view source on GitHub ↗

Source from the content-addressed store, hash-verified

822// 2-Pass code
823
824static 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]);

Callers 1

ff_rate_control_initFunction · 0.85

Calls 10

av_q2dFunction · 0.85
av_logFunction · 0.85
av_mallocFunction · 0.85
get_diff_limited_qFunction · 0.85
modify_qscaleFunction · 0.85
qp2bitsFunction · 0.85
ff_vbv_updateFunction · 0.85
av_freeFunction · 0.85
av_clipFunction · 0.85
get_qscaleFunction · 0.70

Tested by

no test coverage detected