void nelly_decode_block(NellyMoserDecodeContext *s, const unsigned char block[NELLY_BLOCK_LEN], float audio[NELLY_SAMPLES])
{
    int i,j;
    float buf[NELLY_FILL_LEN], pows[NELLY_FILL_LEN];
    float *aptr, *bptr, *pptr, val, pval;
    int bits[NELLY_BUF_LEN];
    unsigned char v;
    init_get_bits(&s->gb, block, NELLY_BLOCK_LEN * 8);
    bptr = buf;
    pptr = pows;
    val = nelly_init_table[get_bits(&s->gb, 6)];
    for (i=0 ; i<NELLY_BANDS ; i++) {
        if (i > 0)
            val += nelly_delta_table[get_bits(&s->gb, 5)];
        pval = pow(2, val/2048);
        for (j = 0; j < nelly_band_sizes_table[i]; j++) {
            *bptr++ = val;
            *pptr++ = pval;
        }
    }
    get_sample_bits(buf, bits);
    for (i = 0; i < 2; i++) {
        aptr = audio + i * NELLY_BUF_LEN;
        init_get_bits(&s->gb, block, NELLY_BLOCK_LEN * 8);
        skip_bits(&s->gb, NELLY_HEADER_BITS + i*NELLY_DETAIL_BITS);
        for (j = 0; j < NELLY_FILL_LEN; j++) {
            if (bits[j] <= 0) {
                aptr[j] = M_SQRT1_2*pows[j];
                if (av_random(&s->random_state) & 1)
                    aptr[j] *= -1.0;
            } else {
                v = get_bits(&s->gb, bits[j]);
                aptr[j] = dequantization_table[(1<<bits[j])-1+v]*pows[j];
            }
        }
        memset(&aptr[NELLY_FILL_LEN], 0,
               (NELLY_BUF_LEN - NELLY_FILL_LEN) * sizeof(float));
        s->imdct_ctx.fft.imdct_calc(&s->imdct_ctx, s->imdct_out,
                                    aptr, s->imdct_tmp);
        memcpy(&aptr[0],&s->imdct_out[NELLY_BUF_LEN+NELLY_BUF_LEN/2], (NELLY_BUF_LEN/2)*sizeof(float));
        memcpy(&aptr[NELLY_BUF_LEN / 2],&s->imdct_out[0],(NELLY_BUF_LEN/2)*sizeof(float));
        overlap_and_window(s, s->state, aptr);
    }
}
['void nelly_decode_block(NellyMoserDecodeContext *s, const unsigned char block[NELLY_BLOCK_LEN], float audio[NELLY_SAMPLES])\n{\n    int i,j;\n    float buf[NELLY_FILL_LEN], pows[NELLY_FILL_LEN];\n    float *aptr, *bptr, *pptr, val, pval;\n    int bits[NELLY_BUF_LEN];\n    unsigned char v;\n    init_get_bits(&s->gb, block, NELLY_BLOCK_LEN * 8);\n    bptr = buf;\n    pptr = pows;\n    val = nelly_init_table[get_bits(&s->gb, 6)];\n    for (i=0 ; i<NELLY_BANDS ; i++) {\n        if (i > 0)\n            val += nelly_delta_table[get_bits(&s->gb, 5)];\n        pval = pow(2, val/2048);\n        for (j = 0; j < nelly_band_sizes_table[i]; j++) {\n            *bptr++ = val;\n            *pptr++ = pval;\n        }\n    }\n    get_sample_bits(buf, bits);\n    for (i = 0; i < 2; i++) {\n        aptr = audio + i * NELLY_BUF_LEN;\n        init_get_bits(&s->gb, block, NELLY_BLOCK_LEN * 8);\n        skip_bits(&s->gb, NELLY_HEADER_BITS + i*NELLY_DETAIL_BITS);\n        for (j = 0; j < NELLY_FILL_LEN; j++) {\n            if (bits[j] <= 0) {\n                aptr[j] = M_SQRT1_2*pows[j];\n                if (av_random(&s->random_state) & 1)\n                    aptr[j] *= -1.0;\n            } else {\n                v = get_bits(&s->gb, bits[j]);\n                aptr[j] = dequantization_table[(1<<bits[j])-1+v]*pows[j];\n            }\n        }\n        memset(&aptr[NELLY_FILL_LEN], 0,\n               (NELLY_BUF_LEN - NELLY_FILL_LEN) * sizeof(float));\n        s->imdct_ctx.fft.imdct_calc(&s->imdct_ctx, s->imdct_out,\n                                    aptr, s->imdct_tmp);\n        memcpy(&aptr[0],&s->imdct_out[NELLY_BUF_LEN+NELLY_BUF_LEN/2], (NELLY_BUF_LEN/2)*sizeof(float));\n        memcpy(&aptr[NELLY_BUF_LEN / 2],&s->imdct_out[0],(NELLY_BUF_LEN/2)*sizeof(float));\n        overlap_and_window(s, s->state, aptr);\n    }\n}']