Advertisement
Guest User

Untitled

a guest
Feb 17th, 2010
154
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
C 2.56 KB | None | 0 0
  1. +static void sbr_qmf_synthesis(DSPContext *dsp, FFTContext *mdct,
  2. +                              float *out, float X[2][32][64],
  3. +                              float mdct_buf[2][64],
  4. +                              float *v, const unsigned int div,
  5. +                              float bias, float scale)
  6. +{
  7. +    int l, n;
  8. +    const float *sbr_qmf_window = div ? sbr_qmf_window_ds : sbr_qmf_window_us;
  9. +    int scale_and_bias = scale != 1.0f || bias != 0.0f;
  10. +    for (l = 0; l < 32; l++) {
  11. +        memmove(&v[128 >> div], v, ((1280 - 128) >> div) * sizeof(float));
  12. +        for (n = 1; n < 64 >> div; n+=2) {
  13. +            X[1][l][n] = -X[1][l][n];
  14. +        }
  15. +        if (div) {
  16. +            memset(X[0][l]+32, 0, 32*sizeof(float));
  17. +            memset(X[1][l]+32, 0, 32*sizeof(float));
  18. +        }
  19. +        ff_imdct_half(mdct, mdct_buf[0], X[0][l]);
  20. +        ff_imdct_half(mdct, mdct_buf[1], X[1][l]);
  21. +        if (div) {
  22. +            for (n = 0; n < 32; n++) {
  23. +                v[      n] = -mdct_buf[0][63 - 2*n] + mdct_buf[1][2*n    ];
  24. +                v[ 63 - n] =  mdct_buf[0][62 - 2*n] + mdct_buf[1][2*n + 1];
  25. +            }
  26. +        } else {
  27. +            for (n = 0; n < 64; n++) {
  28. +                v[      n] = -mdct_buf[0][63 -   n] + mdct_buf[1][  n    ];
  29. +                v[127 - n] =  mdct_buf[0][63 -   n] + mdct_buf[1][  n    ];
  30. +            }
  31. +        }
  32. +        dsp->vector_fmul_add(out, v                , sbr_qmf_window               , zero64, 64 >> div);
  33. +        dsp->vector_fmul_add(out, v + ( 192 >> div), sbr_qmf_window + ( 64 >> div), out   , 64 >> div);
  34. +        dsp->vector_fmul_add(out, v + ( 256 >> div), sbr_qmf_window + (128 >> div), out   , 64 >> div);
  35. +        dsp->vector_fmul_add(out, v + ( 448 >> div), sbr_qmf_window + (192 >> div), out   , 64 >> div);
  36. +        dsp->vector_fmul_add(out, v + ( 512 >> div), sbr_qmf_window + (256 >> div), out   , 64 >> div);
  37. +        dsp->vector_fmul_add(out, v + ( 704 >> div), sbr_qmf_window + (320 >> div), out   , 64 >> div);
  38. +        dsp->vector_fmul_add(out, v + ( 768 >> div), sbr_qmf_window + (384 >> div), out   , 64 >> div);
  39. +        dsp->vector_fmul_add(out, v + ( 960 >> div), sbr_qmf_window + (448 >> div), out   , 64 >> div);
  40. +        dsp->vector_fmul_add(out, v + (1024 >> div), sbr_qmf_window + (512 >> div), out   , 64 >> div);
  41. +        dsp->vector_fmul_add(out, v + (1216 >> div), sbr_qmf_window + (576 >> div), out   , 64 >> div);
  42. +        if (scale_and_bias)
  43. +            for (n = 0; n < 64 >> div; n++)
  44. +                out[n] = out[n] * scale + bias;
  45. +        out += 64 >> div;
  46. +    }
  47. +}
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement