summaryrefslogtreecommitdiff
path: root/libavcodec/celp_filters.c
diff options
context:
space:
mode:
Diffstat (limited to 'libavcodec/celp_filters.c')
-rw-r--r--libavcodec/celp_filters.c15
1 files changed, 7 insertions, 8 deletions
diff --git a/libavcodec/celp_filters.c b/libavcodec/celp_filters.c
index 4e5bcda79a..d764d19219 100644
--- a/libavcodec/celp_filters.c
+++ b/libavcodec/celp_filters.c
@@ -63,17 +63,16 @@ int ff_celp_lp_synthesis_filter(int16_t *out, const int16_t *filter_coeffs,
int i,n;
for (n = 0; n < buffer_length; n++) {
- int sum = rounder;
+ int sum = -rounder, sum1;
for (i = 1; i <= filter_length; i++)
- sum -= filter_coeffs[i-1] * out[n-i];
+ sum += filter_coeffs[i-1] * out[n-i];
- sum = ((sum >> 12) + in[n]) >> shift;
+ sum1 = ((-sum >> 12) + in[n]) >> shift;
+ sum = av_clip_int16(sum1);
+
+ if (stop_on_overflow && sum != sum1)
+ return 1;
- if (sum + 0x8000 > 0xFFFFU) {
- if (stop_on_overflow)
- return 1;
- sum = (sum >> 31) ^ 32767;
- }
out[n] = sum;
}