From f78f31064d08122e59a417fea63cc01bda38db72 Mon Sep 17 00:00:00 2001 From: advasila Date: Thu, 10 Aug 2023 11:39:36 +0300 Subject: [PATCH] fix for wb omasa --- lib_com/options.h | 2 +- lib_enc/ivas_masa_enc.c | 49 ++++++++++++++++++++++++++++++++++++++--- 2 files changed, 47 insertions(+), 4 deletions(-) diff --git a/lib_com/options.h b/lib_com/options.h index 4b7274c878..6a2e3d353a 100644 --- a/lib_com/options.h +++ b/lib_com/options.h @@ -229,7 +229,7 @@ #define FIX_653_BUG_IN_SKIP_MATRIX /* Dlb: fix for issue #653, bug in the ivas_spar_get_skip_mat function*/ #define FIX_663_PARAM_ISM_EXT /* FhG: Issue 663: ParamISM EXT output improvement */ #define FIX_673_OMASA_OBJ_MD_SYNC /* Nokia: Fix issue 673 by updating metadata in the third subframe to account for audio delay. */ - +#define FIX_675_WB_OMASA /* Nokia: Fix for issue 675 solving the crash in OMASA for WB input */ /* ################## End BE DEVELOPMENT switches ######################### */ diff --git a/lib_enc/ivas_masa_enc.c b/lib_enc/ivas_masa_enc.c index 461a43f80e..d41711b81f 100644 --- a/lib_enc/ivas_masa_enc.c +++ b/lib_enc/ivas_masa_enc.c @@ -3527,15 +3527,23 @@ static void ivas_encode_masaism_metadata( int16_t tmp, rotate; int16_t n_ism_tmp, i; OMASA_ENCODER_DATA_HANDLE hOmasaData = hMasa->data.hOmasaData; +#ifdef FIX_675_WB_OMASA + int16_t nbands_work; +#endif /* use the values from hQMetaData */ numCodingBands = (uint8_t) hQMetaData->q_direction->cfg.nbands; numSf = (int8_t) hQMetaData->q_direction->cfg.nblocks; - +#ifdef FIX_675_WB_OMASA + nbands_work = min( numCodingBands, omasa_nbands ); + if ( numCodingBands == 1 ) +#else if ( numCodingBands != omasa_nbands ) +#endif { +#ifndef FIX_675_WB_OMASA assert( numCodingBands == 1 ); - +#endif for ( sf = 0; sf < numSf; sf++ ) { if ( sum_f( hOmasaData->energy_ism[sf], omasa_nbands ) == 0.0f ) @@ -3575,11 +3583,20 @@ static void ivas_encode_masaism_metadata( } } } +#ifdef FIX_675_WB_OMASA + else if ( numSf == 1 ) +#else else if ( numSf != omasa_nblocks ) +#endif { +#ifndef FIX_675_WB_OMASA assert( numSf == 1 ); - +#endif +#ifdef FIX_675_WB_OMASA + for ( band = 0; band < nbands_work; band++ ) +#else for ( band = 0; band < numCodingBands; band++ ) +#endif { energy_ism = 0.0f; /* ISM energy for current subband */ for ( obj = 0; obj < nchan_ism; obj++ ) @@ -3619,12 +3636,27 @@ static void ivas_encode_masaism_metadata( hQMetaData->masa_to_total_energy_ratio[0][band] = eneBand / ( eneBand + energy_ism + EPSILON ); } } +#ifdef FIX_675_WB_OMASA + for ( band = nbands_work; band < numCodingBands; band++ ) + { + hQMetaData->masa_to_total_energy_ratio[0][band] = 1.0f; + + for ( obj = 0; obj < nchan_ism; obj++ ) + { + hOmasaData->energy_ratio_ism[0][band][obj] = hOmasaData->energy_ratio_ism[0][nbands_work - 1][obj]; + } + } +#endif } else { for ( sf = 0; sf < numSf; sf++ ) { +#ifdef FIX_675_WB_OMASA + for ( band = 0; band < nbands_work; band++ ) +#else for ( band = 0; band < numCodingBands; band++ ) +#endif { if ( hOmasaData->energy_ism[sf][band] == 0.0f ) { @@ -3643,6 +3675,17 @@ static void ivas_encode_masaism_metadata( hQMetaData->masa_to_total_energy_ratio[sf][band] = eneBand / ( eneBand + hOmasaData->energy_ism[sf][band] + EPSILON ); } } +#ifdef FIX_675_WB_OMASA + for ( band = nbands_work; band < numCodingBands; band++ ) + { + hQMetaData->masa_to_total_energy_ratio[sf][band] = 1.0f; + + for ( obj = 0; obj < nchan_ism; obj++ ) + { + hOmasaData->energy_ratio_ism[sf][band][obj] = hOmasaData->energy_ratio_ism[sf][nbands_work - 1][obj]; + } + } +#endif } } -- GitLab