static void qdm2_fft_decode_tones (QDM2Context *q, int duration, GetBitContext *gb, int b)

{

    int channel, stereo, phase, exp;

    int local_int_4,  local_int_8,  stereo_phase,  local_int_10;

    int local_int_14, stereo_exp, local_int_20, local_int_28;

    int n, offset;



    local_int_4 = 0;

    local_int_28 = 0;

    local_int_20 = 2;

    local_int_8 = (4 - duration);

    local_int_10 = 1 << (q->group_order - duration - 1);

    offset = 1;



    while (1) {

        if (q->superblocktype_2_3) {

            while ((n = qdm2_get_vlc(gb, &vlc_tab_fft_tone_offset[local_int_8], 1, 2)) < 2) {

                offset = 1;

                if (n == 0) {

                    local_int_4 += local_int_10;

                    local_int_28 += (1 << local_int_8);

                } else {

                    local_int_4 += 8*local_int_10;

                    local_int_28 += (8 << local_int_8);

                }

            }

            offset += (n - 2);

        } else {

            offset += qdm2_get_vlc(gb, &vlc_tab_fft_tone_offset[local_int_8], 1, 2);

            while (offset >= (local_int_10 - 1)) {

                offset += (1 - (local_int_10 - 1));

                local_int_4  += local_int_10;

                local_int_28 += (1 << local_int_8);

            }

        }



        if (local_int_4 >= q->group_size)

            return;



        local_int_14 = (offset >> local_int_8);

        if (local_int_14 >= FF_ARRAY_ELEMS(fft_level_index_table))

            return;



        if (q->nb_channels > 1) {

            channel = get_bits1(gb);

            stereo = get_bits1(gb);

        } else {

            channel = 0;

            stereo = 0;

        }



        exp = qdm2_get_vlc(gb, (b ? &fft_level_exp_vlc : &fft_level_exp_alt_vlc), 0, 2);

        exp += q->fft_level_exp[fft_level_index_table[local_int_14]];

        exp = (exp < 0) ? 0 : exp;



        phase = get_bits(gb, 3);

        stereo_exp = 0;

        stereo_phase = 0;



        if (stereo) {

            stereo_exp = (exp - qdm2_get_vlc(gb, &fft_stereo_exp_vlc, 0, 1));

            stereo_phase = (phase - qdm2_get_vlc(gb, &fft_stereo_phase_vlc, 0, 1));

            if (stereo_phase < 0)

                stereo_phase += 8;

        }



        if (q->frequency_range > (local_int_14 + 1)) {

            int sub_packet = (local_int_20 + local_int_28);



            qdm2_fft_init_coefficient(q, sub_packet, offset, duration, channel, exp, phase);

            if (stereo)

                qdm2_fft_init_coefficient(q, sub_packet, offset, duration, (1 - channel), stereo_exp, stereo_phase);

        }



        offset++;

    }

}

static void qdm2_fft_decode_tones (QDM2Context *q, int duration, GetBitContext *gb, int b)

{

    int channel, stereo, phase, exp;

    int local_int_4,  local_int_8,  stereo_phase,  local_int_10;

    int local_int_14, stereo_exp, local_int_20, local_int_28;

    int n, offset;



    local_int_4 = 0;

    local_int_28 = 0;

    local_int_20 = 2;

    local_int_8 = (4 - duration);

    local_int_10 = 1 << (q->group_order - duration - 1);

    offset = 1;



    while (1) {

        if (q->superblocktype_2_3) {

            while ((n = qdm2_get_vlc(gb, &vlc_tab_fft_tone_offset[local_int_8], 1, 2)) < 2) {

                offset = 1;

                if (n == 0) {

                    local_int_4 += local_int_10;

                    local_int_28 += (1 << local_int_8);

                } else {

                    local_int_4 += 8*local_int_10;

                    local_int_28 += (8 << local_int_8);

                }

            }

            offset += (n - 2);

        } else {

            offset += qdm2_get_vlc(gb, &vlc_tab_fft_tone_offset[local_int_8], 1, 2);

            while (offset >= (local_int_10 - 1)) {

                offset += (1 - (local_int_10 - 1));

                local_int_4  += local_int_10;

                local_int_28 += (1 << local_int_8);

            }

        }



        if (local_int_4 >= q->group_size)

            return;



        local_int_14 = (offset >> local_int_8);

        if (local_int_14 >= FF_ARRAY_ELEMS(fft_level_index_table))

            return;



        if (q->nb_channels > 1) {

            channel = get_bits1(gb);

            stereo = get_bits1(gb);

        } else {

            channel = 0;

            stereo = 0;

        }



        exp = qdm2_get_vlc(gb, (b ? &fft_level_exp_vlc : &fft_level_exp_alt_vlc), 0, 2);

        exp += q->fft_level_exp[fft_level_index_table[local_int_14]];

        exp = (exp < 0) ? 0 : exp;



        phase = get_bits(gb, 3);

        stereo_exp = 0;

        stereo_phase = 0;



        if (stereo) {

            stereo_exp = (exp - qdm2_get_vlc(gb, &fft_stereo_exp_vlc, 0, 1));

            stereo_phase = (phase - qdm2_get_vlc(gb, &fft_stereo_phase_vlc, 0, 1));

            if (stereo_phase < 0)

                stereo_phase += 8;

        }



        if (q->frequency_range > (local_int_14 + 1)) {

            int sub_packet = (local_int_20 + local_int_28);



            qdm2_fft_init_coefficient(q, sub_packet, offset, duration, channel, exp, phase);

            if (stereo)

                qdm2_fft_init_coefficient(q, sub_packet, offset, duration, (1 - channel), stereo_exp, stereo_phase);

        }



        offset++;

    }

}

static void FUNC_0 (QDM2Context *VAR_0, int VAR_1, GetBitContext *VAR_2, int VAR_3)

{

    int VAR_4, VAR_5, VAR_6, VAR_7;

    int VAR_8,  VAR_9,  VAR_10,  VAR_11;

    int VAR_12, VAR_13, VAR_14, VAR_15;

    int VAR_16, VAR_17;



    VAR_8 = 0;

    VAR_15 = 0;

    VAR_14 = 2;

    VAR_9 = (4 - VAR_1);

    VAR_11 = 1 << (VAR_0->group_order - VAR_1 - 1);

    VAR_17 = 1;



    while (1) {

        if (VAR_0->superblocktype_2_3) {

            while ((VAR_16 = qdm2_get_vlc(VAR_2, &vlc_tab_fft_tone_offset[VAR_9], 1, 2)) < 2) {

                VAR_17 = 1;

                if (VAR_16 == 0) {

                    VAR_8 += VAR_11;

                    VAR_15 += (1 << VAR_9);

                } else {

                    VAR_8 += 8*VAR_11;

                    VAR_15 += (8 << VAR_9);

                }

            }

            VAR_17 += (VAR_16 - 2);

        } else {

            VAR_17 += qdm2_get_vlc(VAR_2, &vlc_tab_fft_tone_offset[VAR_9], 1, 2);

            while (VAR_17 >= (VAR_11 - 1)) {

                VAR_17 += (1 - (VAR_11 - 1));

                VAR_8  += VAR_11;

                VAR_15 += (1 << VAR_9);

            }

        }



        if (VAR_8 >= VAR_0->group_size)

            return;



        VAR_12 = (VAR_17 >> VAR_9);

        if (VAR_12 >= FF_ARRAY_ELEMS(fft_level_index_table))

            return;



        if (VAR_0->nb_channels > 1) {

            VAR_4 = get_bits1(VAR_2);

            VAR_5 = get_bits1(VAR_2);

        } else {

            VAR_4 = 0;

            VAR_5 = 0;

        }



        VAR_7 = qdm2_get_vlc(VAR_2, (VAR_3 ? &fft_level_exp_vlc : &fft_level_exp_alt_vlc), 0, 2);

        VAR_7 += VAR_0->fft_level_exp[fft_level_index_table[VAR_12]];

        VAR_7 = (VAR_7 < 0) ? 0 : VAR_7;



        VAR_6 = get_bits(VAR_2, 3);

        VAR_13 = 0;

        VAR_10 = 0;



        if (VAR_5) {

            VAR_13 = (VAR_7 - qdm2_get_vlc(VAR_2, &fft_stereo_exp_vlc, 0, 1));

            VAR_10 = (VAR_6 - qdm2_get_vlc(VAR_2, &fft_stereo_phase_vlc, 0, 1));

            if (VAR_10 < 0)

                VAR_10 += 8;

        }



        if (VAR_0->frequency_range > (VAR_12 + 1)) {

            int VAR_18 = (VAR_14 + VAR_15);



            qdm2_fft_init_coefficient(VAR_0, VAR_18, VAR_17, VAR_1, VAR_4, VAR_7, VAR_6);

            if (VAR_5)

                qdm2_fft_init_coefficient(VAR_0, VAR_18, VAR_17, VAR_1, (1 - VAR_4), VAR_13, VAR_10);

        }



        VAR_17++;

    }

}

static void FUNC_0 (QDM2Context *VAR_0, int VAR_1, GetBitContext *VAR_2, int VAR_3)
{ int VAR_4, VAR_5, VAR_6, VAR_7; int VAR_8,  VAR_9,  VAR_10,  VAR_11; int VAR_12, VAR_13, VAR_14, VAR_15; int VAR_16, VAR_17; VAR_8 = 0; VAR_15 = 0; VAR_14 = 2; VAR_9 = (4 - VAR_1); VAR_11 = 1 << (VAR_0->group_order - VAR_1 - 1); VAR_17 = 1; while (1) { if (VAR_0->superblocktype_2_3) { while ((VAR_16 = qdm2_get_vlc(VAR_2, &vlc_tab_fft_tone_offset[VAR_9], 1, 2)) < 2) { VAR_17 = 1; if (VAR_16 == 0) { VAR_8 += VAR_11; VAR_15 += (1 << VAR_9); } else { VAR_8 += 8*VAR_11; VAR_15 += (8 << VAR_9); } } VAR_17 += (VAR_16 - 2); } else { VAR_17 += qdm2_get_vlc(VAR_2, &vlc_tab_fft_tone_offset[VAR_9], 1, 2); while (VAR_17 >= (VAR_11 - 1)) { VAR_17 += (1 - (VAR_11 - 1)); VAR_8  += VAR_11; VAR_15 += (1 << VAR_9); } } if (VAR_8 >= VAR_0->group_size)
return; VAR_12 = (VAR_17 >> VAR_9); if (VAR_12 >= FF_ARRAY_ELEMS(fft_level_index_table))
return; if (VAR_0->nb_channels > 1) { VAR_4 = get_bits1(VAR_2); VAR_5 = get_bits1(VAR_2); } else { VAR_4 = 0; VAR_5 = 0; } VAR_7 = qdm2_get_vlc(VAR_2, (VAR_3 ? &fft_level_exp_vlc : &fft_level_exp_alt_vlc), 0, 2); VAR_7 += VAR_0->fft_level_exp[fft_level_index_table[VAR_12]]; VAR_7 = (VAR_7 < 0) ? 0 : VAR_7; VAR_6 = get_bits(VAR_2, 3); VAR_13 = 0; VAR_10 = 0; if (VAR_5) { VAR_13 = (VAR_7 - qdm2_get_vlc(VAR_2, &fft_stereo_exp_vlc, 0, 1)); VAR_10 = (VAR_6 - qdm2_get_vlc(VAR_2, &fft_stereo_phase_vlc, 0, 1)); if (VAR_10 < 0)
VAR_10 += 8; } if (VAR_0->frequency_range > (VAR_12 + 1)) { int VAR_18 = (VAR_14 + VAR_15); qdm2_fft_init_coefficient(VAR_0, VAR_18, VAR_17, VAR_1, VAR_4, VAR_7, VAR_6); if (VAR_5)
qdm2_fft_init_coefficient(VAR_0, VAR_18, VAR_17, VAR_1, (1 - VAR_4), VAR_13, VAR_10); } VAR_17++; } }