Loading lib_com/ivas_cnst.h +5 −0 Original line number Diff line number Diff line Loading @@ -1590,6 +1590,11 @@ typedef enum TDREND_PLAYSTATUS_INITIAL, TDREND_PLAYSTATUS_PLAYING, TDREND_PLAYSTATUS_PLAYING_NON_DIEGETIC #ifdef FIX_504_CLICK_NON_DIEGETIC_STATUS_SWITCHING , TDREND_PLAYSTATUS_SWITCHING_TO_DIEGETIC, TDREND_PLAYSTATUS_SWITCHING_TO_NON_DIEGETIC, #endif } TDREND_PlayStatus_t; typedef enum Loading lib_com/options.h +1 −1 Original line number Diff line number Diff line Loading @@ -209,7 +209,7 @@ #define FIX_485_STATIC_BUFFERS /* FhG: move static buffers in DirAC parameter estimator to the DirAC struct */ #define FIX_I503_ASAN_ERROR_IND_LIST /* VA: fix issue #503: address sanitizer error with IND_LIST_DYN */ #define FIX_473_JITTER_NONDIEGETIC_PANNING /* FhG,Orange: add missing non-diegetic panning to JITTER */ //#define FIX_504_CLICK_NON_DIEGETIC_STATUS_SWITCHING /* Ora : fix issue 504 click in non diegetic rendering */ /* ################## End DEVELOPMENT switches ######################### */ /* clang-format on */ Loading lib_rend/ivas_objectRenderer.c +92 −0 Original line number Diff line number Diff line Loading @@ -386,6 +386,10 @@ ivas_error TDREND_GetMix( float hrf_right_delta[SFX_SPAT_BIN_MAX_FILTER_LENGTH]; int16_t intp_count; float pan_left, pan_right; #ifdef FIX_504_CLICK_NON_DIEGETIC_STATUS_SWITCHING float step, gain_tmp; int16_t j; #endif #ifdef FIX_356_ISM_METADATA_SYNC int16_t subframe_update_flag; Loading @@ -412,7 +416,11 @@ ivas_error TDREND_GetMix( SrcRend_p = Src_p->SrcRend_p; /* Update rendering params if needed */ #ifdef FIX_504_CLICK_NON_DIEGETIC_STATUS_SWITCHING if ( ( SrcRend_p->PlayStatus == TDREND_PLAYSTATUS_PLAYING || SrcRend_p->PlayStatus == TDREND_PLAYSTATUS_SWITCHING_TO_DIEGETIC ) && ( hBinRendererTd->Listener_p->PoseUpdated || SrcSpatial_p->Updated ) ) #else if ( ( SrcRend_p->PlayStatus == TDREND_PLAYSTATUS_PLAYING ) && ( hBinRendererTd->Listener_p->PoseUpdated || SrcSpatial_p->Updated ) ) #endif { TDREND_SRC_REND_UpdateFiltersFromSpatialParams( hBinRendererTd, SrcRend_p, SrcSpatial_p, Src_p->hrf_left_prev, Src_p->hrf_right_prev, hrf_left_delta, hrf_right_delta, &intp_count, &Src_p->filterlength, &Src_p->itd, &Src_p->Gain, Src_p, Loading @@ -425,18 +433,94 @@ ivas_error TDREND_GetMix( } /* Render source if needed */ #ifdef FIX_504_CLICK_NON_DIEGETIC_STATUS_SWITCHING if ( ( SrcRend_p->InputAvailable == TRUE ) && ( SrcRend_p->PlayStatus == TDREND_PLAYSTATUS_PLAYING || SrcRend_p->PlayStatus > TDREND_PLAYSTATUS_PLAYING_NON_DIEGETIC ) ) #else if ( ( SrcRend_p->InputAvailable == TRUE ) && ( SrcRend_p->PlayStatus == TDREND_PLAYSTATUS_PLAYING ) ) #endif { #ifdef FIX_504_CLICK_NON_DIEGETIC_STATUS_SWITCHING if ( SrcRend_p->PlayStatus == TDREND_PLAYSTATUS_SWITCHING_TO_NON_DIEGETIC ) { Src_p->Gain = 0; } if ( SrcRend_p->PlayStatus == TDREND_PLAYSTATUS_SWITCHING_TO_DIEGETIC ) { Src_p->prevGain = 0; } #endif error = TDREND_REND_RenderSourceHRFilt( Src_p, hrf_left_delta, hrf_right_delta, intp_count, output_buf, subframe_length ); } #ifdef FIX_504_CLICK_NON_DIEGETIC_STATUS_SWITCHING if ( ( SrcRend_p->InputAvailable == TRUE ) && ( SrcRend_p->PlayStatus >= TDREND_PLAYSTATUS_PLAYING_NON_DIEGETIC ) ) #else if ( ( SrcRend_p->InputAvailable == TRUE ) && ( SrcRend_p->PlayStatus == TDREND_PLAYSTATUS_PLAYING_NON_DIEGETIC ) ) #endif { pan_left = ( SrcSpatial_p->Pos_p[1] + 1.f ) * 0.5f; pan_right = 1.f - pan_left; #ifdef FIX_504_CLICK_NON_DIEGETIC_STATUS_SWITCHING if ( SrcRend_p->PlayStatus == TDREND_PLAYSTATUS_SWITCHING_TO_NON_DIEGETIC ) { step = pan_left / ( subframe_length ); gain_tmp = 0; for ( j = 0; j < subframe_length; j++ ) { /* Apply linear gain interpolation in case of abrupt gain changes */ gain_tmp = gain_tmp + step; output_buf[0][j] += Src_p->InputFrame_p[subframe_idx * subframe_length + j] * gain_tmp; } step = pan_right / ( subframe_length ); gain_tmp = 0; for ( j = 0; j < subframe_length; j++ ) { /* Apply linear gain interpolation in case of abrupt gain changes */ gain_tmp = gain_tmp + step; output_buf[1][j] += Src_p->InputFrame_p[subframe_idx * subframe_length + j] * gain_tmp; } } else if ( SrcRend_p->PlayStatus == TDREND_PLAYSTATUS_SWITCHING_TO_DIEGETIC ) { step = -pan_left / ( subframe_length ); gain_tmp = pan_left; for ( j = 0; j < subframe_length; j++ ) { /* Apply linear gain interpolation in case of abrupt gain changes */ gain_tmp = gain_tmp + step; output_buf[0][j] += Src_p->InputFrame_p[subframe_idx * subframe_length + j] * gain_tmp; } step = -pan_right / ( subframe_length ); gain_tmp = pan_right; for ( j = 0; j < subframe_length; j++ ) { /* Apply linear gain interpolation in case of abrupt gain changes */ gain_tmp = gain_tmp + step; output_buf[1][j] += Src_p->InputFrame_p[subframe_idx * subframe_length + j] * gain_tmp; } } else { mvr2r( &Src_p->InputFrame_p[( subframe_idx + 1 ) * subframe_length - ITD_MEM_LEN], Src_p->mem_itd, ITD_MEM_LEN ); /* update memory for next frame */ v_multc_acc( &Src_p->InputFrame_p[subframe_idx * subframe_length], pan_left, output_buf[0], subframe_length ); v_multc_acc( &Src_p->InputFrame_p[subframe_idx * subframe_length], pan_right, output_buf[1], subframe_length ); } #else v_multc_acc( &Src_p->InputFrame_p[subframe_idx * subframe_length], pan_left, output_buf[0], subframe_length ); v_multc_acc( &Src_p->InputFrame_p[subframe_idx * subframe_length], pan_right, output_buf[1], subframe_length ); #endif } #ifdef FIX_504_CLICK_NON_DIEGETIC_STATUS_SWITCHING if ( SrcRend_p->PlayStatus == TDREND_PLAYSTATUS_SWITCHING_TO_NON_DIEGETIC ) { SrcRend_p->PlayStatus = TDREND_PLAYSTATUS_PLAYING_NON_DIEGETIC; } if ( SrcRend_p->PlayStatus == TDREND_PLAYSTATUS_SWITCHING_TO_DIEGETIC ) { SrcRend_p->PlayStatus = TDREND_PLAYSTATUS_PLAYING; } #endif } /* Populate output variable */ Loading Loading @@ -545,11 +629,19 @@ void TDREND_Update_object_positions( Pos[1] = hIsmMetaData[nS]->azimuth / 90.f; Pos[2] = 0; TDREND_MIX_SRC_SetPos( hBinRendererTd, nS, Pos ); #ifdef FIX_504_CLICK_NON_DIEGETIC_STATUS_SWITCHING TDREND_MIX_SRC_SetPlayState( hBinRendererTd, nS, TDREND_PLAYSTATUS_SWITCHING_TO_NON_DIEGETIC ); #else TDREND_MIX_SRC_SetPlayState( hBinRendererTd, nS, TDREND_PLAYSTATUS_PLAYING_NON_DIEGETIC ); #endif } else { #ifdef FIX_504_CLICK_NON_DIEGETIC_STATUS_SWITCHING TDREND_MIX_SRC_SetPlayState( hBinRendererTd, nS, TDREND_PLAYSTATUS_SWITCHING_TO_DIEGETIC ); #else TDREND_MIX_SRC_SetPlayState( hBinRendererTd, nS, TDREND_PLAYSTATUS_PLAYING ); #endif } TDREND_MIX_SRC_SetDir( hBinRendererTd, nS, Dir ); } Loading lib_rend/ivas_objectRenderer_sources.c +29 −0 Original line number Diff line number Diff line Loading @@ -171,9 +171,38 @@ ivas_error TDREND_MIX_SRC_SetPlayState( return ( IVAS_ERROR( IVAS_ERR_INVALID_INDEX, "Index exceeds max index\n" ) ); } else { #ifdef FIX_504_CLICK_NON_DIEGETIC_STATUS_SWITCHING if ( hBinRendererTd->Sources[SrcInd]->SrcRend_p->PlayStatus == TDREND_PLAYSTATUS_INITIAL ) { if ( PlayStatus == TDREND_PLAYSTATUS_SWITCHING_TO_NON_DIEGETIC ) { hBinRendererTd->Sources[SrcInd]->SrcRend_p->PlayStatus = TDREND_PLAYSTATUS_PLAYING_NON_DIEGETIC; } if ( PlayStatus == TDREND_PLAYSTATUS_SWITCHING_TO_DIEGETIC ) { hBinRendererTd->Sources[SrcInd]->SrcRend_p->PlayStatus = TDREND_PLAYSTATUS_PLAYING; } } else { if ( PlayStatus == TDREND_PLAYSTATUS_SWITCHING_TO_NON_DIEGETIC && hBinRendererTd->Sources[SrcInd]->SrcRend_p->PlayStatus == TDREND_PLAYSTATUS_PLAYING_NON_DIEGETIC ) { hBinRendererTd->Sources[SrcInd]->SrcRend_p->PlayStatus = TDREND_PLAYSTATUS_PLAYING_NON_DIEGETIC; } else if ( PlayStatus == TDREND_PLAYSTATUS_SWITCHING_TO_DIEGETIC && hBinRendererTd->Sources[SrcInd]->SrcRend_p->PlayStatus == TDREND_PLAYSTATUS_PLAYING ) { hBinRendererTd->Sources[SrcInd]->SrcRend_p->PlayStatus = TDREND_PLAYSTATUS_PLAYING; } else { hBinRendererTd->Sources[SrcInd]->SrcRend_p->PlayStatus = PlayStatus; } } #else hBinRendererTd->Sources[SrcInd]->SrcRend_p->PlayStatus = PlayStatus; #endif } return IVAS_ERR_OK; } Loading scripts/config/self_test.prm +2 −2 Original line number Diff line number Diff line Loading @@ -1029,9 +1029,9 @@ networkSimulator_g192 ../scripts/dly_error_profiles/dly_error_profile_5.dat bit // NON DIEGETiC PAN at 60 kbps, 48kHz in, 48kHz out, STEREO out ../IVAS_cod 64000 48 testv/stv48c.wav bit ../IVAS_dec -non_diegetic_pan -0.5 48 bit testv/stv48c.pcm_MONO_64000_48-48_STEREO_NON-DIEGETIC-PAN_-0.5.tst ../IVAS_dec -non_diegetic_pan -45 48 bit testv/stv48c.pcm_MONO_64000_48-48_STEREO_NON-DIEGETIC-PAN_-45.tst // 4 ISM with extended metadata and non diegetic pan object switching bitrate 256 kbps, 48 kHz in, 48 kHz out, DTX on, BINAURAL out // 4 ISM with extended metadata and non diegetic pan object bitrate 256 kbps, 48 kHz in, 48 kHz out, DTX on, BINAURAL out ../IVAS_cod -dtx -ism +4 testv/stvISM1.csv NULL testv/stvISM_with_no_diegetic_switch.csv testv/stvISM4.csv 256000 48 testv/stv4ISM48s.wav bit ../IVAS_dec BINAURAL 48 bit testv/stv+4ISM48s+non_diegetic_pan.wav_brate_256000-48_DTX_binaural.tst Loading
lib_com/ivas_cnst.h +5 −0 Original line number Diff line number Diff line Loading @@ -1590,6 +1590,11 @@ typedef enum TDREND_PLAYSTATUS_INITIAL, TDREND_PLAYSTATUS_PLAYING, TDREND_PLAYSTATUS_PLAYING_NON_DIEGETIC #ifdef FIX_504_CLICK_NON_DIEGETIC_STATUS_SWITCHING , TDREND_PLAYSTATUS_SWITCHING_TO_DIEGETIC, TDREND_PLAYSTATUS_SWITCHING_TO_NON_DIEGETIC, #endif } TDREND_PlayStatus_t; typedef enum Loading
lib_com/options.h +1 −1 Original line number Diff line number Diff line Loading @@ -209,7 +209,7 @@ #define FIX_485_STATIC_BUFFERS /* FhG: move static buffers in DirAC parameter estimator to the DirAC struct */ #define FIX_I503_ASAN_ERROR_IND_LIST /* VA: fix issue #503: address sanitizer error with IND_LIST_DYN */ #define FIX_473_JITTER_NONDIEGETIC_PANNING /* FhG,Orange: add missing non-diegetic panning to JITTER */ //#define FIX_504_CLICK_NON_DIEGETIC_STATUS_SWITCHING /* Ora : fix issue 504 click in non diegetic rendering */ /* ################## End DEVELOPMENT switches ######################### */ /* clang-format on */ Loading
lib_rend/ivas_objectRenderer.c +92 −0 Original line number Diff line number Diff line Loading @@ -386,6 +386,10 @@ ivas_error TDREND_GetMix( float hrf_right_delta[SFX_SPAT_BIN_MAX_FILTER_LENGTH]; int16_t intp_count; float pan_left, pan_right; #ifdef FIX_504_CLICK_NON_DIEGETIC_STATUS_SWITCHING float step, gain_tmp; int16_t j; #endif #ifdef FIX_356_ISM_METADATA_SYNC int16_t subframe_update_flag; Loading @@ -412,7 +416,11 @@ ivas_error TDREND_GetMix( SrcRend_p = Src_p->SrcRend_p; /* Update rendering params if needed */ #ifdef FIX_504_CLICK_NON_DIEGETIC_STATUS_SWITCHING if ( ( SrcRend_p->PlayStatus == TDREND_PLAYSTATUS_PLAYING || SrcRend_p->PlayStatus == TDREND_PLAYSTATUS_SWITCHING_TO_DIEGETIC ) && ( hBinRendererTd->Listener_p->PoseUpdated || SrcSpatial_p->Updated ) ) #else if ( ( SrcRend_p->PlayStatus == TDREND_PLAYSTATUS_PLAYING ) && ( hBinRendererTd->Listener_p->PoseUpdated || SrcSpatial_p->Updated ) ) #endif { TDREND_SRC_REND_UpdateFiltersFromSpatialParams( hBinRendererTd, SrcRend_p, SrcSpatial_p, Src_p->hrf_left_prev, Src_p->hrf_right_prev, hrf_left_delta, hrf_right_delta, &intp_count, &Src_p->filterlength, &Src_p->itd, &Src_p->Gain, Src_p, Loading @@ -425,18 +433,94 @@ ivas_error TDREND_GetMix( } /* Render source if needed */ #ifdef FIX_504_CLICK_NON_DIEGETIC_STATUS_SWITCHING if ( ( SrcRend_p->InputAvailable == TRUE ) && ( SrcRend_p->PlayStatus == TDREND_PLAYSTATUS_PLAYING || SrcRend_p->PlayStatus > TDREND_PLAYSTATUS_PLAYING_NON_DIEGETIC ) ) #else if ( ( SrcRend_p->InputAvailable == TRUE ) && ( SrcRend_p->PlayStatus == TDREND_PLAYSTATUS_PLAYING ) ) #endif { #ifdef FIX_504_CLICK_NON_DIEGETIC_STATUS_SWITCHING if ( SrcRend_p->PlayStatus == TDREND_PLAYSTATUS_SWITCHING_TO_NON_DIEGETIC ) { Src_p->Gain = 0; } if ( SrcRend_p->PlayStatus == TDREND_PLAYSTATUS_SWITCHING_TO_DIEGETIC ) { Src_p->prevGain = 0; } #endif error = TDREND_REND_RenderSourceHRFilt( Src_p, hrf_left_delta, hrf_right_delta, intp_count, output_buf, subframe_length ); } #ifdef FIX_504_CLICK_NON_DIEGETIC_STATUS_SWITCHING if ( ( SrcRend_p->InputAvailable == TRUE ) && ( SrcRend_p->PlayStatus >= TDREND_PLAYSTATUS_PLAYING_NON_DIEGETIC ) ) #else if ( ( SrcRend_p->InputAvailable == TRUE ) && ( SrcRend_p->PlayStatus == TDREND_PLAYSTATUS_PLAYING_NON_DIEGETIC ) ) #endif { pan_left = ( SrcSpatial_p->Pos_p[1] + 1.f ) * 0.5f; pan_right = 1.f - pan_left; #ifdef FIX_504_CLICK_NON_DIEGETIC_STATUS_SWITCHING if ( SrcRend_p->PlayStatus == TDREND_PLAYSTATUS_SWITCHING_TO_NON_DIEGETIC ) { step = pan_left / ( subframe_length ); gain_tmp = 0; for ( j = 0; j < subframe_length; j++ ) { /* Apply linear gain interpolation in case of abrupt gain changes */ gain_tmp = gain_tmp + step; output_buf[0][j] += Src_p->InputFrame_p[subframe_idx * subframe_length + j] * gain_tmp; } step = pan_right / ( subframe_length ); gain_tmp = 0; for ( j = 0; j < subframe_length; j++ ) { /* Apply linear gain interpolation in case of abrupt gain changes */ gain_tmp = gain_tmp + step; output_buf[1][j] += Src_p->InputFrame_p[subframe_idx * subframe_length + j] * gain_tmp; } } else if ( SrcRend_p->PlayStatus == TDREND_PLAYSTATUS_SWITCHING_TO_DIEGETIC ) { step = -pan_left / ( subframe_length ); gain_tmp = pan_left; for ( j = 0; j < subframe_length; j++ ) { /* Apply linear gain interpolation in case of abrupt gain changes */ gain_tmp = gain_tmp + step; output_buf[0][j] += Src_p->InputFrame_p[subframe_idx * subframe_length + j] * gain_tmp; } step = -pan_right / ( subframe_length ); gain_tmp = pan_right; for ( j = 0; j < subframe_length; j++ ) { /* Apply linear gain interpolation in case of abrupt gain changes */ gain_tmp = gain_tmp + step; output_buf[1][j] += Src_p->InputFrame_p[subframe_idx * subframe_length + j] * gain_tmp; } } else { mvr2r( &Src_p->InputFrame_p[( subframe_idx + 1 ) * subframe_length - ITD_MEM_LEN], Src_p->mem_itd, ITD_MEM_LEN ); /* update memory for next frame */ v_multc_acc( &Src_p->InputFrame_p[subframe_idx * subframe_length], pan_left, output_buf[0], subframe_length ); v_multc_acc( &Src_p->InputFrame_p[subframe_idx * subframe_length], pan_right, output_buf[1], subframe_length ); } #else v_multc_acc( &Src_p->InputFrame_p[subframe_idx * subframe_length], pan_left, output_buf[0], subframe_length ); v_multc_acc( &Src_p->InputFrame_p[subframe_idx * subframe_length], pan_right, output_buf[1], subframe_length ); #endif } #ifdef FIX_504_CLICK_NON_DIEGETIC_STATUS_SWITCHING if ( SrcRend_p->PlayStatus == TDREND_PLAYSTATUS_SWITCHING_TO_NON_DIEGETIC ) { SrcRend_p->PlayStatus = TDREND_PLAYSTATUS_PLAYING_NON_DIEGETIC; } if ( SrcRend_p->PlayStatus == TDREND_PLAYSTATUS_SWITCHING_TO_DIEGETIC ) { SrcRend_p->PlayStatus = TDREND_PLAYSTATUS_PLAYING; } #endif } /* Populate output variable */ Loading Loading @@ -545,11 +629,19 @@ void TDREND_Update_object_positions( Pos[1] = hIsmMetaData[nS]->azimuth / 90.f; Pos[2] = 0; TDREND_MIX_SRC_SetPos( hBinRendererTd, nS, Pos ); #ifdef FIX_504_CLICK_NON_DIEGETIC_STATUS_SWITCHING TDREND_MIX_SRC_SetPlayState( hBinRendererTd, nS, TDREND_PLAYSTATUS_SWITCHING_TO_NON_DIEGETIC ); #else TDREND_MIX_SRC_SetPlayState( hBinRendererTd, nS, TDREND_PLAYSTATUS_PLAYING_NON_DIEGETIC ); #endif } else { #ifdef FIX_504_CLICK_NON_DIEGETIC_STATUS_SWITCHING TDREND_MIX_SRC_SetPlayState( hBinRendererTd, nS, TDREND_PLAYSTATUS_SWITCHING_TO_DIEGETIC ); #else TDREND_MIX_SRC_SetPlayState( hBinRendererTd, nS, TDREND_PLAYSTATUS_PLAYING ); #endif } TDREND_MIX_SRC_SetDir( hBinRendererTd, nS, Dir ); } Loading
lib_rend/ivas_objectRenderer_sources.c +29 −0 Original line number Diff line number Diff line Loading @@ -171,9 +171,38 @@ ivas_error TDREND_MIX_SRC_SetPlayState( return ( IVAS_ERROR( IVAS_ERR_INVALID_INDEX, "Index exceeds max index\n" ) ); } else { #ifdef FIX_504_CLICK_NON_DIEGETIC_STATUS_SWITCHING if ( hBinRendererTd->Sources[SrcInd]->SrcRend_p->PlayStatus == TDREND_PLAYSTATUS_INITIAL ) { if ( PlayStatus == TDREND_PLAYSTATUS_SWITCHING_TO_NON_DIEGETIC ) { hBinRendererTd->Sources[SrcInd]->SrcRend_p->PlayStatus = TDREND_PLAYSTATUS_PLAYING_NON_DIEGETIC; } if ( PlayStatus == TDREND_PLAYSTATUS_SWITCHING_TO_DIEGETIC ) { hBinRendererTd->Sources[SrcInd]->SrcRend_p->PlayStatus = TDREND_PLAYSTATUS_PLAYING; } } else { if ( PlayStatus == TDREND_PLAYSTATUS_SWITCHING_TO_NON_DIEGETIC && hBinRendererTd->Sources[SrcInd]->SrcRend_p->PlayStatus == TDREND_PLAYSTATUS_PLAYING_NON_DIEGETIC ) { hBinRendererTd->Sources[SrcInd]->SrcRend_p->PlayStatus = TDREND_PLAYSTATUS_PLAYING_NON_DIEGETIC; } else if ( PlayStatus == TDREND_PLAYSTATUS_SWITCHING_TO_DIEGETIC && hBinRendererTd->Sources[SrcInd]->SrcRend_p->PlayStatus == TDREND_PLAYSTATUS_PLAYING ) { hBinRendererTd->Sources[SrcInd]->SrcRend_p->PlayStatus = TDREND_PLAYSTATUS_PLAYING; } else { hBinRendererTd->Sources[SrcInd]->SrcRend_p->PlayStatus = PlayStatus; } } #else hBinRendererTd->Sources[SrcInd]->SrcRend_p->PlayStatus = PlayStatus; #endif } return IVAS_ERR_OK; } Loading
scripts/config/self_test.prm +2 −2 Original line number Diff line number Diff line Loading @@ -1029,9 +1029,9 @@ networkSimulator_g192 ../scripts/dly_error_profiles/dly_error_profile_5.dat bit // NON DIEGETiC PAN at 60 kbps, 48kHz in, 48kHz out, STEREO out ../IVAS_cod 64000 48 testv/stv48c.wav bit ../IVAS_dec -non_diegetic_pan -0.5 48 bit testv/stv48c.pcm_MONO_64000_48-48_STEREO_NON-DIEGETIC-PAN_-0.5.tst ../IVAS_dec -non_diegetic_pan -45 48 bit testv/stv48c.pcm_MONO_64000_48-48_STEREO_NON-DIEGETIC-PAN_-45.tst // 4 ISM with extended metadata and non diegetic pan object switching bitrate 256 kbps, 48 kHz in, 48 kHz out, DTX on, BINAURAL out // 4 ISM with extended metadata and non diegetic pan object bitrate 256 kbps, 48 kHz in, 48 kHz out, DTX on, BINAURAL out ../IVAS_cod -dtx -ism +4 testv/stvISM1.csv NULL testv/stvISM_with_no_diegetic_switch.csv testv/stvISM4.csv 256000 48 testv/stv4ISM48s.wav bit ../IVAS_dec BINAURAL 48 bit testv/stv+4ISM48s+non_diegetic_pan.wav_brate_256000-48_DTX_binaural.tst