mirror of
https://github.com/FFmpeg/FFmpeg.git
synced 2024-12-23 12:43:46 +02:00
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
This commit is contained in:
parent
b33451eeac
commit
1d96cc0865
@ -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],
|
|||||||
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)
|
|||||||
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)
|
|||||||
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);
|
|||||||
*/
|
*/
|
||||||
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)
|
||||||
|
Loading…
Reference in New Issue
Block a user