diff ratecontrol.c @ 2974:e7189a8c22ed libavcodec

use correct qp & lambda for ME on the second pass
author michael
date Mon, 19 Dec 2005 13:41:27 +0000
parents ef2149182f1c
children 33d4fb0df0d3
line wrap: on
line diff
--- a/ratecontrol.c	Mon Dec 19 03:08:08 2005 +0000
+++ b/ratecontrol.c	Mon Dec 19 13:41:27 2005 +0000
@@ -609,7 +609,7 @@
 }
 //FIXME rd or at least approx for dquant
 
-float ff_rate_estimate_qscale(MpegEncContext *s)
+float ff_rate_estimate_qscale(MpegEncContext *s, int dry_run)
 {
     float q;
     int qmin, qmax;
@@ -634,7 +634,7 @@
     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){
+    if(picture_number>2 && !dry_run){
         const int last_var= s->last_pict_type == I_TYPE ? rcc->last_mb_var_sum : rcc->last_mc_mb_var_sum;
         update_predictor(&rcc->pred[s->last_pict_type], rcc->last_qscale, sqrt(last_var), s->frame_bits);
     }
@@ -735,9 +735,11 @@
     else
         q= (int)(q + 0.5);
 
-    rcc->last_qscale= q;
-    rcc->last_mc_mb_var_sum= pic->mc_mb_var_sum;
-    rcc->last_mb_var_sum= pic->mb_var_sum;
+    if(!dry_run){
+        rcc->last_qscale= q;
+        rcc->last_mc_mb_var_sum= pic->mc_mb_var_sum;
+        rcc->last_mb_var_sum= pic->mb_var_sum;
+    }
 #if 0
 {
     static int mvsum=0, texsum=0;