]> git.sesse.net Git - ffmpeg/blobdiff - libavcodec/ratecontrol.c
mpegvideo: increase edge_emu_buffer size for VC1
[ffmpeg] / libavcodec / ratecontrol.c
index 9065f8e416d724bf6a459275f77c0ee642283c74..2cb5eeaefe589ebc3fdce18a12ade43e42fa21e7 100644 (file)
@@ -270,7 +270,8 @@ int ff_vbv_update(MpegEncContext *s, int frame_size){
     const double min_rate= s->avctx->rc_min_rate/fps;
     const double max_rate= s->avctx->rc_max_rate/fps;
 
-//printf("%d %f %d %f %f\n", buffer_size, rcc->buffer_index, frame_size, min_rate, max_rate);
+    av_dlog(s, "%d %f %d %f %f\n",
+            buffer_size, rcc->buffer_index, frame_size, min_rate, max_rate);
     if(buffer_size){
         int left;
 
@@ -286,7 +287,7 @@ int ff_vbv_update(MpegEncContext *s, int frame_size){
         if(rcc->buffer_index > buffer_size){
             int stuffing= ceil((rcc->buffer_index - buffer_size)/8);
 
-            if(stuffing < 4 && s->codec_id == CODEC_ID_MPEG4)
+            if(stuffing < 4 && s->codec_id == AV_CODEC_ID_MPEG4)
                 stuffing=4;
             rcc->buffer_index -= 8*stuffing;
 
@@ -444,7 +445,6 @@ static double modify_qscale(MpegEncContext *s, RateControlEntry *rce, double q,
     if(s->avctx->rc_qmod_freq && frame_num%s->avctx->rc_qmod_freq==0 && pict_type==AV_PICTURE_TYPE_P)
         q*= s->avctx->rc_qmod_amp;
 
-//printf("q:%f\n", q);
     /* buffer overflow/underflow protection */
     if(buffer_size){
         double expected_size= rcc->buffer_index;
@@ -480,7 +480,9 @@ static double modify_qscale(MpegEncContext *s, RateControlEntry *rce, double q,
             }
         }
     }
-//printf("q:%f max:%f min:%f size:%f index:%d bits:%f agr:%f\n", q,max_rate, min_rate, buffer_size, rcc->buffer_index, bits, s->avctx->rc_buffer_aggressivity);
+    av_dlog(s, "q:%f max:%f min:%f size:%f index:%f agr:%f\n",
+            q, max_rate, min_rate, buffer_size, rcc->buffer_index,
+            s->avctx->rc_buffer_aggressivity);
     if(s->avctx->rc_qsquish==0.0 || qmin==qmax){
         if     (q<qmin) q=qmin;
         else if(q>qmax) q=qmax;
@@ -529,8 +531,8 @@ static void adaptive_quantization(MpegEncContext *s, double q){
     const float border_masking = s->avctx->border_masking;
     float bits_sum= 0.0;
     float cplx_sum= 0.0;
-    float cplx_tab[s->mb_num];
-    float bits_tab[s->mb_num];
+    float *cplx_tab = s->cplx_tab;
+    float *bits_tab = s->bits_tab;
     const int qmin= s->avctx->mb_lmin;
     const int qmax= s->avctx->mb_lmax;
     Picture * const pic= &s->current_picture;
@@ -623,8 +625,6 @@ static void adaptive_quantization(MpegEncContext *s, double q){
 
         if     (intq > qmax) intq= qmax;
         else if(intq < qmin) intq= qmin;
-//if(i%s->mb_width==0) printf("\n");
-//printf("%2d%3d ", intq, ff_sqrt(s->mc_mb_var[i]));
         s->lambda_table[mb_xy]= intq;
     }
 }
@@ -669,7 +669,6 @@ float ff_rate_estimate_qscale(MpegEncContext *s, int dry_run)
     get_qminmax(&qmin, &qmax, s, pict_type);
 
     fps= 1/av_q2d(s->avctx->time_base);
-//printf("input_pic_num:%d pic_num:%d frame_rate:%d\n", s->input_picture_number, s->picture_number, s->frame_rate);
         /* update predictors */
     if(picture_number>2 && !dry_run){
         const int last_var= s->last_pict_type == AV_PICTURE_TYPE_I ? rcc->last_mb_var_sum : rcc->last_mc_mb_var_sum;
@@ -692,9 +691,6 @@ float ff_rate_estimate_qscale(MpegEncContext *s, int dry_run)
         else
             dts_pic= s->last_picture_ptr;
 
-//if(dts_pic)
-//            av_log(NULL, AV_LOG_ERROR, "%Ld %Ld %Ld %d\n", s->current_picture_ptr->pts, s->user_specified_pts, dts_pic->pts, picture_number);
-
         if (!dts_pic || dts_pic->f.pts == AV_NOPTS_VALUE)
             wanted_bits= (uint64_t)(s->bit_rate*(double)picture_number/fps);
         else
@@ -713,7 +709,8 @@ float ff_rate_estimate_qscale(MpegEncContext *s, int dry_run)
             assert(pict_type == rce->new_pict_type);
 
         q= rce->new_qscale / br_compensation;
-//printf("%f %f %f last:%d var:%d type:%d//\n", q, rce->new_qscale, br_compensation, s->frame_bits, var, pict_type);
+        av_dlog(s, "%f %f %f last:%d var:%d type:%d//\n", q, rce->new_qscale,
+                br_compensation, s->frame_bits, var, pict_type);
     }else{
         rce->pict_type=
         rce->new_pict_type= pict_type;
@@ -750,9 +747,7 @@ float ff_rate_estimate_qscale(MpegEncContext *s, int dry_run)
             return -1;
 
         assert(q>0.0);
-//printf("%f ", q);
         q= get_diff_limited_q(s, rce, q);
-//printf("%f ", q);
         assert(q>0.0);
 
         if(pict_type==AV_PICTURE_TYPE_P || s->intra_only){ //FIXME type dependent blur like in 2-pass
@@ -761,9 +756,7 @@ float ff_rate_estimate_qscale(MpegEncContext *s, int dry_run)
 
             rcc->short_term_qsum+= q;
             rcc->short_term_qcount++;
-//printf("%f ", q);
             q= short_term_q= rcc->short_term_qsum/rcc->short_term_qcount;
-//printf("%f ", q);
         }
         assert(q>0.0);
 
@@ -888,18 +881,15 @@ static int init_pass2(MpegEncContext *s)
             double bits;
             rce->new_qscale= modify_qscale(s, rce, blurred_qscale[i], i);
             bits= qp2bits(rce, rce->new_qscale) + rce->mv_bits + rce->misc_bits;
-//printf("%d %f\n", rce->new_bits, blurred_qscale[i]);
             bits += 8*ff_vbv_update(s, bits);
 
             rce->expected_bits= expected_bits;
             expected_bits += bits;
         }
 
-        /*
-        av_log(s->avctx, AV_LOG_INFO,
-            "expected_bits: %f all_available_bits: %d rate_factor: %f\n",
-            expected_bits, (int)all_available_bits, rate_factor);
-        */
+        av_dlog(s->avctx,
+                "expected_bits: %f all_available_bits: %d rate_factor: %f\n",
+                expected_bits, (int)all_available_bits, rate_factor);
         if(expected_bits > all_available_bits) {
             rate_factor-= step;
             ++toobig;
@@ -911,8 +901,10 @@ static int init_pass2(MpegEncContext *s)
     /* check bitrate calculations and print info */
     qscale_sum = 0.0;
     for(i=0; i<rcc->num_entries; i++){
-        /* av_log(s->avctx, AV_LOG_DEBUG, "[lavc rc] entry[%d].new_qscale = %.3f  qp = %.3f\n",
-            i, rcc->entry[i].new_qscale, rcc->entry[i].new_qscale / FF_QP2LAMBDA); */
+        av_dlog(s, "[lavc rc] entry[%d].new_qscale = %.3f  qp = %.3f\n",
+                i,
+                rcc->entry[i].new_qscale,
+                rcc->entry[i].new_qscale / FF_QP2LAMBDA);
         qscale_sum += av_clip(rcc->entry[i].new_qscale / FF_QP2LAMBDA, s->avctx->qmin, s->avctx->qmax);
     }
     assert(toobig <= 40);