From 594409a25cd7c29632d7f40a459103f285d835aa Mon Sep 17 00:00:00 2001 From: Vitor Sessak Date: Wed, 28 May 2008 19:02:16 +0000 Subject: [PATCH] Make lpc coefficients 16 bit wide Originally committed as revision 13499 to svn://svn.ffmpeg.org/ffmpeg/trunk --- libavcodec/ra144.c | 29 +++++++++++++++++------------ 1 file changed, 17 insertions(+), 12 deletions(-) diff --git a/libavcodec/ra144.c b/libavcodec/ra144.c index ec27b0151c..04b39d8c78 100644 --- a/libavcodec/ra144.c +++ b/libavcodec/ra144.c @@ -34,11 +34,12 @@ typedef struct { unsigned int old_energy; ///< previous frame energy /* the swapped buffers */ - unsigned int lpc_tables[4][10]; + unsigned int refl_tables[2][10]; + int16_t coef_tables[2][10]; unsigned int *lpc_refl; ///< LPC reflection coefficients - unsigned int *lpc_coef; ///< LPC coefficients + int16_t *lpc_coef; ///< LPC coefficients unsigned int *lpc_refl_old; ///< previous frame LPC reflection coefs - unsigned int *lpc_coef_old; ///< previous frame LPC coefficients + int16_t *lpc_coef_old; ///< previous frame LPC coefficients unsigned int buffer[5]; uint16_t adapt_cb[148]; ///< adaptive codebook @@ -48,10 +49,10 @@ static int ra144_decode_init(AVCodecContext * avctx) { RA144Context *ractx = avctx->priv_data; - ractx->lpc_refl = ractx->lpc_tables[0]; - ractx->lpc_coef = ractx->lpc_tables[1]; - ractx->lpc_refl_old = ractx->lpc_tables[2]; - ractx->lpc_coef_old = ractx->lpc_tables[3]; + ractx->lpc_refl = ractx->refl_tables[0]; + ractx->lpc_coef = ractx->coef_tables[0]; + ractx->lpc_refl_old = ractx->refl_tables[1]; + ractx->lpc_coef_old = ractx->coef_tables[1]; return 0; } @@ -72,13 +73,17 @@ static int t_sqrt(unsigned int x) } /* do 'voice' */ -static void do_voice(const int *a1, int *a2) +static void do_voice(const int *a1, int16_t *a2) { int buffer[10]; + int buffer2[10]; int *b1 = buffer; - int *b2 = a2; + int *b2 = buffer2; int x, y; + for (x=0; x<10; x++) + buffer2[x] = a2[x]; + for (x=0; x < 10; x++) { b1[x] = a1[x] << 4; @@ -89,7 +94,7 @@ static void do_voice(const int *a1, int *a2) } for (x=0; x < 10; x++) - a2[x] >>= 4; + a2[x] = buffer2[x] >> 4; } /* rotate block */ @@ -236,7 +241,7 @@ static void do_output_subblock(RA144Context *ractx, final(gsp, block, output_buffer, ractx->buffer, BLOCKSIZE); } -static int dec1(int16_t *decsp, const int *data, const int *inp, int f) +static int dec1(int16_t *decsp, const int *data, const int16_t *inp, int f) { int i; @@ -364,7 +369,7 @@ static int ra144_decode_frame(AVCodecContext * avctx, ractx->old_energy = energy; FFSWAP(unsigned int *, ractx->lpc_refl_old, ractx->lpc_refl); - FFSWAP(unsigned int *, ractx->lpc_coef_old, ractx->lpc_coef); + FFSWAP(int16_t * , ractx->lpc_coef_old, ractx->lpc_coef); *data_size = 2*160; return 20;