static void sbr_gain_calc(AACContext *ac, SpectralBandReplication *sbr,

                          SBRData *ch_data, const int e_a[2])

{

    int e, k, m;

    // max gain limits : -3dB, 0dB, 3dB, inf dB (limiter off)

    static const SoftFloat limgain[4] = { { 760155524,  0 }, { 0x20000000,  1 },

                                            { 758351638,  1 }, { 625000000, 34 } };



    for (e = 0; e < ch_data->bs_num_env; e++) {

        int delta = !((e == e_a[1]) || (e == e_a[0]));

        for (k = 0; k < sbr->n_lim; k++) {

            SoftFloat gain_boost, gain_max;

            SoftFloat sum[2] = { FLOAT_0, FLOAT_0 };

            for (m = sbr->f_tablelim[k] - sbr->kx[1]; m < sbr->f_tablelim[k + 1] - sbr->kx[1]; m++) {

                const SoftFloat temp = av_div_sf(sbr->e_origmapped[e][m],

                                            av_add_sf(FLOAT_1, sbr->q_mapped[e][m]));

                sbr->q_m[e][m] = av_sqrt_sf(av_mul_sf(temp, sbr->q_mapped[e][m]));

                sbr->s_m[e][m] = av_sqrt_sf(av_mul_sf(temp, av_int2sf(ch_data->s_indexmapped[e + 1][m], 0)));

                if (!sbr->s_mapped[e][m]) {

                    if (delta) {

                      sbr->gain[e][m] = av_sqrt_sf(av_div_sf(sbr->e_origmapped[e][m],

                                            av_mul_sf(av_add_sf(FLOAT_1, sbr->e_curr[e][m]),

                                            av_add_sf(FLOAT_1, sbr->q_mapped[e][m]))));

                    } else {

                      sbr->gain[e][m] = av_sqrt_sf(av_div_sf(sbr->e_origmapped[e][m],

                                            av_add_sf(FLOAT_1, sbr->e_curr[e][m])));

                    }

                } else {

                    sbr->gain[e][m] = av_sqrt_sf(

                                        av_div_sf(

                                            av_mul_sf(sbr->e_origmapped[e][m], sbr->q_mapped[e][m]),

                                            av_mul_sf(

                                                av_add_sf(FLOAT_1, sbr->e_curr[e][m]),

                                                av_add_sf(FLOAT_1, sbr->q_mapped[e][m]))));

                }

            }

            for (m = sbr->f_tablelim[k] - sbr->kx[1]; m < sbr->f_tablelim[k + 1] - sbr->kx[1]; m++) {

                sum[0] = av_add_sf(sum[0], sbr->e_origmapped[e][m]);

                sum[1] = av_add_sf(sum[1], sbr->e_curr[e][m]);

            }

            gain_max = av_mul_sf(limgain[sbr->bs_limiter_gains],

                            av_sqrt_sf(

                                av_div_sf(

                                    av_add_sf(FLOAT_EPSILON, sum[0]),

                                    av_add_sf(FLOAT_EPSILON, sum[1]))));

            if (av_gt_sf(gain_max, FLOAT_100000))

              gain_max = FLOAT_100000;

            for (m = sbr->f_tablelim[k] - sbr->kx[1]; m < sbr->f_tablelim[k + 1] - sbr->kx[1]; m++) {

                SoftFloat q_m_max = av_div_sf(

                                        av_mul_sf(sbr->q_m[e][m], gain_max),

                                        sbr->gain[e][m]);

                if (av_gt_sf(sbr->q_m[e][m], q_m_max))

                  sbr->q_m[e][m] = q_m_max;

                if (av_gt_sf(sbr->gain[e][m], gain_max))

                  sbr->gain[e][m] = gain_max;

            }

            sum[0] = sum[1] = FLOAT_0;

            for (m = sbr->f_tablelim[k] - sbr->kx[1]; m < sbr->f_tablelim[k + 1] - sbr->kx[1]; m++) {

                sum[0] = av_add_sf(sum[0], sbr->e_origmapped[e][m]);

                sum[1] = av_add_sf(sum[1],

                            av_mul_sf(

                                av_mul_sf(sbr->e_curr[e][m],

                                          sbr->gain[e][m]),

                                sbr->gain[e][m]));

                sum[1] = av_add_sf(sum[1],

                            av_mul_sf(sbr->s_m[e][m], sbr->s_m[e][m]));

                if (delta && !sbr->s_m[e][m].mant)

                  sum[1] = av_add_sf(sum[1],

                                av_mul_sf(sbr->q_m[e][m], sbr->q_m[e][m]));

            }

            gain_boost = av_sqrt_sf(

                            av_div_sf(

                                av_add_sf(FLOAT_EPSILON, sum[0]),

                                av_add_sf(FLOAT_EPSILON, sum[1])));

            if (av_gt_sf(gain_boost, FLOAT_1584893192))

              gain_boost = FLOAT_1584893192;



            for (m = sbr->f_tablelim[k] - sbr->kx[1]; m < sbr->f_tablelim[k + 1] - sbr->kx[1]; m++) {

                sbr->gain[e][m] = av_mul_sf(sbr->gain[e][m], gain_boost);

                sbr->q_m[e][m]  = av_mul_sf(sbr->q_m[e][m], gain_boost);

                sbr->s_m[e][m]  = av_mul_sf(sbr->s_m[e][m], gain_boost);

            }

        }

    }

}

static void sbr_gain_calc(AACContext *ac, SpectralBandReplication *sbr,

                          SBRData *ch_data, const int e_a[2])

{

    int e, k, m;

    

    static const SoftFloat limgain[4] = { { 760155524,  0 }, { 0x20000000,  1 },

                                            { 758351638,  1 }, { 625000000, 34 } };



    for (e = 0; e < ch_data->bs_num_env; e++) {

        int delta = !((e == e_a[1]) || (e == e_a[0]));

        for (k = 0; k < sbr->n_lim; k++) {

            SoftFloat gain_boost, gain_max;

            SoftFloat sum[2] = { FLOAT_0, FLOAT_0 };

            for (m = sbr->f_tablelim[k] - sbr->kx[1]; m < sbr->f_tablelim[k + 1] - sbr->kx[1]; m++) {

                const SoftFloat temp = av_div_sf(sbr->e_origmapped[e][m],

                                            av_add_sf(FLOAT_1, sbr->q_mapped[e][m]));

                sbr->q_m[e][m] = av_sqrt_sf(av_mul_sf(temp, sbr->q_mapped[e][m]));

                sbr->s_m[e][m] = av_sqrt_sf(av_mul_sf(temp, av_int2sf(ch_data->s_indexmapped[e + 1][m], 0)));

                if (!sbr->s_mapped[e][m]) {

                    if (delta) {

                      sbr->gain[e][m] = av_sqrt_sf(av_div_sf(sbr->e_origmapped[e][m],

                                            av_mul_sf(av_add_sf(FLOAT_1, sbr->e_curr[e][m]),

                                            av_add_sf(FLOAT_1, sbr->q_mapped[e][m]))));

                    } else {

                      sbr->gain[e][m] = av_sqrt_sf(av_div_sf(sbr->e_origmapped[e][m],

                                            av_add_sf(FLOAT_1, sbr->e_curr[e][m])));

                    }

                } else {

                    sbr->gain[e][m] = av_sqrt_sf(

                                        av_div_sf(

                                            av_mul_sf(sbr->e_origmapped[e][m], sbr->q_mapped[e][m]),

                                            av_mul_sf(

                                                av_add_sf(FLOAT_1, sbr->e_curr[e][m]),

                                                av_add_sf(FLOAT_1, sbr->q_mapped[e][m]))));

                }

            }

            for (m = sbr->f_tablelim[k] - sbr->kx[1]; m < sbr->f_tablelim[k + 1] - sbr->kx[1]; m++) {

                sum[0] = av_add_sf(sum[0], sbr->e_origmapped[e][m]);

                sum[1] = av_add_sf(sum[1], sbr->e_curr[e][m]);

            }

            gain_max = av_mul_sf(limgain[sbr->bs_limiter_gains],

                            av_sqrt_sf(

                                av_div_sf(

                                    av_add_sf(FLOAT_EPSILON, sum[0]),

                                    av_add_sf(FLOAT_EPSILON, sum[1]))));

            if (av_gt_sf(gain_max, FLOAT_100000))

              gain_max = FLOAT_100000;

            for (m = sbr->f_tablelim[k] - sbr->kx[1]; m < sbr->f_tablelim[k + 1] - sbr->kx[1]; m++) {

                SoftFloat q_m_max = av_div_sf(

                                        av_mul_sf(sbr->q_m[e][m], gain_max),

                                        sbr->gain[e][m]);

                if (av_gt_sf(sbr->q_m[e][m], q_m_max))

                  sbr->q_m[e][m] = q_m_max;

                if (av_gt_sf(sbr->gain[e][m], gain_max))

                  sbr->gain[e][m] = gain_max;

            }

            sum[0] = sum[1] = FLOAT_0;

            for (m = sbr->f_tablelim[k] - sbr->kx[1]; m < sbr->f_tablelim[k + 1] - sbr->kx[1]; m++) {

                sum[0] = av_add_sf(sum[0], sbr->e_origmapped[e][m]);

                sum[1] = av_add_sf(sum[1],

                            av_mul_sf(

                                av_mul_sf(sbr->e_curr[e][m],

                                          sbr->gain[e][m]),

                                sbr->gain[e][m]));

                sum[1] = av_add_sf(sum[1],

                            av_mul_sf(sbr->s_m[e][m], sbr->s_m[e][m]));

                if (delta && !sbr->s_m[e][m].mant)

                  sum[1] = av_add_sf(sum[1],

                                av_mul_sf(sbr->q_m[e][m], sbr->q_m[e][m]));

            }

            gain_boost = av_sqrt_sf(

                            av_div_sf(

                                av_add_sf(FLOAT_EPSILON, sum[0]),

                                av_add_sf(FLOAT_EPSILON, sum[1])));

            if (av_gt_sf(gain_boost, FLOAT_1584893192))

              gain_boost = FLOAT_1584893192;



            for (m = sbr->f_tablelim[k] - sbr->kx[1]; m < sbr->f_tablelim[k + 1] - sbr->kx[1]; m++) {

                sbr->gain[e][m] = av_mul_sf(sbr->gain[e][m], gain_boost);

                sbr->q_m[e][m]  = av_mul_sf(sbr->q_m[e][m], gain_boost);

                sbr->s_m[e][m]  = av_mul_sf(sbr->s_m[e][m], gain_boost);

            }

        }

    }

}

static void FUNC_0(AACContext *VAR_0, SpectralBandReplication *VAR_1,

                          SBRData *VAR_2, const int VAR_3[2])

{

    int VAR_4, VAR_5, VAR_6;

    

    static const SoftFloat VAR_7[4] = { { 760155524,  0 }, { 0x20000000,  1 },

                                            { 758351638,  1 }, { 625000000, 34 } };



    for (VAR_4 = 0; VAR_4 < VAR_2->bs_num_env; VAR_4++) {

        int delta = !((VAR_4 == VAR_3[1]) || (VAR_4 == VAR_3[0]));

        for (VAR_5 = 0; VAR_5 < VAR_1->n_lim; VAR_5++) {

            SoftFloat gain_boost, gain_max;

            SoftFloat sum[2] = { FLOAT_0, FLOAT_0 };

            for (VAR_6 = VAR_1->f_tablelim[VAR_5] - VAR_1->kx[1]; VAR_6 < VAR_1->f_tablelim[VAR_5 + 1] - VAR_1->kx[1]; VAR_6++) {

                const SoftFloat temp = av_div_sf(VAR_1->e_origmapped[VAR_4][VAR_6],

                                            av_add_sf(FLOAT_1, VAR_1->q_mapped[VAR_4][VAR_6]));

                VAR_1->q_m[VAR_4][VAR_6] = av_sqrt_sf(av_mul_sf(temp, VAR_1->q_mapped[VAR_4][VAR_6]));

                VAR_1->s_m[VAR_4][VAR_6] = av_sqrt_sf(av_mul_sf(temp, av_int2sf(VAR_2->s_indexmapped[VAR_4 + 1][VAR_6], 0)));

                if (!VAR_1->s_mapped[VAR_4][VAR_6]) {

                    if (delta) {

                      VAR_1->gain[VAR_4][VAR_6] = av_sqrt_sf(av_div_sf(VAR_1->e_origmapped[VAR_4][VAR_6],

                                            av_mul_sf(av_add_sf(FLOAT_1, VAR_1->e_curr[VAR_4][VAR_6]),

                                            av_add_sf(FLOAT_1, VAR_1->q_mapped[VAR_4][VAR_6]))));

                    } else {

                      VAR_1->gain[VAR_4][VAR_6] = av_sqrt_sf(av_div_sf(VAR_1->e_origmapped[VAR_4][VAR_6],

                                            av_add_sf(FLOAT_1, VAR_1->e_curr[VAR_4][VAR_6])));

                    }

                } else {

                    VAR_1->gain[VAR_4][VAR_6] = av_sqrt_sf(

                                        av_div_sf(

                                            av_mul_sf(VAR_1->e_origmapped[VAR_4][VAR_6], VAR_1->q_mapped[VAR_4][VAR_6]),

                                            av_mul_sf(

                                                av_add_sf(FLOAT_1, VAR_1->e_curr[VAR_4][VAR_6]),

                                                av_add_sf(FLOAT_1, VAR_1->q_mapped[VAR_4][VAR_6]))));

                }

            }

            for (VAR_6 = VAR_1->f_tablelim[VAR_5] - VAR_1->kx[1]; VAR_6 < VAR_1->f_tablelim[VAR_5 + 1] - VAR_1->kx[1]; VAR_6++) {

                sum[0] = av_add_sf(sum[0], VAR_1->e_origmapped[VAR_4][VAR_6]);

                sum[1] = av_add_sf(sum[1], VAR_1->e_curr[VAR_4][VAR_6]);

            }

            gain_max = av_mul_sf(VAR_7[VAR_1->bs_limiter_gains],

                            av_sqrt_sf(

                                av_div_sf(

                                    av_add_sf(FLOAT_EPSILON, sum[0]),

                                    av_add_sf(FLOAT_EPSILON, sum[1]))));

            if (av_gt_sf(gain_max, FLOAT_100000))

              gain_max = FLOAT_100000;

            for (VAR_6 = VAR_1->f_tablelim[VAR_5] - VAR_1->kx[1]; VAR_6 < VAR_1->f_tablelim[VAR_5 + 1] - VAR_1->kx[1]; VAR_6++) {

                SoftFloat q_m_max = av_div_sf(

                                        av_mul_sf(VAR_1->q_m[VAR_4][VAR_6], gain_max),

                                        VAR_1->gain[VAR_4][VAR_6]);

                if (av_gt_sf(VAR_1->q_m[VAR_4][VAR_6], q_m_max))

                  VAR_1->q_m[VAR_4][VAR_6] = q_m_max;

                if (av_gt_sf(VAR_1->gain[VAR_4][VAR_6], gain_max))

                  VAR_1->gain[VAR_4][VAR_6] = gain_max;

            }

            sum[0] = sum[1] = FLOAT_0;

            for (VAR_6 = VAR_1->f_tablelim[VAR_5] - VAR_1->kx[1]; VAR_6 < VAR_1->f_tablelim[VAR_5 + 1] - VAR_1->kx[1]; VAR_6++) {

                sum[0] = av_add_sf(sum[0], VAR_1->e_origmapped[VAR_4][VAR_6]);

                sum[1] = av_add_sf(sum[1],

                            av_mul_sf(

                                av_mul_sf(VAR_1->e_curr[VAR_4][VAR_6],

                                          VAR_1->gain[VAR_4][VAR_6]),

                                VAR_1->gain[VAR_4][VAR_6]));

                sum[1] = av_add_sf(sum[1],

                            av_mul_sf(VAR_1->s_m[VAR_4][VAR_6], VAR_1->s_m[VAR_4][VAR_6]));

                if (delta && !VAR_1->s_m[VAR_4][VAR_6].mant)

                  sum[1] = av_add_sf(sum[1],

                                av_mul_sf(VAR_1->q_m[VAR_4][VAR_6], VAR_1->q_m[VAR_4][VAR_6]));

            }

            gain_boost = av_sqrt_sf(

                            av_div_sf(

                                av_add_sf(FLOAT_EPSILON, sum[0]),

                                av_add_sf(FLOAT_EPSILON, sum[1])));

            if (av_gt_sf(gain_boost, FLOAT_1584893192))

              gain_boost = FLOAT_1584893192;



            for (VAR_6 = VAR_1->f_tablelim[VAR_5] - VAR_1->kx[1]; VAR_6 < VAR_1->f_tablelim[VAR_5 + 1] - VAR_1->kx[1]; VAR_6++) {

                VAR_1->gain[VAR_4][VAR_6] = av_mul_sf(VAR_1->gain[VAR_4][VAR_6], gain_boost);

                VAR_1->q_m[VAR_4][VAR_6]  = av_mul_sf(VAR_1->q_m[VAR_4][VAR_6], gain_boost);

                VAR_1->s_m[VAR_4][VAR_6]  = av_mul_sf(VAR_1->s_m[VAR_4][VAR_6], gain_boost);

            }

        }

    }

}

static void FUNC_0(AACContext *VAR_0, SpectralBandReplication *VAR_1,
SBRData *VAR_2, const int VAR_3[2])
{ int VAR_4, VAR_5, VAR_6; static const SoftFloat VAR_7[4] = { { 760155524,  0 }, { 0x20000000,  1 }, { 758351638,  1 }, { 625000000, 34 } }; for (VAR_4 = 0; VAR_4 < VAR_2->bs_num_env; VAR_4++) { int delta = !((VAR_4 == VAR_3[1]) || (VAR_4 == VAR_3[0])); for (VAR_5 = 0; VAR_5 < VAR_1->n_lim; VAR_5++) { SoftFloat gain_boost, gain_max; SoftFloat sum[2] = { FLOAT_0, FLOAT_0 }; for (VAR_6 = VAR_1->f_tablelim[VAR_5] - VAR_1->kx[1]; VAR_6 < VAR_1->f_tablelim[VAR_5 + 1] - VAR_1->kx[1]; VAR_6++) { const SoftFloat temp = av_div_sf(VAR_1->e_origmapped[VAR_4][VAR_6],
av_add_sf(FLOAT_1, VAR_1->q_mapped[VAR_4][VAR_6])); VAR_1->q_m[VAR_4][VAR_6] = av_sqrt_sf(av_mul_sf(temp, VAR_1->q_mapped[VAR_4][VAR_6])); VAR_1->s_m[VAR_4][VAR_6] = av_sqrt_sf(av_mul_sf(temp, av_int2sf(VAR_2->s_indexmapped[VAR_4 + 1][VAR_6], 0))); if (!VAR_1->s_mapped[VAR_4][VAR_6]) { if (delta) { VAR_1->gain[VAR_4][VAR_6] = av_sqrt_sf(av_div_sf(VAR_1->e_origmapped[VAR_4][VAR_6],
av_mul_sf(av_add_sf(FLOAT_1, VAR_1->e_curr[VAR_4][VAR_6]),
av_add_sf(FLOAT_1, VAR_1->q_mapped[VAR_4][VAR_6])))); } else { VAR_1->gain[VAR_4][VAR_6] = av_sqrt_sf(av_div_sf(VAR_1->e_origmapped[VAR_4][VAR_6],
av_add_sf(FLOAT_1, VAR_1->e_curr[VAR_4][VAR_6]))); } } else { VAR_1->gain[VAR_4][VAR_6] = av_sqrt_sf(
av_div_sf(
av_mul_sf(VAR_1->e_origmapped[VAR_4][VAR_6], VAR_1->q_mapped[VAR_4][VAR_6]),
av_mul_sf(
av_add_sf(FLOAT_1, VAR_1->e_curr[VAR_4][VAR_6]),
av_add_sf(FLOAT_1, VAR_1->q_mapped[VAR_4][VAR_6])))); } } for (VAR_6 = VAR_1->f_tablelim[VAR_5] - VAR_1->kx[1]; VAR_6 < VAR_1->f_tablelim[VAR_5 + 1] - VAR_1->kx[1]; VAR_6++) { sum[0] = av_add_sf(sum[0], VAR_1->e_origmapped[VAR_4][VAR_6]); sum[1] = av_add_sf(sum[1], VAR_1->e_curr[VAR_4][VAR_6]); } gain_max = av_mul_sf(VAR_7[VAR_1->bs_limiter_gains],
av_sqrt_sf(
av_div_sf(
av_add_sf(FLOAT_EPSILON, sum[0]),
av_add_sf(FLOAT_EPSILON, sum[1])))); if (av_gt_sf(gain_max, FLOAT_100000))
gain_max = FLOAT_100000; for (VAR_6 = VAR_1->f_tablelim[VAR_5] - VAR_1->kx[1]; VAR_6 < VAR_1->f_tablelim[VAR_5 + 1] - VAR_1->kx[1]; VAR_6++) { SoftFloat q_m_max = av_div_sf(
av_mul_sf(VAR_1->q_m[VAR_4][VAR_6], gain_max),
VAR_1->gain[VAR_4][VAR_6]); if (av_gt_sf(VAR_1->q_m[VAR_4][VAR_6], q_m_max))
VAR_1->q_m[VAR_4][VAR_6] = q_m_max; if (av_gt_sf(VAR_1->gain[VAR_4][VAR_6], gain_max))
VAR_1->gain[VAR_4][VAR_6] = gain_max; } sum[0] = sum[1] = FLOAT_0; for (VAR_6 = VAR_1->f_tablelim[VAR_5] - VAR_1->kx[1]; VAR_6 < VAR_1->f_tablelim[VAR_5 + 1] - VAR_1->kx[1]; VAR_6++) { sum[0] = av_add_sf(sum[0], VAR_1->e_origmapped[VAR_4][VAR_6]); sum[1] = av_add_sf(sum[1],
av_mul_sf(
av_mul_sf(VAR_1->e_curr[VAR_4][VAR_6],
VAR_1->gain[VAR_4][VAR_6]),
VAR_1->gain[VAR_4][VAR_6])); sum[1] = av_add_sf(sum[1],
av_mul_sf(VAR_1->s_m[VAR_4][VAR_6], VAR_1->s_m[VAR_4][VAR_6])); if (delta && !VAR_1->s_m[VAR_4][VAR_6].mant)
sum[1] = av_add_sf(sum[1],
av_mul_sf(VAR_1->q_m[VAR_4][VAR_6], VAR_1->q_m[VAR_4][VAR_6])); } gain_boost = av_sqrt_sf(
av_div_sf(
av_add_sf(FLOAT_EPSILON, sum[0]),
av_add_sf(FLOAT_EPSILON, sum[1]))); if (av_gt_sf(gain_boost, FLOAT_1584893192))
gain_boost = FLOAT_1584893192; for (VAR_6 = VAR_1->f_tablelim[VAR_5] - VAR_1->kx[1]; VAR_6 < VAR_1->f_tablelim[VAR_5 + 1] - VAR_1->kx[1]; VAR_6++) { VAR_1->gain[VAR_4][VAR_6] = av_mul_sf(VAR_1->gain[VAR_4][VAR_6], gain_boost); VAR_1->q_m[VAR_4][VAR_6]  = av_mul_sf(VAR_1->q_m[VAR_4][VAR_6], gain_boost); VAR_1->s_m[VAR_4][VAR_6]  = av_mul_sf(VAR_1->s_m[VAR_4][VAR_6], gain_boost); } } } }