Originally committed as revision 20485 to svn://svn.ffmpeg.org/ffmpeg/trunk
Vitor Sessak authored on 2009/11/09 21:06:19... | ... |
@@ -155,20 +155,19 @@ static void lsp2polyf(const double *lsp, double *f, int lp_half_order) |
155 | 155 |
} |
156 | 156 |
} |
157 | 157 |
|
158 |
-void ff_acelp_lspd2lpc(const double *lsp, float *lpc) |
|
158 |
+void ff_acelp_lspd2lpc(const double *lsp, float *lpc, int lp_half_order) |
|
159 | 159 |
{ |
160 |
- double pa[6], qa[6]; |
|
161 |
- int i; |
|
160 |
+ double pa[lp_half_order+1], qa[lp_half_order+1]; |
|
161 |
+ float *lpc2 = lpc + (lp_half_order << 1) - 1; |
|
162 | 162 |
|
163 |
- lsp2polyf(lsp, pa, 5); |
|
164 |
- lsp2polyf(lsp + 1, qa, 5); |
|
163 |
+ lsp2polyf(lsp, pa, lp_half_order); |
|
164 |
+ lsp2polyf(lsp + 1, qa, lp_half_order); |
|
165 | 165 |
|
166 |
- for (i=4; i>=0; i--) |
|
167 |
- { |
|
168 |
- double paf = pa[i+1] + pa[i]; |
|
169 |
- double qaf = qa[i+1] - qa[i]; |
|
166 |
+ while (lp_half_order--) { |
|
167 |
+ double paf = pa[lp_half_order+1] + pa[lp_half_order]; |
|
168 |
+ double qaf = qa[lp_half_order+1] - qa[lp_half_order]; |
|
170 | 169 |
|
171 |
- lpc[i ] = 0.5*(paf+qaf); |
|
172 |
- lpc[9-i] = 0.5*(paf-qaf); |
|
170 |
+ lpc [ lp_half_order] = 0.5*(paf+qaf); |
|
171 |
+ lpc2[-lp_half_order] = 0.5*(paf-qaf); |
|
173 | 172 |
} |
174 | 173 |
} |
... | ... |
@@ -86,8 +86,10 @@ void ff_acelp_lp_decode(int16_t* lp_1st, int16_t* lp_2nd, const int16_t* lsp_2nd |
86 | 86 |
* @param lsp line spectral pairs in cosine domain |
87 | 87 |
* @param lpc linear predictive coding coefficients |
88 | 88 |
* |
89 |
+ * @note buffers should have a minimux size of 2*lp_half_order elements. |
|
90 |
+ * |
|
89 | 91 |
* TIA/EIA/IS-733 2.4.3.3.5 |
90 | 92 |
*/ |
91 |
-void ff_acelp_lspd2lpc(const double *lsp, float *lpc); |
|
93 |
+void ff_acelp_lspd2lpc(const double *lsp, float *lpc, int lp_half_order); |
|
92 | 94 |
|
93 | 95 |
#endif /* AVCODEC_LSP_H */ |