g723.1: fix addition overflow
authorMans Rullgard <mans@mansr.com>
Fri, 10 Aug 2012 00:17:20 +0000 (01:17 +0100)
committerMans Rullgard <mans@mansr.com>
Fri, 10 Aug 2012 11:18:38 +0000 (12:18 +0100)
This addition must be done as 64-bit to avoid overflow and for
the subsequent clipping to be meaningful.

Signed-off-by: Mans Rullgard <mans@mansr.com>
libavcodec/g723_1.c
tests/ref/fate/g723_1-dec-3

index 53b9ade..7d8a48e 100644 (file)
@@ -979,7 +979,7 @@ static void formant_postfilter(G723_1_Context *p, int16_t *lpc, int16_t *buf)
 
         /* Compensation filter */
         for (j = 0; j < SUBFRAME_LEN; j++) {
-            buf_ptr[j] = av_clipl_int32(signal_ptr[j] +
+            buf_ptr[j] = av_clipl_int32((int64_t)signal_ptr[j] +
                                         ((signal_ptr[j - 1] >> 16) *
                                          temp << 1)) >> 16;
         }
index eabdd73..d1a2946 100644 (file)
@@ -13,7 +13,7 @@
 0,       2640,       2640,      240,      480, 0xe253c7e1
 0,       2880,       2880,      240,      480, 0x672cbf0a
 0,       3120,       3120,      240,      480, 0x5f32aa27
-0,       3360,       3360,      240,      480, 0x8646a245
+0,       3360,       3360,      240,      480, 0x0b3da147
 0,       3600,       3600,      240,      480, 0x4819e5bc
 0,       3840,       3840,      240,      480, 0x423dec60
 0,       4080,       4080,      240,      480, 0xafefe289