Commit 02c6a02e authored by emerit's avatar emerit
Browse files

fix parambin early reflection energy saturation

parent d6df0dc8
Loading
Loading
Loading
Loading
Loading
+1 −0
Original line number Diff line number Diff line
@@ -132,6 +132,7 @@
#define FIX_FLOAT_1578_OMASA_REND_SPIKES                /* Nokia: Float issue 1578: Fix spikes and collapsed perception in OMASA/MASA rendering to FOA/HOA */
#define FIX_1521_SBA_LOUDNESS_STEREO                    /* FhG: issue 1521: Fix loudness for SBA to stereo rendering */
#define FIX_1559                                        /* Eri/FhG: fix for Issue 1559 in FD CNG with bitrate/bw switching */
#define FIX_FLOAT_1134_BRIR_LEVEL                       /* Orange : Float issue 1134: change BRIR level */

/* ##################### End NON-BE switches ########################### */

+18 −1
Original line number Diff line number Diff line
@@ -268,15 +268,27 @@ ivas_error ivas_dirac_dec_init_binaural_data_fx(
            IF( EQ_32( st_ivas->hDecoderConfig->output_config, IVAS_AUDIO_CONFIG_BINAURAL_ROOM_IR ) )
            {
                Copy32( ( *phHrtfParambin )->parametricEarlyPartEneCorrection_fx, hDiracDecBin->earlyPartEneCorrection_fx, nBins );
#ifdef FIX_FLOAT_1134_BRIR_LEVEL
                hDiracDecBin->q_earlyPartEneCorrection = ( *phHrtfParambin )->parametricEarlyPartEneCorrection_Q;
                move16();
#else
                hDiracDecBin->q_earlyPartEneCorrection = Q28;
#endif
                pRoomAcoustics = NULL;
            }
            ELSE
            {
                set32_fx( hDiracDecBin->earlyPartEneCorrection_fx, ONE_IN_Q28, CLDFB_NO_CHANNELS_MAX );
#ifdef FIX_FLOAT_1134_BRIR_LEVEL
                hDiracDecBin->q_earlyPartEneCorrection = Q28;
                move16();
#endif
                pRoomAcoustics = &( st_ivas->hRenderConfig->roomAcoustics );
            }
#ifndef FIX_FLOAT_1134_BRIR_LEVEL
            hDiracDecBin->q_earlyPartEneCorrection = Q28;
            move16();
#endif

            /* reconfiguration needed when Reverb. parameters are changed -> close and open the handle again */
            test();
@@ -484,7 +496,12 @@ ivas_error ivas_dirac_dec_binaural_copy_hrtfs_fx(

        Copy_Scale_sig_16_32_r( parametricReverberationTimes_fx, hrtfParambin->parametricReverberationTimes_fx, CLDFB_NO_CHANNELS_MAX, Q26 - parametricReverberationTimes_factorQ_fx );                            /*Q26*/
        Copy_Scale_sig_16_32_r( parametricReverberationEneCorrections_fx, hrtfParambin->parametricReverberationEneCorrections_fx, CLDFB_NO_CHANNELS_MAX, Q31 - parametricReverberationEneCorrections_factorQ_fx ); /*Q31*/
#ifdef FIX_FLOAT_1134_BRIR_LEVEL
        hrtfParambin->parametricEarlyPartEneCorrection_Q = Q31 - ( Q15 - parametricEarlyPartEneCorrection_factorQ_fx );
        Copy_Scale_sig_16_32_r( parametricEarlyPartEneCorrection_fx, hrtfParambin->parametricEarlyPartEneCorrection_fx, CLDFB_NO_CHANNELS_MAX, Q16 ); /*Q28*/
#else
        Copy_Scale_sig_16_32_r( parametricEarlyPartEneCorrection_fx, hrtfParambin->parametricEarlyPartEneCorrection_fx, CLDFB_NO_CHANNELS_MAX, Q28 - parametricEarlyPartEneCorrection_factorQ_fx ); /*Q28*/
#endif

        *hHrtfParambin = hrtfParambin;

+3 −1
Original line number Diff line number Diff line
@@ -593,7 +593,9 @@ typedef struct ivas_hrtf_parambin_struct
    Word32 parametricReverberationTimes_fx[CLDFB_NO_CHANNELS_MAX];          /* Q26 */
    Word32 parametricReverberationEneCorrections_fx[CLDFB_NO_CHANNELS_MAX]; /* Q31 */
    Word32 parametricEarlyPartEneCorrection_fx[CLDFB_NO_CHANNELS_MAX];      /* Q28 */

#ifdef FIX_FLOAT_1134_BRIR_LEVEL
    Word16 parametricEarlyPartEneCorrection_Q;
#endif
} HRTFS_PARAMBIN, *HRTFS_PARAMBIN_HANDLE;

/* Parametric binaural data structure */
+12 −0
Original line number Diff line number Diff line
@@ -11013,15 +11013,27 @@ static ivas_error ivas_masa_ext_rend_parambin_init(
            IF( EQ_32( *inputMasa->base.ctx.pOutConfig, IVAS_AUDIO_CONFIG_BINAURAL_ROOM_IR ) )
            {
                Copy32( ( *phHrtfParambin )->parametricEarlyPartEneCorrection_fx, hDiracDecBin->earlyPartEneCorrection_fx, nBins );
#ifdef FIX_FLOAT_1134_BRIR_LEVEL
                hDiracDecBin->q_earlyPartEneCorrection = ( *phHrtfParambin )->parametricEarlyPartEneCorrection_Q;
                move16();
#else
                hDiracDecBin->q_earlyPartEneCorrection = Q28;
#endif
                pRoomAcoustics = NULL;
            }
            ELSE
            {
                set32_fx( hDiracDecBin->earlyPartEneCorrection_fx, ONE_IN_Q28, CLDFB_NO_CHANNELS_MAX );
#ifdef FIX_FLOAT_1134_BRIR_LEVEL
                hDiracDecBin->q_earlyPartEneCorrection = Q28;
                move16();
#endif
                pRoomAcoustics = &( hRendCfg->roomAcoustics );
            }
#ifndef FIX_FLOAT_1134_BRIR_LEVEL
            hDiracDecBin->q_earlyPartEneCorrection = Q28;
            move16();
#endif

            IF( hDiracDecBin->hReverb == NULL && pos_idx == 0 ) /* open reverb only for the main direction */
            {
+7 −0
Original line number Diff line number Diff line
@@ -1523,11 +1523,18 @@ static ivas_error create_parambin_HRTF_from_rawdata(
    /* Q factor*/
    factorQ = *( (Word16 *) ( hrtf_data_rptr ) );
    hrtf_data_rptr += sizeof( Word16 );
#ifdef FIX_FLOAT_1134_BRIR_LEVEL
    ( *hHRTF )->parametricEarlyPartEneCorrection_Q = factorQ;
#endif

    ptW16 = (Word16 *) hrtf_data_rptr;
    for ( j = 0; j < CLDFB_NO_CHANNELS_MAX; j++ )
    {
#ifdef FIX_FLOAT_1134_BRIR_LEVEL
        ( *hHRTF )->parametricEarlyPartEneCorrection_fx[j] = L_deposit_h( ptW16[j] );
#else
        ( *hHRTF )->parametricEarlyPartEneCorrection_fx[j] = L_shl_r( L_deposit_l( ptW16[j] ), Q28 - factorQ );
#endif
    }
    hrtf_data_rptr += CLDFB_NO_CHANNELS_MAX * sizeof( Word16 );