X-Git-Url: https://git.sesse.net/?a=blobdiff_plain;f=libavcodec%2Fra144enc.c;h=725abc2f381d801ddd39fe8484084f9cdbb954fd;hb=a2c419848df3e76e164bd19c3841f39d2971d326;hp=19fe06c840327513e60bb615a72b53f648e5dc2f;hpb=ff4800c16bae15817b35eaa22d0113849849114b;p=ffmpeg diff --git a/libavcodec/ra144enc.c b/libavcodec/ra144enc.c index 19fe06c8403..725abc2f381 100644 --- a/libavcodec/ra144enc.c +++ b/libavcodec/ra144enc.c @@ -214,7 +214,7 @@ static int adaptive_cb_search(const int16_t *adapt_cb, float *work, ff_celp_lp_synthesis_filterf(work, coefs, exc, BLOCKSIZE, LPC_ORDER); for (i = 0; i < BLOCKSIZE; i++) data[i] -= best_gain * work[i]; - return (best_vect - BLOCKSIZE / 2 + 1); + return best_vect - BLOCKSIZE / 2 + 1; } @@ -477,7 +477,10 @@ static int ra144_encode_frame(AVCodecContext *avctx, uint8_t *frame, * The filter is unstable: use the coefficients of the previous frame. */ ff_int_to_int16(block_coefs[NBLOCKS - 1], ractx->lpc_coef[1]); - ff_eval_refl(lpc_refl, block_coefs[NBLOCKS - 1], avctx); + if (ff_eval_refl(lpc_refl, block_coefs[NBLOCKS - 1], avctx)) { + /* the filter is still unstable. set reflection coeffs to zero. */ + memset(lpc_refl, 0, sizeof(lpc_refl)); + } } init_put_bits(&pb, frame, buf_size); for (i = 0; i < LPC_ORDER; i++) {