summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorAdrian Grange <agrange@google.com>2014-05-05 09:39:24 -0700
committerAdrian Grange <agrange@google.com>2014-05-05 11:00:43 -0700
commit928b34e89561e8d752027693ef9b26882f607523 (patch)
treea8f05a78055fbb6fa78ad2ac3b2cacaa5f467e0b
parent1b7291d52c8f8c5b8dca0faef6c61c5e0c84bec7 (diff)
downloadlibvpx-928b34e89561e8d752027693ef9b26882f607523.tar
libvpx-928b34e89561e8d752027693ef9b26882f607523.tar.gz
libvpx-928b34e89561e8d752027693ef9b26882f607523.tar.bz2
libvpx-928b34e89561e8d752027693ef9b26882f607523.zip
Fix rounding in ARNR calculation
The rounding of the ARNR filter output prior to normalization by the filter strength was incorrect when strength = 0. In this case 1 << (strength - 1) would not create the required rounding of 0, rather it would outrange. This patch fixes this issue. Change-Id: I771809ba34d6052b17d34c870ea11ff67b418dab
-rw-r--r--vp8/encoder/temporal_filter.c3
-rw-r--r--vp9/encoder/vp9_temporal_filter.c3
2 files changed, 4 insertions, 2 deletions
diff --git a/vp8/encoder/temporal_filter.c b/vp8/encoder/temporal_filter.c
index 513b2bfea..4dc0d9592 100644
--- a/vp8/encoder/temporal_filter.c
+++ b/vp8/encoder/temporal_filter.c
@@ -98,6 +98,7 @@ void vp8_temporal_filter_apply_c
unsigned int i, j, k;
int modifier;
int byte = 0;
+ const int rounding = strength > 0 ? 1 << (strength - 1) : 0;
for (i = 0,k = 0; i < block_size; i++)
{
@@ -114,7 +115,7 @@ void vp8_temporal_filter_apply_c
*/
modifier *= modifier;
modifier *= 3;
- modifier += 1 << (strength - 1);
+ modifier += rounding;
modifier >>= strength;
if (modifier > 16)
diff --git a/vp9/encoder/vp9_temporal_filter.c b/vp9/encoder/vp9_temporal_filter.c
index a5234cd9e..6eff20080 100644
--- a/vp9/encoder/vp9_temporal_filter.c
+++ b/vp9/encoder/vp9_temporal_filter.c
@@ -99,6 +99,7 @@ void vp9_temporal_filter_apply_c(uint8_t *frame1,
unsigned int i, j, k;
int modifier;
int byte = 0;
+ const int rounding = strength > 0 ? 1 << (strength - 1) : 0;
for (i = 0, k = 0; i < block_size; i++) {
for (j = 0; j < block_size; j++, k++) {
@@ -111,7 +112,7 @@ void vp9_temporal_filter_apply_c(uint8_t *frame1,
// modifier = (int)roundf(coeff > 16 ? 0 : 16-coeff);
modifier *= modifier;
modifier *= 3;
- modifier += 1 << (strength - 1);
+ modifier += rounding;
modifier >>= strength;
if (modifier > 16)