From c8ec59d8582f07ef759dd6e380bdfeef2433b29e Mon Sep 17 00:00:00 2001
From: "Ronald S. Bultje" <rbultje@google.com>
Date: Tue, 7 Feb 2012 17:48:47 -0800
Subject: [PATCH] Fix dual prediction recode loop.

Some conditions were conditional under a threshold, whereas they should
always execute. Also, some conditions were testing an array instead of
the values within it.

Change-Id: Ia6892945cfbbe07322e6af6be42cd864bf9479c1
---
 vp8/encoder/encodeframe.c | 21 ++++++++++++++-------
 1 file changed, 14 insertions(+), 7 deletions(-)

diff --git a/vp8/encoder/encodeframe.c b/vp8/encoder/encodeframe.c
index 6b1a31f469..f767eb5ec1 100644
--- a/vp8/encoder/encodeframe.c
+++ b/vp8/encoder/encodeframe.c
@@ -1511,18 +1511,21 @@ void vp8_encode_frame(VP8_COMP *cpi)
             cpi->common.dual_pred_mode = cpi->rd_single_diff > cpi->rd_hybrid_diff ?
                         SINGLE_PREDICTION_ONLY : HYBRID_PREDICTION;
         }
-        else if (cpi->common.dual_pred_mode == HYBRID_PREDICTION &&
-                 (cpi->rd_single_diff >= 100 || cpi->rd_dual_diff >= 100))
+        else if (cpi->common.dual_pred_mode == HYBRID_PREDICTION)
         {
-            if (cpi->dual_pred_count == 0)
+            if (cpi->dual_pred_count[0] == 0 &&
+                cpi->dual_pred_count[1] == 0 &&
+                cpi->dual_pred_count[2] == 0)
             {
                 cpi->common.dual_pred_mode = SINGLE_PREDICTION_ONLY;
             }
-            else if (cpi->single_pred_count == 0)
+            else if (cpi->single_pred_count[0] == 0 &&
+                     cpi->single_pred_count[1] == 0 &&
+                     cpi->single_pred_count[2] == 0)
             {
                 cpi->common.dual_pred_mode = DUAL_PREDICTION_ONLY;
             }
-            else
+            else if (cpi->rd_single_diff >= 100 || cpi->rd_dual_diff >= 100)
             {
                 redo = 1;
                 cpi->common.dual_pred_mode = cpi->rd_single_diff > cpi->rd_dual_diff ?
@@ -1538,11 +1541,15 @@ void vp8_encode_frame(VP8_COMP *cpi)
 
         if (cpi->common.dual_pred_mode == HYBRID_PREDICTION)
         {
-            if (cpi->dual_pred_count == 0)
+            if (cpi->dual_pred_count[0] == 0 &&
+                cpi->dual_pred_count[1] == 0 &&
+                cpi->dual_pred_count[2] == 0)
             {
                 cpi->common.dual_pred_mode = SINGLE_PREDICTION_ONLY;
             }
-            else if (cpi->single_pred_count == 0)
+            else if (cpi->single_pred_count[0] == 0 &&
+                     cpi->single_pred_count[1] == 0 &&
+                     cpi->single_pred_count[2] == 0)
             {
                 cpi->common.dual_pred_mode = DUAL_PREDICTION_ONLY;
             }
-- 
GitLab