Commit 3b836b9f authored by sagnowski's avatar sagnowski
Browse files

Fix encoder overflows with args: -dtx 23050 16

parent fb15e125
Loading
Loading
Loading
Loading
+16 −0
Original line number Diff line number Diff line
@@ -151,6 +151,9 @@ static void E_ACELP_2pulse_search(Word16 nb_pos_ix, UWord8 track_x,
    Word16 sqk[2], alpk[2], ik;
    Word32 xy_save;
    Word16 check = 0; /* debug code not instrumented */
#ifdef BASOP_NOGLOB
    Flag Overflow = 0;
#endif /* BASOP_NOGLOB */


    /* eight dn2 max positions per track */
@@ -168,7 +171,11 @@ static void E_ACELP_2pulse_search(Word16 nb_pos_ix, UWord8 track_x,
    sqk[0] = -1;
    move16();
    x2 = shr(pos_x[0], 2);
#ifdef BASOP_NOGLOB
    if (mac_ro(L_mac_o(L_mac_o(alp0, cor_x[x2], _1_, &Overflow), cor_y[0], _1_, &Overflow), rrixiy[track_x][shl(x2,4)], _1_, &Overflow) < 0)
#else /* BASOP_NOGLOB */
    if (mac_r(L_mac(L_mac(alp0, cor_x[x2], _1_), cor_y[0], _1_), rrixiy[track_x][shl(x2,4)], _1_) < 0)
#endif /* BASOP_NOGLOB */
    {
        sqk[0] = 1;
        move16();
@@ -188,7 +195,11 @@ static void E_ACELP_2pulse_search(Word16 nb_pos_ix, UWord8 track_x,
        ps1 = add(ps0, dn[x]);

        /*alp1 = alp0 + cor_x[x2];*/
#ifdef BASOP_NOGLOB
        alp1 = L_mac_o(alp0, cor_x[x2], _1_, &Overflow);  /*Q22*/
#else /* BASOP_NOGLOB */
        alp1 = L_mac(alp0, cor_x[x2], _1_);  /*Q22*/
#endif /* BASOP_NOGLOB */

        p1 = cor_y;
        p2 = &rrixiy[track_x][shl(x2,4)];
@@ -199,8 +210,13 @@ static void E_ACELP_2pulse_search(Word16 nb_pos_ix, UWord8 track_x,
            ps2 = add(ps1, dn[y]);

            /*alp2 = alp1 + (*p1++) + (*p2++);*/
#ifdef BASOP_NOGLOB
            alp2 = L_mac_o(alp1, *p1++, _1_, &Overflow);
            alp2_16 = mac_ro(alp2, *p2++, _1_, &Overflow);  /*Q6*/
#else /* BASOP_NOGLOB */
            alp2 = L_mac(alp1, *p1++, _1_);
            alp2_16 = mac_r(alp2, *p2++, _1_);  /*Q6*/
#endif /* BASOP_NOGLOB */
            alpk[1-ik] = alp2_16;
            move16();

+4 −0
Original line number Diff line number Diff line
@@ -194,7 +194,11 @@ void encod_amr_wb_fx(

        FOR (i = 0; i < L_SUBFR; i++)
        {
#ifdef BASOP_NOGLOB
            exc2[i+i_subfr] = round_fx_o(L_shl_o(L_mult(gain_pit,exc[i+i_subfr]),1, &Overflow), &Overflow);
#else /* BASOP_NOGLOB */
            exc2[i+i_subfr] = round_fx(L_shl(L_mult(gain_pit,exc[i+i_subfr]),1));
#endif /* BASOP_NOGLOB */
        }

        /*-----------------------------------------------------------------*