Loading lib_com/lsf_tools.c +6 −2 Original line number Diff line number Diff line Loading @@ -2072,9 +2072,13 @@ void dec_FDCNG_MSVQ_stage1( for ( col = 0; col < cdk1_ivas_cols_per_segment[segm_ind]; col++ ) { #ifdef FIX_612_MSVQ_UBSAN_LEFTSHIFT dct_vec[col] = (float) shl( (Word16) cbpW8[col], dct_col_shift_tab[col] ); #else dct_vec[col] = (float) ( ( (Word16) cbpW8[col] ) << dct_col_shift_tab[col] ); /* LOGIC( 1 ); SHIFT( 1 ); ADD( 1 ); in BASOP: s_and(for W8->W16), shl(), sub() #endif /* LOGIC( 1 ) , SHIFT( 1 ); in BASOP: s_and(for W8->W16), shl() */ } dctT2_N_apply_matrix( (const float *) dct_vec, idct_vec, cdk1_ivas_cols_per_segment[segm_ind], n, invTrfMatrix, FDCNG_VQ_DCT_MAXTRUNC, idcttype ); Loading lib_com/options.h +4 −0 Original line number Diff line number Diff line Loading @@ -192,6 +192,10 @@ #define FIX_582_INDEX_OUT_OF_BOUNDS_SNS_AVQ_DEC /* FhG: fix an undefined behaviour error in SNS AVQ decoding */ #define FIX_614_ADD_TO_NULL_PTR_DIRAC_SETUP /* FhG: Issue 614: prevent adding to a null pointer in dirac setup code */ #define UPDATE_REVERB_UTILS /* Use CLDFB HRTFs of the appropriate SBA order in get_IR_from_filter_taps() */ #define FIX_612_MSVQ_UBSAN_LEFTSHIFT /* Eri: Issue 612 : UBSAN: left shift of negative values in 1st stage of MSVQ */ #define FIX_621_MSVQ_UBSAN_NULL_PTR_OFFSET /* Eri: Issue 621 : UBSAN: applying non-zero offset 7200 to null pointer in lsf_msvq_ma_enc.c */ #define FIX_600_CLEANUP_OF_MANUAL_INSTRUMENTATION /* Eri: Issue 600 : removed manual WMCtool instrumentation outside of WMC_TOOL_SKIP defines */ #define NONBE_FIX_539_MASA_384K_CHIRP /* Nokia: issue 539, puts the normalization of the energy ratios at the correct place, affect MASA 384k only */ /* Fixes for bugs found during split rendering contribution development */ #define REND_STATIC_MEM_OPT /* Dlb: Static memory optimisation for external renderer */ Loading lib_com/pvq_com.c +2 −0 Original line number Diff line number Diff line Loading @@ -200,7 +200,9 @@ static void dsDiracPerQuanta( if ( t_quanta_o > sv[nsv >> 1] ) { dsIndex = nsv - dsIndex; /*single op*/ #ifndef FIX_600_CLEANUP_OF_MANUAL_INSTRUMENTATION ADD( 1 ); #endif } for ( i = frQuanta[0][td] - 1; i >= 0; i-- ) { Loading lib_dec/ivas_qmetadata_dec.c +57 −1 Original line number Diff line number Diff line Loading @@ -908,6 +908,60 @@ int16_t ivas_qmetadata_dec_decode_hr_384_512( } if ( hQMetaData->no_directions == 2 ) { #ifdef NONBE_FIX_539_MASA_384K_CHIRP float ratioSum; if ( bits_sph_idx == 16 ) { for ( b = hQMetaData->q_direction[1].cfg.start_band; b < hQMetaData->q_direction[1].cfg.nbands; b++ ) { for ( m = 0; m < hQMetaData->q_direction[1].cfg.nblocks; m++ ) { hQMetaData->q_direction[1].band_data[b].energy_ratio[m] = 1.0f - diffuseness_reconstructions_hr[hQMetaData->q_direction[1].band_data[b].energy_ratio_index[m]]; /* Scale energy ratios that sum to over one */ ratioSum = hQMetaData->q_direction[0].band_data[b].energy_ratio[m] + hQMetaData->q_direction[1].band_data[b].energy_ratio[m]; if ( ratioSum > 1.0f ) { hQMetaData->q_direction[0].band_data[b].energy_ratio[m] /= ratioSum; hQMetaData->q_direction[1].band_data[b].energy_ratio[m] /= ratioSum; } } } } else { int16_t pos_2dir_band[MASA_MAXIMUM_CODING_SUBBANDS]; d = 0; for ( b = hQMetaData->q_direction[0].cfg.start_band; b < hQMetaData->q_direction[0].cfg.nbands; b++ ) { if ( hQMetaData->twoDirBands[b] == 1 ) { pos_2dir_band[d] = b; d++; } else { pos_2dir_band[d] = 0; } } for ( b = hQMetaData->q_direction[1].cfg.start_band; b < hQMetaData->q_direction[1].cfg.nbands; b++ ) { for ( m = 0; m < hQMetaData->q_direction[1].cfg.nblocks; m++ ) { hQMetaData->q_direction[1].band_data[b].energy_ratio[m] = 1.0f - diffuseness_reconstructions_hr[hQMetaData->q_direction[1].band_data[b].energy_ratio_index[m]]; ratioSum = hQMetaData->q_direction[0].band_data[pos_2dir_band[b]].energy_ratio[m] + hQMetaData->q_direction[1].band_data[b].energy_ratio[m]; if ( ratioSum > 1.0f ) { hQMetaData->q_direction[0].band_data[pos_2dir_band[b]].energy_ratio[m] /= ratioSum; hQMetaData->q_direction[1].band_data[b].energy_ratio[m] /= ratioSum; } } } } #else #ifdef FIX_566_2DIR_MASA_384K float ratioSum; for ( b = hQMetaData->q_direction[1].cfg.start_band; b < hQMetaData->q_direction[1].cfg.nbands; b++ ) Loading Loading @@ -938,6 +992,7 @@ int16_t ivas_qmetadata_dec_decode_hr_384_512( } } } #endif #endif } Loading Loading @@ -1085,7 +1140,7 @@ int16_t ivas_qmetadata_dec_decode_hr_384_512( } } } #ifndef NONBE_FIX_539_MASA_384K_CHIRP /* Scale energy ratios that sum to over one */ for ( b = 0; b < hQMetaData->q_direction[0].cfg.nbands; b++ ) { Loading @@ -1101,6 +1156,7 @@ int16_t ivas_qmetadata_dec_decode_hr_384_512( } } } #endif } #ifdef DEBUG_MODE_QMETADATA Loading lib_enc/ivas_qmetadata_enc.c +65 −0 Original line number Diff line number Diff line Loading @@ -1558,6 +1558,70 @@ static void ivas_qmetadata_quantize_diffuseness_nrg_ratios_hr_512( if ( hQMetaData->no_directions == 2 ) { #ifdef NONBE_FIX_539_MASA_384K_CHIRP float ratioSum; if ( bits_dir_hr == 16 ) { for ( j = hQMetaData->q_direction[1].cfg.start_band; j < hQMetaData->q_direction[1].cfg.nbands; j++ ) { for ( k = 0; k < hQMetaData->q_direction[1].cfg.nblocks; k++ ) { index = masa_sq( 1.0f - hQMetaData->q_direction[1].band_data[j].energy_ratio[k], diffuseness_thresholds_hr, HR_MASA_ER_LEVELS ); push_next_indice( hMetaData, index, MASA_BITS_ER_HR ); hQMetaData->q_direction[1].band_data[j].energy_ratio_index[k] = index; hQMetaData->q_direction[1].band_data[j].energy_ratio[k] = 1.0f - diffuseness_reconstructions_hr[index]; ratioSum = hQMetaData->q_direction[0].band_data[j].energy_ratio[k] + hQMetaData->q_direction[1].band_data[j].energy_ratio[k]; if ( ratioSum > 1.0f ) { hQMetaData->q_direction[0].band_data[j].energy_ratio[k] /= ratioSum; hQMetaData->q_direction[1].band_data[j].energy_ratio[k] /= ratioSum; } needed_bits[1] += MASA_BITS_ER_HR; hQMetaData->q_direction[1].band_data[j].bits_sph_idx[k] = bits_dir_hr; } } } else { int16_t pos_2dir_band[MASA_MAXIMUM_CODING_SUBBANDS]; k = 0; for ( j = hQMetaData->q_direction[0].cfg.start_band; j < hQMetaData->q_direction[0].cfg.nbands; j++ ) { if ( hQMetaData->twoDirBands[j] == 1 ) { pos_2dir_band[k] = j; k++; } else { pos_2dir_band[k] = 0; } } for ( j = hQMetaData->q_direction[1].cfg.start_band; j < hQMetaData->q_direction[1].cfg.nbands; j++ ) { for ( k = 0; k < hQMetaData->q_direction[1].cfg.nblocks; k++ ) { index = masa_sq( 1.0f - hQMetaData->q_direction[1].band_data[j].energy_ratio[k], diffuseness_thresholds_hr, HR_MASA_ER_LEVELS ); push_next_indice( hMetaData, index, MASA_BITS_ER_HR ); hQMetaData->q_direction[1].band_data[j].energy_ratio_index[k] = index; hQMetaData->q_direction[1].band_data[j].energy_ratio[k] = 1.0f - diffuseness_reconstructions_hr[index]; ratioSum = hQMetaData->q_direction[0].band_data[pos_2dir_band[j]].energy_ratio[k] + hQMetaData->q_direction[1].band_data[j].energy_ratio[k]; if ( ratioSum > 1.0f ) { hQMetaData->q_direction[0].band_data[pos_2dir_band[j]].energy_ratio[k] /= ratioSum; hQMetaData->q_direction[1].band_data[j].energy_ratio[k] /= ratioSum; } needed_bits[1] += MASA_BITS_ER_HR; hQMetaData->q_direction[1].band_data[j].bits_sph_idx[k] = bits_dir_hr; } } } #else #ifdef FIX_566_2DIR_MASA_384K float ratioSum; #endif Loading Loading @@ -1586,6 +1650,7 @@ static void ivas_qmetadata_quantize_diffuseness_nrg_ratios_hr_512( hQMetaData->q_direction[1].band_data[j].bits_sph_idx[k] = bits_dir_hr; } } #endif } return; Loading Loading
lib_com/lsf_tools.c +6 −2 Original line number Diff line number Diff line Loading @@ -2072,9 +2072,13 @@ void dec_FDCNG_MSVQ_stage1( for ( col = 0; col < cdk1_ivas_cols_per_segment[segm_ind]; col++ ) { #ifdef FIX_612_MSVQ_UBSAN_LEFTSHIFT dct_vec[col] = (float) shl( (Word16) cbpW8[col], dct_col_shift_tab[col] ); #else dct_vec[col] = (float) ( ( (Word16) cbpW8[col] ) << dct_col_shift_tab[col] ); /* LOGIC( 1 ); SHIFT( 1 ); ADD( 1 ); in BASOP: s_and(for W8->W16), shl(), sub() #endif /* LOGIC( 1 ) , SHIFT( 1 ); in BASOP: s_and(for W8->W16), shl() */ } dctT2_N_apply_matrix( (const float *) dct_vec, idct_vec, cdk1_ivas_cols_per_segment[segm_ind], n, invTrfMatrix, FDCNG_VQ_DCT_MAXTRUNC, idcttype ); Loading
lib_com/options.h +4 −0 Original line number Diff line number Diff line Loading @@ -192,6 +192,10 @@ #define FIX_582_INDEX_OUT_OF_BOUNDS_SNS_AVQ_DEC /* FhG: fix an undefined behaviour error in SNS AVQ decoding */ #define FIX_614_ADD_TO_NULL_PTR_DIRAC_SETUP /* FhG: Issue 614: prevent adding to a null pointer in dirac setup code */ #define UPDATE_REVERB_UTILS /* Use CLDFB HRTFs of the appropriate SBA order in get_IR_from_filter_taps() */ #define FIX_612_MSVQ_UBSAN_LEFTSHIFT /* Eri: Issue 612 : UBSAN: left shift of negative values in 1st stage of MSVQ */ #define FIX_621_MSVQ_UBSAN_NULL_PTR_OFFSET /* Eri: Issue 621 : UBSAN: applying non-zero offset 7200 to null pointer in lsf_msvq_ma_enc.c */ #define FIX_600_CLEANUP_OF_MANUAL_INSTRUMENTATION /* Eri: Issue 600 : removed manual WMCtool instrumentation outside of WMC_TOOL_SKIP defines */ #define NONBE_FIX_539_MASA_384K_CHIRP /* Nokia: issue 539, puts the normalization of the energy ratios at the correct place, affect MASA 384k only */ /* Fixes for bugs found during split rendering contribution development */ #define REND_STATIC_MEM_OPT /* Dlb: Static memory optimisation for external renderer */ Loading
lib_com/pvq_com.c +2 −0 Original line number Diff line number Diff line Loading @@ -200,7 +200,9 @@ static void dsDiracPerQuanta( if ( t_quanta_o > sv[nsv >> 1] ) { dsIndex = nsv - dsIndex; /*single op*/ #ifndef FIX_600_CLEANUP_OF_MANUAL_INSTRUMENTATION ADD( 1 ); #endif } for ( i = frQuanta[0][td] - 1; i >= 0; i-- ) { Loading
lib_dec/ivas_qmetadata_dec.c +57 −1 Original line number Diff line number Diff line Loading @@ -908,6 +908,60 @@ int16_t ivas_qmetadata_dec_decode_hr_384_512( } if ( hQMetaData->no_directions == 2 ) { #ifdef NONBE_FIX_539_MASA_384K_CHIRP float ratioSum; if ( bits_sph_idx == 16 ) { for ( b = hQMetaData->q_direction[1].cfg.start_band; b < hQMetaData->q_direction[1].cfg.nbands; b++ ) { for ( m = 0; m < hQMetaData->q_direction[1].cfg.nblocks; m++ ) { hQMetaData->q_direction[1].band_data[b].energy_ratio[m] = 1.0f - diffuseness_reconstructions_hr[hQMetaData->q_direction[1].band_data[b].energy_ratio_index[m]]; /* Scale energy ratios that sum to over one */ ratioSum = hQMetaData->q_direction[0].band_data[b].energy_ratio[m] + hQMetaData->q_direction[1].band_data[b].energy_ratio[m]; if ( ratioSum > 1.0f ) { hQMetaData->q_direction[0].band_data[b].energy_ratio[m] /= ratioSum; hQMetaData->q_direction[1].band_data[b].energy_ratio[m] /= ratioSum; } } } } else { int16_t pos_2dir_band[MASA_MAXIMUM_CODING_SUBBANDS]; d = 0; for ( b = hQMetaData->q_direction[0].cfg.start_band; b < hQMetaData->q_direction[0].cfg.nbands; b++ ) { if ( hQMetaData->twoDirBands[b] == 1 ) { pos_2dir_band[d] = b; d++; } else { pos_2dir_band[d] = 0; } } for ( b = hQMetaData->q_direction[1].cfg.start_band; b < hQMetaData->q_direction[1].cfg.nbands; b++ ) { for ( m = 0; m < hQMetaData->q_direction[1].cfg.nblocks; m++ ) { hQMetaData->q_direction[1].band_data[b].energy_ratio[m] = 1.0f - diffuseness_reconstructions_hr[hQMetaData->q_direction[1].band_data[b].energy_ratio_index[m]]; ratioSum = hQMetaData->q_direction[0].band_data[pos_2dir_band[b]].energy_ratio[m] + hQMetaData->q_direction[1].band_data[b].energy_ratio[m]; if ( ratioSum > 1.0f ) { hQMetaData->q_direction[0].band_data[pos_2dir_band[b]].energy_ratio[m] /= ratioSum; hQMetaData->q_direction[1].band_data[b].energy_ratio[m] /= ratioSum; } } } } #else #ifdef FIX_566_2DIR_MASA_384K float ratioSum; for ( b = hQMetaData->q_direction[1].cfg.start_band; b < hQMetaData->q_direction[1].cfg.nbands; b++ ) Loading Loading @@ -938,6 +992,7 @@ int16_t ivas_qmetadata_dec_decode_hr_384_512( } } } #endif #endif } Loading Loading @@ -1085,7 +1140,7 @@ int16_t ivas_qmetadata_dec_decode_hr_384_512( } } } #ifndef NONBE_FIX_539_MASA_384K_CHIRP /* Scale energy ratios that sum to over one */ for ( b = 0; b < hQMetaData->q_direction[0].cfg.nbands; b++ ) { Loading @@ -1101,6 +1156,7 @@ int16_t ivas_qmetadata_dec_decode_hr_384_512( } } } #endif } #ifdef DEBUG_MODE_QMETADATA Loading
lib_enc/ivas_qmetadata_enc.c +65 −0 Original line number Diff line number Diff line Loading @@ -1558,6 +1558,70 @@ static void ivas_qmetadata_quantize_diffuseness_nrg_ratios_hr_512( if ( hQMetaData->no_directions == 2 ) { #ifdef NONBE_FIX_539_MASA_384K_CHIRP float ratioSum; if ( bits_dir_hr == 16 ) { for ( j = hQMetaData->q_direction[1].cfg.start_band; j < hQMetaData->q_direction[1].cfg.nbands; j++ ) { for ( k = 0; k < hQMetaData->q_direction[1].cfg.nblocks; k++ ) { index = masa_sq( 1.0f - hQMetaData->q_direction[1].band_data[j].energy_ratio[k], diffuseness_thresholds_hr, HR_MASA_ER_LEVELS ); push_next_indice( hMetaData, index, MASA_BITS_ER_HR ); hQMetaData->q_direction[1].band_data[j].energy_ratio_index[k] = index; hQMetaData->q_direction[1].band_data[j].energy_ratio[k] = 1.0f - diffuseness_reconstructions_hr[index]; ratioSum = hQMetaData->q_direction[0].band_data[j].energy_ratio[k] + hQMetaData->q_direction[1].band_data[j].energy_ratio[k]; if ( ratioSum > 1.0f ) { hQMetaData->q_direction[0].band_data[j].energy_ratio[k] /= ratioSum; hQMetaData->q_direction[1].band_data[j].energy_ratio[k] /= ratioSum; } needed_bits[1] += MASA_BITS_ER_HR; hQMetaData->q_direction[1].band_data[j].bits_sph_idx[k] = bits_dir_hr; } } } else { int16_t pos_2dir_band[MASA_MAXIMUM_CODING_SUBBANDS]; k = 0; for ( j = hQMetaData->q_direction[0].cfg.start_band; j < hQMetaData->q_direction[0].cfg.nbands; j++ ) { if ( hQMetaData->twoDirBands[j] == 1 ) { pos_2dir_band[k] = j; k++; } else { pos_2dir_band[k] = 0; } } for ( j = hQMetaData->q_direction[1].cfg.start_band; j < hQMetaData->q_direction[1].cfg.nbands; j++ ) { for ( k = 0; k < hQMetaData->q_direction[1].cfg.nblocks; k++ ) { index = masa_sq( 1.0f - hQMetaData->q_direction[1].band_data[j].energy_ratio[k], diffuseness_thresholds_hr, HR_MASA_ER_LEVELS ); push_next_indice( hMetaData, index, MASA_BITS_ER_HR ); hQMetaData->q_direction[1].band_data[j].energy_ratio_index[k] = index; hQMetaData->q_direction[1].band_data[j].energy_ratio[k] = 1.0f - diffuseness_reconstructions_hr[index]; ratioSum = hQMetaData->q_direction[0].band_data[pos_2dir_band[j]].energy_ratio[k] + hQMetaData->q_direction[1].band_data[j].energy_ratio[k]; if ( ratioSum > 1.0f ) { hQMetaData->q_direction[0].band_data[pos_2dir_band[j]].energy_ratio[k] /= ratioSum; hQMetaData->q_direction[1].band_data[j].energy_ratio[k] /= ratioSum; } needed_bits[1] += MASA_BITS_ER_HR; hQMetaData->q_direction[1].band_data[j].bits_sph_idx[k] = bits_dir_hr; } } } #else #ifdef FIX_566_2DIR_MASA_384K float ratioSum; #endif Loading Loading @@ -1586,6 +1650,7 @@ static void ivas_qmetadata_quantize_diffuseness_nrg_ratios_hr_512( hQMetaData->q_direction[1].band_data[j].bits_sph_idx[k] = bits_dir_hr; } } #endif } return; Loading