vp8_pick_intra_mode: correct returned rate
authorJohn Koleszar <jkoleszar@google.com>
Wed, 8 Jun 2011 17:08:12 +0000 (13:08 -0400)
committerJohn Koleszar <jkoleszar@google.com>
Wed, 8 Jun 2011 17:19:12 +0000 (13:19 -0400)
The returned rate was always the 4x4 rate, instead of the rate
matching the selected mode.

Change-Id: I51da31f80884f5e37f3bcc77d1047d31e612ded4

vp8/encoder/pickinter.c

index 021ab7f..b1dddd7 100644 (file)
@@ -972,7 +972,7 @@ void vp8_pick_inter_mode(VP8_COMP *cpi, MACROBLOCK *x, int recon_yoffset,
 void vp8_pick_intra_mode(VP8_COMP *cpi, MACROBLOCK *x, int *rate_)
 {
     int error4x4, error16x16 = INT_MAX;
-    int rate, distortion, best_distortion;
+    int rate, best_rate = 0, distortion, best_distortion;
     MB_PREDICTION_MODE mode, best_mode = DC_PRED;
     int this_rd;
 
@@ -995,6 +995,7 @@ void vp8_pick_intra_mode(VP8_COMP *cpi, MACROBLOCK *x, int *rate_)
             error16x16 = this_rd;
             best_mode = mode;
             best_distortion = distortion;
+            best_rate = rate;
         }
     }
     x->e_mbd.mode_info_context->mbmi.mode = best_mode;
@@ -1002,7 +1003,10 @@ void vp8_pick_intra_mode(VP8_COMP *cpi, MACROBLOCK *x, int *rate_)
     error4x4 = pick_intra4x4mby_modes(IF_RTCD(&cpi->rtcd), x, &rate,
                                       &best_distortion);
     if (error4x4 < error16x16)
+    {
         x->e_mbd.mode_info_context->mbmi.mode = B_PRED;
+        best_rate = rate;
+    }
 
-    *rate_ = rate;
+    *rate_ = best_rate;
 }