From 741d04bb0a6e5b9ca35546b315c2aecbcd763c07 Mon Sep 17 00:00:00 2001 From: vaclav Date: Fri, 7 Mar 2025 12:46:55 +0100 Subject: [PATCH 1/4] port FIX_911_REMOVE_CREND_DUPLICATION --- lib_com/options.h | 1 + lib_rend/ivas_crend.c | 2 ++ lib_rend/ivas_prot_rend.h | 3 +++ lib_rend/lib_rend.c | 43 ++++++++++++++++++++++++++++++++++++++- 4 files changed, 48 insertions(+), 1 deletion(-) diff --git a/lib_com/options.h b/lib_com/options.h index 8eb059537..5ffd23cb7 100755 --- a/lib_com/options.h +++ b/lib_com/options.h @@ -181,6 +181,7 @@ #define SPLIT_REND_POSE_CORRECTION_UNUSED_BITS #define ISAR_BITSTREAM_UPDATE_LC3PLUS /* FhG: Multiple improvements to the ISAR bitstream when LC3plus is used. See MR 1456 for details. */ #endif +#define FIX_911_REMOVE_CREND_DUPLICATION /* VA: issue 911: resolve duplication of CRend binaural external renderer function */ /* #################### End BASOP porting switches ############################ */ diff --git a/lib_rend/ivas_crend.c b/lib_rend/ivas_crend.c index 710015488..16c856317 100644 --- a/lib_rend/ivas_crend.c +++ b/lib_rend/ivas_crend.c @@ -2045,6 +2045,7 @@ static ivas_error ivas_rend_crendConvolver( return IVAS_ERR_OK; } +#ifndef FIX_911_REMOVE_CREND_DUPLICATION /*-----------------------------------------------------------------------------------------* * Function ivas_rend_crend_Process() * @@ -2214,6 +2215,7 @@ ivas_error ivas_rend_crendProcess( pop_wmops(); return IVAS_ERR_OK; } +#endif /*-----------------------------------------------------------------------------------------* * Function ivas_rend_crendProcessSubframe() diff --git a/lib_rend/ivas_prot_rend.h b/lib_rend/ivas_prot_rend.h index 1e8f7030a..6b8551b72 100644 --- a/lib_rend/ivas_prot_rend.h +++ b/lib_rend/ivas_prot_rend.h @@ -1252,6 +1252,8 @@ ivas_error ivas_rend_initCrendWrapper( CREND_WRAPPER_HANDLE *pCrend #endif ); + +#ifndef FIX_911_REMOVE_CREND_DUPLICATION ivas_error ivas_rend_crendProcess( const CREND_WRAPPER *pCrend, const AUDIO_CONFIG inConfig, @@ -1269,6 +1271,7 @@ ivas_error ivas_rend_crendProcess( const Word16 num_subframes /* i : number of subframes to render */ #endif ); +#endif ivas_error ivas_rend_crendProcessSubframe( const CREND_WRAPPER *pCrend, /* i/o: Crend wrapper handle */ const AUDIO_CONFIG inConfig, /* i : input audio configuration */ diff --git a/lib_rend/lib_rend.c b/lib_rend/lib_rend.c index 8a10c1993..eb03c3abc 100644 --- a/lib_rend/lib_rend.c +++ b/lib_rend/lib_rend.c @@ -5985,10 +5985,14 @@ static ivas_error renderIsmToBinauralRoom( #ifdef SPLIT_REND_WITH_HEAD_ROT /* render 7_1_4 with BRIRs */ +#ifdef FIX_911_REMOVE_CREND_DUPLICATION + IF( NE_32( ( error = ivas_rend_crendProcessSubframe( ismInput->crendWrapper, IVAS_AUDIO_CONFIG_7_1_4, IVAS_AUDIO_CONFIG_BINAURAL_ROOM_IR, NULL, NULL, NULL, NULL, NULL, p_tmpRendBuffer, p_tmpRendBuffer, ismInput->base.inputBuffer.config.numSamplesPerChannel, *ismInput->base.ctx.pOutSampleRate, 0 ) ), IVAS_ERR_OK ) ) +#else IF( NE_32( ( error = ivas_rend_crendProcess( ismInput->crendWrapper, IVAS_AUDIO_CONFIG_7_1_4, IVAS_AUDIO_CONFIG_BINAURAL_ROOM_IR, NULL, NULL, NULL, NULL, p_tmpRendBuffer, *ismInput->base.ctx.pOutSampleRate, getNumSubframesInBuffer( &outAudio, *ismInput->base.ctx.pOutSampleRate ), 0 ) ), IVAS_ERR_OK ) ) +#endif #else /* render 7_1_4 with BRIRs */ IF( NE_32( ( error = ivas_rend_crendProcess( ismInput->crendWrapper, IVAS_AUDIO_CONFIG_7_1_4, IVAS_AUDIO_CONFIG_BINAURAL_ROOM_IR, @@ -6805,9 +6809,13 @@ static ivas_error renderMcToBinaural( /* call CREND */ #ifdef SPLIT_REND_WITH_HEAD_ROT +#ifdef FIX_911_REMOVE_CREND_DUPLICATION + IF( NE_32( ( error = ivas_rend_crendProcessSubframe( mcInput->crendWrapper, mcInput->base.inConfig, outConfig, NULL, NULL, NULL, NULL, NULL, p_tmpRendBuffer_fx, p_tmpRendBuffer_fx, mcInput->base.inputBuffer.config.numSamplesPerChannel, *mcInput->base.ctx.pOutSampleRate, 0 ) ), IVAS_ERR_OK ) ) +#else IF( NE_32( ( error = ivas_rend_crendProcess( mcInput->crendWrapper, mcInput->base.inConfig, outConfig, NULL, NULL, NULL, NULL, p_tmpRendBuffer_fx, *mcInput->base.ctx.pOutSampleRate, getNumSubframesInBuffer( &outAudio, *mcInput->base.ctx.pOutSampleRate ), 0 ) ), IVAS_ERR_OK ) ) +#endif #else IF( NE_32( ( error = ivas_rend_crendProcess( mcInput->crendWrapper, mcInput->base.inConfig, outConfig, NULL, NULL, NULL, NULL, p_tmpRendBuffer_fx, *mcInput->base.ctx.pOutSampleRate, getNumSubframesInBuffer( &outAudio, *mcInput->base.ctx.pOutSampleRate ) ) ), @@ -6816,6 +6824,7 @@ static ivas_error renderMcToBinaural( { return error; } + IF( hCrend->hReverb != NULL ) { exp = sub( exp, 2 ); @@ -6951,9 +6960,13 @@ static ivas_error renderMcToBinauralRoom( /* call CREND */ #ifdef SPLIT_REND_WITH_HEAD_ROT +#ifdef FIX_911_REMOVE_CREND_DUPLICATION + IF( NE_32( ( error = ivas_rend_crendProcessSubframe( mcInput->crendWrapper, mcInput->base.inConfig, outConfig, NULL, NULL, NULL, NULL, NULL, p_tmpRendBuffer, p_tmpRendBuffer, mcInput->base.inputBuffer.config.numSamplesPerChannel, *mcInput->base.ctx.pOutSampleRate, 0 ) ), IVAS_ERR_OK ) ) +#else IF( NE_32( ( error = ivas_rend_crendProcess( mcInput->crendWrapper, mcInput->base.inConfig, outConfig, NULL, NULL, NULL, NULL, p_tmpRendBuffer, *mcInput->base.ctx.pOutSampleRate, getNumSubframesInBuffer( &outAudio, *mcInput->base.ctx.pOutSampleRate ), 0 ) ), IVAS_ERR_OK ) ) +#endif #else IF( NE_32( ( error = ivas_rend_crendProcess( mcInput->crendWrapper, mcInput->base.inConfig, outConfig, NULL, NULL, NULL, NULL, p_tmpRendBuffer, *mcInput->base.ctx.pOutSampleRate, getNumSubframesInBuffer( &outAudio, *mcInput->base.ctx.pOutSampleRate ) ) ), @@ -6962,6 +6975,7 @@ static ivas_error renderMcToBinauralRoom( { return error; } + IF( hCrend->hReverb != NULL ) { exp = sub( exp, Q2 ); @@ -7082,11 +7096,16 @@ static ivas_error renderMcCustomLsToBinauralRoom( #else hCrend = mcInput->crendWrapper->hCrend; #endif + /* call CREND */ #ifdef SPLIT_REND_WITH_HEAD_ROT +#ifdef FIX_911_REMOVE_CREND_DUPLICATION + IF( NE_32( ( error = ivas_rend_crendProcessSubframe( mcInput->crendWrapper, IVAS_AUDIO_CONFIG_7_1_4, outConfig, NULL, NULL, NULL, NULL, NULL, p_tmpCrendBuffer, p_tmpCrendBuffer, mcInput->base.inputBuffer.config.numSamplesPerChannel, *mcInput->base.ctx.pOutSampleRate, 0 ) ), IVAS_ERR_OK ) ) +#else IF( NE_32( ( error = ivas_rend_crendProcess( mcInput->crendWrapper, IVAS_AUDIO_CONFIG_7_1_4, outConfig, NULL, NULL, NULL, NULL, p_tmpCrendBuffer, *mcInput->base.ctx.pOutSampleRate, getNumSubframesInBuffer( &outAudio, *mcInput->base.ctx.pOutSampleRate ), 0 ) ), IVAS_ERR_OK ) ) +#endif #else IF( NE_32( ( error = ivas_rend_crendProcess( mcInput->crendWrapper, IVAS_AUDIO_CONFIG_7_1_4, outConfig, NULL, NULL, NULL, NULL, p_tmpCrendBuffer, *mcInput->base.ctx.pOutSampleRate, getNumSubframesInBuffer( &outAudio, *mcInput->base.ctx.pOutSampleRate ) ) ), @@ -7095,6 +7114,7 @@ static ivas_error renderMcCustomLsToBinauralRoom( { return error; } + IF( hCrend->hReverb != NULL ) { exp = sub( exp, 2 ); @@ -7341,9 +7361,16 @@ static ivas_error renderMcToSplitBinaural( copyBufferTo2dArray_fx( tmpRotBuffer, tmpRendBuffer ); /* call CREND (rotation already performed) */ +#ifdef FIX_911_REMOVE_CREND_DUPLICATION + IF( NE_32( ( error = ivas_rend_crendProcessSubframe( mcInput->crendWrapper, mcInput->base.inConfig, outConfig, NULL, NULL, NULL, NULL, NULL, p_tmpRendBuffer, p_tmpRendBuffer, mcInput->base.inputBuffer.config.numSamplesPerChannel, *mcInput->base.ctx.pOutSampleRate, pos_idx ) ), IVAS_ERR_OK ) ) +#else IF( NE_32( ( error = ivas_rend_crendProcess( mcInput->crendWrapper, mcInput->base.inConfig, outConfig, NULL, NULL, NULL, NULL, p_tmpRendBuffer, *mcInput->base.ctx.pOutSampleRate, getNumSubframesInBuffer( &tmpRotBuffer, *mcInput->base.ctx.pOutSampleRate ), pos_idx ) ), IVAS_ERR_OK ) ) +#endif + { + return error; + } IF( EQ_16( pos_idx, 0 ) ) { @@ -7614,9 +7641,13 @@ static ivas_error renderSbaToMultiBinaural( assert( sbaInput->crendWrapper->hCrend[0]->hReverb == NULL ); /* call CREND */ +#ifdef FIX_911_REMOVE_CREND_DUPLICATION + IF( NE_32( ( error = ivas_rend_crendProcessSubframe( sbaInput->crendWrapper, sbaInput->base.inConfig, outConfig, NULL, NULL, NULL, NULL, NULL, p_tmpCrendBuffer, p_tmpCrendBuffer, sbaInput->base.inputBuffer.config.numSamplesPerChannel, *sbaInput->base.ctx.pOutSampleRate, pos_idx ) ), IVAS_ERR_OK ) ) +#else IF( NE_32( ( error = ivas_rend_crendProcess( sbaInput->crendWrapper, sbaInput->base.inConfig, outConfig, NULL, NULL, NULL, NULL, p_tmpCrendBuffer, *sbaInput->base.ctx.pOutSampleRate, getNumSubframesInBuffer( &tmpRotBuffer, *sbaInput->base.ctx.pOutSampleRate ), pos_idx ) ), IVAS_ERR_OK ) ) +#endif { return error; } @@ -7806,9 +7837,13 @@ static ivas_error renderSbaToBinaural( /* call CREND */ #ifdef SPLIT_REND_WITH_HEAD_ROT +#ifdef FIX_911_REMOVE_CREND_DUPLICATION + IF( NE_32( ( error = ivas_rend_crendProcessSubframe( sbaInput->crendWrapper, sbaInput->base.inConfig, outConfig, NULL, NULL, NULL, NULL, NULL, output_fx, output_fx, sbaInput->base.inputBuffer.config.numSamplesPerChannel, *sbaInput->base.ctx.pOutSampleRate, 0 ) ), IVAS_ERR_OK ) ) +#else IF( NE_32( ( error = ivas_rend_crendProcess( sbaInput->crendWrapper, sbaInput->base.inConfig, outConfig, NULL, NULL, NULL, NULL, output_fx, *sbaInput->base.ctx.pOutSampleRate, getNumSubframesInBuffer( &outAudio, *sbaInput->base.ctx.pOutSampleRate ), 0 ) ), IVAS_ERR_OK ) ) +#endif #else IF( NE_32( ( error = ivas_rend_crendProcess( sbaInput->crendWrapper, sbaInput->base.inConfig, outConfig, NULL, NULL, NULL, NULL, output_fx, *sbaInput->base.ctx.pOutSampleRate, getNumSubframesInBuffer( &outAudio, *sbaInput->base.ctx.pOutSampleRate ) ) ), @@ -7817,6 +7852,7 @@ static ivas_error renderSbaToBinaural( { return error; } + IF( hCrend->hReverb != NULL ) { *outAudio.pq_fact = sub( *outAudio.pq_fact, Q2 ); @@ -7938,10 +7974,14 @@ static ivas_error renderSbaToBinauralRoom( /* call CREND */ #ifdef SPLIT_REND_WITH_HEAD_ROT +#ifdef FIX_911_REMOVE_CREND_DUPLICATION + IF( NE_32( ( error = ivas_rend_crendProcessSubframe( sbaInput->crendWrapper, IVAS_AUDIO_CONFIG_7_1_4, outConfig, NULL, NULL, NULL, NULL, NULL, p_tmpCrendBuffer, p_tmpCrendBuffer, sbaInput->base.inputBuffer.config.numSamplesPerChannel, *sbaInput->base.ctx.pOutSampleRate, 0 ) ), IVAS_ERR_OK ) ) +#else IF( NE_32( ( error = ivas_rend_crendProcess( sbaInput->crendWrapper, IVAS_AUDIO_CONFIG_7_1_4, outConfig, NULL, NULL, NULL, NULL, p_tmpCrendBuffer, *sbaInput->base.ctx.pOutSampleRate, getNumSubframesInBuffer( &outAudio, *sbaInput->base.ctx.pOutSampleRate ), 0 ) ), IVAS_ERR_OK ) ) +#endif #else IF( NE_32( ( error = ivas_rend_crendProcess( sbaInput->crendWrapper, IVAS_AUDIO_CONFIG_7_1_4, outConfig, NULL, NULL, NULL, NULL, p_tmpCrendBuffer, *sbaInput->base.ctx.pOutSampleRate, @@ -7951,6 +7991,7 @@ static ivas_error renderSbaToBinauralRoom( { return error; } + IF( hCrend->hReverb != NULL ) { *outAudio.pq_fact = sub( *outAudio.pq_fact, 2 ); @@ -9041,7 +9082,7 @@ static ivas_error getSamplesInternal( hIvasRend->hRendererConfig->split_rend_config.isar_frame_size_ms, #endif hIvasRend->hRendererConfig->split_rend_config.codec_frame_size_ms, - &bits, Cldfb_RealBuffer_Binaural, Cldfb_ImagBuffer_Binaural, ( const int16_t )( ( BINAURAL_MAXBANDS * hIvasRend->sampleRateOut ) / 48000 ), tmpBinaural, 1, cldfb_in_flag, ( hIvasRend->outputConfig == IVAS_AUDIO_CONFIG_BINAURAL_SPLIT_PCM ) ? 1 : 0, ro_md_flag, Q_buff, &Q_out[0] ) ) != IVAS_ERR_OK ) + &bits, Cldfb_RealBuffer_Binaural, Cldfb_ImagBuffer_Binaural, (const int16_t) ( ( BINAURAL_MAXBANDS * hIvasRend->sampleRateOut ) / 48000 ), tmpBinaural, 1, cldfb_in_flag, ( hIvasRend->outputConfig == IVAS_AUDIO_CONFIG_BINAURAL_SPLIT_PCM ) ? 1 : 0, ro_md_flag, Q_buff, &Q_out[0] ) ) != IVAS_ERR_OK ) { return error; } -- GitLab From 11eac4431761c31b1a3564e11b381c4adb097eb9 Mon Sep 17 00:00:00 2001 From: vaclav Date: Mon, 14 Apr 2025 12:02:25 +0200 Subject: [PATCH 2/4] clang-format --- lib_rend/lib_rend.c | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/lib_rend/lib_rend.c b/lib_rend/lib_rend.c index bb6672443..5babc6af9 100644 --- a/lib_rend/lib_rend.c +++ b/lib_rend/lib_rend.c @@ -9079,7 +9079,7 @@ static ivas_error getSamplesInternal( hIvasRend->hRendererConfig->split_rend_config.isar_frame_size_ms, #endif hIvasRend->hRendererConfig->split_rend_config.codec_frame_size_ms, - &bits, Cldfb_RealBuffer_Binaural, Cldfb_ImagBuffer_Binaural, (const int16_t) ( ( BINAURAL_MAXBANDS * hIvasRend->sampleRateOut ) / 48000 ), tmpBinaural, 1, cldfb_in_flag, ( hIvasRend->outputConfig == IVAS_AUDIO_CONFIG_BINAURAL_SPLIT_PCM ) ? 1 : 0, ro_md_flag, Q_buff, &Q_out[0] ) ) != IVAS_ERR_OK ) + &bits, Cldfb_RealBuffer_Binaural, Cldfb_ImagBuffer_Binaural, ( const int16_t )( ( BINAURAL_MAXBANDS * hIvasRend->sampleRateOut ) / 48000 ), tmpBinaural, 1, cldfb_in_flag, ( hIvasRend->outputConfig == IVAS_AUDIO_CONFIG_BINAURAL_SPLIT_PCM ) ? 1 : 0, ro_md_flag, Q_buff, &Q_out[0] ) ) != IVAS_ERR_OK ) { return error; } -- GitLab From bd63091d93b72ef462f7240bba8ae595e0d9d462 Mon Sep 17 00:00:00 2001 From: vaclav Date: Mon, 14 Apr 2025 14:56:26 +0200 Subject: [PATCH 3/4] fix to ivas_rend_crendProcessSubframe() --- lib_rend/ivas_crend_fx.c | 101 ++++++++++++++++++++++++++++++++------- 1 file changed, 85 insertions(+), 16 deletions(-) diff --git a/lib_rend/ivas_crend_fx.c b/lib_rend/ivas_crend_fx.c index 015da315a..1ab1ba4fc 100644 --- a/lib_rend/ivas_crend_fx.c +++ b/lib_rend/ivas_crend_fx.c @@ -2353,24 +2353,74 @@ ivas_error ivas_rend_crendProcessSubframe( { p_pcm_tmp_fx[ch] = pcm_tmp_fx[ch]; } - slot_size = hTcBuffer->n_samples_granularity; - move16(); - /* loop for synthesis, assume we always have to render in multiples of 5ms subframes with spills */ - slots_to_render = s_min( sub( hTcBuffer->num_slots, hTcBuffer->slots_rendered ), idiv1616( n_samples_to_render, slot_size ) ); - first_sf = hTcBuffer->subframes_rendered; - move16(); - last_sf = first_sf; - move16(); +#ifdef FIX_911_REMOVE_CREND_DUPLICATION + IF( hTcBuffer != NULL ) + { +#endif + slot_size = hTcBuffer->n_samples_granularity; + move16(); - WHILE( slots_to_render > 0 ) + /* loop for synthesis, assume we always have to render in multiples of 5ms subframes with spills */ + slots_to_render = s_min( sub( hTcBuffer->num_slots, hTcBuffer->slots_rendered ), idiv1616( n_samples_to_render, slot_size ) ); + first_sf = hTcBuffer->subframes_rendered; + move16(); + last_sf = first_sf; + move16(); + + WHILE( slots_to_render > 0 ) + { + slots_to_render = sub( slots_to_render, hTcBuffer->subframe_nbslots[last_sf] ); + last_sf = add( last_sf, 1 ); + } + +#ifdef FIX_911_REMOVE_CREND_DUPLICATION + subframe_len = -1; /* will be set later */ + move16(); + } + ELSE { - slots_to_render = sub( slots_to_render, hTcBuffer->subframe_nbslots[last_sf] ); - last_sf = add( last_sf, 1 ); + Word16 n_den, den, last_sf_tmp; + + SWITCH( output_Fs ) + { + case 48000: + subframe_len = L_SUBFRAME_48k; + move16(); + BREAK; + case 32000: + subframe_len = L_SUBFRAME_32k; + move16(); + BREAK; + case 16000: + default: + subframe_len = L_SUBFRAME_16k; + move16(); + BREAK; + } + + first_sf = 0; + move16(); + last_sf = idiv1616( n_samples_to_render, subframe_len ); + + n_den = norm_s( subframe_len ); + den = shl( subframe_len, n_den ); + last_sf_tmp = div_s( n_samples_to_render, den ); + last_sf = shr( last_sf_tmp, sub( 15, n_den ) ); } +#endif + FOR( subframe_idx = first_sf; subframe_idx < last_sf; subframe_idx++ ) { - subframe_len = imult1616( hTcBuffer->subframe_nbslots[subframe_idx], hTcBuffer->n_samples_granularity ); +#ifdef FIX_911_REMOVE_CREND_DUPLICATION + if ( hTcBuffer != NULL ) + { +#endif + subframe_len = imult1616( hTcBuffer->subframe_nbslots[subframe_idx], hTcBuffer->n_samples_granularity ); +#ifdef FIX_911_REMOVE_CREND_DUPLICATION + } +#endif + /* Early Reflections */ IF( hCrend->reflections != NULL ) { @@ -2434,6 +2484,7 @@ ivas_error ivas_rend_crendProcessSubframe( } } #endif + FOR( ch = 0; ch < nchan_in; ch++ ) { tc_local_fx[ch] += subframe_len; @@ -2442,13 +2493,22 @@ ivas_error ivas_rend_crendProcessSubframe( { p_pcm_tmp_fx[ch] += subframe_len; } - hTcBuffer->slots_rendered = add( hTcBuffer->subframe_nbslots[subframe_idx], hTcBuffer->slots_rendered ); - move16(); + +#ifdef FIX_911_REMOVE_CREND_DUPLICATION + if ( hTcBuffer != NULL ) + { +#endif + hTcBuffer->slots_rendered = add( hTcBuffer->subframe_nbslots[subframe_idx], hTcBuffer->slots_rendered ); + move16(); +#ifdef FIX_911_REMOVE_CREND_DUPLICATION + } +#endif } ELSE { return IVAS_ERR_INVALID_INPUT_FORMAT; } + /* update combined orientation access index */ ivas_combined_orientation_update_index( hCombinedOrientationData, subframe_len ); } @@ -2470,14 +2530,23 @@ ivas_error ivas_rend_crendProcessSubframe( } } } + /* move to output */ FOR( ch = 0; ch < nchan_out; ch++ ) { MVR2R_WORD32( pcm_tmp_fx[ch], output[ch], n_samples_to_render ); // Qx } - hTcBuffer->subframes_rendered = last_sf; - move16(); +#ifdef FIX_911_REMOVE_CREND_DUPLICATION + if ( hTcBuffer != NULL ) + { +#endif + hTcBuffer->subframes_rendered = last_sf; + move16(); +#ifdef FIX_911_REMOVE_CREND_DUPLICATION + } +#endif + pop_wmops(); return IVAS_ERR_OK; -- GitLab From 2e7297a1bda3f99d551f3b1e7a1137babbc00edd Mon Sep 17 00:00:00 2001 From: vaclav Date: Mon, 14 Apr 2025 16:15:26 +0200 Subject: [PATCH 4/4] initialize Qfact to 0 --- lib_rend/ivas_crend_fx.c | 5 +++++ 1 file changed, 5 insertions(+) diff --git a/lib_rend/ivas_crend_fx.c b/lib_rend/ivas_crend_fx.c index 1ab1ba4fc..a00bccf21 100644 --- a/lib_rend/ivas_crend_fx.c +++ b/lib_rend/ivas_crend_fx.c @@ -1426,6 +1426,11 @@ ivas_error ivas_rend_initCrendWrapper( ( *pCrend )->binaural_latency_ns = 0; move32(); ( *pCrend )->hHrtfCrend = NULL; +#ifdef FIX_911_REMOVE_CREND_DUPLICATION + ( *pCrend )->io_qfactor = 0; + move16(); + ( *pCrend )->p_io_qfactor = &( *pCrend )->io_qfactor; +#endif #ifdef SPLIT_REND_WITH_HEAD_ROT FOR( pos_idx = 0; pos_idx < num_poses; pos_idx++ ) -- GitLab