From ace05c6eaf6331ee2f4c8e83a0b6f97edbbe6cf7 Mon Sep 17 00:00:00 2001 From: vaclav Date: Wed, 20 Aug 2025 15:59:00 +0200 Subject: [PATCH] port MR --- lib_com/options.h | 1 + lib_dec/ivas_jbm_dec.c | 13 ++++++++++++- lib_dec/ivas_objectRenderer_internal.c | 6 +++++- lib_dec/ivas_omasa_dec.c | 16 ++++++++++++++-- 4 files changed, 32 insertions(+), 4 deletions(-) diff --git a/lib_com/options.h b/lib_com/options.h index 9077fa821..e48b5b8b4 100644 --- a/lib_com/options.h +++ b/lib_com/options.h @@ -207,6 +207,7 @@ #define FIX_1101_CLEANING_JBM_CALL /* VA: issue 1101: remove obsolete call of ivas_jbm_dec_tc_buffer_open() */ #define NONBE_FIX_1337_MISSING_DIRECTIVITY_DISTATT_EXTREND /* Eri: issue 1337: Missing directivity setting and distance attenuation in external renderer IVAS_rend */ #define FIX_1348_OVERFLOW /* FhG: fix BASOP overflow in hq_lr_dec(), brings floating-point code inline with FX */ +#define NONBE_1220_OMASA_JBM_BRATE_SW_FLUSH /* VA: issue 1220: fix bug in renderer flush in OMASA 1ISM JBM bitrate switching */ /* #################### End BASOP porting switches ############################ */ diff --git a/lib_dec/ivas_jbm_dec.c b/lib_dec/ivas_jbm_dec.c index 29d29c2a4..dacbbf159 100644 --- a/lib_dec/ivas_jbm_dec.c +++ b/lib_dec/ivas_jbm_dec.c @@ -1538,7 +1538,7 @@ ivas_error ivas_jbm_dec_render( /*--------------------------------------------------------------------------* - * ivas_jbm_dec_dec_flush_renderer() + * ivas_jbm_dec_flush_renderer() * * Flush samples if renderer granularity changes on a bitrate change *--------------------------------------------------------------------------*/ @@ -1696,7 +1696,11 @@ ivas_error ivas_jbm_dec_flush_renderer( { if ( ism_mode_old == ISM_MASA_MODE_DISC ) { +#ifdef NONBE_1220_OMASA_JBM_BRATE_SW_FLUSH + float *tc_local[MAX_NUM_OBJECTS]; +#else float *tc_local[MAX_TRANSPORT_CHANNELS]; +#endif for ( ch_idx = 0; ch_idx < st_ivas->nchan_ism; ch_idx++ ) { @@ -1704,6 +1708,12 @@ ivas_error ivas_jbm_dec_flush_renderer( mvr2r( st_ivas->hMasaIsmData->delayBuffer[ch_idx], tc_local[ch_idx], st_ivas->hMasaIsmData->delayBuffer_size ); } +#ifdef NONBE_1220_OMASA_JBM_BRATE_SW_FLUSH + if ( ( error = ivas_td_binaural_renderer_sf( st_ivas, p_output, hTcBuffer->n_samples_granularity ) ) != IVAS_ERR_OK ) + { + return error; + } +#else if ( st_ivas->nchan_ism > 0 ) { if ( ( error = ivas_td_binaural_renderer_sf( st_ivas, p_output, hTcBuffer->n_samples_granularity ) ) != IVAS_ERR_OK ) @@ -1720,6 +1730,7 @@ ivas_error ivas_jbm_dec_flush_renderer( st_ivas->hTcBuffer->slots_rendered += 1; st_ivas->hTcBuffer->subframes_rendered += 1; } +#endif } } else if ( st_ivas->ivas_format == SBA_ISM_FORMAT ) diff --git a/lib_dec/ivas_objectRenderer_internal.c b/lib_dec/ivas_objectRenderer_internal.c index 1aa050809..804b5fef6 100644 --- a/lib_dec/ivas_objectRenderer_internal.c +++ b/lib_dec/ivas_objectRenderer_internal.c @@ -97,11 +97,15 @@ ivas_error ivas_td_binaural_renderer_sf( int16_t nchan_ism_internal, nchan_ism, ch_offset; /* Set the number of ISMs */ +#ifdef NONBE_1220_OMASA_JBM_BRATE_SW_FLUSH + if ( st_ivas->ivas_format == MASA_ISM_FORMAT || ( st_ivas->ivas_format == MASA_FORMAT && st_ivas->nchan_ism > 0 ) ) +#else if ( st_ivas->ivas_format == MASA_ISM_FORMAT ) +#endif { nchan_ism_internal = st_ivas->nchan_ism; nchan_ism = st_ivas->nchan_ism; - ch_offset = 2; + ch_offset = CPE_CHANNELS; } else if ( st_ivas->ivas_format == SBA_ISM_FORMAT ) { diff --git a/lib_dec/ivas_omasa_dec.c b/lib_dec/ivas_omasa_dec.c index 6777981bf..6a98f9b1b 100644 --- a/lib_dec/ivas_omasa_dec.c +++ b/lib_dec/ivas_omasa_dec.c @@ -782,7 +782,7 @@ void ivas_omasa_dirac_rend_jbm( /*--------------------------------------------------------------------------* - * ivas_omasa_dirac_td_binaural_render() + * ivas_omasa_dirac_td_binaural_jbm() * * Binaural rendering in OMASA format for JBM *--------------------------------------------------------------------------*/ @@ -797,19 +797,30 @@ ivas_error ivas_omasa_dirac_td_binaural_jbm( ) { int16_t n; +#ifdef NONBE_1220_OMASA_JBM_BRATE_SW_FLUSH + float data_separated_objects[BINAURAL_CHANNELS][L_FRAME48k]; +#else float data_separated_objects[MAX_NUM_OBJECTS][L_FRAME48k]; +#endif ivas_error error; +#ifdef NONBE_1220_OMASA_JBM_BRATE_SW_FLUSH + float *p_sepobj[BINAURAL_CHANNELS]; +#else float *p_sepobj[MAX_NUM_OBJECTS]; +#endif int16_t slot_idx_start; slot_idx_start = st_ivas->hSpatParamRendCom->slots_rendered; +#ifdef NONBE_1220_OMASA_JBM_BRATE_SW_FLUSH + for ( n = 0; n < BINAURAL_CHANNELS; n++ ) +#else for ( n = 0; n < MAX_NUM_OBJECTS; n++ ) +#endif { p_sepobj[n] = &data_separated_objects[n][0]; } - ivas_dirac_dec_binaural_render( st_ivas, nSamplesAsked, nSamplesRendered, nSamplesAvailable, nchan_transport, output_f ); /* reset combined orientation access index before calling the td renderer */ @@ -861,6 +872,7 @@ ivas_error ivas_omasa_dirac_td_binaural_jbm( v_add( output_f[n], p_sepobj[n], output_f[n], *nSamplesRendered ); } } + return IVAS_ERR_OK; } -- GitLab