Loading lib_com/options.h +1 −0 Original line number Diff line number Diff line Loading @@ -132,6 +132,7 @@ #define FIX_FLOAT_1578_OMASA_REND_SPIKES /* Nokia: Float issue 1578: Fix spikes and collapsed perception in OMASA/MASA rendering to FOA/HOA */ #define FIX_1521_SBA_LOUDNESS_STEREO /* FhG: issue 1521: Fix loudness for SBA to stereo rendering */ #define FIX_1559 /* Eri/FhG: fix for Issue 1559 in FD CNG with bitrate/bw switching */ #define NONBE_FIX_2575 /* Fhg: Fix issue 2575, precision loss in FD CNG */ /* ##################### End NON-BE switches ########################### */ Loading lib_dec/ivas_stereo_cng_dec_fx.c +43 −0 Original line number Diff line number Diff line Loading @@ -794,6 +794,27 @@ static void stereo_dft_generate_comfort_noise_fx( IF( ( chan == 0 ) && LE_32( st->core_brate, SID_2k40 ) ) { /* update smoothed periodogram used by stereo CNA in SID and NO_DATA frames from cngNoiseLevel_flt */ #ifdef NONBE_FIX_2575 /* Normalize smoothed_psd_fx and cngNoiseLevel to avoid its exponents running away. */ q_shift_1 = L_norm_arr( st->hFdCngDec->smoothed_psd_fx, L_FRAME16k ); q_shift_2 = L_norm_arr( hFdCngCom->cngNoiseLevel, FFTCLDFBLEN ); scale_sig32( st->hFdCngDec->smoothed_psd_fx, L_FRAME16k, q_shift_1 ); /* Q31 - st->hFdCngDec->smoothed_psd_exp */ st->hFdCngDec->smoothed_psd_exp = sub( st->hFdCngDec->smoothed_psd_exp, q_shift_1 ); move16(); scale_sig32( hFdCngCom->cngNoiseLevel, FFTCLDFBLEN, q_shift_2 ); /* Q31 - hFdCngCom->cngNoiseLevelExp */ hFdCngCom->cngNoiseLevelExp = sub( hFdCngCom->cngNoiseLevelExp, q_shift_2 ); move16(); /* Determine appropiate exponent for the resulting smoothed_psd_fx */ min_q = sub( s_min( sub( Q31, st->hFdCngDec->smoothed_psd_exp ), sub( Q31, hFdCngCom->cngNoiseLevelExp ) ), 1 /* Guard bit */ ); q_shift_1 = sub( sub( Q31, hFdCngCom->cngNoiseLevelExp ), min_q ); q_shift_2 = sub( sub( Q31, st->hFdCngDec->smoothed_psd_exp ), min_q ); st->hFdCngDec->smoothed_psd_exp = sub( Q31, min_q ); move16(); #else q_shift_1 = L_norm_arr( st->hFdCngDec->smoothed_psd_fx, L_FRAME16k ); q_shift_2 = L_norm_arr( hFdCngCom->cngNoiseLevel, FFTCLDFBLEN ); Loading @@ -805,10 +826,19 @@ static void stereo_dft_generate_comfort_noise_fx( scale_sig32( hFdCngCom->cngNoiseLevel, FFTCLDFBLEN, sub( min_q, sub( Q31, hFdCngCom->cngNoiseLevelExp ) ) ); /* Q31 - hFdCngCom->cngNoiseLevelExp */ hFdCngCom->cngNoiseLevelExp = st->hFdCngDec->smoothed_psd_exp; move16(); #endif FOR( i = hFdCngCom->startBand; i < hFdCngCom->stopFFTbin; i++ ) { #ifdef NONBE_FIX_2575 Word32 ftmp2; ftmp2 = L_shr( st->hFdCngDec->smoothed_psd_fx[i], q_shift_2 ); // min_q #endif #ifdef NONBE_FIX_2575 ftmp = L_shr( hFdCngCom->cngNoiseLevel[i - hFdCngCom->startBand], q_shift_1 ); // min_q #else ftmp = hFdCngCom->cngNoiseLevel[i - hFdCngCom->startBand]; #endif move32(); IF( !st->hFdCngDec->first_cna_noise_updated ) { Loading @@ -820,11 +850,20 @@ static void stereo_dft_generate_comfort_noise_fx( { alpha = (Word16) ( 0x799A ); move16(); test(); #ifdef NONBE_FIX_2575 IF( ( st->hFdCngDec->smoothed_psd_fx[i] > 0 ) && EQ_16( BASOP_Util_Cmp_Mant32Exp( Mpy_32_16_1( hFdCngCom->cngNoiseLevel[i - hFdCngCom->startBand], (Word16) 0x3333 ), hFdCngCom->cngNoiseLevelExp, st->hFdCngDec->smoothed_psd_fx[i], st->hFdCngDec->smoothed_psd_exp ), 1 ) ) #else IF( ( st->hFdCngDec->smoothed_psd_fx[i] > 0 ) && GT_32( Mpy_32_16_1( ftmp, (Word16) 0x3333 ), st->hFdCngDec->smoothed_psd_fx[i] ) ) #endif { /* prevent abrupt upward update steps */ #ifdef NONBE_FIX_2575 ftmp = L_add( L_shl( ftmp2, 1 ), L_shr( ftmp2, 1 ) ); /* st->hFdCngDec->smoothed_psd_exp */ #else ftmp = L_add( L_shl( st->hFdCngDec->smoothed_psd_fx[i], 1 ), L_shr( st->hFdCngDec->smoothed_psd_fx[i], 1 ) ); /* st->hFdCngDec->smoothed_psd_exp */ #endif move16(); } ELSE IF( LT_32( ftmp, st->hFdCngDec->smoothed_psd_fx[i] ) ) Loading @@ -836,7 +875,11 @@ static void stereo_dft_generate_comfort_noise_fx( } /* smoothing */ #ifdef NONBE_FIX_2575 st->hFdCngDec->smoothed_psd_fx[i] = L_add( Mpy_32_16_1( ftmp2, alpha ), Mpy_32_16_1( ftmp, sub( MAX_16, alpha ) ) ); /* st->hFdCngDec->smoothed_psd_exp */ #else st->hFdCngDec->smoothed_psd_fx[i] = L_add( Mpy_32_16_1( st->hFdCngDec->smoothed_psd_fx[i], alpha ), Mpy_32_16_1( ftmp, sub( MAX_16, alpha ) ) ); /* st->hFdCngDec->smoothed_psd_exp */ #endif move32(); } Loading Loading
lib_com/options.h +1 −0 Original line number Diff line number Diff line Loading @@ -132,6 +132,7 @@ #define FIX_FLOAT_1578_OMASA_REND_SPIKES /* Nokia: Float issue 1578: Fix spikes and collapsed perception in OMASA/MASA rendering to FOA/HOA */ #define FIX_1521_SBA_LOUDNESS_STEREO /* FhG: issue 1521: Fix loudness for SBA to stereo rendering */ #define FIX_1559 /* Eri/FhG: fix for Issue 1559 in FD CNG with bitrate/bw switching */ #define NONBE_FIX_2575 /* Fhg: Fix issue 2575, precision loss in FD CNG */ /* ##################### End NON-BE switches ########################### */ Loading
lib_dec/ivas_stereo_cng_dec_fx.c +43 −0 Original line number Diff line number Diff line Loading @@ -794,6 +794,27 @@ static void stereo_dft_generate_comfort_noise_fx( IF( ( chan == 0 ) && LE_32( st->core_brate, SID_2k40 ) ) { /* update smoothed periodogram used by stereo CNA in SID and NO_DATA frames from cngNoiseLevel_flt */ #ifdef NONBE_FIX_2575 /* Normalize smoothed_psd_fx and cngNoiseLevel to avoid its exponents running away. */ q_shift_1 = L_norm_arr( st->hFdCngDec->smoothed_psd_fx, L_FRAME16k ); q_shift_2 = L_norm_arr( hFdCngCom->cngNoiseLevel, FFTCLDFBLEN ); scale_sig32( st->hFdCngDec->smoothed_psd_fx, L_FRAME16k, q_shift_1 ); /* Q31 - st->hFdCngDec->smoothed_psd_exp */ st->hFdCngDec->smoothed_psd_exp = sub( st->hFdCngDec->smoothed_psd_exp, q_shift_1 ); move16(); scale_sig32( hFdCngCom->cngNoiseLevel, FFTCLDFBLEN, q_shift_2 ); /* Q31 - hFdCngCom->cngNoiseLevelExp */ hFdCngCom->cngNoiseLevelExp = sub( hFdCngCom->cngNoiseLevelExp, q_shift_2 ); move16(); /* Determine appropiate exponent for the resulting smoothed_psd_fx */ min_q = sub( s_min( sub( Q31, st->hFdCngDec->smoothed_psd_exp ), sub( Q31, hFdCngCom->cngNoiseLevelExp ) ), 1 /* Guard bit */ ); q_shift_1 = sub( sub( Q31, hFdCngCom->cngNoiseLevelExp ), min_q ); q_shift_2 = sub( sub( Q31, st->hFdCngDec->smoothed_psd_exp ), min_q ); st->hFdCngDec->smoothed_psd_exp = sub( Q31, min_q ); move16(); #else q_shift_1 = L_norm_arr( st->hFdCngDec->smoothed_psd_fx, L_FRAME16k ); q_shift_2 = L_norm_arr( hFdCngCom->cngNoiseLevel, FFTCLDFBLEN ); Loading @@ -805,10 +826,19 @@ static void stereo_dft_generate_comfort_noise_fx( scale_sig32( hFdCngCom->cngNoiseLevel, FFTCLDFBLEN, sub( min_q, sub( Q31, hFdCngCom->cngNoiseLevelExp ) ) ); /* Q31 - hFdCngCom->cngNoiseLevelExp */ hFdCngCom->cngNoiseLevelExp = st->hFdCngDec->smoothed_psd_exp; move16(); #endif FOR( i = hFdCngCom->startBand; i < hFdCngCom->stopFFTbin; i++ ) { #ifdef NONBE_FIX_2575 Word32 ftmp2; ftmp2 = L_shr( st->hFdCngDec->smoothed_psd_fx[i], q_shift_2 ); // min_q #endif #ifdef NONBE_FIX_2575 ftmp = L_shr( hFdCngCom->cngNoiseLevel[i - hFdCngCom->startBand], q_shift_1 ); // min_q #else ftmp = hFdCngCom->cngNoiseLevel[i - hFdCngCom->startBand]; #endif move32(); IF( !st->hFdCngDec->first_cna_noise_updated ) { Loading @@ -820,11 +850,20 @@ static void stereo_dft_generate_comfort_noise_fx( { alpha = (Word16) ( 0x799A ); move16(); test(); #ifdef NONBE_FIX_2575 IF( ( st->hFdCngDec->smoothed_psd_fx[i] > 0 ) && EQ_16( BASOP_Util_Cmp_Mant32Exp( Mpy_32_16_1( hFdCngCom->cngNoiseLevel[i - hFdCngCom->startBand], (Word16) 0x3333 ), hFdCngCom->cngNoiseLevelExp, st->hFdCngDec->smoothed_psd_fx[i], st->hFdCngDec->smoothed_psd_exp ), 1 ) ) #else IF( ( st->hFdCngDec->smoothed_psd_fx[i] > 0 ) && GT_32( Mpy_32_16_1( ftmp, (Word16) 0x3333 ), st->hFdCngDec->smoothed_psd_fx[i] ) ) #endif { /* prevent abrupt upward update steps */ #ifdef NONBE_FIX_2575 ftmp = L_add( L_shl( ftmp2, 1 ), L_shr( ftmp2, 1 ) ); /* st->hFdCngDec->smoothed_psd_exp */ #else ftmp = L_add( L_shl( st->hFdCngDec->smoothed_psd_fx[i], 1 ), L_shr( st->hFdCngDec->smoothed_psd_fx[i], 1 ) ); /* st->hFdCngDec->smoothed_psd_exp */ #endif move16(); } ELSE IF( LT_32( ftmp, st->hFdCngDec->smoothed_psd_fx[i] ) ) Loading @@ -836,7 +875,11 @@ static void stereo_dft_generate_comfort_noise_fx( } /* smoothing */ #ifdef NONBE_FIX_2575 st->hFdCngDec->smoothed_psd_fx[i] = L_add( Mpy_32_16_1( ftmp2, alpha ), Mpy_32_16_1( ftmp, sub( MAX_16, alpha ) ) ); /* st->hFdCngDec->smoothed_psd_exp */ #else st->hFdCngDec->smoothed_psd_fx[i] = L_add( Mpy_32_16_1( st->hFdCngDec->smoothed_psd_fx[i], alpha ), Mpy_32_16_1( ftmp, sub( MAX_16, alpha ) ) ); /* st->hFdCngDec->smoothed_psd_exp */ #endif move32(); } Loading