X-Git-Url: https://git.sesse.net/?a=blobdiff_plain;f=libavcodec%2Ftruespeech.c;h=272fc43deb4c981a3c5aaadfedb38b6eee817b88;hb=0181162bb54ce62ec212436a12d059726d8cd1df;hp=d4ddfcbf9c147dbe891e308a2517ea11959e4e60;hpb=2d62e06ff6a9f3dbd78136c1dc4a315a727c6f00;p=ffmpeg diff --git a/libavcodec/truespeech.c b/libavcodec/truespeech.c index d4ddfcbf9c1..272fc43deb4 100644 --- a/libavcodec/truespeech.c +++ b/libavcodec/truespeech.c @@ -21,6 +21,8 @@ #include "libavutil/channel_layout.h" #include "libavutil/intreadwrite.h" +#include "libavutil/mem_internal.h" + #include "avcodec.h" #include "bswapdsp.h" #include "get_bits.h" @@ -132,8 +134,7 @@ static void truespeech_correlate_filter(TSContext *dec) if(i > 0){ memcpy(tmp, dec->cvector, i * sizeof(*tmp)); for(j = 0; j < i; j++) - dec->cvector[j] = ((tmp[i - j - 1] * dec->vector[i]) + - (dec->cvector[j] << 15) + 0x4000) >> 15; + dec->cvector[j] += (tmp[i - j - 1] * dec->vector[i] + 0x4000) >> 15; } dec->cvector[i] = (8 - dec->vector[i]) >> 3; } @@ -255,8 +256,8 @@ static void truespeech_synth(TSContext *dec, int16_t *out, int quart) for(i = 0; i < 60; i++){ int sum = 0; for(k = 0; k < 8; k++) - sum += ptr0[k] * ptr1[k]; - sum = (sum + (out[i] << 12) + 0x800) >> 12; + sum += ptr0[k] * (unsigned)ptr1[k]; + sum = out[i] + ((int)(sum + 0x800U) >> 12); out[i] = av_clip(sum, -0x7FFE, 0x7FFE); for(k = 7; k > 0; k--) ptr0[k] = ptr0[k - 1]; @@ -274,7 +275,7 @@ static void truespeech_synth(TSContext *dec, int16_t *out, int quart) for(k = 7; k > 0; k--) ptr0[k] = ptr0[k - 1]; ptr0[0] = out[i]; - out[i] = ((out[i] << 12) - sum) >> 12; + out[i] += (- sum) >> 12; } for(i = 0; i < 8; i++) @@ -282,7 +283,7 @@ static void truespeech_synth(TSContext *dec, int16_t *out, int quart) ptr0 = dec->tmp3; for(i = 0; i < 60; i++){ - int sum = out[i] << 12; + int sum = out[i] * (1 << 12); for(k = 0; k < 8; k++) sum += ptr0[k] * t[k]; for(k = 7; k > 0; k--)