Skip to content
Snippets Groups Projects
Commit 1d96cc08 authored by Marcelo Galvăo Póvoa's avatar Marcelo Galvăo Póvoa Committed by Vitor Sessak
Browse files

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
No related branches found
No related tags found
No related merge requests found
...@@ -221,20 +221,6 @@ static enum Mode unpack_bitstream(AMRContext *p, const uint8_t *buf, ...@@ -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 /// @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). * Interpolate the LSF vector (used for fixed gain smoothing).
* The interpolation is done over all four subframes even in MODE_12k2. * 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], ...@@ -293,7 +279,7 @@ static void lsf2lsp_for_mode12k2(AMRContext *p, double lsp[LP_FILTER_ORDER],
if (update) if (update)
interpolate_lsf(p->lsf_q, lsf_q); 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) ...@@ -357,7 +343,7 @@ static void lsf2lsp_3(AMRContext *p)
interpolate_lsf(p->lsf_q, lsf_q); interpolate_lsf(p->lsf_q, lsf_q);
memcpy(p->prev_lsf_r, lsf_r, LP_FILTER_ORDER * sizeof(*lsf_r)); 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 // interpolate LSP vectors at subframes 1, 2 and 3
for (i = 1; i <= 3; i++) for (i = 1; i <= 3; i++)
......
...@@ -65,6 +65,14 @@ void ff_acelp_lsf2lsp(int16_t *lsp, const int16_t *lsf, int lp_order) ...@@ -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) 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 * \brief decodes polynomial coefficients from LSP
* \param f [out] decoded polynomial coefficients (-0x20000000 <= (3.22) <= 0x1fffffff) * \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); ...@@ -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); 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) * \brief LSP to LP conversion (3.2.6 of G.729)
* \param[out] lp decoded LP coefficients (-0x8000 <= (3.12) < 0x8000) * \param[out] lp decoded LP coefficients (-0x8000 <= (3.12) < 0x8000)
......
0% Loading or .
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment