Commit 67554765 authored by vaillancour's avatar vaillancour
Browse files

adding basop sat for signal with extreme saturation

parent 0e12e1b9
Loading
Loading
Loading
Loading
+5 −1
Original line number Diff line number Diff line
@@ -44,7 +44,11 @@ void tcx_ltp_get_lpc(
        if (L_tmp > 0) r = L_shr(r, 2);

        tmp = shl(x[j], s);
#ifdef BASOP_NOGLOB
        r = L_mac0_sat( r, tmp, tmp );
#else
        r = L_mac0( r, tmp, tmp );
#endif
    }
    r = L_max(r, L_shl(100, shl(s, 1)));
    r = Mpy_32_16_1(r, 16386/*1.0001f Q14*/);
+5 −1
Original line number Diff line number Diff line
@@ -474,7 +474,11 @@ void tcx_windowing_synthesis_current_frame(
        {
            /*remove reconstructed ZIR and add ACELP ZIR*/
            move16();
#ifdef BASOP_NOGLOB
            signal[i + overlap + acelp_mem_len] = sub_sat( signal[i + overlap + acelp_mem_len], mult_r_sat( acelp_zir[i], div_s( sub_sat( acelp_zir_len, i ), acelp_zir_len ) ) );
#else
            signal[i + overlap + acelp_mem_len] = sub( signal[i + overlap + acelp_mem_len], mult_r( acelp_zir[i], div_s( sub( acelp_zir_len, i ), acelp_zir_len ) ) );
#endif
        }
    }
    /* Rectangular window (past-frame is TCX) */
+20 −4
Original line number Diff line number Diff line
@@ -2581,7 +2581,11 @@ void QuantizeSpectrum_fx(
                    tmp1 = sub(overlap, hTcxCfg->tcx_mdct_window_min_length);
                    FOR (i=0; i < tmp1; i++)
                    {
#ifdef BASOP_NOGLOB
                        xn_buf16[i] = shl_sat( add_sat( xn_buf16[i], shr_sat( hTcxEnc->old_out_fx[i + nz], tmp2 ) ), TCX_IMDCT_HEADROOM );
#else
                        xn_buf16[i] = shl( add( xn_buf16[i], shr( hTcxEnc->old_out_fx[i + nz], tmp2 ) ), TCX_IMDCT_HEADROOM );
#endif
                        move16();
                    }

@@ -2590,19 +2594,31 @@ void QuantizeSpectrum_fx(
                    FOR ( ; i < tmp1; i++)
                    {
                        tmp3 = mult_r(shr(hTcxEnc->old_out_fx[i+nz], tmp2), hTcxCfg->tcx_mdct_window_minimum[i-overlap+hTcxCfg->tcx_mdct_window_min_length].v.re);
#ifdef BASOP_NOGLOB
                        xn_buf16[i] = shl_sat( add_sat( xn_buf16[i], tmp3 ), TCX_IMDCT_HEADROOM );
#else
                        xn_buf16[i] = shl( add( xn_buf16[i], tmp3 ), TCX_IMDCT_HEADROOM );
#endif
                        move16();
                    }
                    FOR ( ; i < overlap; i++)
                    {
                        tmp3 = mult_r(shr(hTcxEnc->old_out_fx[i+nz], tmp2), hTcxCfg->tcx_mdct_window_minimum[overlap-1-i].v.im);
#ifdef BASOP_NOGLOB
                        xn_buf16[i] = shl_sat( add_sat( xn_buf16[i], tmp3 ), TCX_IMDCT_HEADROOM );
#else
                        xn_buf16[i] = shl( add( xn_buf16[i], tmp3 ), TCX_IMDCT_HEADROOM );
#endif
                        move16();
                    }

                    FOR ( ; i < L_frame; i++)
                    {
#ifdef BASOP_NOGLOB
                        xn_buf16[i] = shl_sat( xn_buf16[i], TCX_IMDCT_HEADROOM );
#else
                        xn_buf16[i] = shl( xn_buf16[i], TCX_IMDCT_HEADROOM );
#endif
                        move16();
                    }
                }
+5 −1
Original line number Diff line number Diff line
@@ -1233,7 +1233,11 @@ void core_acelp_tcx20_switching_fx(
#else /* BASOP_NOGLOB */
                (LT_16(add(st->prevTempFlatness_fx, currFlatness), 416/*3.25f Q7*/)  || EQ_16(stab_fac, 0x7fff)  ||
#endif
#ifdef BASOP_NOGLOB
               ( EQ_32( st->sr_core, INT_FS_12k8 ) && EQ_16( st->sp_aud_decision0, 1 ) && LT_16( add_sat( st->prevTempFlatness_fx, currFlatness ), 2560 /*20.f Q7*/ ) ) ) &&
#else
               ( EQ_32( st->sr_core, INT_FS_12k8 ) && EQ_16( st->sp_aud_decision0, 1 ) && LT_16( add( st->prevTempFlatness_fx, currFlatness ), 2560 /*20.f Q7*/ ) ) ) &&
#endif
                        (LE_16(st->acelpFramesCount, 6) ))
        {
            dsnr = -512/*-2.0f Q8*/;
+5 −1
Original line number Diff line number Diff line
@@ -310,7 +310,11 @@ void core_signal_analysis_high_bitrate_fx(
            /* Outter left folding */
            FOR(i = 0; i < folding_offset; i++)
            {
#ifdef BASOP_NOGLOB
                tcx20Win[folding_offset + i] = sub_sat( tcx20Win[folding_offset + i], tcx20Win[folding_offset - 1 - i] );
#else
                tcx20Win[folding_offset + i] = sub( tcx20Win[folding_offset + i], tcx20Win[folding_offset - 1 - i] );
#endif
                move16();
            }
#ifdef  IVAS_CODE
Loading