diff --git a/lib_com/options.h b/lib_com/options.h index 4e4d157cae9f07a81b221a55558109581619eff6..4dda4cf2aaa6bf75455b85297e0189cade079261 100644 --- a/lib_com/options.h +++ b/lib_com/options.h @@ -145,6 +145,7 @@ #define NONBE_FIX_1337_MISSING_DIRECTIVITY_DISTATT_EXTREND /* Eri: issue 1337: Missing directivity setting and distance attenuation in external renderer IVAS_rend */ #define NONBE_1214_PLC_LSF_MEMORY /* VA: issue 1224: reset ACELP PLC FEC memory in case of switching from MDCT stereo to TD/DFT stereo */ #define NONBE_1293_SR_HRTF /* VA: issue 1293: add support of external HRTFs in split rendering */ +#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_fx.c b/lib_dec/ivas_jbm_dec_fx.c index 49cedb561715ea74a2b752c7138cca5b94d46248..6fe8fd9b0b55621b9113d9e59437f68dfa5c28b2 100644 --- a/lib_dec/ivas_jbm_dec_fx.c +++ b/lib_dec/ivas_jbm_dec_fx.c @@ -2688,7 +2688,7 @@ ivas_error ivas_jbm_dec_render_fx( } /*--------------------------------------------------------------------------* - * ivas_jbm_dec_dec_flush_renderer() + * ivas_jbm_dec_flush_renderer() * * Flush samples if renderer granularity changes on a bitrate change *--------------------------------------------------------------------------*/ @@ -2887,7 +2887,11 @@ ivas_error ivas_jbm_dec_flush_renderer_fx( { IF( EQ_16( ism_mode_old, ISM_MASA_MODE_DISC ) ) { +#ifdef NONBE_1220_OMASA_JBM_BRATE_SW_FLUSH + Word32 *tc_local_fx[MAX_NUM_OBJECTS]; +#else Word32 *tc_local_fx[MAX_TRANSPORT_CHANNELS]; +#endif move16(); FOR( ch_idx = 0; ch_idx < st_ivas->nchan_ism; ch_idx++ ) @@ -2896,6 +2900,12 @@ ivas_error ivas_jbm_dec_flush_renderer_fx( Copy32( st_ivas->hMasaIsmData->delayBuffer_fx[ch_idx], tc_local_fx[ch_idx], st_ivas->hMasaIsmData->delayBuffer_size ); /*Q11*/ } +#ifdef NONBE_1220_OMASA_JBM_BRATE_SW_FLUSH + IF( NE_32( ( error = ivas_td_binaural_renderer_sf_fx( st_ivas, p_output_fx, hTcBuffer->n_samples_granularity ) ), IVAS_ERR_OK ) ) + { + return error; + } +#else IF( st_ivas->nchan_ism > 0 ) { IF( NE_32( ( error = ivas_td_binaural_renderer_sf_fx( st_ivas, p_output_fx, hTcBuffer->n_samples_granularity ) ), IVAS_ERR_OK ) ) @@ -2914,6 +2924,7 @@ ivas_error ivas_jbm_dec_flush_renderer_fx( move16(); move16(); } +#endif } } ELSE IF( EQ_16( st_ivas->ivas_format, SBA_ISM_FORMAT ) ) diff --git a/lib_dec/ivas_objectRenderer_internal_fx.c b/lib_dec/ivas_objectRenderer_internal_fx.c index bc8b110bb5a03162fb89563a591f5c766d673c51..786523366d270811ba002d00e1915d1908016cfc 100644 --- a/lib_dec/ivas_objectRenderer_internal_fx.c +++ b/lib_dec/ivas_objectRenderer_internal_fx.c @@ -100,7 +100,13 @@ ivas_error ivas_td_binaural_renderer_sf_fx( Word16 enableCombinedOrientation; /* Set the number of ISMs */ +#ifdef NONBE_1220_OMASA_JBM_BRATE_SW_FLUSH + test(); + test(); + IF( EQ_32( st_ivas->ivas_format, MASA_ISM_FORMAT ) || ( EQ_32( st_ivas->ivas_format, MASA_FORMAT ) && GT_16( st_ivas->nchan_ism, 0 ) ) ) +#else IF( EQ_32( st_ivas->ivas_format, MASA_ISM_FORMAT ) ) +#endif { nchan_ism_internal = st_ivas->nchan_ism; move16(); diff --git a/lib_dec/ivas_omasa_dec_fx.c b/lib_dec/ivas_omasa_dec_fx.c index a85a2a2596726ff6299d4f305f82afc05769b3d4..1982188997e4875527cee6b9ddd7d53cf4771077 100644 --- a/lib_dec/ivas_omasa_dec_fx.c +++ b/lib_dec/ivas_omasa_dec_fx.c @@ -1233,17 +1233,24 @@ ivas_error ivas_omasa_dirac_td_binaural_jbm_fx( ) { Word16 n; - move16(); ivas_error error; +#ifdef NONBE_1220_OMASA_JBM_BRATE_SW_FLUSH + Word32 *p_sepobj_fx[BINAURAL_CHANNELS]; // Q11 + Word32 data_separated_objects_fx[BINAURAL_CHANNELS][L_FRAME48k]; +#else Word32 *p_sepobj_fx[MAX_NUM_OBJECTS]; // Q11 Word32 data_separated_objects_fx[MAX_NUM_OBJECTS][L_FRAME48k]; - move16(); +#endif Word16 slot_idx_start; slot_idx_start = st_ivas->hSpatParamRendCom->slots_rendered; move16(); +#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_fx[n] = &data_separated_objects_fx[n][0]; } @@ -1281,6 +1288,7 @@ ivas_error ivas_omasa_dirac_td_binaural_jbm_fx( { return error; } + st_ivas->nchan_transport = nchan_transport_orig; move16(); cldfb_slots = *nSamplesRendered / num_cldfb_bands; @@ -1321,6 +1329,7 @@ ivas_error ivas_omasa_dirac_td_binaural_jbm_fx( return IVAS_ERR_OK; } + /*--------------------------------------------------------------------------* * ivas_omasa_rearrange_channels() *