Commit 75ef6fc2 authored by Tapani Pihlajakuja's avatar Tapani Pihlajakuja
Browse files

Merge remote-tracking branch 'origin/main' into...

Merge remote-tracking branch 'origin/main' into basop-2442-masa-2tc-rendering-to-mono-large-diff-signal-12-khz
parents d27a3f1f ce3749b6
Loading
Loading
Loading
Loading
Loading
+3 −0
Original line number Diff line number Diff line
@@ -150,6 +150,9 @@
/* for EVS_MONO, all is kept BE. */
#define FIX_ISSUE_1966_PHASE_DIFF                       /* FhG: Basop issue 1966: shift phase range to [-2PI..+2PI[, handle 4 quadrants */
#define FIX_ISSUE_1966_F0_32BIT                         /* FhG: Basop issue 1966: use 32-bit variables for F0 and thresholdModification */
#define FIX_BASOP_2519_TCA_LA_ZERO_EXP                  /* FhG: BASOP #2519: Exclude zero samples from exp_com calculation in tcaTargetCh_LA_fx */
#define FIX_BASOP_2519_ICBWE_DEC_Q_TRACK                /* FhG: BASOP #2519: Track Q-format of dec_2over3_mem_fx across frames in stereo_icBWE_preproc_fx */

/* ##################### End NON-BE switches ########################### */

/* ################## End MAINTENANCE switches ######################### */
+11 −5
Original line number Diff line number Diff line
@@ -511,8 +511,14 @@ typedef struct stereo_icbwe_enc_data_structure
    Word32 prevRefEner_fx;     // Q31
    Word32 prevNonRefEner_fx;  // Q31
    Word32 memGsEnerMap_fx[2]; // Q31
#ifdef FIX_BASOP_2519_ICBWE_DEC_Q_TRACK
    Word16 dec_2over3_mem_fx[L_FILT_2OVER3];       // Q -> q_dec_2over3_mem_fx
    Word16 dec_2over3_mem_lp_fx[L_FILT_2OVER3_LP]; // Q -> q_dec_2over3_mem_fx
    Word16 q_dec_2over3_mem_fx;                    // current Q of dec_2over3_mem_fx and dec_2over3_mem_lp_fx
#else
    Word16 dec_2over3_mem_fx[L_FILT_2OVER3];       // Q -> q_dataChan_fx
    Word16 dec_2over3_mem_lp_fx[L_FILT_2OVER3_LP]; // Q -> q_dataChan_fx
#endif
    Word16 icbwe_inp_mem_fx[CPE_CHANNELS][NS2SA( 48000, L_MEM_RECALC_TBE_NS )]; // Q -> q_dataChan_fx
    Word16 *dataChan_fx[CPE_CHANNELS];
    Word16 q_dataChan_fx;
+14 −0
Original line number Diff line number Diff line
@@ -171,8 +171,15 @@ static void tcaTargetCh_LA_fx(
        move32();
        target_exp_temp[i + currentNCShift] = temp;
        move16();
#ifdef FIX_BASOP_2519_TCA_LA_ZERO_EXP
        IF( NE_32( target[i + currentNCShift], 0 ) )
        {
            exp_com = s_max( exp_com, temp );
        }
#else
        exp_com = s_max( exp_com, temp );
#endif
    }

    FOR( ; i < input_frame; i++ )
    {
@@ -180,8 +187,15 @@ static void tcaTargetCh_LA_fx(
        move32();
        target_exp_temp[i + currentNCShift] = add( gAdj_exp, ref_exp );
        move16();
#ifdef FIX_BASOP_2519_TCA_LA_ZERO_EXP
        IF( NE_32( target[i + currentNCShift], 0 ) )
        {
            exp_com = s_max( exp_com, target_exp_temp[i + currentNCShift] );
        }
#else
        exp_com = s_max( exp_com, target_exp_temp[i + currentNCShift] );
#endif
    }

    FOR( i = 0; i < input_frame + currentNCShift; i++ )
    {
+44 −0
Original line number Diff line number Diff line
@@ -1146,6 +1146,10 @@ void stereo_icBWE_init_enc_fx(

    set16_fx( hStereoICBWE->dec_2over3_mem_fx, 0, L_FILT_2OVER3 );
    set16_fx( hStereoICBWE->dec_2over3_mem_lp_fx, 0, L_FILT_2OVER3_LP );
#ifdef FIX_BASOP_2519_ICBWE_DEC_Q_TRACK
    hStereoICBWE->q_dec_2over3_mem_fx = 0;
    move16();
#endif
    set16_fx( hStereoICBWE->memHPF_fx, 0, 8 );

    /* BWE ref channel */
@@ -1278,6 +1282,10 @@ void stereo_icBWE_preproc_fx(
    {
        set16_fx( hStereoICBWE->dec_2over3_mem_fx, 0, L_FILT_2OVER3 );
        set16_fx( hStereoICBWE->dec_2over3_mem_lp_fx, 0, L_FILT_2OVER3_LP );
#ifdef FIX_BASOP_2519_ICBWE_DEC_Q_TRACK
        hStereoICBWE->q_dec_2over3_mem_fx = 0;
        move16();
#endif
        set16_fx( hStereoICBWE->mem_decim_shb_ch0_fx, 0, ( 2 * L_FILT_MAX ) );
        set16_fx( shb_speech_nonref_fx, 0, L_FRAME16k );
        set16_fx( hStereoICBWE->memHPF_fx, 0, 8 );
@@ -1298,6 +1306,16 @@ void stereo_icBWE_preproc_fx(
                i = 2 * L_FILT48k + L_FILT_2OVER3;
                move16();

#ifdef FIX_BASOP_2519_ICBWE_DEC_Q_TRACK
                IF( NE_16( hStereoICBWE->q_dec_2over3_mem_fx, hStereoICBWE->q_dataChan_fx ) )
                {
                    Word16 scf = sub( hStereoICBWE->q_dataChan_fx, hStereoICBWE->q_dec_2over3_mem_fx );
                    scale_sig( hStereoICBWE->dec_2over3_mem_fx, L_FILT_2OVER3, scf );
                    scale_sig( hStereoICBWE->dec_2over3_mem_lp_fx, L_FILT_2OVER3_LP, scf );
                    hStereoICBWE->q_dec_2over3_mem_fx = hStereoICBWE->q_dataChan_fx;
                    move16();
                }
#endif
                decimate_2_over_3_allpass_fx( temp_in_fx + sub( input_frame, i ), i, temp_inp_fx + mult( sub( input_frame, i ), 21845 /* 2/3 Q15*/ ), hStereoICBWE->dec_2over3_mem_fx, allpass_poles_3_ov_2, decimate_3_ov_2_lowpass_num_fx, decimate_3_ov_2_lowpass_den_fx, hStereoICBWE->dec_2over3_mem_lp_fx );
            }
            /* flip the spectrum */
@@ -1319,6 +1337,17 @@ void stereo_icBWE_preproc_fx(
                move16();

                /* IVAS-219: the same filter memories are used for both channels; the continuity is thus lost; shouldn't the memories be separated? */
#ifdef FIX_BASOP_2519_ICBWE_DEC_Q_TRACK
                IF( NE_16( hStereoICBWE->q_dec_2over3_mem_fx, hStereoICBWE->q_dataChan_fx ) )
                {
                    Word16 scf = sub( hStereoICBWE->q_dataChan_fx, hStereoICBWE->q_dec_2over3_mem_fx );
                    scale_sig( hStereoICBWE->dec_2over3_mem_fx, L_FILT_2OVER3, scf );
                    scale_sig( hStereoICBWE->dec_2over3_mem_lp_fx, L_FILT_2OVER3_LP, scf );
                    hStereoICBWE->q_dec_2over3_mem_fx = hStereoICBWE->q_dataChan_fx;
                    move16();
                }
#endif

                decimate_2_over_3_allpass_fx( temp_in_fx + sub( input_frame, i ), i, temp_inp_fx + mult( sub( input_frame, i ), 21845 /* 2/3 Q15*/ ), hStereoICBWE->dec_2over3_mem_fx, allpass_poles_3_ov_2, decimate_3_ov_2_lowpass_num_fx, decimate_3_ov_2_lowpass_den_fx, hStereoICBWE->dec_2over3_mem_lp_fx );
            }
            /* flip the spectrum */
@@ -1354,6 +1383,10 @@ void stereo_icBWE_preproc_fx(

        set16_fx( hStereoICBWE->dec_2over3_mem_fx, 0, L_FILT_2OVER3 );
        set16_fx( hStereoICBWE->dec_2over3_mem_lp_fx, 0, L_FILT_2OVER3_LP );
#ifdef FIX_BASOP_2519_ICBWE_DEC_Q_TRACK
        hStereoICBWE->q_dec_2over3_mem_fx = 0;
        move16();
#endif
        set16_fx( hStereoICBWE->mem_decim_shb_ch0_fx, 0, ( 2 * L_FILT_MAX ) );
        set16_fx( shb_speech_nonref_fx, 0, L_FRAME16k );
        set16_fx( hStereoICBWE->memHPF_fx, 0, 8 );
@@ -1397,6 +1430,17 @@ void stereo_icBWE_preproc_fx(
        Copy( temp_inp_fx, temp_in_fx, L_FRAME48k ); /* q_dataChan_fx */
        set16_fx( temp_inp_fx, 0, L_FRAME48k );

#ifdef FIX_BASOP_2519_ICBWE_DEC_Q_TRACK
        IF( NE_16( hStereoICBWE->q_dec_2over3_mem_fx, hStereoICBWE->q_dataChan_fx ) )
        {
            Word16 scf = sub( hStereoICBWE->q_dataChan_fx, hStereoICBWE->q_dec_2over3_mem_fx );
            scale_sig( hStereoICBWE->dec_2over3_mem_fx, L_FILT_2OVER3, scf );
            scale_sig( hStereoICBWE->dec_2over3_mem_lp_fx, L_FILT_2OVER3_LP, scf );
            hStereoICBWE->q_dec_2over3_mem_fx = hStereoICBWE->q_dataChan_fx;
            move16();
        }
#endif

        decimate_2_over_3_allpass_fx( temp_in_fx, L_FRAME48k, temp_inp_fx, hStereoICBWE->dec_2over3_mem_fx, allpass_poles_3_ov_2, decimate_3_ov_2_lowpass_num_fx, decimate_3_ov_2_lowpass_den_fx, hStereoICBWE->dec_2over3_mem_lp_fx );
    }