Commit 97cfcabb authored by alexc's avatar alexc

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"


git-svn-id: file:///var/local/repositories/ffmpeg/trunk@23519 9553f0bf-9b14-0410-a0b8-cfaf0461ba5b
parent f399878f
...@@ -1184,21 +1184,22 @@ static void sbr_qmf_synthesis(DSPContext *dsp, FFTContext *mdct, ...@@ -1184,21 +1184,22 @@ static void sbr_qmf_synthesis(DSPContext *dsp, FFTContext *mdct,
*v_off -= 128 >> div; *v_off -= 128 >> div;
} }
v = v0 + *v_off; v = v0 + *v_off;
if (div) {
for (n = 0; n < 32; n++) {
X[0][i][ n] = -X[0][i][n];
X[0][i][32+n] = X[1][i][31-n];
}
ff_imdct_half(mdct, mdct_buf[0], X[0][i]);
for (n = 0; n < 32; n++) {
v[ n] = mdct_buf[0][63 - 2*n];
v[63 - n] = -mdct_buf[0][62 - 2*n];
}
} else {
for (n = 1; n < 64 >> div; n+=2) { for (n = 1; n < 64 >> div; n+=2) {
X[1][i][n] = -X[1][i][n]; X[1][i][n] = -X[1][i][n];
} }
if (div) {
memset(X[0][i]+32, 0, 32*sizeof(float));
memset(X[1][i]+32, 0, 32*sizeof(float));
}
ff_imdct_half(mdct, mdct_buf[0], X[0][i]); ff_imdct_half(mdct, mdct_buf[0], X[0][i]);
ff_imdct_half(mdct, mdct_buf[1], X[1][i]); ff_imdct_half(mdct, mdct_buf[1], X[1][i]);
if (div) {
for (n = 0; n < 32; n++) {
v[ n] = -mdct_buf[0][63 - 2*n] + mdct_buf[1][2*n ];
v[ 63 - n] = mdct_buf[0][62 - 2*n] + mdct_buf[1][2*n + 1];
}
} else {
for (n = 0; n < 64; n++) { for (n = 0; n < 64; n++) {
v[ n] = -mdct_buf[0][63 - n] + mdct_buf[1][ n ]; v[ n] = -mdct_buf[0][63 - n] + mdct_buf[1][ n ];
v[127 - n] = mdct_buf[0][63 - n] + mdct_buf[1][ n ]; v[127 - n] = mdct_buf[0][63 - n] + mdct_buf[1][ n ];
......
Markdown is supported
0%
or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment