Commit 32b5c4e2 authored by vaclav's avatar vaclav
Browse files

port NONBE_FIX_1063_DIV_BY_ZERO_SUMNRG

parent f34818ef
Loading
Loading
Loading
Loading
Loading
+1 −0
Original line number Diff line number Diff line
@@ -188,6 +188,7 @@
#define NONBE_FIX_968_ISM_BRIR_WITH_HEADROTATION_5MS_FIX      /* FhG : issue #968: differences between 5ms and 20ms rendering for discrete ISM with BRIR and head rotation*/
#define FIX_969_USAN_IGF_ARITH                          /* FhG: issue 969: fix USAN error in igf_sce_dec; same issue as #962 */
#define FIX_959_MASA_LINEAR_REND                        /* VA: issue 959: remove unused calling of ivas_sba_linear_renderer() in MASA rendering */
#define NONBE_FIX_1063_DIV_BY_ZERO_SUMNRG               /* VoiceAge: issue 1063: division by zero for angle_rot feature in the UNCLR classifier */

/* #################### End BASOP porting switches ############################ */

+18 −3
Original line number Diff line number Diff line
@@ -642,9 +642,10 @@ void stereo_dft_enc_compute_itd(
    STEREO_CLASSIF_HANDLE hStereoClassif;
    const float *dft_trigo32k;
    float trigo_enc[STEREO_DFT_N_32k_ENC / 2 + 1];

    float cng_xcorr_filt;

#ifdef NONBE_FIX_1063_DIV_BY_ZERO_SUMNRG
    float sum_nrg_delta;
#endif
    int16_t prev_itd_max;
    int16_t itd_max_flip;

@@ -729,10 +730,12 @@ void stereo_dft_enc_compute_itd(
        grand_dot_prod_real += xcorr[2 * i];
        grand_dot_prod_img += xcorr[2 * i + 1];
        xcorr_abs[i] = sqrtf( xcorr[2 * i] * xcorr[2 * i] + xcorr[2 * i + 1] * xcorr[2 * i + 1] );

#ifndef NONBE_FIX_1063_DIV_BY_ZERO_SUMNRG
        /* VM: prod_LL tends to overflow, better to replace with sum(log(prod_L)) and retrain the classifier */
        prod_LL = prod_L;
        prod_RR = prod_R;

#endif
        if ( j == SFM_PROD_GRP || i == NFFT_mid - 1 )
        {
            prod_L = max( FLT_MIN, prod_L );
@@ -786,7 +789,19 @@ void stereo_dft_enc_compute_itd(
        hStereoClassif->unclr_fv[E_gainIPD] = g_IPD;
        hStereoClassif->xtalk_fv[E_gainIPD] = g_IPD;

#ifdef NONBE_FIX_1063_DIV_BY_ZERO_SUMNRG
        if ( sum_nrg_L >= sum_nrg_R )
        {
            sum_nrg_delta = max( sum_nrg_L - sum_nrg_R, 1.0f );
        }
        else
        {
            sum_nrg_delta = min( sum_nrg_L - sum_nrg_R, -1.0f );
        }
        angle_rot = fabsf( atanf( 2.0f * ( grand_dot_prod_real ) / sum_nrg_delta ) );
#else
        angle_rot = fabsf( atanf( 2.0f * ( grand_dot_prod_real ) / ( sum_nrg_L - sum_nrg_R + 1.0f ) ) );
#endif
        hStereoClassif->unclr_fv[E_angle_rot] = angle_rot;
        hStereoClassif->xtalk_fv[E_angle_rot] = angle_rot;