static void qmf_32_subbands(DCAContext * s, int chans,
                            float samples_in[32][8], float *samples_out,
                            float scale, float bias)
{
    const float *prCoeff;
    int i, j, k;
    float praXin[33], *raXin = &praXin[1];
    float *subband_fir_hist = s->subband_fir_hist[chans];
    float *subband_fir_hist2 = s->subband_fir_noidea[chans];
    int chindex = 0, subindex;
    praXin[0] = 0.0;
    if (!s->multirate_inter)
        prCoeff = fir_32bands_nonperfect;
    else
        prCoeff = fir_32bands_perfect;
    for (subindex = 0; subindex < 8; subindex++) {
        float t1, t2, sum[16], diff[16];
        for (i = 0; i < s->subband_activity[chans]; i++)
            raXin[i] = samples_in[i][subindex];
        for (; i < 32; i++)
            raXin[i] = 0.0;
        for (j = 0, k = 0; k < 16; k++) {
            t1 = 0.0;
            t2 = 0.0;
            for (i = 0; i < 16; i++, j++){
                t1 += (raXin[2 * i] + raXin[2 * i + 1]) * cos_mod[j];
                t2 += (raXin[2 * i] + raXin[2 * i - 1]) * cos_mod[j + 256];
            }
            sum[k] = t1 + t2;
            diff[k] = t1 - t2;
        }
        j = 512;
        for (k = 0; k < 16; k++)
            subband_fir_hist[k] = cos_mod[j++] * sum[k];
        for (k = 0; k < 16; k++)
            subband_fir_hist[32-k-1] = cos_mod[j++] * diff[k];
        for (k = 31, i = 0; i < 32; i++, k--)
            for (j = 0; j < 512; j += 64){
                subband_fir_hist2[i]    += prCoeff[i+j]  * ( subband_fir_hist[i+j] - subband_fir_hist[j+k]);
                subband_fir_hist2[i+32] += prCoeff[i+j+32]*(-subband_fir_hist[i+j] - subband_fir_hist[j+k]);
            }
        for (i = 0; i < 32; i++)
            samples_out[chindex++] = subband_fir_hist2[i] * scale + bias;
        memmove(&subband_fir_hist[32], &subband_fir_hist[0], (512 - 32) * sizeof(float));
        memmove(&subband_fir_hist2[0], &subband_fir_hist2[32], 32 * sizeof(float));
        memset(&subband_fir_hist2[32], 0, 32 * sizeof(float));
    }
}
['static void qmf_32_subbands(DCAContext * s, int chans,\n                            float samples_in[32][8], float *samples_out,\n                            float scale, float bias)\n{\n    const float *prCoeff;\n    int i, j, k;\n    float praXin[33], *raXin = &praXin[1];\n    float *subband_fir_hist = s->subband_fir_hist[chans];\n    float *subband_fir_hist2 = s->subband_fir_noidea[chans];\n    int chindex = 0, subindex;\n    praXin[0] = 0.0;\n    if (!s->multirate_inter)\n        prCoeff = fir_32bands_nonperfect;\n    else\n        prCoeff = fir_32bands_perfect;\n    for (subindex = 0; subindex < 8; subindex++) {\n        float t1, t2, sum[16], diff[16];\n        for (i = 0; i < s->subband_activity[chans]; i++)\n            raXin[i] = samples_in[i][subindex];\n        for (; i < 32; i++)\n            raXin[i] = 0.0;\n        for (j = 0, k = 0; k < 16; k++) {\n            t1 = 0.0;\n            t2 = 0.0;\n            for (i = 0; i < 16; i++, j++){\n                t1 += (raXin[2 * i] + raXin[2 * i + 1]) * cos_mod[j];\n                t2 += (raXin[2 * i] + raXin[2 * i - 1]) * cos_mod[j + 256];\n            }\n            sum[k] = t1 + t2;\n            diff[k] = t1 - t2;\n        }\n        j = 512;\n        for (k = 0; k < 16; k++)\n            subband_fir_hist[k] = cos_mod[j++] * sum[k];\n        for (k = 0; k < 16; k++)\n            subband_fir_hist[32-k-1] = cos_mod[j++] * diff[k];\n        for (k = 31, i = 0; i < 32; i++, k--)\n            for (j = 0; j < 512; j += 64){\n                subband_fir_hist2[i]    += prCoeff[i+j]  * ( subband_fir_hist[i+j] - subband_fir_hist[j+k]);\n                subband_fir_hist2[i+32] += prCoeff[i+j+32]*(-subband_fir_hist[i+j] - subband_fir_hist[j+k]);\n            }\n        for (i = 0; i < 32; i++)\n            samples_out[chindex++] = subband_fir_hist2[i] * scale + bias;\n        memmove(&subband_fir_hist[32], &subband_fir_hist[0], (512 - 32) * sizeof(float));\n        memmove(&subband_fir_hist2[0], &subband_fir_hist2[32], 32 * sizeof(float));\n        memset(&subband_fir_hist2[32], 0, 32 * sizeof(float));\n    }\n}']