From e30f7698f5c500f3a1db992126a03d23cbccc533 Mon Sep 17 00:00:00 2001 From: JackyChen 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 e9fbf1b..e047f7e 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; -- 2.7.4