static int estimate_sid_gain(G723_1_Context *p)

{

    int i, shift, seg, seg2, t, val, val_add, x, y;



    shift = 16 - p->cur_gain * 2;

    if (shift > 0)

        t = p->sid_gain << shift;

    else

        t = p->sid_gain >> -shift;

    x = av_clipl_int32(t * (int64_t)cng_filt[0] >> 16);



    if (x >= cng_bseg[2])

        return 0x3F;



    if (x >= cng_bseg[1]) {

        shift = 4;

        seg   = 3;

    } else {

        shift = 3;

        seg   = (x >= cng_bseg[0]);

    }

    seg2 = FFMIN(seg, 3);



    val     = 1 << shift;

    val_add = val >> 1;

    for (i = 0; i < shift; i++) {

        t = seg * 32 + (val << seg2);

        t *= t;

        if (x >= t)

            val += val_add;

        else

            val -= val_add;

        val_add >>= 1;

    }



    t = seg * 32 + (val << seg2);

    y = t * t - x;

    if (y <= 0) {

        t = seg * 32 + (val + 1 << seg2);

        t = t * t - x;

        val = (seg2 - 1 << 4) + val;

        if (t >= y)

            val++;

    } else {

        t = seg * 32 + (val - 1 << seg2);

        t = t * t - x;

        val = (seg2 - 1 << 4) + val;

        if (t >= y)

            val--;

    }



    return val;

}

static int estimate_sid_gain(G723_1_Context *p)

{

    int i, shift, seg, seg2, t, val, val_add, x, y;



    shift = 16 - p->cur_gain * 2;

    if (shift > 0)

        t = p->sid_gain << shift;

    else

        t = p->sid_gain >> -shift;

    x = av_clipl_int32(t * (int64_t)cng_filt[0] >> 16);



    if (x >= cng_bseg[2])

        return 0x3F;



    if (x >= cng_bseg[1]) {

        shift = 4;

        seg   = 3;

    } else {

        shift = 3;

        seg   = (x >= cng_bseg[0]);

    }

    seg2 = FFMIN(seg, 3);



    val     = 1 << shift;

    val_add = val >> 1;

    for (i = 0; i < shift; i++) {

        t = seg * 32 + (val << seg2);

        t *= t;

        if (x >= t)

            val += val_add;

        else

            val -= val_add;

        val_add >>= 1;

    }



    t = seg * 32 + (val << seg2);

    y = t * t - x;

    if (y <= 0) {

        t = seg * 32 + (val + 1 << seg2);

        t = t * t - x;

        val = (seg2 - 1 << 4) + val;

        if (t >= y)

            val++;

    } else {

        t = seg * 32 + (val - 1 << seg2);

        t = t * t - x;

        val = (seg2 - 1 << 4) + val;

        if (t >= y)

            val--;

    }



    return val;

}

        val = (seg2 - 1 << 4) + val;         val = (seg2 - 1 << 4) + val;
static int FUNC_0(G723_1_Context *VAR_0)

{

    int VAR_1, VAR_2, VAR_3, VAR_4, VAR_5, VAR_6, VAR_7, VAR_8, VAR_9;



    VAR_2 = 16 - VAR_0->cur_gain * 2;

    if (VAR_2 > 0)

        VAR_5 = VAR_0->sid_gain << VAR_2;

    else

        VAR_5 = VAR_0->sid_gain >> -VAR_2;

    VAR_8 = av_clipl_int32(VAR_5 * (int64_t)cng_filt[0] >> 16);



    if (VAR_8 >= cng_bseg[2])

        return 0x3F;



    if (VAR_8 >= cng_bseg[1]) {

        VAR_2 = 4;

        VAR_3   = 3;

    } else {

        VAR_2 = 3;

        VAR_3   = (VAR_8 >= cng_bseg[0]);

    }

    VAR_4 = FFMIN(VAR_3, 3);



    VAR_6     = 1 << VAR_2;

    VAR_7 = VAR_6 >> 1;

    for (VAR_1 = 0; VAR_1 < VAR_2; VAR_1++) {

        VAR_5 = VAR_3 * 32 + (VAR_6 << VAR_4);

        VAR_5 *= VAR_5;

        if (VAR_8 >= VAR_5)

            VAR_6 += VAR_7;

        else

            VAR_6 -= VAR_7;

        VAR_7 >>= 1;

    }



    VAR_5 = VAR_3 * 32 + (VAR_6 << VAR_4);

    VAR_9 = VAR_5 * VAR_5 - VAR_8;

    if (VAR_9 <= 0) {

        VAR_5 = VAR_3 * 32 + (VAR_6 + 1 << VAR_4);

        VAR_5 = VAR_5 * VAR_5 - VAR_8;

        VAR_6 = (VAR_4 - 1 << 4) + VAR_6;

        if (VAR_5 >= VAR_9)

            VAR_6++;

    } else {

        VAR_5 = VAR_3 * 32 + (VAR_6 - 1 << VAR_4);

        VAR_5 = VAR_5 * VAR_5 - VAR_8;

        VAR_6 = (VAR_4 - 1 << 4) + VAR_6;

        if (VAR_5 >= VAR_9)

            VAR_6--;

    }



    return VAR_6;

}

static int FUNC_0(G723_1_Context *VAR_0)
{ int VAR_1, VAR_2, VAR_3, VAR_4, VAR_5, VAR_6, VAR_7, VAR_8, VAR_9; VAR_2 = 16 - VAR_0->cur_gain * 2; if (VAR_2 > 0)
VAR_5 = VAR_0->sid_gain << VAR_2; else
VAR_5 = VAR_0->sid_gain >> -VAR_2; VAR_8 = av_clipl_int32(VAR_5 * (int64_t)cng_filt[0] >> 16); if (VAR_8 >= cng_bseg[2])
return 0x3F; if (VAR_8 >= cng_bseg[1]) { VAR_2 = 4; VAR_3   = 3; } else { VAR_2 = 3; VAR_3   = (VAR_8 >= cng_bseg[0]); } VAR_4 = FFMIN(VAR_3, 3); VAR_6     = 1 << VAR_2; VAR_7 = VAR_6 >> 1; for (VAR_1 = 0; VAR_1 < VAR_2; VAR_1++) { VAR_5 = VAR_3 * 32 + (VAR_6 << VAR_4); VAR_5 *= VAR_5; if (VAR_8 >= VAR_5)
VAR_6 += VAR_7; else
VAR_6 -= VAR_7; VAR_7 >>= 1; } VAR_5 = VAR_3 * 32 + (VAR_6 << VAR_4); VAR_9 = VAR_5 * VAR_5 - VAR_8; if (VAR_9 <= 0) { VAR_5 = VAR_3 * 32 + (VAR_6 + 1 << VAR_4); VAR_5 = VAR_5 * VAR_5 - VAR_8; VAR_6 = (VAR_4 - 1 << 4) + VAR_6; if (VAR_5 >= VAR_9)
VAR_6++; } else { VAR_5 = VAR_3 * 32 + (VAR_6 - 1 << VAR_4); VAR_5 = VAR_5 * VAR_5 - VAR_8; VAR_6 = (VAR_4 - 1 << 4) + VAR_6; if (VAR_5 >= VAR_9)
VAR_6--; } return VAR_6; }