comparison aacsbr.c @ 11849:f2c42ef01008 libavcodec

Base downsampled SBR synthesis filterbank on a single IMDCT. Based on Han-Wen Hsu, et al. "Fast Complex Quadrature Mirror Filterbanks for MPEG-4 HE-AAC"
author alexc
date Tue, 08 Jun 2010 01:57:06 +0000
parents 6b52f0c3263d
children 954d05e65641
comparison
equal deleted inserted replaced
11848:6b52f0c3263d 11849:f2c42ef01008
1182 *v_off = SBR_SYNTHESIS_BUF_SIZE - saved_samples - (128 >> div); 1182 *v_off = SBR_SYNTHESIS_BUF_SIZE - saved_samples - (128 >> div);
1183 } else { 1183 } else {
1184 *v_off -= 128 >> div; 1184 *v_off -= 128 >> div;
1185 } 1185 }
1186 v = v0 + *v_off; 1186 v = v0 + *v_off;
1187 if (div) {
1188 for (n = 0; n < 32; n++) {
1189 X[0][i][ n] = -X[0][i][n];
1190 X[0][i][32+n] = X[1][i][31-n];
1191 }
1192 ff_imdct_half(mdct, mdct_buf[0], X[0][i]);
1193 for (n = 0; n < 32; n++) {
1194 v[ n] = mdct_buf[0][63 - 2*n];
1195 v[63 - n] = -mdct_buf[0][62 - 2*n];
1196 }
1197 } else {
1187 for (n = 1; n < 64 >> div; n+=2) { 1198 for (n = 1; n < 64 >> div; n+=2) {
1188 X[1][i][n] = -X[1][i][n]; 1199 X[1][i][n] = -X[1][i][n];
1189 } 1200 }
1190 if (div) {
1191 memset(X[0][i]+32, 0, 32*sizeof(float));
1192 memset(X[1][i]+32, 0, 32*sizeof(float));
1193 }
1194 ff_imdct_half(mdct, mdct_buf[0], X[0][i]); 1201 ff_imdct_half(mdct, mdct_buf[0], X[0][i]);
1195 ff_imdct_half(mdct, mdct_buf[1], X[1][i]); 1202 ff_imdct_half(mdct, mdct_buf[1], X[1][i]);
1196 if (div) {
1197 for (n = 0; n < 32; n++) {
1198 v[ n] = -mdct_buf[0][63 - 2*n] + mdct_buf[1][2*n ];
1199 v[ 63 - n] = mdct_buf[0][62 - 2*n] + mdct_buf[1][2*n + 1];
1200 }
1201 } else {
1202 for (n = 0; n < 64; n++) { 1203 for (n = 0; n < 64; n++) {
1203 v[ n] = -mdct_buf[0][63 - n] + mdct_buf[1][ n ]; 1204 v[ n] = -mdct_buf[0][63 - n] + mdct_buf[1][ n ];
1204 v[127 - n] = mdct_buf[0][63 - n] + mdct_buf[1][ n ]; 1205 v[127 - n] = mdct_buf[0][63 - n] + mdct_buf[1][ n ];
1205 } 1206 }
1206 } 1207 }