summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorMarcelo Galvăo Póvoa <marspeoplester@gmail.com>2010-09-07 20:44:41 +0000
committerVitor Sessak <vitor1001@gmail.com>2010-09-07 20:44:41 +0000
commit1d96cc08652072730e64ecb45df81b608a015a38 (patch)
treea685761cce72c9d4acde9a2e08620a7c454ff9a6
parentb33451eeacaa31a7b4f15daf3f106763a4093aa0 (diff)
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.c18
-rw-r--r--libavcodec/lsp.c8
-rw-r--r--libavcodec/lsp.h5
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)