diff options
author | Marcelo Galvăo Póvoa <marspeoplester@gmail.com> | 2010-09-07 20:44:41 +0000 |
---|---|---|
committer | Vitor Sessak <vitor1001@gmail.com> | 2010-09-07 20:44:41 +0000 |
commit | 1d96cc08652072730e64ecb45df81b608a015a38 (patch) | |
tree | a685761cce72c9d4acde9a2e08620a7c454ff9a6 | |
parent | b33451eeacaa31a7b4f15daf3f106763a4093aa0 (diff) | |
download | ffmpeg-1d96cc08652072730e64ecb45df81b608a015a38.tar.gz |
Move AMRNB lsf2lsp() function to common code for using in future AMRWB decoder.
Patch by Marcelo Galvăo Póvoa
Originally committed as revision 25061 to svn://svn.ffmpeg.org/ffmpeg/trunk
-rw-r--r-- | libavcodec/amrnbdec.c | 18 | ||||
-rw-r--r-- | libavcodec/lsp.c | 8 | ||||
-rw-r--r-- | 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 @@ -222,20 +222,6 @@ static enum Mode unpack_bitstream(AMRContext *p, const uint8_t *buf, /// @{ /** - * 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 @@ -63,6 +63,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) * \param lsp LSP coefficients (-0x8000 <= (0.15) < 0x8000) |