Commit 57f24420 authored by Devansh Kandpal's avatar Devansh Kandpal
Browse files

mid-port updates

parent 162e90bd
Loading
Loading
Loading
Loading
+1 −1
Original line number Diff line number Diff line
@@ -112,7 +112,7 @@
#define NONBE_FIX_1058_DECODER_ERROR_WITH_REVERB_ROOM   /* FhG: issue 1058: do not initialize EFAP when IntSetup is HOA3 */


//#define USE_NEW_HRTF_BINARY_FILE_FORMAT                 /* Orange: to activate when decided to change the hrtf binary file format */
#define USE_NEW_HRTF_BINARY_FILE_FORMAT                 /* Orange: to activate when decided to change the hrtf binary file format */
#ifdef USE_NEW_HRTF_BINARY_FILE_FORMAT
#define NONBE_FIX_922_PRECOMPUTED_HRTF_PROPERTIES       /* Philips: Use pre-computed HRTF average L/R energies and IAC in all renderers	*/
#define FIX_638_ENERGIE_IAC_ROM_TABLES                  /* Orange: Missing left/right and coherence late reverb tables in binary format*/
+2 −0
Original line number Diff line number Diff line
@@ -90,10 +90,12 @@ extern const UWord16 *const sym_freq_ECSQ_tab_abs_lsbs[1 + 4];
extern const Word16 dirac_dithering_azi_scale_fx[DIRAC_DIFFUSE_LEVELS];
extern const Word16 dirac_dithering_ele_scale_fx[DIRAC_DIFFUSE_LEVELS];

#ifndef FIX_1053_REVERB_RECONFIGURATION
/*----------------------------------------------------------------------------------*
 * FASTCONV and PARAMETRIC binaural renderer ROM tables
 *----------------------------------------------------------------------------------*/
extern const Word32 dmxmtx_table_fx[BINAURAL_CHANNELS][11];
#endif

/*----------------------------------------------------------------------*
 * MC ParamUpmix ROM tables
+3 −1
Original line number Diff line number Diff line
@@ -141,13 +141,15 @@ typedef struct ivas_reverb_params_t
    // const float *pHrtf_avg_pwr_response_l_const;                                                                                                                          /* The HRTF set's average left  ear power response                                      */
    // const float *pHrtf_avg_pwr_response_r_const;                                                                                                                          /* The HRTF set's average right ear power response                                      */
    // const float *pHrtf_inter_aural_coherence_const;                                                                                                                       /* The HRTF set's inter-aural coherence for diffuse sound                               */

#ifndef FIX_1053_REVERB_RECONFIGURATION
    Word32 *pHrtf_avg_pwr_response_l_fx;                /* The HRTF set's average left  ear power response                                      */
    Word32 *pHrtf_avg_pwr_response_r_fx;                /* The HRTF set's average right ear power response                                      */
    Word32 *pHrtf_inter_aural_coherence_fx;             /* The HRTF set's inter-aural coherence for diffuse sound                               */
    const Word32 *pHrtf_avg_pwr_response_l_const_fx;    /* The HRTF set's average left  ear power response                                      */
    const Word32 *pHrtf_avg_pwr_response_r_const_fx;    /* The HRTF set's average right ear power response                                      */
    const Word32 *pHrtf_inter_aural_coherence_const_fx; /* The HRTF set's inter-aural coherence for diffuse sound                               */
#endif

    Word16 do_corr_filter;                              /* Flag indicating whether correlation filters should be used.                          */
                                                        /*        Correlation only supported and needed for binaural playback (i.e.             */
                                                        /*        when nr_outputs != 2 correlation filtering is never supported).               */
+4 −0
Original line number Diff line number Diff line
@@ -589,6 +589,10 @@ typedef struct ivas_binaural_reverb_struct
    UWord32 binRend_RandNext;
    Word16 highestBinauralCoherenceBin;

#ifndef FIX_1053_REVERB_RECONFIGURATION
    float dmxmtx[BINAURAL_CHANNELS][MAX_OUTPUT_CHANNELS];
#endif

    Word32 dmxmtx_fx[BINAURAL_CHANNELS][MAX_OUTPUT_CHANNELS];
    Word32 foa_enc_fx[MAX_OUTPUT_CHANNELS][FOA_CHANNELS];

+145 −1
Original line number Diff line number Diff line
@@ -5048,8 +5048,17 @@ Word16 IVAS_REND_FeedRenderConfig(
)
{
    RENDER_CONFIG_HANDLE hRenderConfig;
#ifdef FIX_1053_REVERB_RECONFIGURATION
    UWord16 i;
    input_ism *pIsmInput;
    input_masa *pMasaInput;
    input_mc *pMcInput;
    input_sba *pSbaInput;
    ivas_error error;
#else
#ifdef SPLIT_REND_WITH_HEAD_ROT
    ivas_error error;
#endif
#endif

    test();
@@ -5086,6 +5095,141 @@ Word16 IVAS_REND_FeedRenderConfig(
        Copy32( renderConfig.roomAcoustics.AbsCoeff_fx, hRenderConfig->roomAcoustics.AbsCoeff_fx, IVAS_ROOM_ABS_COEFF );
    }

#ifdef FIX_1053_REVERB_RECONFIGURATION
    /* Re-initialize reverb instance if already available */
    /* ISM inputs */
    for ( i = 0, pIsmInput = hIvasRend->inputsIsm; i < RENDERER_MAX_ISM_INPUTS; ++i, ++pIsmInput )
    {
        IF( EQ32( pIsmInput->base.inConfig, IVAS_AUDIO_CONFIG_INVALID ) )
        {
            /* Skip inactive inputs */
            continue;
        }
        if ( pIsmInput->hReverb != NULL )
        {
            IF( NE_32( ( error = ivas_reverb_open( &pIsmInput->hReverb, hIvasRend->hHrtfs.hHrtfStatistics, hRenderConfig, *pIsmInput->base.ctx.pOutSampleRate ) ), IVAS_ERR_OK ) )
            {
                return error;
            }
        }
        if ( pIsmInput->crendWrapper != NULL && pIsmInput->crendWrapper->hCrend != NULL )
        {
#ifdef SPLIT_REND_WITH_HEAD_ROT
            IF( NE_32( ( error = ivas_reverb_open( &pIsmInput->crendWrapper->hCrend[0]->hReverb, hIvasRend->hHrtfs.hHrtfStatistics, hRenderConfig, *pIsmInput->base.ctx.pOutSampleRate ) ), IVAS_ERR_OK ) )
#else
            IF( NE_32( ( error = ivas_reverb_open( &pIsmInput->crendWrapper->hCrend->hReverb, hIvasRend->hHrtfs.hHrtfStatistics, hRenderConfig, *pIsmInput->base.ctx.pOutSampleRate ) ), IVAS_ERR_OK ) )
#endif
            {
                return error;
            }
        }
    }

    /* MASA inputs */
    for ( i = 0, pMasaInput = hIvasRend->inputsMasa; i < RENDERER_MAX_MASA_INPUTS; ++i, ++pMasaInput )
    {
        IF( EQ32( pMasaInput->base.inConfig, IVAS_AUDIO_CONFIG_INVALID ) )
        {
            /* Skip inactive inputs */
            continue;
        }

        if ( pMasaInput->hMasaExtRend != NULL )
        {
#ifdef SPLIT_REND_WITH_HEAD_ROT
            if ( pMasaInput->hMasaExtRend->hDiracDecBin != NULL && pMasaInput->hMasaExtRend->hDiracDecBin[0]->hReverb != NULL )
            {
                ivas_binaural_reverb_close( &pMasaInput->hMasaExtRend->hDiracDecBin[0]->hReverb );
                IF( NE_32( ( error = ivas_binaural_reverb_init( &pMasaInput->hMasaExtRend->hDiracDecBin[0]->hReverb, hIvasRend->hHrtfs.hHrtfStatistics, pMasaInput->hMasaExtRend->hSpatParamRendCom->num_freq_bands, CLDFB_NO_COL_MAX / MAX_PARAM_SPATIAL_SUBFRAMES, &( hRenderConfig->roomAcoustics ), *pMasaInput->base.ctx.pOutSampleRate, NULL, NULL ) ), IVAS_ERR_OK ) )
                {
                    return error;
                }
            }
#else
            if ( pMasaInput->hMasaExtRend->hDiracDecBin != NULL && pMasaInput->hMasaExtRend->hDiracDecBin->hReverb != NULL )
            {
                ivas_binaural_reverb_close( &pMasaInput->hMasaExtRend->hDiracDecBin->hReverb );
                IF( NE_32( ( error = ivas_binaural_reverb_init( &pMasaInput->hMasaExtRend->hDiracDecBin->hReverb, hIvasRend->hHrtfs.hHrtfStatistics, pMasaInput->hMasaExtRend->hSpatParamRendCom->num_freq_bands, CLDFB_NO_COL_MAX / MAX_PARAM_SPATIAL_SUBFRAMES, &( hRenderConfig->roomAcoustics ), *pMasaInput->base.ctx.pOutSampleRate, NULL, NULL ) ), IVAS_ERR_OK ) )
                {
                    return error;
                }
            }
#endif
            if ( pMasaInput->hMasaExtRend->hReverb != NULL )
            {
                ivas_binaural_reverb_close( &pMasaInput->hMasaExtRend->hReverb );
                IF( NE_32( ( error = ivas_binaural_reverb_init( &pMasaInput->hMasaExtRend->hReverb, hIvasRend->hHrtfs.hHrtfStatistics, pMasaInput->hMasaExtRend->hSpatParamRendCom->num_freq_bands, CLDFB_NO_COL_MAX / MAX_PARAM_SPATIAL_SUBFRAMES, &( hRenderConfig->roomAcoustics ), *pMasaInput->base.ctx.pOutSampleRate, NULL, NULL ) ), IVAS_ERR_OK ) )
                {
                    return error;
                }
            }
        }
    }

    /* Multi-channel inputs */
    for ( i = 0, pMcInput = hIvasRend->inputsMc; i < RENDERER_MAX_MC_INPUTS; ++i, ++pMcInput )
    {
        IF( EQ32( pMcInput->base.inConfig, IVAS_AUDIO_CONFIG_INVALID ) )
        {
            /* Skip inactive inputs */
            continue;
        }

        if ( pMcInput->hReverb != NULL )
        {
            IF( NE_32( ( error = ivas_reverb_open( &pMcInput->hReverb, hIvasRend->hHrtfs.hHrtfStatistics, hRenderConfig, *pMcInput->base.ctx.pOutSampleRate ) ), IVAS_ERR_OK ) )
            {
                return error;
            }
        }
#ifdef SPLIT_REND_WITH_HEAD_ROT
        if ( pMcInput->crendWrapper != NULL && pMcInput->crendWrapper->hCrend && pMcInput->crendWrapper->hCrend[0]->hReverb != NULL )
        {
            IF( NE_32( ( error = ivas_reverb_open( &pMcInput->crendWrapper->hCrend[0]->hReverb, hIvasRend->hHrtfs.hHrtfStatistics, hRenderConfig, *pMcInput->base.ctx.pOutSampleRate ) ), IVAS_ERR_OK ) )
            {
                return error;
            }
        }
#else
        if ( pMcInput->crendWrapper != NULL && pMcInput->crendWrapper->hCrend && pMcInput->crendWrapper->hCrend->hReverb != NULL )
        {
            IF( NE_32( ( error = ivas_reverb_open( &pMcInput->crendWrapper->hCrend->hReverb, hIvasRend->hHrtfs.hHrtfStatistics, hRenderConfig, *pMcInput->base.ctx.pOutSampleRate ) ), IVAS_ERR_OK ) )
            {
                return error;
            }
        }
#endif
    }

    /* SBA inputs */
    for ( i = 0, pSbaInput = hIvasRend->inputsSba; i < RENDERER_MAX_SBA_INPUTS; ++i, ++pSbaInput )
    {
        IF ( EQ32( pSbaInput->base.inConfig, IVAS_AUDIO_CONFIG_INVALID ) )
        {
            /* Skip inactive inputs */
            continue;
        }

#ifdef SPLIT_REND_WITH_HEAD_ROT
        if ( pSbaInput->crendWrapper != NULL && pSbaInput->crendWrapper->hCrend != NULL && pSbaInput->crendWrapper->hCrend[0]->hReverb != NULL )
        {
            IF ( NE_32( ( error = ivas_reverb_open( &pSbaInput->crendWrapper->hCrend[0]->hReverb, hIvasRend->hHrtfs.hHrtfStatistics, hRenderConfig, *pSbaInput->base.ctx.pOutSampleRate ) ), IVAS_ERR_OK ) )
            {
                return error;
            }
        }
#else
        if ( pSbaInput->crendWrapper != NULL && pSbaInput->crendWrapper->hCrend != NULL && pSbaInput->crendWrapper->hCrend->hReverb != NULL )
        {
            IF (NE_32( ( error = ivas_reverb_open( &pSbaInput->crendWrapper->hCrend->hReverb, hIvasRend->hHrtfs.hHrtfStatistics, hRenderConfig, *pSbaInput->base.ctx.pOutSampleRate ) ), IVAS_ERR_OK ) )
            {
                return error;
            }
        }
#endif
    }
#endif

#ifdef SPLIT_REND_WITH_HEAD_ROT
    hRenderConfig->split_rend_config = renderConfig.split_rend_config;
    /* Overwrite any pose correction settings if 0 DOF (no pose correction) was selected */
Loading