Commit 6c8e1ff6 authored by emerit's avatar emerit
Browse files

fix sba + reverb

parent ac21387f
Loading
Loading
Loading
Loading
+211 −278
Original line number Diff line number Diff line
@@ -56,7 +56,6 @@

#ifdef FIX_POINT_HRTF_FILE_OPTIM
ivas_error ivas_Crend_hrtf_init(
    HRTFS_CREND_DATA *hHrtf_in, /* i/o: HRTF handle     */
    HRTFS_CREND_DATA *hHrtf /* i/o: HRTF handle     */
)
#else
@@ -72,8 +71,6 @@ ivas_error ivas_hrtf_init(
        return IVAS_ERR_WRONG_PARAMS;
    }

    IF( hHrtf_in == NULL )
    {
    hHrtf->latency_s_fx = 0;
    hHrtf->gain_lfe_fx = 0;
    hHrtf->max_num_ir = 0;
@@ -134,76 +131,11 @@ ivas_error ivas_hrtf_init(
        hHrtf->pOut_to_bin_diffuse_im_dyn_fx[j] = NULL;
#endif
    }
    }
    else
    {
        hHrtf->latency_s_fx = hHrtf_in->latency_s_fx;
        hHrtf->gain_lfe_fx = hHrtf_in->gain_lfe_fx;
        hHrtf->max_num_ir = hHrtf_in->max_num_ir;
        hHrtf->max_num_iterations = hHrtf_in->max_num_iterations;
        hHrtf->index_frequency_max_diffuse = hHrtf_in->index_frequency_max_diffuse;
        move32();
        move16();
        move16();
        move16();
        move16();
#ifdef FIX_POINT_CREND_HRTF_FILE_FORMAT
        hHrtf->factor_Q_latency_s_fx = hHrtf_in->factor_Q_latency_s_fx;
        move16();
        hHrtf->factor_Q_inv_diffuse_weight = hHrtf_in->factor_Q_inv_diffuse_weight;
        move16();
        hHrtf->factor_Q_pOut_to_bin = hHrtf_in->factor_Q_pOut_to_bin;
        move16();
        hHrtf->same_inv_diffuse_weight = hHrtf_in->same_inv_diffuse_weight;
        move16();
#endif

        FOR( i = 0; i < MAX_INTERN_CHANNELS; i++ )
        {
#ifndef FIX_POINT_CREND_HRTF_FILE_FORMAT
            hHrtf->inv_diffuse_weight_fx[i] = hHrtf_in->inv_diffuse_weight_fx[i];
            move16();
#endif
            FOR( j = 0; j < BINAURAL_CHANNELS; j++ )
            {
#ifdef FIX_POINT_CREND_HRTF_FILE_FORMAT
                hHrtf->inv_diffuse_weight_fx[j][i] = hHrtf_in->inv_diffuse_weight_fx[i][j];
                move16();
#endif
                hHrtf->num_iterations[i][j] = hHrtf_in->num_iterations[i][j];
                move16();
                hHrtf->pIndex_frequency_max[i][j] = hHrtf_in->pIndex_frequency_max[i][j];
                hHrtf->pOut_to_bin_re_fx[i][j] = hHrtf_in->pOut_to_bin_re_fx[i][j];
                hHrtf->pOut_to_bin_im_fx[i][j] = hHrtf_in->pOut_to_bin_im_fx[i][j];
#ifdef FIX_POINT_CREND_HRTF_FILE_FORMAT
                hHrtf->pIndex_frequency_max_dyn[i][j] = hHrtf_in->pIndex_frequency_max_dyn[i][j];
                hHrtf->pOut_to_bin_re_dyn_fx[i][j] = hHrtf_in->pOut_to_bin_re_dyn_fx[i][j];
                hHrtf->pOut_to_bin_im_dyn_fx[i][j] = hHrtf_in->pOut_to_bin_im_dyn_fx[i][j];

#endif
            }
        }

        FOR( j = 0; j < BINAURAL_CHANNELS; j++ )
        {
            hHrtf->num_iterations_diffuse[j] = hHrtf_in->num_iterations_diffuse[j];
            move16();
            hHrtf->pIndex_frequency_max_diffuse[j] = hHrtf_in->pIndex_frequency_max_diffuse[j];

            hHrtf->pOut_to_bin_diffuse_re_fx[j] = hHrtf_in->pOut_to_bin_diffuse_re_fx[j];
            hHrtf->pOut_to_bin_diffuse_im_fx[j] = hHrtf_in->pOut_to_bin_diffuse_im_fx[j];
#ifdef FIX_POINT_CREND_HRTF_FILE_FORMAT
            hHrtf->pIndex_frequency_max_diffuse_dyn[j] = hHrtf_in->pIndex_frequency_max_diffuse_dyn[j];
            hHrtf->pOut_to_bin_diffuse_re_dyn_fx[j] = hHrtf_in->pOut_to_bin_diffuse_re_dyn_fx[j];
            hHrtf->pOut_to_bin_diffuse_im_dyn_fx[j] = hHrtf_in->pOut_to_bin_diffuse_im_dyn_fx[j];
#endif
        }
    }

#ifdef FIX_POINT_CREND_HRTF_FILE_FORMAT
    hHrtf->init_from_rom = 1;
    move16();
#endif

    return IVAS_ERR_OK;
}

@@ -221,6 +153,8 @@ static ivas_error ivas_hrtf_open(
    ivas_error error;

    IF( *hHrtf_out == NULL )
    {
        if ( hHrtf_in == NULL )
        {
            IF( ( hHrtf = (HRTFS_HANDLE) malloc( sizeof( HRTFS_DATA ) ) ) == NULL )
            {
@@ -228,7 +162,7 @@ static ivas_error ivas_hrtf_open(
            }

#ifdef FIX_POINT_HRTF_FILE_OPTIM
        IF( NE_32( ( error = ivas_Crend_hrtf_init( hHrtf_in, hHrtf ) ), IVAS_ERR_OK ) )
            IF( NE_32( ( error = ivas_Crend_hrtf_init( hHrtf ) ), IVAS_ERR_OK ) )
#else
            IF( NE_32( ( error = ivas_hrtf_init( hHrtf ) ), IVAS_ERR_OK ) )
#endif
@@ -238,6 +172,11 @@ static ivas_error ivas_hrtf_open(

            *hHrtf_out = hHrtf;
        }
        else
        {
            *hHrtf_out = hHrtf_in;
        }
    }
    ELSE
    {
        return IVAS_ERR_INTERNAL;
@@ -321,15 +260,6 @@ static ivas_error ivas_rend_initCrend_fx(
        {
            return error;
        }
        IF( hHrtfCrend != NULL )
        {
            hHrtf->init_from_rom = 0;
        }
        ELSE
        {
            hHrtf->init_from_rom = 1;
        }
        move16();
#else
        IF( NE_32( ivas_hrtf_open( &hHrtf ), IVAS_ERR_OK ) )
        {
@@ -350,7 +280,7 @@ static ivas_error ivas_rend_initCrend_fx(
        return IVAS_ERR_INTERNAL_FATAL;
    }

    IF( hHrtf->init_from_rom )
    IF( hHrtf->init_from_rom == 1 )
    {
        IF( EQ_16( inConfigType, IVAS_REND_AUDIO_CONFIG_TYPE_CHANNEL_BASED ) )
        {
@@ -1090,6 +1020,8 @@ static ivas_error ivas_rend_initCrend_fx(
        }
    }
    ELSE
    {
        if ( hHrtf->init_from_rom == 0 )
        {
            IF( EQ_16( inConfigType, IVAS_REND_AUDIO_CONFIG_TYPE_CHANNEL_BASED ) )
            {
@@ -1181,6 +1113,8 @@ static ivas_error ivas_rend_initCrend_fx(
#undef WMC_TOOL_SKIP
                }
            }
            hHrtf->init_from_rom = inConfig;
        }
    }

    hHrtf->same_inv_diffuse_weight = 1;
@@ -2830,7 +2764,7 @@ void ivas_rend_closeCrend(
    }

#ifdef FIX_POINT_CREND_HRTF_FILE_FORMAT
    IF( ( *pCrend )->hHrtfCrend != NULL && ( *pCrend )->hHrtfCrend->init_from_rom )
    IF( ( *pCrend )->hHrtfCrend != NULL && ( *pCrend )->hHrtfCrend->init_from_rom == 1 )
#else
    IF( ( *pCrend )->hHrtfCrend != NULL )
#endif
@@ -2838,7 +2772,6 @@ void ivas_rend_closeCrend(
        ivas_hrtf_close( &( *pCrend )->hHrtfCrend );
    }

    {
    hCrend = ( *pCrend )->hCrend;
    IF( hCrend != NULL )
    {
@@ -2931,7 +2864,7 @@ void ivas_rend_closeCrend(
        hCrend = NULL;
        ( *pCrend )->hCrend = hCrend;
    }
    }


    free( *pCrend );
    *pCrend = NULL;
+1 −1
Original line number Diff line number Diff line
@@ -105,7 +105,7 @@ ivas_error ivas_HRTF_CRend_binary_open_fx(
        return IVAS_ERROR( IVAS_ERR_FAILED_ALLOC, "Can not allocate memory for Crend HRTFS Handle\n" );
    }

    if ( ( error = ivas_Crend_hrtf_init( NULL, *hHrtfCrend ) ) != IVAS_ERR_OK )
    if ( ( error = ivas_Crend_hrtf_init( *hHrtfCrend ) ) != IVAS_ERR_OK )
    {
        return error;
    }
+0 −1
Original line number Diff line number Diff line
@@ -1315,7 +1315,6 @@ void ivas_rend_closeCrend(

#ifdef FIX_POINT_HRTF_FILE_OPTIM
ivas_error ivas_Crend_hrtf_init(
    HRTFS_CREND_DATA *hHrtf_in, /* i/o: HRTF handle     */
    HRTFS_CREND_DATA *hHrtf /* i/o: HRTF handle     */
);
#else
+6 −1
Original line number Diff line number Diff line
@@ -2718,6 +2718,9 @@ static ivas_error updateSbaPanGains(
            SWITCH( outConfig )
            {
                case IVAS_AUDIO_CONFIG_BINAURAL:
#ifdef FIX_POINT_HRTF_FILE_FORMAT_REVERB
                case IVAS_AUDIO_CONFIG_BINAURAL_ROOM_REVERB:
#endif
                {
#ifdef FIX_POINT_HRTF_FILE_FORMAT_REVERB
                    IF( NE_32( ( error = ivas_rend_openCrend( &inputSba->crendWrapper, inConfig, outConfig, hRendCfg, hMixconv, hHrtfStatistics, *rendCtx.pOutSampleRate ) ), IVAS_ERR_OK ) )
@@ -2730,7 +2733,9 @@ static ivas_error updateSbaPanGains(
                }
                    BREAK;
                case IVAS_AUDIO_CONFIG_BINAURAL_ROOM_IR:
#ifndef FIX_POINT_HRTF_FILE_FORMAT_REVERB
                case IVAS_AUDIO_CONFIG_BINAURAL_ROOM_REVERB:
#endif
                    IF( NE_32( ( error = initSbaPanGainsForMcOut( inputSba, IVAS_AUDIO_CONFIG_7_1_4, NULL ) ), IVAS_ERR_OK ) )
                    {
                        return error;
@@ -6760,10 +6765,10 @@ static ivas_error renderInputSba(
            SWITCH( outConfig )
            {
                case IVAS_AUDIO_CONFIG_BINAURAL:
                case IVAS_AUDIO_CONFIG_BINAURAL_ROOM_REVERB:
                    error = renderSbaToBinaural( sbaInput, outConfig, outAudio );
                    BREAK;
                case IVAS_AUDIO_CONFIG_BINAURAL_ROOM_IR:
                case IVAS_AUDIO_CONFIG_BINAURAL_ROOM_REVERB:
                    error = renderSbaToBinauralRoom( sbaInput, outConfig, outAudio );
                    BREAK;
                default: