From b35a9d9933d47868923262acf23b38678aff3359 Mon Sep 17 00:00:00 2001 From: rtyag Date: Thu, 3 Aug 2023 14:22:17 +1000 Subject: [PATCH 1/2] fix for issue 658 --- lib_com/options.h | 1 + lib_rend/ivas_dirac_dec_binaural_functions.c | 6 +++++- 2 files changed, 6 insertions(+), 1 deletion(-) diff --git a/lib_com/options.h b/lib_com/options.h index 4d5c6a066a..e08160f768 100755 --- a/lib_com/options.h +++ b/lib_com/options.h @@ -194,6 +194,7 @@ #ifdef SPLIT_REND_WITH_HEAD_ROT #define SPLIT_REND_PRED_QUANT_63_PNTS #define SPLIT_REND_WITH_HEAD_ROT_PARAMBIN /* Nokia: Issue 623: Split rendering support for parambin renderer */ +#define FIX_658_SPLIT_REND_MASA /*Dlb : Fix for issue 658, uninitialized memory access in MASA in Split rendering 0DOF mode*/ #endif #define FIX_594_STL_INCLUDE /* FhG: issue 594: Missing include of stl.h */ diff --git a/lib_rend/ivas_dirac_dec_binaural_functions.c b/lib_rend/ivas_dirac_dec_binaural_functions.c index 3b06e95989..c729f964ad 100644 --- a/lib_rend/ivas_dirac_dec_binaural_functions.c +++ b/lib_rend/ivas_dirac_dec_binaural_functions.c @@ -960,8 +960,12 @@ static void ivas_dirac_dec_binaural_internal( #ifdef SPLIT_REND_WITH_HEAD_ROT_PARAMBIN pMultiBinPoseData = &st_ivas->splitBinRend.splitrend.multiBinPoseData; - +#ifdef FIX_658_SPLIT_REND_MASA + if ( ( st_ivas->hDecoderConfig->output_config == AUDIO_CONFIG_BINAURAL_SPLIT_CODED || + st_ivas->hDecoderConfig->output_config == AUDIO_CONFIG_BINAURAL_SPLIT_PCM ) ) +#else if ( pMultiBinPoseData != NULL && pMultiBinPoseData->num_poses > 1 ) +#endif { ivas_dirac_dec_binaural_process_output( hDiracDecBin, hSpatParamRendCom, st_ivas->cldfbSynDec, output_f, Cldfb_RealBuffer_in, Cldfb_ImagBuffer_in, max_band_decorr, numInChannels, config_data.processReverb, subframe, tmp_Cldfb_out_re, tmp_Cldfb_out_im, -- GitLab From fdc8bb201d7836dbf34a735d8caf1bac73589247 Mon Sep 17 00:00:00 2001 From: rtyag Date: Thu, 3 Aug 2023 15:25:17 +1000 Subject: [PATCH 2/2] fix 0DOF MASA in ext renderer mode as well --- lib_rend/lib_rend.c | 41 +++++++++++++++++++++++++++++------------ 1 file changed, 29 insertions(+), 12 deletions(-) diff --git a/lib_rend/lib_rend.c b/lib_rend/lib_rend.c index e30368606a..8a023a1087 100644 --- a/lib_rend/lib_rend.c +++ b/lib_rend/lib_rend.c @@ -3243,7 +3243,12 @@ static DecoderDummy *initDecoderDummy( decDummy->splitBinRend.hMultiBinCldfbData = NULL; ivas_init_split_rend_handles( &decDummy->splitBinRend.splitrend ); decDummy->splitBinRend.splitrend = *pSplitRendWrapper; +#ifdef FIX_658_SPLIT_REND_MASA + if ( outConfig == IVAS_REND_AUDIO_CONFIG_BINAURAL_SPLIT_CODED || + outConfig == IVAS_REND_AUDIO_CONFIG_BINAURAL_SPLIT_PCM ) +#else if ( decDummy->splitBinRend.splitrend.multiBinPoseData.num_poses > 1 ) +#endif { if ( ( decDummy->splitBinRend.hMultiBinCldfbData = (IVAS_DEC_SPLIT_REND_MULTI_BIN_CLDFB_DATA_HANDLE) malloc( sizeof( IVAS_DEC_SPLIT_REND_MULTI_BIN_CLDFB_DATA ) ) ) == NULL ) { @@ -4160,6 +4165,11 @@ ivas_error IVAS_REND_AddInput( { cldfb_in = 1; } +#ifdef FIX_658_SPLIT_REND_MASA + ivas_split_rend_choose_default_codec( &hIvasRend->hRendererConfig->split_rend_config.codec, + ( cldfb_in == 0 ), + hIvasRend->outputConfig == IVAS_REND_AUDIO_CONFIG_BINAURAL_SPLIT_PCM ); +#endif if ( ( error = initSplitRend( &hIvasRend->splitRendWrapper, &hIvasRend->splitRendEncBuffer, &hIvasRend->hRendererConfig->split_rend_config, @@ -5014,19 +5024,26 @@ int16_t IVAS_REND_FeedRenderConfig( } /* Must re-initialize split rendering config in case renderer config is updated after adding renderer inputs */ - closeSplitRend( &hIvasRend->splitRendWrapper, &hIvasRend->splitRendEncBuffer ); - ivas_split_rend_choose_default_codec( &hIvasRend->hRendererConfig->split_rend_config.codec, - 1, - hIvasRend->outputConfig == IVAS_REND_AUDIO_CONFIG_BINAURAL_SPLIT_PCM ); - if ( ( error = initSplitRend( &hIvasRend->splitRendWrapper, - &hIvasRend->splitRendEncBuffer, - &hIvasRend->hRendererConfig->split_rend_config, - hIvasRend->headRotData, - hIvasRend->sampleRateOut, - hIvasRend->outputConfig, - 0 ) ) != IVAS_ERR_OK ) +#ifdef FIX_658_SPLIT_REND_MASA + /*if its not initialized yet then no need to re-initialize, initialization will happen while adding inputs*/ + if ( hIvasRend->splitRendEncBuffer.data != NULL && hIvasRend->hRendererConfig != NULL ) +#endif { - return error; + closeSplitRend( &hIvasRend->splitRendWrapper, &hIvasRend->splitRendEncBuffer ); + /* TODO : Do not hard code TDin to 1 here*/ + ivas_split_rend_choose_default_codec( &hIvasRend->hRendererConfig->split_rend_config.codec, + 1, + hIvasRend->outputConfig == IVAS_REND_AUDIO_CONFIG_BINAURAL_SPLIT_PCM ); + if ( ( error = initSplitRend( &hIvasRend->splitRendWrapper, + &hIvasRend->splitRendEncBuffer, + &hIvasRend->hRendererConfig->split_rend_config, + hIvasRend->headRotData, + hIvasRend->sampleRateOut, + hIvasRend->outputConfig, + 0 ) ) != IVAS_ERR_OK ) + { + return error; + } } #endif -- GitLab