int ff_wma_run_level_decode(AVCodecContext *avctx, GetBitContext *gb,

                            VLC *vlc, const float *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, level, sign;

    const uint32_t *ilvl = (const uint32_t *) level_table;

    uint32_t *iptr = (uint32_t *) ptr;

    const unsigned int coef_mask = block_len - 1;

    for (; offset < num_coefs; offset++) {

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

        if (code > 1) {

            /** normal code */

            offset                  += run_table[code];

            sign                     = get_bits1(gb) - 1;

            iptr[offset & coef_mask] = ilvl[code] ^ sign << 31;

        } else if (code == 1) {

            /** EOB */

            break;

        } else {

            /** escape */

            if (!version) {

                level = get_bits(gb, coef_nb_bits);

                /** NOTE: this is rather suboptimal. reading

                 *  block_len_bits would be better */

                offset += 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

                            offset += get_bits(gb, frame_len_bits) + 4;

                    } else

                        offset += get_bits(gb, 2) + 1;

                }

            }

            sign                    = get_bits1(gb) - 1;

            ptr[offset & coef_mask] = (level ^ sign) - sign;

        }

    }

    /** NOTE: EOB can be omitted */

    if (offset > num_coefs) {

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

        return -1;

    }



    return 0;

}

int ff_wma_run_level_decode(AVCodecContext *avctx, GetBitContext *gb,

                            VLC *vlc, const float *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, level, sign;

    const uint32_t *ilvl = (const uint32_t *) level_table;

    uint32_t *iptr = (uint32_t *) ptr;

    const unsigned int coef_mask = block_len - 1;

    for (; offset < num_coefs; offset++) {

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

        if (code > 1) {

            

            offset                  += run_table[code];

            sign                     = get_bits1(gb) - 1;

            iptr[offset & coef_mask] = ilvl[code] ^ sign << 31;

        } else if (code == 1) {

            

            break;

        } else {

            

            if (!version) {

                level = get_bits(gb, coef_nb_bits);

                



                offset += 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

                            offset += get_bits(gb, frame_len_bits) + 4;

                    } else

                        offset += get_bits(gb, 2) + 1;

                }

            }

            sign                    = get_bits1(gb) - 1;

            ptr[offset & coef_mask] = (level ^ sign) - sign;

        }

    }

    

    if (offset > num_coefs) {

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

        return -1;

    }



    return 0;

}

        av_log(avctx, AV_LOG_ERROR, "overflow in spectral RLE, ignoring\n");
int FUNC_0(AVCodecContext *VAR_0, GetBitContext *VAR_1,

                            VLC *VAR_2, const float *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;

    const uint32_t *VAR_15 = (const uint32_t *) VAR_3;

    uint32_t *iptr = (uint32_t *) VAR_6;

    const unsigned int VAR_16 = VAR_9 - 1;

    for (; VAR_7 < VAR_8; VAR_7++) {

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

        if (VAR_12 > 1) {

            

            VAR_7                  += VAR_4[VAR_12];

            VAR_14                     = get_bits1(VAR_1) - 1;

            iptr[VAR_7 & VAR_16] = VAR_15[VAR_12] ^ VAR_14 << 31;

        } else if (VAR_12 == 1) {

            

            break;

        } else {

            

            if (!VAR_5) {

                VAR_13 = get_bits(VAR_1, VAR_11);

                



                VAR_7 += get_bits(VAR_1, VAR_10);

            } else {

                VAR_13 = 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_7 += get_bits(VAR_1, VAR_10) + 4;

                    } else

                        VAR_7 += get_bits(VAR_1, 2) + 1;

                }

            }

            VAR_14                    = get_bits1(VAR_1) - 1;

            VAR_6[VAR_7 & VAR_16] = (VAR_13 ^ VAR_14) - VAR_14;

        }

    }

    

    if (VAR_7 > VAR_8) {

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

        return -1;

    }



    return 0;

}

int FUNC_0(AVCodecContext *VAR_0, GetBitContext *VAR_1,
VLC *VAR_2, const float *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; const uint32_t *VAR_15 = (const uint32_t *) VAR_3; uint32_t *iptr = (uint32_t *) VAR_6; const unsigned int VAR_16 = VAR_9 - 1; for (; VAR_7 < VAR_8; VAR_7++) { VAR_12 = get_vlc2(VAR_1, VAR_2->table, VLCBITS, VLCMAX); if (VAR_12 > 1) { VAR_7                  += VAR_4[VAR_12]; VAR_14                     = get_bits1(VAR_1) - 1; iptr[VAR_7 & VAR_16] = VAR_15[VAR_12] ^ VAR_14 << 31; } else if (VAR_12 == 1) { break; } else { if (!VAR_5) { VAR_13 = get_bits(VAR_1, VAR_11); VAR_7 += get_bits(VAR_1, VAR_10); } else { VAR_13 = 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_7 += get_bits(VAR_1, VAR_10) + 4; } else VAR_7 += get_bits(VAR_1, 2) + 1; } } VAR_14                    = get_bits1(VAR_1) - 1; VAR_6[VAR_7 & VAR_16] = (VAR_13 ^ VAR_14) - VAR_14; } } if (VAR_7 > VAR_8) { av_log(VAR_0, AV_LOG_ERROR, "overflow in spectral RLE, ignoring\n"); return -1; } return 0; }