int ff_wma_run_level_decode(AVCodecContext* avctx, GetBitContext* gb,

                            VLC *vlc,

                            const uint16_t *level_table, const uint16_t *run_table,

                            int version, WMACoef *ptr, int offset,

                            int num_coefs, int block_len, int frame_len_bits,

                            int coef_nb_bits)

{

    int code, run, level, sign;

    WMACoef* eptr = ptr + num_coefs;

    ptr += offset;

    for(;;) {

        code = get_vlc2(gb, vlc->table, VLCBITS, VLCMAX);

        if (code < 0)

            return -1;

        if (code == 1) {

            /* EOB */

            break;

        } else if (code == 0) {

            /* escape */

            if (!version) {

                level = get_bits(gb, coef_nb_bits);

                /* NOTE: this is rather suboptimal. reading

                   block_len_bits would be better */

                run = get_bits(gb, frame_len_bits);

            } else {

                level = ff_wma_get_large_val(gb);

                /** escape decode */

                if (get_bits1(gb)) {

                    if (get_bits1(gb)) {

                        if (get_bits1(gb)) {

                            av_log(avctx,AV_LOG_ERROR,

                                "broken escape sequence\n");

                            return -1;

                        } else

                            run = get_bits(gb, frame_len_bits) + 4;

                    } else

                        run = get_bits(gb, 2) + 1;

                } else

                     run = 0;

            }

        } else {

            /* normal code */

            run = run_table[code];

            level = level_table[code];

        }

        sign = get_bits1(gb);

        if (!sign)

             level = -level;

        ptr += run;

        if (ptr >= eptr)

        {

            av_log(NULL, AV_LOG_ERROR, "overflow in spectral RLE, ignoring\n");

            break;

        }

        *ptr++ = level;

        /* NOTE: EOB can be omitted */

        if (ptr >= eptr)

            break;

    }

    return 0;

}

int ff_wma_run_level_decode(AVCodecContext* avctx, GetBitContext* gb,

                            VLC *vlc,

                            const uint16_t *level_table, const uint16_t *run_table,

                            int version, WMACoef *ptr, int offset,

                            int num_coefs, int block_len, int frame_len_bits,

                            int coef_nb_bits)

{

    int code, run, level, sign;

    WMACoef* eptr = ptr + num_coefs;

    ptr += offset;

    for(;;) {

        code = get_vlc2(gb, vlc->table, VLCBITS, VLCMAX);

        if (code < 0)

            return -1;

        if (code == 1) {

            

            break;

        } else if (code == 0) {

            

            if (!version) {

                level = get_bits(gb, coef_nb_bits);

                



                run = get_bits(gb, frame_len_bits);

            } else {

                level = ff_wma_get_large_val(gb);

                

                if (get_bits1(gb)) {

                    if (get_bits1(gb)) {

                        if (get_bits1(gb)) {

                            av_log(avctx,AV_LOG_ERROR,

                                "broken escape sequence\n");

                            return -1;

                        } else

                            run = get_bits(gb, frame_len_bits) + 4;

                    } else

                        run = get_bits(gb, 2) + 1;

                } else

                     run = 0;

            }

        } else {

            

            run = run_table[code];

            level = level_table[code];

        }

        sign = get_bits1(gb);

        if (!sign)

             level = -level;

        ptr += run;

        if (ptr >= eptr)

        {

            av_log(NULL, AV_LOG_ERROR, "overflow in spectral RLE, ignoring\n");

            break;

        }

        *ptr++ = level;

        

        if (ptr >= eptr)

            break;

    }

    return 0;

}

    int code, run, level, sign;     WMACoef* eptr = ptr + num_coefs;     ptr += offset;     for(;;) {         if (code < 0)             return -1;         if (code == 1) {         } else if (code == 0) {                 run = get_bits(gb, frame_len_bits);                             run = get_bits(gb, frame_len_bits) + 4;                         run = get_bits(gb, 2) + 1;                 } else                      run = 0;         } else {             run = run_table[code];             level = level_table[code];         sign = get_bits1(gb);         if (!sign)              level = -level;         ptr += run;         if (ptr >= eptr)             av_log(NULL, AV_LOG_ERROR, "overflow in spectral RLE, ignoring\n");             break;         *ptr++ = level;         if (ptr >= eptr)             break;
int FUNC_0(AVCodecContext* VAR_0, GetBitContext* VAR_1,

                            VLC *VAR_2,

                            const uint16_t *VAR_3, const uint16_t *VAR_4,

                            int VAR_5, WMACoef *VAR_6, int VAR_7,

                            int VAR_8, int VAR_9, int VAR_10,

                            int VAR_11)

{

    int VAR_12, VAR_13, VAR_14, VAR_15;

    WMACoef* eptr = VAR_6 + VAR_8;

    VAR_6 += VAR_7;

    for(;;) {

        VAR_12 = get_vlc2(VAR_1, VAR_2->table, VLCBITS, VLCMAX);

        if (VAR_12 < 0)

            return -1;

        if (VAR_12 == 1) {

            

            break;

        } else if (VAR_12 == 0) {

            

            if (!VAR_5) {

                VAR_14 = get_bits(VAR_1, VAR_11);

                



                VAR_13 = get_bits(VAR_1, VAR_10);

            } else {

                VAR_14 = ff_wma_get_large_val(VAR_1);

                

                if (get_bits1(VAR_1)) {

                    if (get_bits1(VAR_1)) {

                        if (get_bits1(VAR_1)) {

                            av_log(VAR_0,AV_LOG_ERROR,

                                "broken escape sequence\n");

                            return -1;

                        } else

                            VAR_13 = get_bits(VAR_1, VAR_10) + 4;

                    } else

                        VAR_13 = get_bits(VAR_1, 2) + 1;

                } else

                     VAR_13 = 0;

            }

        } else {

            

            VAR_13 = VAR_4[VAR_12];

            VAR_14 = VAR_3[VAR_12];

        }

        VAR_15 = get_bits1(VAR_1);

        if (!VAR_15)

             VAR_14 = -VAR_14;

        VAR_6 += VAR_13;

        if (VAR_6 >= eptr)

        {

            av_log(NULL, AV_LOG_ERROR, "overflow in spectral RLE, ignoring\n");

            break;

        }

        *VAR_6++ = VAR_14;

        

        if (VAR_6 >= eptr)

            break;

    }

    return 0;

}

int FUNC_0(AVCodecContext* VAR_0, GetBitContext* VAR_1,
VLC *VAR_2,
const uint16_t *VAR_3, const uint16_t *VAR_4,
int VAR_5, WMACoef *VAR_6, int VAR_7,
int VAR_8, int VAR_9, int VAR_10,
int VAR_11)
{ int VAR_12, VAR_13, VAR_14, VAR_15; WMACoef* eptr = VAR_6 + VAR_8; VAR_6 += VAR_7; for(;;) { VAR_12 = get_vlc2(VAR_1, VAR_2->table, VLCBITS, VLCMAX); if (VAR_12 < 0)
return -1; if (VAR_12 == 1) { break; } else if (VAR_12 == 0) { if (!VAR_5) { VAR_14 = get_bits(VAR_1, VAR_11); VAR_13 = get_bits(VAR_1, VAR_10); } else { VAR_14 = ff_wma_get_large_val(VAR_1); if (get_bits1(VAR_1)) { if (get_bits1(VAR_1)) { if (get_bits1(VAR_1)) { av_log(VAR_0,AV_LOG_ERROR,
"broken escape sequence\n"); return -1; } else VAR_13 = get_bits(VAR_1, VAR_10) + 4; } else VAR_13 = get_bits(VAR_1, 2) + 1; } else VAR_13 = 0; } } else { VAR_13 = VAR_4[VAR_12]; VAR_14 = VAR_3[VAR_12]; } VAR_15 = get_bits1(VAR_1); if (!VAR_15)
VAR_14 = -VAR_14; VAR_6 += VAR_13; if (VAR_6 >= eptr)
{ av_log(NULL, AV_LOG_ERROR, "overflow in spectral RLE, ignoring\n"); break; } *VAR_6++ = VAR_14; if (VAR_6 >= eptr)
break; } return 0; }