static void do_hybrid_window(int order, int n, int non_rec, const float *in,

                             float *out, float *hist, float *out2,

                             const float *window)

{

    int i;

    float buffer1[order + 1];

    float buffer2[order + 1];

    float work[order + n + non_rec];



    /* update history */

    memmove(hist, hist + n, (order + non_rec)*sizeof(*hist));



    for (i=0; i < n; i++)

        hist[order + non_rec + i] = in[n-i-1];



    colmult(work, window, hist, order + n + non_rec);



    convolve(buffer1, work + order    , n      , order);

    convolve(buffer2, work + order + n, non_rec, order);



    for (i=0; i <= order; i++) {

        out2[i] = out2[i] * 0.5625 + buffer1[i];

        out [i] = out2[i]          + buffer2[i];

    }



    /* Multiply by the white noise correcting factor (WNCF) */

    *out *= 257./256.;

}

static void do_hybrid_window(int order, int n, int non_rec, const float *in,

                             float *out, float *hist, float *out2,

                             const float *window)

{

    int i;

    float buffer1[order + 1];

    float buffer2[order + 1];

    float work[order + n + non_rec];



    

    memmove(hist, hist + n, (order + non_rec)*sizeof(*hist));



    for (i=0; i < n; i++)

        hist[order + non_rec + i] = in[n-i-1];



    colmult(work, window, hist, order + n + non_rec);



    convolve(buffer1, work + order    , n      , order);

    convolve(buffer2, work + order + n, non_rec, order);



    for (i=0; i <= order; i++) {

        out2[i] = out2[i] * 0.5625 + buffer1[i];

        out [i] = out2[i]          + buffer2[i];

    }



    

    *out *= 257./256.;

}

static void FUNC_0(int VAR_0, int VAR_1, int VAR_2, const float *VAR_3,

                             float *VAR_4, float *VAR_5, float *VAR_6,

                             const float *VAR_7)

{

    int VAR_8;

    float VAR_9[VAR_0 + 1];

    float VAR_10[VAR_0 + 1];

    float VAR_11[VAR_0 + VAR_1 + VAR_2];



    

    memmove(VAR_5, VAR_5 + VAR_1, (VAR_0 + VAR_2)*sizeof(*VAR_5));



    for (VAR_8=0; VAR_8 < VAR_1; VAR_8++)

        VAR_5[VAR_0 + VAR_2 + VAR_8] = VAR_3[VAR_1-VAR_8-1];



    colmult(VAR_11, VAR_7, VAR_5, VAR_0 + VAR_1 + VAR_2);



    convolve(VAR_9, VAR_11 + VAR_0    , VAR_1      , VAR_0);

    convolve(VAR_10, VAR_11 + VAR_0 + VAR_1, VAR_2, VAR_0);



    for (VAR_8=0; VAR_8 <= VAR_0; VAR_8++) {

        VAR_6[VAR_8] = VAR_6[VAR_8] * 0.5625 + VAR_9[VAR_8];

        VAR_4 [VAR_8] = VAR_6[VAR_8]          + VAR_10[VAR_8];

    }



    

    *VAR_4 *= 257./256.;

}

static void FUNC_0(int VAR_0, int VAR_1, int VAR_2, const float *VAR_3,
float *VAR_4, float *VAR_5, float *VAR_6,
const float *VAR_7)
{ int VAR_8; float VAR_9[VAR_0 + 1]; float VAR_10[VAR_0 + 1]; float VAR_11[VAR_0 + VAR_1 + VAR_2]; memmove(VAR_5, VAR_5 + VAR_1, (VAR_0 + VAR_2)*sizeof(*VAR_5)); for (VAR_8=0; VAR_8 < VAR_1; VAR_8++) VAR_5[VAR_0 + VAR_2 + VAR_8] = VAR_3[VAR_1-VAR_8-1]; colmult(VAR_11, VAR_7, VAR_5, VAR_0 + VAR_1 + VAR_2); convolve(VAR_9, VAR_11 + VAR_0    , VAR_1      , VAR_0); convolve(VAR_10, VAR_11 + VAR_0 + VAR_1, VAR_2, VAR_0); for (VAR_8=0; VAR_8 <= VAR_0; VAR_8++) { VAR_6[VAR_8] = VAR_6[VAR_8] * 0.5625 + VAR_9[VAR_8]; VAR_4 [VAR_8] = VAR_6[VAR_8]          + VAR_10[VAR_8]; } *VAR_4 *= 257./256.; }