From 1d96cc08652072730e64ecb45df81b608a015a38 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Marcelo=20Galv=C4=83o=20P=C3=B3voa?= Date: Tue, 7 Sep 2010 20:44:41 +0000 Subject: [PATCH] Move AMRNB lsf2lsp() function to common code for using in future AMRWB decoder. MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit Patch by Marcelo Galvăo Póvoa Originally committed as revision 25061 to svn://svn.ffmpeg.org/ffmpeg/trunk --- libavcodec/amrnbdec.c | 18 ++---------------- libavcodec/lsp.c | 8 ++++++++ libavcodec/lsp.h | 5 +++++ 3 files changed, 15 insertions(+), 16 deletions(-) diff --git a/libavcodec/amrnbdec.c b/libavcodec/amrnbdec.c index d3fa7653f8..616be9710e 100644 --- a/libavcodec/amrnbdec.c +++ b/libavcodec/amrnbdec.c @@ -221,20 +221,6 @@ static enum Mode unpack_bitstream(AMRContext *p, const uint8_t *buf, /// @defgroup amr_lpc_decoding AMR pitch LPC coefficient decoding functions /// @{ -/** - * Convert an lsf vector into an lsp vector. - * - * @param lsf input lsf vector - * @param lsp output lsp vector - */ -static void lsf2lsp(const float *lsf, double *lsp) -{ - int i; - - for (i = 0; i < LP_FILTER_ORDER; i++) - lsp[i] = cos(2.0 * M_PI * lsf[i]); -} - /** * Interpolate the LSF vector (used for fixed gain smoothing). * The interpolation is done over all four subframes even in MODE_12k2. @@ -293,7 +279,7 @@ static void lsf2lsp_for_mode12k2(AMRContext *p, double lsp[LP_FILTER_ORDER], if (update) interpolate_lsf(p->lsf_q, lsf_q); - lsf2lsp(lsf_q, lsp); + ff_acelp_lsf2lspd(lsp, lsf_q, LP_FILTER_ORDER); } /** @@ -357,7 +343,7 @@ static void lsf2lsp_3(AMRContext *p) interpolate_lsf(p->lsf_q, lsf_q); memcpy(p->prev_lsf_r, lsf_r, LP_FILTER_ORDER * sizeof(*lsf_r)); - lsf2lsp(lsf_q, p->lsp[3]); + ff_acelp_lsf2lspd(p->lsp[3], lsf_q, LP_FILTER_ORDER); // interpolate LSP vectors at subframes 1, 2 and 3 for (i = 1; i <= 3; i++) diff --git a/libavcodec/lsp.c b/libavcodec/lsp.c index 7112492001..fa7152737a 100644 --- a/libavcodec/lsp.c +++ b/libavcodec/lsp.c @@ -65,6 +65,14 @@ void ff_acelp_lsf2lsp(int16_t *lsp, const int16_t *lsf, int lp_order) lsp[i] = ff_cos(lsf[i] * 20861 >> 15); // divide by PI and (0,13) -> (0,14) } +void ff_acelp_lsf2lspd(double *lsp, const float *lsf, int lp_order) +{ + int i; + + for(i = 0; i < lp_order; i++) + lsp[i] = cos(2.0 * M_PI * lsf[i]); +} + /** * \brief decodes polynomial coefficients from LSP * \param f [out] decoded polynomial coefficients (-0x20000000 <= (3.22) <= 0x1fffffff) diff --git a/libavcodec/lsp.h b/libavcodec/lsp.h index 5ee5c277bc..2c22058062 100644 --- a/libavcodec/lsp.h +++ b/libavcodec/lsp.h @@ -62,6 +62,11 @@ void ff_set_min_dist_lsf(float *lsf, double min_spacing, int size); */ void ff_acelp_lsf2lsp(int16_t *lsp, const int16_t *lsf, int lp_order); +/** + * Floating point version of ff_acelp_lsf2lsp() + */ +void ff_acelp_lsf2lspd(double *lsp, const float *lsf, int lp_order); + /** * \brief LSP to LP conversion (3.2.6 of G.729) * \param[out] lp decoded LP coefficients (-0x8000 <= (3.12) < 0x8000)