comparison lsp.c @ 12465:1921e24d5886 libavcodec

Move lsp2lpc_sipr() function to common code so it can be reused in a AMRWB decoder. Patch by Marcelo Galvo Pvoa.
author vitor
date Tue, 07 Sep 2010 20:46:29 +0000
parents 2dd67ed2f947
children
comparison
equal deleted inserted replaced
12464:2dd67ed2f947 12465:1921e24d5886
113 113
114 ff1 += 1 << 10; // for rounding 114 ff1 += 1 << 10; // for rounding
115 lp[i] = (ff1 + ff2) >> 11; // divide by 2 and (3.22) -> (3.12) 115 lp[i] = (ff1 + ff2) >> 11; // divide by 2 and (3.22) -> (3.12)
116 lp[(lp_half_order << 1) + 1 - i] = (ff1 - ff2) >> 11; // divide by 2 and (3.22) -> (3.12) 116 lp[(lp_half_order << 1) + 1 - i] = (ff1 - ff2) >> 11; // divide by 2 and (3.22) -> (3.12)
117 } 117 }
118 }
119
120 void ff_amrwb_lsp2lpc(const double *lsp, float *lp, int lp_order)
121 {
122 int lp_half_order = lp_order >> 1;
123 double buf[lp_half_order + 1];
124 double pa[lp_half_order + 1];
125 double *qa = buf + 1;
126 int i,j;
127
128 qa[-1] = 0.0;
129
130 ff_lsp2polyf(lsp , pa, lp_half_order );
131 ff_lsp2polyf(lsp + 1, qa, lp_half_order - 1);
132
133 for (i = 1, j = lp_order - 1; i < lp_half_order; i++, j--) {
134 double paf = pa[i] * (1 + lsp[lp_order - 1]);
135 double qaf = (qa[i] - qa[i-2]) * (1 - lsp[lp_order - 1]);
136 lp[i-1] = (paf + qaf) * 0.5;
137 lp[j-1] = (paf - qaf) * 0.5;
138 }
139
140 lp[lp_half_order - 1] = (1.0 + lsp[lp_order - 1]) *
141 pa[lp_half_order] * 0.5;
142
143 lp[lp_order - 1] = lsp[lp_order - 1];
118 } 144 }
119 145
120 void ff_acelp_lp_decode(int16_t* lp_1st, int16_t* lp_2nd, const int16_t* lsp_2nd, const int16_t* lsp_prev, int lp_order) 146 void ff_acelp_lp_decode(int16_t* lp_1st, int16_t* lp_2nd, const int16_t* lsp_2nd, const int16_t* lsp_prev, int lp_order)
121 { 147 {
122 int16_t lsp_1st[MAX_LP_ORDER]; // (0.15) 148 int16_t lsp_1st[MAX_LP_ORDER]; // (0.15)