diff --git a/lib_com/options.h b/lib_com/options.h index c614049128081cc3a8f80b76db03cac6d9f8367d..7b00f09aa0a1f88aae477ed91108755bb303bca7 100755 --- a/lib_com/options.h +++ b/lib_com/options.h @@ -232,7 +232,7 @@ #define PARAMUPMIX_BINAURAL_UPDATES /* Dlb : issue 652, MC ParamUpmix Binaural Updates */ #define FIX_657_REMOVE_EDITING /* Nokia: Remove remaining unused coded related to object editing */ #define FIX_634_MASA_JBM_UNUSED_PARAMETER /* Nokia: Fix issue 634 by removing the unnecessary argument. */ - +#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 461a43f80ec29aaf63f8b99196d7114dba80f118..d41711b81f6c04e47286a6322ba155a5a72dc8dd 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 } }