From 141960926045319ed4f6ee7c1afc266fea6aa889 Mon Sep 17 00:00:00 2001 From: Tapani Pihlajakuja Date: Tue, 10 Oct 2023 13:59:24 +0300 Subject: [PATCH 1/2] Fix issue 850 by adding sanity check for diffuseness and normalization for energy ratios. --- lib_com/options.h | 2 ++ lib_dec/ivas_dirac_dec.c | 8 ++++++++ lib_dec/ivas_qmetadata_dec.c | 21 +++++++++++++++++++++ 3 files changed, 31 insertions(+) diff --git a/lib_com/options.h b/lib_com/options.h index 89f4a28754..dbfd2cc554 100644 --- a/lib_com/options.h +++ b/lib_com/options.h @@ -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 ######################### */ diff --git a/lib_dec/ivas_dirac_dec.c b/lib_dec/ivas_dirac_dec.c index e23a4171db..13d02bead2 100644 --- a/lib_dec/ivas_dirac_dec.c +++ b/lib_dec/ivas_dirac_dec.c @@ -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; diff --git a/lib_dec/ivas_qmetadata_dec.c b/lib_dec/ivas_qmetadata_dec.c index 3a5510d5cb..69bc723dd0 100644 --- a/lib_dec/ivas_qmetadata_dec.c +++ b/lib_dec/ivas_qmetadata_dec.c @@ -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++ ) { -- GitLab From fad6b08b0989899afb5f54a1188d45d19cce8def Mon Sep 17 00:00:00 2001 From: Dominik Weckbecker Date: Fri, 13 Oct 2023 15:58:55 +0200 Subject: [PATCH 2/2] fix compilation with NONBE_FIX_850_MASA_HBR_META_RATIO_DECODING --- lib_dec/ivas_qmetadata_dec.c | 3 ++- 1 file changed, 2 insertions(+), 1 deletion(-) diff --git a/lib_dec/ivas_qmetadata_dec.c b/lib_dec/ivas_qmetadata_dec.c index 69bc723dd0..47d3d29fb1 100644 --- a/lib_dec/ivas_qmetadata_dec.c +++ b/lib_dec/ivas_qmetadata_dec.c @@ -1123,9 +1123,10 @@ int16_t ivas_qmetadata_dec_decode_hr_384_512( } } } +#endif } -#endif + #ifdef DEBUG_MODE_QMETADATA for ( d = 0; d < hQMetaData->no_directions; d++ ) { -- GitLab