X-Git-Url: https://git.sesse.net/?a=blobdiff_plain;f=libavcodec%2Filbcdec.c;h=bba83a589630fd3bc10a547a0a63fa324a610a79;hb=fe1ccc1e91168c855a2720d0a195377f4638cc70;hp=58044f4ba862a031c9bf4b666a0c954d85e4a3a3;hpb=d01788665767720441e2d506a270ee6ba85e9fe2;p=ffmpeg diff --git a/libavcodec/ilbcdec.c b/libavcodec/ilbcdec.c index 58044f4ba86..bba83a58963 100644 --- a/libavcodec/ilbcdec.c +++ b/libavcodec/ilbcdec.c @@ -381,7 +381,7 @@ static void get_lsp_poly(int16_t *lsp, int32_t *f) tmp = ((high * lsp[k]) * 4) + (((low * lsp[k]) >> 15) * 4); f[l] += f[l - 2]; - f[l] -= tmp; + f[l] -= (unsigned)tmp; } f[l] -= lsp[k] * (1 << 10); @@ -402,17 +402,17 @@ static void lsf2poly(int16_t *a, int16_t *lsf) get_lsp_poly(&lsp[1], f[1]); for (i = 5; i > 0; i--) { - f[0][i] += f[0][i - 1]; - f[1][i] -= f[1][i - 1]; + f[0][i] += (unsigned)f[0][i - 1]; + f[1][i] -= (unsigned)f[1][i - 1]; } a[0] = 4096; for (i = 5; i > 0; i--) { - tmp = f[0][6 - i] + f[1][6 - i]; - a[6 - i] = (tmp + 4096) >> 13; + tmp = f[0][6 - i] + (unsigned)f[1][6 - i] + 4096; + a[6 - i] = tmp >> 13; - tmp = f[0][6 - i] - f[1][6 - i]; - a[5 + i] = (tmp + 4096) >> 13; + tmp = f[0][6 - i] - (unsigned)f[1][6 - i] + 4096; + a[5 + i] = tmp >> 13; } } @@ -508,10 +508,10 @@ static void filter_arfq12(const int16_t *data_in, int output = 0, sum = 0; for (j = coefficients_length - 1; j > 0; j--) { - sum += coefficients[j] * data_out[i - j]; + sum += (unsigned)(coefficients[j] * data_out[i - j]); } - output = coefficients[0] * data_in[i] - sum; + output = coefficients[0] * data_in[i] - (unsigned)sum; output = av_clip(output, -134217728, 134215679); data_out[i] = (output + 2048) >> 12; @@ -745,7 +745,7 @@ static void construct_vector ( for (j = 0; j < veclen; j++) { a32 = SPL_MUL_16_16(*gainPtr++, cbvec0[j]); a32 += SPL_MUL_16_16(*gainPtr++, cbvec1[j]); - a32 += SPL_MUL_16_16(*gainPtr, cbvec2[j]); + a32 += (unsigned)SPL_MUL_16_16(*gainPtr, cbvec2[j]); gainPtr -= 2; decvector[j] = (a32 + 8192) >> 14; } @@ -901,12 +901,12 @@ static int16_t get_size_in_bits(uint32_t n) static int32_t scale_dot_product(const int16_t *v1, const int16_t *v2, int length, int scaling) { - int32_t sum = 0; + int64_t sum = 0; for (int i = 0; i < length; i++) sum += (v1[i] * v2[i]) >> scaling; - return sum; + return av_clipl_int32(sum); } static void correlation(int32_t *corr, int32_t *ener, int16_t *buffer, @@ -1303,7 +1303,8 @@ static int xcorr_coeff(int16_t *target, int16_t *regressor, pos += step; /* Do a +/- to get the next energy */ - energy += step * ((*rp_end * *rp_end - *rp_beg * *rp_beg) >> shifts); + energy += (unsigned)step * ((*rp_end * *rp_end - *rp_beg * *rp_beg) >> shifts); + rp_beg += step; rp_end += step; } @@ -1372,7 +1373,7 @@ static int ilbc_decode_frame(AVCodecContext *avctx, void *data, if (unpack_frame(s)) mode = 0; - if (s->frame.start < 1) + if (s->frame.start < 1 || s->frame.start > 5) mode = 0; if (mode) {