From 946fee59a6b8b6913300fca476d66eb859c7741f Mon Sep 17 00:00:00 2001 From: Sumeyra Kanik Date: Wed, 24 May 2023 09:59:33 +0200 Subject: [PATCH 1/7] Revert changes related to disabling delay compensation at encoder --- apps/decoder.c | 10 +++++++++- lib_com/delay_comp.c | 14 -------------- lib_dec/ivas_dec.c | 1 + lib_dec/ivas_objectRenderer_internal.c | 10 +++++++++- lib_dec/ivas_stat_dec.h | 4 +++- lib_dec/lib_dec.c | 20 ++++++++++++-------- lib_dec/lib_dec.h | 4 ++++ 7 files changed, 38 insertions(+), 25 deletions(-) diff --git a/apps/decoder.c b/apps/decoder.c index 197f90b8d0..0b83b180db 100644 --- a/apps/decoder.c +++ b/apps/decoder.c @@ -388,12 +388,20 @@ int main( /*------------------------------------------------------------------------------------------* * Configure the decoder *------------------------------------------------------------------------------------------*/ - +#ifdef FIX_356_ISM_METADATA_SYNC +#ifdef FIX_439_OTR_PARAMS + if ( ( error = IVAS_DEC_Configure( hIvasDec, arg.output_Fs, arg.outputFormat, arg.customLsOutputEnabled, arg.hrtfReaderEnabled, arg.enableHeadRotation, arg.orientation_tracking, arg.renderConfigEnabled, arg.Opt_non_diegetic_pan, arg.non_diegetic_pan_gain, arg.delayCompensationEnabled ) ) != IVAS_ERR_OK ) +#else + if ( ( error = IVAS_DEC_Configure( hIvasDec, arg.output_Fs, arg.outputFormat, arg.customLsOutputEnabled, arg.hrtfReaderEnabled, arg.enableHeadRotation, arg.renderConfigEnabled, arg.Opt_non_diegetic_pan, arg.non_diegetic_pan_gain, arg.delayCompensationEnabled ) ) != IVAS_ERR_OK ) +#endif +#else #ifdef FIX_439_OTR_PARAMS if ( ( error = IVAS_DEC_Configure( hIvasDec, arg.output_Fs, arg.outputFormat, arg.customLsOutputEnabled, arg.hrtfReaderEnabled, arg.enableHeadRotation, arg.orientation_tracking, arg.renderConfigEnabled, arg.Opt_non_diegetic_pan, arg.non_diegetic_pan_gain ) ) != IVAS_ERR_OK ) #else if ( ( error = IVAS_DEC_Configure( hIvasDec, arg.output_Fs, arg.outputFormat, arg.customLsOutputEnabled, arg.hrtfReaderEnabled, arg.enableHeadRotation, arg.renderConfigEnabled, arg.Opt_non_diegetic_pan, arg.non_diegetic_pan_gain ) ) != IVAS_ERR_OK ) #endif +#endif + { fprintf( stderr, "\nConfigure failed: %s\n\n", IVAS_DEC_GetErrorMessage( error ) ); goto cleanup; diff --git a/lib_com/delay_comp.c b/lib_com/delay_comp.c index 518a28aba7..003d942245 100644 --- a/lib_com/delay_comp.c +++ b/lib_com/delay_comp.c @@ -69,17 +69,10 @@ int32_t get_delay( { delay = IVAS_ENC_DELAY_NS; -#ifdef FIX_356_ISM_METADATA_SYNC - if ( ivas_format == ISM_FORMAT || ivas_format == MASA_FORMAT ) - { - delay = 0; /* All delay is compensated in the decoder with MASA/ISM */ - } -#else if ( ivas_format == MASA_FORMAT ) { delay = 0; /* All delay is compensated in the decoder with MASA */ } -#endif } if ( ivas_format == SBA_FORMAT ) @@ -111,17 +104,10 @@ int32_t get_delay( delay += IVAS_FB_DEC_DELAY_NS; } -#ifdef FIX_356_ISM_METADATA_SYNC - if ( ivas_format == ISM_FORMAT || ivas_format == MASA_FORMAT ) - { - delay += IVAS_ENC_DELAY_NS; /* Compensate also the encoder delay in the decoder with ISM/MASA */ - } -#else if ( ivas_format == MASA_FORMAT ) { delay += IVAS_ENC_DELAY_NS; /* Compensate also the encoder delay in the decoder with MASA */ } -#endif } } diff --git a/lib_dec/ivas_dec.c b/lib_dec/ivas_dec.c index 7069e7d08f..e0e6a28725 100644 --- a/lib_dec/ivas_dec.c +++ b/lib_dec/ivas_dec.c @@ -268,6 +268,7 @@ ivas_error ivas_dec( /* Binaural rendering */ if ( st_ivas->renderer_type == RENDERER_BINAURAL_OBJECTS_TD ) { + #ifdef JBM_TSM_ON_TCS if ( ( ivas_td_binaural_renderer( st_ivas, p_output, output_frame ) ) != IVAS_ERR_OK ) #else diff --git a/lib_dec/ivas_objectRenderer_internal.c b/lib_dec/ivas_objectRenderer_internal.c index 081b33e55c..8f7fd378f7 100644 --- a/lib_dec/ivas_objectRenderer_internal.c +++ b/lib_dec/ivas_objectRenderer_internal.c @@ -76,7 +76,15 @@ ivas_error ivas_td_binaural_renderer( ) { #ifdef FIX_356_ISM_METADATA_SYNC - int16_t ism_md_subframe_update = 2; + int16_t ism_md_subframe_update; + if ( st_ivas->hDecoderConfig->Opt_delay_comp ) + { + ism_md_subframe_update = 1; + } + else + { + ism_md_subframe_update = 2; + } return ivas_td_binaural_renderer_unwrap( st_ivas->hReverb, st_ivas->transport_config, diff --git a/lib_dec/ivas_stat_dec.h b/lib_dec/ivas_stat_dec.h index af9d5da5f4..e3b97e632d 100644 --- a/lib_dec/ivas_stat_dec.h +++ b/lib_dec/ivas_stat_dec.h @@ -1224,7 +1224,9 @@ typedef struct decoder_config_structure #ifdef JBM_TSM_ON_TCS int16_t voip_active; #endif - +#ifdef FIX_356_ISM_METADATA_SYNC + int16_t Opt_delay_comp; /* flag indicating delay compensation active */ +#endif } DECODER_CONFIG, *DECODER_CONFIG_HANDLE; diff --git a/lib_dec/lib_dec.c b/lib_dec/lib_dec.c index 07166b8ddb..4488a2a9af 100644 --- a/lib_dec/lib_dec.c +++ b/lib_dec/lib_dec.c @@ -276,6 +276,11 @@ static void init_decoder_config( #ifdef JBM_TSM_ON_TCS hDecoderConfig->voip_active = 0; #endif + +#ifdef FIX_356_ISM_METADATA_SYNC + hDecoderConfig->Opt_delay_comp = 0; +#endif + return; } @@ -443,6 +448,10 @@ ivas_error IVAS_DEC_Configure( const int16_t renderConfigEnabled, /* i : enable Renderer config. file for binaural output */ const int16_t Opt_non_diegetic_pan, /* i : diegetic or not */ const float non_diegetic_pan_gain /* i : non diegetic panning gain */ +#ifdef FIX_356_ISM_METADATA_SYNC + , + const int16_t delayCompensationEnabled /* i : enable delay compensation */ +#endif ) { Decoder_Struct *st_ivas; @@ -498,6 +507,9 @@ ivas_error IVAS_DEC_Configure( hDecoderConfig->Opt_RendConfigCustom = renderConfigEnabled; hDecoderConfig->Opt_non_diegetic_pan = Opt_non_diegetic_pan; hDecoderConfig->non_diegetic_pan_gain = non_diegetic_pan_gain; +#ifdef FIX_356_ISM_METADATA_SYNC + hDecoderConfig->Opt_delay_comp = delayCompensationEnabled; +#endif /* Set decoder parameters to initial values */ if ( ( error = ivas_init_decoder_front( st_ivas ) ) != IVAS_ERR_OK ) @@ -1580,14 +1592,6 @@ ivas_error IVAS_DEC_GetDelay( nSamples[2] = (int16_t) roundf( (float) st_ivas->binaural_latency_ns * hDecoderConfig->output_Fs / 1000000000.f ); nSamples[0] = nSamples[1] + nSamples[2]; -#ifdef FIX_356_ISM_METADATA_SYNC - if ( st_ivas->ivas_format == ISM_FORMAT ) - { - /* note: in ISM, all delay is compensated at the decoder by default, so subtract the encoder delay for print-out */ - nSamples[1] -= NS2SA( hDecoderConfig->output_Fs, IVAS_ENC_DELAY_NS ); - } -#endif - *timeScale = hDecoderConfig->output_Fs; return IVAS_ERR_OK; diff --git a/lib_dec/lib_dec.h b/lib_dec/lib_dec.h index 65e36b055b..03c2ea1ebd 100644 --- a/lib_dec/lib_dec.h +++ b/lib_dec/lib_dec.h @@ -153,6 +153,10 @@ ivas_error IVAS_DEC_Configure( const int16_t renderConfigEnabled, /* i : enable Renderer config. file for binaural output */ const int16_t Opt_non_diegetic_pan, /* i : diegetic or not */ const float non_diegetic_pan_gain /* i : non diegetic panning gain */ +#ifdef FIX_356_ISM_METADATA_SYNC + , + const int16_t delayCompensationEnabled /* i : enable delay compensation */ +#endif ); void IVAS_DEC_Close( -- GitLab From 106139f8442e70b8d2f90d2c90dd78e358ea500b Mon Sep 17 00:00:00 2001 From: Sumeyra Kanik Date: Wed, 24 May 2023 10:30:22 +0200 Subject: [PATCH 2/7] Resolve merge conflict from main --- lib_com/options.h | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/lib_com/options.h b/lib_com/options.h index 0a9e37c191..7d9a47ba4f 100644 --- a/lib_com/options.h +++ b/lib_com/options.h @@ -157,7 +157,7 @@ #define FIX_411_EVS_BE_TESTS_ON_WINDOWS_FAILING /* Eri: Fix incorrect use of stack variable used for channel aware config file */ #define COMBINED_FORMAT_SIGNALING /* VA: Introduce a signaling bit for combined format coding */ -#define FIX_356_ISM_METADATA_SYNC /* Eri: issue 356: Metadata out-of-synch for -no_delay_comp */ +// #define FIX_356_ISM_METADATA_SYNC /* Eri: issue 356: Metadata out-of-synch for -no_delay_comp */ #define FIX_446_STEREO_DMX_CRASH /* FhG: fix discrepancy with EVS code that could cause crashes in rare cases */ -- GitLab From 9513b5dc7283f17776a445edab3fe8686e3c8f8f Mon Sep 17 00:00:00 2001 From: Sumeyra Kanik Date: Wed, 24 May 2023 10:31:41 +0200 Subject: [PATCH 3/7] Fix format --- lib_com/options.h | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/lib_com/options.h b/lib_com/options.h index 7d9a47ba4f..0a9e37c191 100644 --- a/lib_com/options.h +++ b/lib_com/options.h @@ -157,7 +157,7 @@ #define FIX_411_EVS_BE_TESTS_ON_WINDOWS_FAILING /* Eri: Fix incorrect use of stack variable used for channel aware config file */ #define COMBINED_FORMAT_SIGNALING /* VA: Introduce a signaling bit for combined format coding */ -// #define FIX_356_ISM_METADATA_SYNC /* Eri: issue 356: Metadata out-of-synch for -no_delay_comp */ +#define FIX_356_ISM_METADATA_SYNC /* Eri: issue 356: Metadata out-of-synch for -no_delay_comp */ #define FIX_446_STEREO_DMX_CRASH /* FhG: fix discrepancy with EVS code that could cause crashes in rare cases */ -- GitLab From 904e60ff58a02c59dd122e62256def15c0cd878a Mon Sep 17 00:00:00 2001 From: Erik Norvell Date: Thu, 25 May 2023 10:01:24 +0200 Subject: [PATCH 4/7] Minor cleanup --- lib_dec/ivas_objectRenderer_internal.c | 6 +++++- lib_dec/lib_dec.c | 5 +++-- lib_dec/lib_dec.h | 7 ++++--- lib_rend/ivas_objectRenderer.c | 23 +++++++++++++---------- lib_rend/ivas_prot_rend.h | 5 +++-- 5 files changed, 28 insertions(+), 18 deletions(-) diff --git a/lib_dec/ivas_objectRenderer_internal.c b/lib_dec/ivas_objectRenderer_internal.c index 8f7fd378f7..d87852ecbe 100644 --- a/lib_dec/ivas_objectRenderer_internal.c +++ b/lib_dec/ivas_objectRenderer_internal.c @@ -77,6 +77,7 @@ ivas_error ivas_td_binaural_renderer( { #ifdef FIX_356_ISM_METADATA_SYNC int16_t ism_md_subframe_update; + if ( st_ivas->hDecoderConfig->Opt_delay_comp ) { ism_md_subframe_update = 1; @@ -121,7 +122,10 @@ void ObjRenderIVASSubframe( float *tc_local[MAX_TRANSPORT_CHANNELS]; int16_t ch, slot_size, slots_to_render, output_frame; #ifdef FIX_356_ISM_METADATA_SYNC - int16_t ism_md_subframe_update_jbm = 0; /* Number of subframes to delay metadata to sync with audio */ + int16_t ism_md_subframe_update_jbm; /* Number of subframes to delay metadata to sync with audio */ + + ism_md_subframe_update_jbm = 0; + #endif for ( ch = 0; ch < BINAURAL_CHANNELS; ch++ ) { diff --git a/lib_dec/lib_dec.c b/lib_dec/lib_dec.c index 4488a2a9af..98e9723fae 100644 --- a/lib_dec/lib_dec.c +++ b/lib_dec/lib_dec.c @@ -447,10 +447,11 @@ ivas_error IVAS_DEC_Configure( #endif const int16_t renderConfigEnabled, /* i : enable Renderer config. file for binaural output */ const int16_t Opt_non_diegetic_pan, /* i : diegetic or not */ - const float non_diegetic_pan_gain /* i : non diegetic panning gain */ #ifdef FIX_356_ISM_METADATA_SYNC - , + const float non_diegetic_pan_gain, /* i : non diegetic panning gain */ const int16_t delayCompensationEnabled /* i : enable delay compensation */ +#else + const float non_diegetic_pan_gain /* i : non diegetic panning gain */ #endif ) { diff --git a/lib_dec/lib_dec.h b/lib_dec/lib_dec.h index 03c2ea1ebd..d8418916e2 100644 --- a/lib_dec/lib_dec.h +++ b/lib_dec/lib_dec.h @@ -152,10 +152,11 @@ ivas_error IVAS_DEC_Configure( #endif const int16_t renderConfigEnabled, /* i : enable Renderer config. file for binaural output */ const int16_t Opt_non_diegetic_pan, /* i : diegetic or not */ - const float non_diegetic_pan_gain /* i : non diegetic panning gain */ #ifdef FIX_356_ISM_METADATA_SYNC - , - const int16_t delayCompensationEnabled /* i : enable delay compensation */ + const float non_diegetic_pan_gain, /* i : non diegetic panning gain */ + const int16_t delayCompensationEnabled /* i : enable delay compensation */ +#else + const float non_diegetic_pan_gain /* i : non diegetic panning gain */ #endif ); diff --git a/lib_rend/ivas_objectRenderer.c b/lib_rend/ivas_objectRenderer.c index 3d929e78c7..875dd5d4a2 100644 --- a/lib_rend/ivas_objectRenderer.c +++ b/lib_rend/ivas_objectRenderer.c @@ -278,6 +278,9 @@ ivas_error ivas_td_binaural_renderer_unwrap( int16_t subframe_idx; float reverb_signal[BINAURAL_CHANNELS][L_FRAME48k]; ivas_error error; +#ifdef FIX_356_ISM_METADATA_SYNC + int16_t c_indx, nS; +#endif #ifdef JBM_TSM_ON_TCS float *p_reverb_signal[BINAURAL_CHANNELS]; int16_t ch; @@ -291,9 +294,7 @@ ivas_error ivas_td_binaural_renderer_unwrap( subframe_length = output_frame / MAX_PARAM_SPATIAL_SUBFRAMES; #ifdef FIX_356_ISM_METADATA_SYNC - int16_t c_indx, nS; c_indx = 0; - for ( nS = 0; nS < num_src; nS++ ) { if ( !( ivas_format == MC_FORMAT && nS == lfe_idx ) ) /* Skip LFE for MC */ @@ -369,10 +370,11 @@ ivas_error TDREND_GetMix( float output[][L_FRAME48k], /* i/o: ISM object synth / rendered output in 0,1 */ #endif const int16_t subframe_length, /* i/o: subframe length */ - const int16_t subframe_idx /* i : Subframe index to 5 ms subframe */ #ifdef FIX_356_ISM_METADATA_SYNC - , + const int16_t subframe_idx, /* i : Subframe index to 5 ms subframe */ const int16_t ism_md_subframe_update /* Number of subframes to delay ism metadata to sync with audio */ +#else + const int16_t subframe_idx, /* i : Subframe index to 5 ms subframe */ #endif ) { @@ -386,9 +388,9 @@ 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_356_ISM_METADATA_SYNC int16_t subframe_update_flag; + subframe_update_flag = subframe_idx == ism_md_subframe_update; #endif @@ -415,13 +417,11 @@ ivas_error TDREND_GetMix( if ( ( SrcRend_p->PlayStatus == TDREND_PLAYSTATUS_PLAYING ) && ( hBinRendererTd->Listener_p->PoseUpdated || SrcSpatial_p->Updated ) ) { 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, #ifdef FIX_356_ISM_METADATA_SYNC - subframe_update_flag + Src_p->hrf_right_prev, hrf_left_delta, hrf_right_delta, &intp_count, &Src_p->filterlength, &Src_p->itd, &Src_p->Gain, Src_p, subframe_update_flag ); #else - subframe_idx + Src_p->hrf_right_prev, hrf_left_delta, hrf_right_delta, &intp_count, &Src_p->filterlength, &Src_p->itd, &Src_p->Gain, Src_p, subframe_idx ); #endif - ); } /* Render source if needed */ @@ -691,7 +691,7 @@ ivas_error ivas_td_binaural_renderer_ext( AUDIO_CONFIG transport_config; ivas_error error; #ifdef FIX_356_ISM_METADATA_SYNC - int16_t ism_md_subframe_update_ext = 0; + int16_t ism_md_subframe_update_ext; #endif #ifdef JBM_TSM_ON_TCS float *p_output[MAX_OUTPUT_CHANNELS]; @@ -708,6 +708,9 @@ ivas_error ivas_td_binaural_renderer_ext( inConfigType = getAudioConfigType( inConfig ); lfe_idx = LFE_CHANNEL; hIsmMetaData[0] = NULL; +#ifdef FIX_356_ISM_METADATA_SYNC + ism_md_subframe_update_ext = 0; +#endif if ( inConfigType == IVAS_REND_AUDIO_CONFIG_TYPE_CHANNEL_BASED ) { diff --git a/lib_rend/ivas_prot_rend.h b/lib_rend/ivas_prot_rend.h index bcd56aa643..de652e6f98 100644 --- a/lib_rend/ivas_prot_rend.h +++ b/lib_rend/ivas_prot_rend.h @@ -291,10 +291,11 @@ ivas_error TDREND_GetMix( float output[][L_FRAME48k], /* i/o: ISM object synth / rendered output in 0,1 */ #endif const int16_t subframe_length, /* i/o: subframe length */ - const int16_t subframe_idx /* i : Subframe index to 5 ms subframe */ #ifdef FIX_356_ISM_METADATA_SYNC - , + const int16_t subframe_idx, /* i : Subframe index to 5 ms subframe */ const int16_t ism_md_subframe_update /* Number of subframes to delay metadata to sync with audio */ +#else + const int16_t subframe_idx /* i : Subframe index to 5 ms subframe */ #endif ); -- GitLab From bd631ff1c43390f2f851ce21e69429976af60e7a Mon Sep 17 00:00:00 2001 From: Erik Norvell Date: Thu, 25 May 2023 10:41:15 +0200 Subject: [PATCH 5/7] Minor merge fix for compiling without JBM_TSM_ON_TCS --- lib_rend/ivas_objectRenderer.c | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/lib_rend/ivas_objectRenderer.c b/lib_rend/ivas_objectRenderer.c index 875dd5d4a2..24885fe55a 100644 --- a/lib_rend/ivas_objectRenderer.c +++ b/lib_rend/ivas_objectRenderer.c @@ -757,7 +757,7 @@ ivas_error ivas_td_binaural_renderer_ext( #ifdef FIX_356_ISM_METADATA_SYNC if ( ( error = ivas_td_binaural_renderer_unwrap( hReverb, transport_config, pTDRend->hBinRendererTd, num_src, lfe_idx, ivas_format, hIsmMetaData, headRotData->headRotEnabled, ( headRotData != NULL ) ? headRotData->headPositions : NULL, - ( headRotData != NULL ) ? headRotData->Pos : NULL, ism_md_subframe_update, output, output_frame ) ) != IVAS_ERR_OK ) + ( headRotData != NULL ) ? headRotData->Pos : NULL, ism_md_subframe_update_ext, output, output_frame ) ) != IVAS_ERR_OK ) #else if ( ( error = ivas_td_binaural_renderer_unwrap( hReverb, transport_config, pTDRend->hBinRendererTd, num_src, lfe_idx, ivas_format, hIsmMetaData, headRotData->headRotEnabled, ( headRotData != NULL ) ? headRotData->headPositions : NULL, -- GitLab From ce840f8834dfe7eca862b6f5a0e67adf2b58e902 Mon Sep 17 00:00:00 2001 From: Sumeyra Kanik Date: Thu, 25 May 2023 10:51:16 +0200 Subject: [PATCH 6/7] Minor cleanup Cont. --- lib_rend/ivas_objectRenderer.c | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/lib_rend/ivas_objectRenderer.c b/lib_rend/ivas_objectRenderer.c index 24885fe55a..b6427949a0 100644 --- a/lib_rend/ivas_objectRenderer.c +++ b/lib_rend/ivas_objectRenderer.c @@ -374,7 +374,7 @@ ivas_error TDREND_GetMix( const int16_t subframe_idx, /* i : Subframe index to 5 ms subframe */ const int16_t ism_md_subframe_update /* Number of subframes to delay ism metadata to sync with audio */ #else - const int16_t subframe_idx, /* i : Subframe index to 5 ms subframe */ + const int16_t subframe_idx /* i : Subframe index to 5 ms subframe */ #endif ) { -- GitLab From aa7e0f4a407649e8cdbd133017b00ad51bad6306 Mon Sep 17 00:00:00 2001 From: Erik Norvell Date: Thu, 25 May 2023 11:48:08 +0200 Subject: [PATCH 7/7] Add fix for JBM operation under FIX_356_ISM_METADATA_SYNC --- lib_dec/ivas_objectRenderer_internal.c | 10 +++++++++- 1 file changed, 9 insertions(+), 1 deletion(-) diff --git a/lib_dec/ivas_objectRenderer_internal.c b/lib_dec/ivas_objectRenderer_internal.c index 7a44c602cc..1849ce6bdf 100644 --- a/lib_dec/ivas_objectRenderer_internal.c +++ b/lib_dec/ivas_objectRenderer_internal.c @@ -125,7 +125,15 @@ void ObjRenderIVASSubframe( int16_t ism_md_subframe_update_jbm; int16_t c_indx, nS; - ism_md_subframe_update_jbm = st_ivas->hTcBuffer->nb_subframes - 2; /* Number of subframes to delay metadata to sync with audio */ + /* Number of subframes to delay metadata to sync with audio */ + if ( st_ivas->hDecoderConfig->Opt_delay_comp ) + { + ism_md_subframe_update_jbm = max( 0, st_ivas->hTcBuffer->nb_subframes - 3 ); + } + else + { + ism_md_subframe_update_jbm = st_ivas->hTcBuffer->nb_subframes - 2; + } #endif for ( ch = 0; ch < BINAURAL_CHANNELS; ch++ ) -- GitLab