Commit 61a6b182 authored by vaillancour's avatar vaillancour
Browse files

complete an interrupted commit

parent 48fe06bd
Loading
Loading
Loading
Loading
+74 −64
Original line number Diff line number Diff line
@@ -732,7 +732,7 @@ Word32 calc_tilt_bwe_fx( /* o : Tilt in Q24 */
		return L_temp;
}
#ifdef IVAS_FLOAT_FIXED
Word32 ivas_calc_tilt_bwe_fx(    /* o  : Tilt in Q24       */
Word16 ivas_calc_tilt_bwe_fx(    /* o  : Tilt in Q24       */
    const Word32 *sp,       /* i  : input signal      */
    const Word16 exp_sp,    /* i  : Exp of inp signal */
    const Word16 N          /* i  : signal length     */
@@ -741,6 +741,7 @@ Word32 ivas_calc_tilt_bwe_fx( /* o : Tilt in Q24 */
    Word16 i, j;
    Word32 L_ener, L_ener_tot, L_temp;
    Word32 tmp1, tmp2;
    Word16 sign = 0;
    const Word32 *ptr;
    Word16 exp2, tmp_exp;
#ifdef BASOP_NOGLOB_DECLARE_LOCAL
@@ -762,61 +763,33 @@ Word32 ivas_calc_tilt_bwe_fx( /* o : Tilt in Q24 */
    /* Divide Frame Length by 32 */
    FOR(j = shr(N, 5); j > 0; j--)
    {
#ifdef BASOP_NOGLOB            /* Critical Overflow and all those below*/
        Word16 tmp = mult_ro( (Word16) *ptr++, 8192, &Overflow ); /* Divide by 4 */
#else
        tmp1 = mult_r(*ptr++, 8192); /* Divide by 4 */
#endif
        L_ener = L_mult0( tmp, tmp );
        Word32 tmp = *ptr++; /* Divide by 4 */
        L_ener = Mpy_32_32( tmp, tmp );
        /* With the shift by 4 and the L_mult0, no overflow possible for 32 samples */
        FOR(i = 1; i < 32; i++)
        {
            tmp1 = L_mls_o(*ptr++, 8192, &Overflow); /* Divide by 4 */
            tmp1 = *ptr++; /* Divide by 4 */
            L_ener = Madd_32_32(L_ener, tmp1, tmp1);
        }
#ifdef BASOP_NOGLOB   /* Critical Overflow */
        L_ener = L_shr_o(L_ener, exp2, &Overflow);
        L_temp = L_add_o(L_ener_tot, L_ener, &Overflow);
#else
        L_ener = L_shr(L_ener, exp2);
        L_temp = L_add(L_ener_tot, L_ener);
#endif
        IF(Overflow != 0)
        {
            L_ener_tot = L_shr(L_ener_tot, 1);
            L_ener = L_shr(L_ener, 1);
            exp2 = add(exp2, 1);
            /* this is required, do not remove */
            Overflow = 0;
            move16();
        }
#ifdef BASOP_NOGLOB         /* Critical Overflow */
        L_ener_tot = L_add_o(L_ener_tot, L_ener, &Overflow);
#else

        L_ener_tot = L_add(L_ener_tot, L_ener);
#endif
    }
#ifdef BASOP_NOGLOB
    L_ener = (L_abs(L_sub_o(sp[1], sp[0], &Overflow)));
#else
    L_ener = L_deposit_l(abs_s(sub(sp[1], sp[0])));
#endif
    L_ener = L_abs(L_sub(sp[1], sp[0]));

    FOR(i = 2; i < N; i++)
    {
        /* Eq to (sp[i] - sp[i-1]) * (sp[i-1] - sp[i-2]) < 0 */
#ifdef BASOP_NOGLOB
        tmp1 = L_sub_o(sp[i], sp[i - 1], &Overflow);
        tmp2 = L_sub_o(sp[i - 1], sp[i - 2], &Overflow);
#else
        tmp1 = sub(sp[i], sp[i - 1]);
        tmp2 = sub(sp[i - 1], sp[i - 2]);
#endif
        tmp2 = mult(tmp1, tmp2);
        tmp1 = abs_s(tmp1);
        tmp1 = L_sub(sp[i], sp[i - 1]);
        tmp2 = L_sub(sp[i - 1], sp[i - 2]);

        tmp2 = Mpy_32_32(tmp1, tmp2);
        tmp1 = L_abs(tmp1);
        /* to Get either 0 or -1 in 'tmp2' */
        tmp2 = shr(tmp2, 15);
        tmp2 = L_shr(tmp2, 31);
        sign = extract_l(L_shl(tmp2, Q15));
        /* this allows this code */
        L_ener = L_msu0(L_ener, tmp2, tmp1);
        L_ener = Msub_32_16(L_ener, tmp1, sign);
        /* instead of this one */
        /* test(); */
        /* if (tmp2 < 0) */
@@ -826,30 +799,24 @@ Word32 ivas_calc_tilt_bwe_fx( /* o : Tilt in Q24 */
        /* it saves one op */
    }

    tmp_exp = norm_l(L_ener_tot);
    L_temp = L_shl(L_ener_tot, tmp_exp);
    tmp1 = sub(add(31 + 4, exp2), add(tmp_exp, shl(exp_sp, 1)));
    L_temp = Isqrt_lc(L_temp, &tmp_exp);
    L_temp = L_ener_tot;
    tmp_exp = sub(Q31, sub(shl(exp_sp, 1), Q31));
    L_temp = Sqrt32(L_temp, &tmp_exp);
    L_temp = L_shl(L_temp, sub(exp_sp, sub(Q31, tmp_exp)));

    /* *tilt_flt = (float)(r1/sqrt(r0)); */
    exp2 = norm_l(L_ener);
#ifdef BASOP_NOGLOB
    L_temp = Mult_32_16( L_temp, round_fx( L_shl_sat( L_ener, exp2 ) ) );
#else
    L_temp = Mult_32_16( L_temp, round_fx( L_shl( L_ener, exp2 ) ) );
#endif
    exp2 = sub(exp2, tmp_exp);
    exp2 = add(exp2, exp_sp);

    /* Put in Q24 */
#ifdef BASOP_NOGLOB
    L_temp = L_shr_sat( L_temp, sub( exp2, 24 ) );
#else
    L_temp = L_shr( L_temp, sub( exp2, 24 ) );
#endif
    L_temp = L_deposit_l(BASOP_Util_Divide3232_Scale(L_ener, L_temp, &exp2));
    IF (GT_16(sub(exp2, 4) , norm_l(L_temp)))
    {
        L_temp = MAX_16;
    }
    ELSE
    {
        L_temp = L_shl(L_temp, sub(exp2, 4)); // Output is expected in Q11
    }
    BASOP_SATURATE_WARNING_ON_EVS

    return L_temp;
    return extract_l(L_temp);
}
#endif

@@ -3166,4 +3133,47 @@ void hq_generic_decoding_fx(
			FOR(; n_freq < fb_bwe_subband[DIM_FB]; n_freq++)
			{
				L_tmp = Mult_32_16(coeff_out_fx[n_freq], wfenv_fx);/*15 + 12 + 1 - 15 */
				coeff_out_fx[n_freq] = L_shr(L_tmp, 1
 No newline at end of file
				coeff_out_fx[n_freq] = L_shr(L_tmp, 1);
				move32();/*12 */
			}
		}
	}

	return;
}



/*-------------------------------------------------------------------*
 * save_old_syn()
 *
 * Save and delay the ACELP core synthesis signal by
 * DELAY_FD_BWE_ENC_xxkx to be used by SWB BWE
 *-------------------------------------------------------------------*/

void save_old_syn_fx(
	const Word16 L_frame,        /* i  : frame length                */
	const Word16 syn[],          /* i  : ACELP synthesis             */
	Word16 old_syn[],      /* o  : old synthesis buffer        */
	Word16 old_syn_mem[],  /* i/o: old synthesis buffer memory */
	const Word16 preemph_fac,    /* i  : preemphasis factor          */
	Word16 *mem_deemph     /* i/o: deemphasis filter memory    */
)
{
	Word16 tmps;

	tmps = NS2SA(16000, DELAY_FD_BWE_ENC_16k_NS);
	move16();
	if (EQ_16(L_frame, L_FRAME))
	{
		tmps = NS2SA(12800, DELAY_FD_BWE_ENC_12k8_NS);
		move16();
	}
	Copy(old_syn_mem, old_syn, tmps);
	Copy(syn, old_syn + tmps, L_frame - tmps);
	Copy(syn + L_frame - tmps, old_syn_mem, tmps);

	deemph_fx(old_syn, preemph_fac, L_frame, mem_deemph);

	return;
}