Commit ac86a566 authored by multrus's avatar multrus
Browse files

merge from main

parents df255618 d5d268e9
Loading
Loading
Loading
Loading
Loading
+4 −1
Original line number Diff line number Diff line
@@ -83,8 +83,11 @@
#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 */
#define FIX_1931_BIN_COHR_CROSS_MIX                          /* FhG: correct binauralCoherenceCrossmixGains_fx calculation */
#define FIX_1819_EIGENVALUE_ERROR                            /* FhG: Workaround for zero eigenvalue: replace with epsilon if det != 0*/


/* #################### Start BASOP porting switches ############################ */

#define FIX_1372_ISAR_POST_REND
+14 −6
Original line number Diff line number Diff line
@@ -236,6 +236,11 @@ static void ivas_binaural_reverb_setReverbTimes_fx(
        L_tmp = Mpy_32_16_1( output_Fs, tmp ); /*- exp */
        binCenterFreq_exp = add( 31, exp );
        binCenterFreq_fx = L_shr( L_tmp, 1 ); // divide by 2
#ifdef FIX_1931_BIN_COHR_CROSS_MIX
        norm = norm_l( binCenterFreq_fx );
        binCenterFreq_fx = L_shl( binCenterFreq_fx, norm );
        binCenterFreq_exp = sub( binCenterFreq_exp, norm );
#endif
        IF( bin == 0 )
        {
            diffuseFieldICC_fx = ONE_IN_Q31;
@@ -259,9 +264,12 @@ static void ivas_binaural_reverb_setReverbTimes_fx(

            /* binCenterFreq / 2700.0f */
            L_tmp = Mpy_32_32( binCenterFreq_fx, 795364 /* 1 / 2700 in Q31 */ );
#ifdef FIX_1931_BIN_COHR_CROSS_MIX
            L_tmp = L_shl( L_tmp, binCenterFreq_exp ); /* Q31 */
#else
            norm = norm_l( L_tmp );
            L_tmp = L_shl( L_tmp, norm ); /* Q31 */

#endif
            /* ( 1.0f - binCenterFreq / 2700.0f ) */
            L_tmp = L_sub( ONE_IN_Q31, L_tmp ); /* Q31 */

+37 −1
Original line number Diff line number Diff line
@@ -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 ) )
    {