From 5b5f3d5097508fa53d00e5d8587f1dc1a245a158 Mon Sep 17 00:00:00 2001
From: Cheng Chen <chengchen@google.com>
Date: Wed, 17 Jan 2018 15:47:00 -0800
Subject: [PATCH] Fix a bug in jnt_comp

(1). index may go out side of range
(2). when d0 <= d1, comparison is invalid.

Performance impact on Google lowres testset:
Turn on jnt_comp vs baseline,
Without fix: -0.211% gain
With fix: -0.357% gain

BUG=aomedia:1239

Change-Id: I761522bba8396bba0d4108d710030b472939cf32
---
 av1/common/reconinter.c | 6 ++++--
 1 file changed, 4 insertions(+), 2 deletions(-)

diff --git a/av1/common/reconinter.c b/av1/common/reconinter.c
index b709793653..0a033f1a3a 100644
--- a/av1/common/reconinter.c
+++ b/av1/common/reconinter.c
@@ -905,10 +905,12 @@ void av1_jnt_comp_weight_assign(const AV1_COMMON *cm, const MB_MODE_INFO *mbmi,
   }
 
   int i;
-  for (i = 0; i < 4; ++i) {
+  for (i = 0; i < 3; ++i) {
     int c0 = quant_dist_weight[i][order];
     int c1 = quant_dist_weight[i][!order];
-    if (d0 * c0 < d1 * c1) break;
+    int d0_c0 = d0 * c0;
+    int d1_c1 = d1 * c1;
+    if ((d0 > d1 && d0_c0 < d1_c1) || (d0 <= d1 && d0_c0 > d1_c1)) break;
   }
 
   *fwd_offset = quant_dist_lookup_table[order_idx][i][order];
-- 
GitLab