diff --git a/lib_com/options.h b/lib_com/options.h index 9730f271a66ebc87bfa1b1d5afffe2965995a320..ac4ec92a18b1faf6eec1835c2d57853c27a597c9 100644 --- a/lib_com/options.h +++ b/lib_com/options.h @@ -83,6 +83,7 @@ #define FIX_1766_TCX2ACELP_BWE_ISSUE /* VA : Fix rare BWE issue when switching from TCX to ACELP */ #define FIX_1781_SPECTRAL_GAPS /* FhG: Change internal calculation of tcx_noise_factor_ivas_fx() to 32-bit*/ #define FIX_ISSUE_1811_EXCEEDING_W_SHIFTS /* FhG: limit exceeding 64bit shifts */ +#define FIX_1843_IO_QFACTOR_INIT /* FhG: initialize CRend's io_qfactor also in IVAS_rend */ /* #################### Start BASOP porting switches ############################ */ diff --git a/lib_rend/lib_rend_fx.c b/lib_rend/lib_rend_fx.c index 75a6de0d686c94cf6dff5de74ad1548d8f65e7e5..14813f619a116fe1eceeb7f871c92d6e73b98c59 100644 --- a/lib_rend/lib_rend_fx.c +++ b/lib_rend/lib_rend_fx.c @@ -246,8 +246,11 @@ static void freeMasaExtRenderer( MASA_EXT_REND_HANDLE *hMasaExtRendOut ); static void intermidiate_ext_dirac_render( MASA_EXT_REND_HANDLE hMasaExtRend, Word16 to_fix ); static ivas_error renderSbaToMultiBinauralCldfb( input_sba *sbaInput, Word32 Cldfb_Out_Real[][CLDFB_NO_COL_MAX][CLDFB_NO_CHANNELS_MAX], Word32 Cldfb_Out_Imag[][CLDFB_NO_COL_MAX][CLDFB_NO_CHANNELS_MAX], const Word16 low_res_pre_rend_rot, const Word16 num_subframes, const Word16 Q_in ); - +#ifdef FIX_1843_IO_QFACTOR_INIT +static ivas_error renderSbaToMultiBinaural( input_sba *sbaInput, const AUDIO_CONFIG outConfig, Word32 out[][L_FRAME48k], const Word16 *pq_fact ); +#else static ivas_error renderSbaToMultiBinaural( input_sba *sbaInput, const AUDIO_CONFIG outConfig, Word32 out[][L_FRAME48k] ); +#endif /*-------------------------------------------------------------------* @@ -6080,6 +6083,9 @@ static ivas_error renderIsmToBinauralRoom( move16(); +#ifdef FIX_1843_IO_QFACTOR_INIT + *ismInput->crendWrapper->p_io_qfactor = *exp; +#endif /* render 7_1_4 with BRIRs */ 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 ) ) { @@ -6820,6 +6826,9 @@ static ivas_error renderMcToBinaural( CREND_HANDLE hCrend; hCrend = mcInput->crendWrapper->hCrend[0]; +#ifdef FIX_1843_IO_QFACTOR_INIT + *mcInput->crendWrapper->p_io_qfactor = exp; +#endif /* call CREND */ 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 ) ) { @@ -6941,6 +6950,9 @@ static ivas_error renderMcToBinauralRoom( CREND_HANDLE hCrend; hCrend = mcInput->crendWrapper->hCrend[0]; +#ifdef FIX_1843_IO_QFACTOR_INIT + *mcInput->crendWrapper->p_io_qfactor = exp; +#endif /* call CREND */ 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 ) ) { @@ -7053,6 +7065,9 @@ static ivas_error renderMcCustomLsToBinauralRoom( CREND_HANDLE hCrend; hCrend = mcInput->crendWrapper->hCrend[0]; +#ifdef FIX_1843_IO_QFACTOR_INIT + *mcInput->crendWrapper->p_io_qfactor = exp; +#endif /* call CREND */ 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 ) ) { @@ -7292,6 +7307,9 @@ static ivas_error renderMcToSplitBinaural( copyBufferTo2dArray_fx( tmpRotBuffer, tmpRendBuffer ); +#ifdef FIX_1843_IO_QFACTOR_INIT + *mcInput->crendWrapper->p_io_qfactor = exp; +#endif /* call CREND (rotation already performed) */ 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 ) ) { @@ -7475,7 +7493,12 @@ static void renderSbaToSba( static ivas_error renderSbaToMultiBinaural( input_sba *sbaInput, const AUDIO_CONFIG outConfig, +#ifdef FIX_1843_IO_QFACTOR_INIT + Word32 out[][L_FRAME48k], + const Word16 *pq_fact ) +#else Word32 out[][L_FRAME48k] ) +#endif { Word32 tmpCrendBuffer[MAX_OUTPUT_CHANNELS][L_FRAME48k]; Word32 *p_tmpCrendBuffer[MAX_OUTPUT_CHANNELS]; @@ -7560,6 +7583,9 @@ static ivas_error renderSbaToMultiBinaural( assert( sbaInput->crendWrapper->hCrend[0]->hReverb == NULL ); +#ifdef FIX_1843_IO_QFACTOR_INIT + *sbaInput->crendWrapper->p_io_qfactor = *pq_fact; +#endif /* call CREND */ 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 ) ) { @@ -7632,7 +7658,11 @@ static ivas_error renderSbaToSplitBinaural( } else { +#ifdef FIX_1843_IO_QFACTOR_INIT + IF( ( error = renderSbaToMultiBinaural( sbaInput, outConfig, tmpCrendBuffer, outAudio.pq_fact ) ) != IVAS_ERR_OK ) +#else IF( ( error = renderSbaToMultiBinaural( sbaInput, outConfig, tmpCrendBuffer ) ) != IVAS_ERR_OK ) +#endif { return error; } @@ -7731,6 +7761,9 @@ static ivas_error renderSbaToBinaural( CREND_HANDLE hCrend; hCrend = sbaInput->crendWrapper->hCrend[0]; +#ifdef FIX_1843_IO_QFACTOR_INIT + *sbaInput->crendWrapper->p_io_qfactor = *outAudio.pq_fact; +#endif /* call CREND */ 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 ) ) { @@ -7843,6 +7876,9 @@ static ivas_error renderSbaToBinauralRoom( } copyBufferTo2dArray_fx( tmpMcBuffer, tmpCrendBuffer ); +#ifdef FIX_1843_IO_QFACTOR_INIT + *sbaInput->crendWrapper->p_io_qfactor = *outAudio.pq_fact; +#endif /* call CREND */ 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 ) ) {