aboutsummaryrefslogtreecommitdiff
path: root/celt/fixed_generic.h
diff options
context:
space:
mode:
authorJean-Marc Valin <jmvalin@jmvalin.ca>2016-07-22 09:13:00 -0400
committerJean-Marc Valin <jmvalin@jmvalin.ca>2016-07-22 15:57:01 -0400
commita0bd7d3b8420be9c96f4e65e6113e11a05a23717 (patch)
tree2340ab65493a3cf8c13cd3276de4b3ef97effdfc /celt/fixed_generic.h
parent184a4767aad0e813cffa4aa178e0c161a4d17253 (diff)
downloadlibopus-a0bd7d3b8420be9c96f4e65e6113e11a05a23717.tar.gz
fixes overflows in celt_iir() by doing proper saturation
Diffstat (limited to 'celt/fixed_generic.h')
-rw-r--r--celt/fixed_generic.h3
1 files changed, 3 insertions, 0 deletions
diff --git a/celt/fixed_generic.h b/celt/fixed_generic.h
index 32e38ff0..3561b93c 100644
--- a/celt/fixed_generic.h
+++ b/celt/fixed_generic.h
@@ -104,6 +104,9 @@
/** Shift by a and round-to-neareast 32-bit value. Result is a 16-bit value */
#define ROUND16(x,a) (EXTRACT16(PSHR32((x),(a))))
+/** Shift by a and round-to-neareast 32-bit value. Result is a saturated 16-bit value */
+#define SROUND16(x,a) EXTRACT16(SATURATE(PSHR32(x,a), 32767));
+
/** Divide by two */
#define HALF16(x) (SHR16(x,1))
#define HALF32(x) (SHR32(x,1))