Commit 6a83549e authored by Jonas Svedberg's avatar Jonas Svedberg
Browse files

added initilizations and asserts for issue #617 DTX and IO16(enc) IO32(dec)

parent b492f395
Loading
Loading
Loading
Loading
+3 −0
Original line number Diff line number Diff line
@@ -194,6 +194,9 @@

#define SPLIT_REND_WITH_HEAD_ROT                        /* Dlb,FhG: Split Rendering contributions 21 and 35 */


#define FIX617_UBSAN_DIVBYZERO_STEREOCNG                /* Eri: Issue 617: Decoder UBSAN: division by zero in stereo cng when inut is 16kHz and output is 32kHz */

/* ################## End BE DEVELOPMENT switches ######################### */


+32 −1
Original line number Diff line number Diff line
@@ -737,9 +737,15 @@ static void shb_CNG_decod(
        ener = hTdCngDec->shb_cng_ener;
    }


    gain = (float) sqrt( pow( 10, 0.1f * ener ) * L_FRAME16k / ener_excSHB );

    st->hTdCngDec->shb_cng_gain = ener;
#ifdef FIX617_UBSAN_DIVBYZERO_STEREOCNG
#ifdef DEBUGGING
    /* note: state shb_cng_gain is actually an energy value in dB */
#endif
#endif

    for ( i = 0; i < L_FRAME16k; i++ )
    {
@@ -783,6 +789,20 @@ void td_cng_dec_init(
    mvr2r( st->lsp_old, st->lspCNG, M );
    hTdCngDec->last_allow_cn_step = 0;
    hTdCngDec->shb_cng_ener = -6.02f;
#ifdef FIX617_UBSAN_DIVBYZERO_STEREOCNG
    if ( st->element_mode != EVS_MONO )
    {
        set_f( hTdCngDec->shb_lpcCNG, 0.0f, LPC_SHB_ORDER + 1 );
        hTdCngDec->shb_lpcCNG[0] = 1.0f;
        hTdCngDec->shb_cng_gain = -82.0; /* a  dB value approximately corresponding to  shb  index 0(used as index -15)   */
    }
    /* 
        else {
            EVS_MONO case 
         } 
         */
#endif

    hTdCngDec->wb_cng_ener = -6.02f;
    hTdCngDec->last_wb_cng_ener = -6.02f;
    hTdCngDec->last_shb_cng_ener = -6.02f;
@@ -825,7 +845,18 @@ void td_cng_dec_init(
    hTdCngDec->shb_dtx_count = 0;
    hTdCngDec->trans_cnt = 0;
    hTdCngDec->burst_cnt = 0;
#ifdef FIX617_UBSAN_DIVBYZERO_STEREOCNG
    if ( st->element_mode != EVS_MONO )
    {
        hTdCngDec->last_shb_ener = -82.0f; /* in dB domain */
    }
    else
    {
        hTdCngDec->last_shb_ener = 0.001f;
    }
#else
    hTdCngDec->last_shb_ener = 0.001f;
#endif

    set_f( hTdCngDec->interpol_3_2_cng_dec, 0.0f, INTERP_3_2_MEM_LEN );

+10 −0
Original line number Diff line number Diff line
@@ -375,9 +375,16 @@ static void stereo_dft_generate_comfort_noise(
            ptr0 = shb_shape;
            ptr1 = ptr0 + 2;
            ptr2 = ptr1 + 1;

            for ( i = 0; i < L_FRAME16k / 2 - 1; i++ )
            {
#ifdef  FIX617_UBSAN_DIVBYZERO_STEREOCNG   
                    ftmp =  ( *ptr1 * *ptr1 + *ptr2 * *ptr2 );
                    assert( ftmp != 0.0f );
                    ftmp = 1.0f / ftmp;
#else
                ftmp = 1.0f / ( *ptr1 * *ptr1 + *ptr2 * *ptr2 );
#endif 
                enr += ftmp;
                *ptr0++ = sqrtf( ftmp );
                ptr1 += 2;
@@ -455,6 +462,9 @@ static void stereo_dft_generate_comfort_noise(
            {

                /* high band generation, flipped spectrum */
#ifdef FIX617_UBSAN_DIVBYZERO_STEREOCNG            
                assert( enr != 0.0f );             
#endif 
                scale = sqrtf( powf( 10, 0.1f * st->hTdCngDec->shb_cng_gain ) / enr );
                ptr_shb = shb_shape + L_FRAME16k / 2 - 1;
                /* Averaging for Nyquist frequency */