From 1612fcba218dadadf123fc5ef7b9644033b2f92b Mon Sep 17 00:00:00 2001 From: Tapani Pihlajakuja Date: Fri, 11 Aug 2023 12:41:51 +0300 Subject: [PATCH] Fixes issue 682 for OMASA EXT JBM. --- lib_dec/ivas_jbm_dec.c | 41 +++++++++++++++++++++++++++++++++++------ 1 file changed, 35 insertions(+), 6 deletions(-) diff --git a/lib_dec/ivas_jbm_dec.c b/lib_dec/ivas_jbm_dec.c index 666488c436..5cbd1852e7 100644 --- a/lib_dec/ivas_jbm_dec.c +++ b/lib_dec/ivas_jbm_dec.c @@ -417,6 +417,27 @@ ivas_error ivas_jbm_dec_tc( { ivas_mono_downmix_render_passive( st_ivas, output, output_frame ); } + else if ( st_ivas->hDecoderConfig->output_config == AUDIO_CONFIG_EXTERNAL ) + { + /* sanity check in case of bitrate switching */ + if ( st_ivas->ism_mode != ISM_MASA_MODE_DISC ) + { + return IVAS_ERROR( IVAS_ERR_INVALID_OUTPUT_FORMAT, "Incorrect output configuration specified for combined MASA and ISM format" ); + } + + /* in case of external rendering, rearrange the channels order */ + mvr2r( output[0], output[MAX_TRANSPORT_CHANNELS - 2], output_frame ); + mvr2r( output[1], output[MAX_TRANSPORT_CHANNELS - 1], output_frame ); + + for ( n = 0; n < nchan_transport_ism; n++ ) + { + mvr2r( output[st_ivas->nchan_transport + n], output[n], output_frame ); + } + mvr2r( output[MAX_TRANSPORT_CHANNELS - 2], output[n], output_frame ); + mvr2r( output[MAX_TRANSPORT_CHANNELS - 1], output[++n], output_frame ); + + ivas_jbm_dec_copy_masa_meta_to_buffer( st_ivas ); + } #ifndef FIX_657_REMOVE_EDITING /* Set edited object positions, if editing enabled */ @@ -701,7 +722,12 @@ ivas_error ivas_jbm_dec_feed_tc_to_renderer( { ivas_jbm_dec_td_renderers_adapt_subframes( st_ivas ); #ifdef FIX_470_MASA_JBM_EXT +#ifdef MASA_AND_OBJECTS + if ( ( st_ivas->ivas_format == MASA_FORMAT || st_ivas->ivas_format == MASA_ISM_FORMAT ) && st_ivas->hDecoderConfig->output_config == AUDIO_CONFIG_EXTERNAL ) +#else + if ( st_ivas->ivas_format == MASA_FORMAT && st_ivas->hDecoderConfig->output_config == AUDIO_CONFIG_EXTERNAL ) +#endif { ivas_jbm_masa_sf_to_slot_map( st_ivas, n_render_timeslots ); } @@ -1688,13 +1714,16 @@ int16_t ivas_jbm_dec_get_num_tc_channels( #ifdef MASA_AND_OBJECTS else if ( st_ivas->ivas_format == MASA_ISM_FORMAT ) { - if ( st_ivas->ism_mode == ISM_MASA_MODE_MASA_ONE_OBJ || st_ivas->ism_mode == ISM_MASA_MODE_PARAM_ONE_OBJ ) - { - num_tc++; - } - else if ( st_ivas->ism_mode == ISM_MASA_MODE_DISC ) + if ( st_ivas->hDecoderConfig->output_config != AUDIO_CONFIG_EXTERNAL ) { - num_tc += st_ivas->nchan_ism; + if ( st_ivas->ism_mode == ISM_MASA_MODE_MASA_ONE_OBJ || st_ivas->ism_mode == ISM_MASA_MODE_PARAM_ONE_OBJ ) + { + num_tc++; + } + else if ( st_ivas->ism_mode == ISM_MASA_MODE_DISC ) + { + num_tc += st_ivas->nchan_ism; + } } } #endif -- GitLab