# HG changeset patch # User reynaldo # Date 1236130436 0 # Node ID 36a5caff85409c453b0627e1d76a490790b53d8d # Parent 0613e9b5514ce8cab9092bec7d2e3ad341155595 Part 2 of 2 of Kenan Gillet's 'make ff_qcelp_lspf2lpc more general' changeset. This one relocates the QCELP especific code to the qcelpdec.* files. diff -r 0613e9b5514c -r 36a5caff8540 qcelp_lsp.c --- a/qcelp_lsp.c Wed Mar 04 01:28:07 2009 +0000 +++ b/qcelp_lsp.c Wed Mar 04 01:33:56 2009 +0000 @@ -30,15 +30,6 @@ #include "libavutil/mathematics.h" /** - * initial coefficient to perform bandwidth expansion on LPC - * - * @note: 0.9883 looks like an approximation of 253/256. - * - * TIA/EIA/IS-733 2.4.3.3.6 6 - */ -#define QCELP_BANDWITH_EXPANSION_COEFF 0.9883 - -/** * Computes the Pa / (1 + z(-1)) or Qa / (1 - z(-1)) coefficients * needed for LSP to LPC conversion. * We only need to calculate the 6 first elements of the polynomial. @@ -84,37 +75,7 @@ double paf = pa[i+1] + pa[i]; double qaf = qa[i+1] - qa[i]; - lpc[i ] = 0.5 * (paf+qaf); - lpc[9-i] = 0.5 * (paf-qaf); + lpc[i ] = 0.5*(paf+qaf); + lpc[9-i] = 0.5*(paf-qaf); } } - -/** - * Reconstructs LPC coefficients from the line spectral pair frequencies - * and performs bandwidth expansion. - * - * @param lspf line spectral pair frequencies - * @param lpc linear predictive coding coefficients - * - * @note: bandwith_expansion_coeff could be precalculated into a table - * but it seems to be slower on x86 - * - * TIA/EIA/IS-733 2.4.3.3.5 - */ -void ff_qcelp_lspf2lpc(const float *lspf, float *lpc) -{ - double lsf[10]; - double bandwith_expansion_coeff = QCELP_BANDWITH_EXPANSION_COEFF; - int i; - - for (i=0; i<10; i++) - lsf[i] = cos(M_PI * lspf[i]); - - ff_celp_lspf2lpc(lsf, lpc); - - for (i=0; i<10; i++) - { - lpc[i] *= bandwith_expansion_coeff; - bandwith_expansion_coeff *= QCELP_BANDWITH_EXPANSION_COEFF; - } -} diff -r 0613e9b5514c -r 36a5caff8540 qcelpdata.h --- a/qcelpdata.h Wed Mar 04 01:28:07 2009 +0000 +++ b/qcelpdata.h Wed Mar 04 01:33:56 2009 +0000 @@ -550,4 +550,13 @@ */ #define QCELP_LSP_OCTAVE_PREDICTOR 29.0/32 +/** + * initial coefficient to perform bandwidth expansion on LPC + * + * @note: 0.9883 looks like an approximation of 253/256. + * + * TIA/EIA/IS-733 2.4.3.3.6 6 + */ +#define QCELP_BANDWITH_EXPANSION_COEFF 0.9883 + #endif /* AVCODEC_QCELPDATA_H */ diff -r 0613e9b5514c -r 36a5caff8540 qcelpdec.c --- a/qcelpdec.c Wed Mar 04 01:28:07 2009 +0000 +++ b/qcelpdec.c Wed Mar 04 01:33:56 2009 +0000 @@ -79,7 +79,7 @@ * * TIA/EIA/IS-733 2.4.3.3.5 */ -void ff_qcelp_lspf2lpc(const float *lspf, float *lpc); +void ff_celp_lspf2lpc(const double *lspf, float *lpc); static void weighted_vector_sumf(float *out, const float *in_a, const float *in_b, float weight_coeff_a, @@ -585,6 +585,36 @@ } /** + * Reconstructs LPC coefficients from the line spectral pair frequencies + * and performs bandwidth expansion. + * + * @param lspf line spectral pair frequencies + * @param lpc linear predictive coding coefficients + * + * @note: bandwith_expansion_coeff could be precalculated into a table + * but it seems to be slower on x86 + * + * TIA/EIA/IS-733 2.4.3.3.5 + */ +void lspf2lpc(const float *lspf, float *lpc) +{ + double lsf[10]; + double bandwith_expansion_coeff = QCELP_BANDWITH_EXPANSION_COEFF; + int i; + + for (i=0; i<10; i++) + lsf[i] = cos(M_PI * lspf[i]); + + ff_celp_lspf2lpc(lsf, lpc); + + for (i=0; i<10; i++) + { + lpc[i] *= bandwith_expansion_coeff; + bandwith_expansion_coeff *= QCELP_BANDWITH_EXPANSION_COEFF; + } +} + +/** * Interpolates LSP frequencies and computes LPC coefficients * for a given bitrate & pitch subframe. * @@ -612,12 +642,12 @@ { weighted_vector_sumf(interpolated_lspf, curr_lspf, q->prev_lspf, weight, 1.0 - weight, 10); - ff_qcelp_lspf2lpc(interpolated_lspf, lpc); + lspf2lpc(interpolated_lspf, lpc); }else if(q->bitrate >= RATE_QUARTER || (q->bitrate == I_F_Q && !subframe_num)) - ff_qcelp_lspf2lpc(curr_lspf, lpc); + lspf2lpc(curr_lspf, lpc); else if(q->bitrate == SILENCE && !subframe_num) - ff_qcelp_lspf2lpc(q->prev_lspf, lpc); + lspf2lpc(q->prev_lspf, lpc); } static qcelp_packet_rate buf_size2bitrate(const int buf_size)