From e30f7698f5c500f3a1db992126a03d23cbccc533 Mon Sep 17 00:00:00 2001
From: JackyChen <jackychen@google.com>
Date: Thu, 4 Sep 2014 11:16:56 -0700
Subject: [PATCH] Fix a bug in VP9 denoiser.

When the first try of denoising turns out to be too much,
we will use a softer filter by adopting an adjustment to
make the result closer to original pixel (as in VP8 denoiser).
The old code made the adjustment in the wrong direction.

Change-Id: I84e28fa9e01eef47c5a37d5a2e6d3d378a06786b
---
 vp9/encoder/vp9_denoiser.c | 10 ++++++++--
 1 file changed, 8 insertions(+), 2 deletions(-)

diff --git a/vp9/encoder/vp9_denoiser.c b/vp9/encoder/vp9_denoiser.c
index e9fbf1bbf5..e047f7ef6d 100644
--- a/vp9/encoder/vp9_denoiser.c
+++ b/vp9/encoder/vp9_denoiser.c
@@ -145,11 +145,17 @@ static VP9_DENOISER_DECISION denoiser_filter(const uint8_t *sig, int sig_stride,
         adj = delta;
       }
       if (diff > 0) {
+        // Diff positive means we made positive adjustment above
+        // (in first try/attempt), so now make negative adjustment to bring
+        // denoised signal down.
         avg[c] = MAX(0, avg[c] - adj);
-        total_adj += adj;
+        total_adj -= adj;
       } else {
+        // Diff negative means we made negative adjustment above
+        // (in first try/attempt), so now make positive adjustment to bring
+        // denoised signal up.
         avg[c] = MIN(UINT8_MAX, avg[c] + adj);
-        total_adj -= adj;
+        total_adj += adj;
       }
     }
     sig += sig_stride;
-- 
GitLab