Commit 1d96cc08 authored by Marcelo Galvăo Póvoa's avatar Marcelo Galvăo Póvoa Committed by Vitor Sessak

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
parent b33451ee
......@@ -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++)
......
......@@ -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)
......
......@@ -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)
......
Markdown is supported
0% or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment