Loading lib_com/options.h +2 −0 Original line number Diff line number Diff line Loading @@ -186,6 +186,8 @@ #define NONBE_FIX_826_JBM_MASA_CNA_CNG /* FhG: issue #826: Resolve "JBM MASA: CNA and CNG not in sync with non-JBM decoding" */ #define NONBE_FIX_835_JBM_PARAMUPMIX_HEADROT /* FhG: issue #835: Resolve "JBM: ParamUpmix head rotation broken" */ #define NONBE_FIX_850_MASA_HBR_META_RATIO_DECODING /* Nokia: issue #850: Fixes rare non-valid diffuseness and energy ratio values in 2dir MASA. */ /* ##################### End NON-BE switches ########################### */ /* ################## End DEVELOPMENT switches ######################### */ Loading lib_dec/ivas_dirac_dec.c +8 −0 Original line number Diff line number Diff line Loading @@ -1256,6 +1256,14 @@ void ivas_qmetadata_to_dirac( hSpatParamRendCom->energy_ratio2[meta_write_index][b] = q_direction->band_data[band].energy_ratio[block]; hSpatParamRendCom->diffuseness_vector[meta_write_index][b] -= q_direction->band_data[band].energy_ratio[block]; #ifdef NONBE_FIX_850_MASA_HBR_META_RATIO_DECODING /* Sanitize diffuseness for rare cases where floating point inaccuracy could result in negative diffuseness. */ if ( hSpatParamRendCom->diffuseness_vector[meta_write_index][b] < 0.0f ) { hSpatParamRendCom->diffuseness_vector[meta_write_index][b] = 0.0f; } #endif if ( q_direction->coherence_band_data != NULL ) { hSpatParamRendCom->spreadCoherence2[meta_write_index][b] = q_direction->coherence_band_data[band].spread_coherence[block] / 255.0f; Loading lib_dec/ivas_qmetadata_dec.c +21 −0 Original line number Diff line number Diff line Loading @@ -1103,8 +1103,29 @@ int16_t ivas_qmetadata_dec_decode_hr_384_512( } } } #ifdef NONBE_FIX_850_MASA_HBR_META_RATIO_DECODING /* Scale energy ratios that sum to over one */ for ( b = 0; b < hQMetaData->q_direction[0].cfg.nbands; b++ ) { for ( m = 0; m < hQMetaData->q_direction[0].cfg.nblocks; m++ ) { float ratioSum; 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 ) { float ratioSumInv; ratioSumInv = 1.0f / ratioSum; hQMetaData->q_direction[0].band_data[b].energy_ratio[m] *= ratioSumInv; hQMetaData->q_direction[1].band_data[b].energy_ratio[m] *= ratioSumInv; } } } } #endif #ifdef DEBUG_MODE_QMETADATA for ( d = 0; d < hQMetaData->no_directions; d++ ) { Loading Loading
lib_com/options.h +2 −0 Original line number Diff line number Diff line Loading @@ -186,6 +186,8 @@ #define NONBE_FIX_826_JBM_MASA_CNA_CNG /* FhG: issue #826: Resolve "JBM MASA: CNA and CNG not in sync with non-JBM decoding" */ #define NONBE_FIX_835_JBM_PARAMUPMIX_HEADROT /* FhG: issue #835: Resolve "JBM: ParamUpmix head rotation broken" */ #define NONBE_FIX_850_MASA_HBR_META_RATIO_DECODING /* Nokia: issue #850: Fixes rare non-valid diffuseness and energy ratio values in 2dir MASA. */ /* ##################### End NON-BE switches ########################### */ /* ################## End DEVELOPMENT switches ######################### */ Loading
lib_dec/ivas_dirac_dec.c +8 −0 Original line number Diff line number Diff line Loading @@ -1256,6 +1256,14 @@ void ivas_qmetadata_to_dirac( hSpatParamRendCom->energy_ratio2[meta_write_index][b] = q_direction->band_data[band].energy_ratio[block]; hSpatParamRendCom->diffuseness_vector[meta_write_index][b] -= q_direction->band_data[band].energy_ratio[block]; #ifdef NONBE_FIX_850_MASA_HBR_META_RATIO_DECODING /* Sanitize diffuseness for rare cases where floating point inaccuracy could result in negative diffuseness. */ if ( hSpatParamRendCom->diffuseness_vector[meta_write_index][b] < 0.0f ) { hSpatParamRendCom->diffuseness_vector[meta_write_index][b] = 0.0f; } #endif if ( q_direction->coherence_band_data != NULL ) { hSpatParamRendCom->spreadCoherence2[meta_write_index][b] = q_direction->coherence_band_data[band].spread_coherence[block] / 255.0f; Loading
lib_dec/ivas_qmetadata_dec.c +21 −0 Original line number Diff line number Diff line Loading @@ -1103,8 +1103,29 @@ int16_t ivas_qmetadata_dec_decode_hr_384_512( } } } #ifdef NONBE_FIX_850_MASA_HBR_META_RATIO_DECODING /* Scale energy ratios that sum to over one */ for ( b = 0; b < hQMetaData->q_direction[0].cfg.nbands; b++ ) { for ( m = 0; m < hQMetaData->q_direction[0].cfg.nblocks; m++ ) { float ratioSum; 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 ) { float ratioSumInv; ratioSumInv = 1.0f / ratioSum; hQMetaData->q_direction[0].band_data[b].energy_ratio[m] *= ratioSumInv; hQMetaData->q_direction[1].band_data[b].energy_ratio[m] *= ratioSumInv; } } } } #endif #ifdef DEBUG_MODE_QMETADATA for ( d = 0; d < hQMetaData->no_directions; d++ ) { Loading