diff options
author | Adrian Grange <agrange@google.com> | 2014-05-05 09:39:24 -0700 |
---|---|---|
committer | Adrian Grange <agrange@google.com> | 2014-05-05 11:00:43 -0700 |
commit | 928b34e89561e8d752027693ef9b26882f607523 (patch) | |
tree | a8f05a78055fbb6fa78ad2ac3b2cacaa5f467e0b | |
parent | 1b7291d52c8f8c5b8dca0faef6c61c5e0c84bec7 (diff) | |
download | libvpx-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.c | 3 | ||||
-rw-r--r-- | vp9/encoder/vp9_temporal_filter.c | 3 |
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) |