Loading lib_com/ivas_cnst.h +9 −0 Original line number Diff line number Diff line Loading @@ -1672,13 +1672,22 @@ typedef enum typedef enum { TDREND_POSTYPE_ABSOLUTE, /* The source position is in absolute coordinates */ #ifdef FIX_550_FIRST_FRAME_ACCESS_ALT TDREND_POSTYPE_NON_DIEGETIC /* The source position is non-diegetic */ #else TDREND_POSTYPE_RELATIVE_TO_LISTENER /* The source position is relative to the listener */ #endif } TDREND_PosType_t; typedef enum { TDREND_PLAYSTATUS_INITIAL, #ifndef FIX_550_FIRST_FRAME_ACCESS_ALT TDREND_PLAYSTATUS_PLAYING, TDREND_PLAYSTATUS_PLAYING_NON_DIEGETIC #else TDREND_PLAYSTATUS_PLAYING #endif } TDREND_PlayStatus_t; typedef enum Loading lib_rend/ivas_objectRenderer.c +47 −0 Original line number Diff line number Diff line Loading @@ -307,6 +307,21 @@ ivas_error ivas_td_binaural_renderer_unwrap( hBinRendererTd->Sources[c_indx]->SrcRend_p->InputAvailable = TRUE; c_indx++; } #ifndef FIX_550_FIRST_FRAME_ACCESS_ALT #ifdef FIX_550_FIRST_FRAME_ACCESS if ( ivas_format == ISM_FORMAT ) { if ( hIsmMetaData[nS]->non_diegetic_flag ) { TDREND_MIX_SRC_SetPlayState( hBinRendererTd, nS, TDREND_PLAYSTATUS_PLAYING_NON_DIEGETIC ); } else { TDREND_MIX_SRC_SetPlayState( hBinRendererTd, nS, TDREND_PLAYSTATUS_PLAYING ); } } #endif #endif } for ( subframe_idx = 0; subframe_idx < MAX_PARAM_SPATIAL_SUBFRAMES; subframe_idx++ ) Loading @@ -333,6 +348,7 @@ ivas_error ivas_td_binaural_renderer_unwrap( return error; } #ifdef FIX_550_FIRST_FRAME_ACCESS /* Advance subframe pointer */ c_indx = 0; for ( nS = 0; nS < num_src; nS++ ) Loading @@ -343,6 +359,7 @@ ivas_error ivas_td_binaural_renderer_unwrap( c_indx++; } } #endif } if ( hReverb != NULL ) Loading Loading @@ -379,6 +396,9 @@ ivas_error TDREND_GetMix( float hrf_left_delta[SFX_SPAT_BIN_MAX_FILTER_LENGTH]; float hrf_right_delta[SFX_SPAT_BIN_MAX_FILTER_LENGTH]; int16_t intp_count; #ifndef FIX_550_FIRST_FRAME_ACCESS_ALT float pan_left, pan_right; #endif int16_t subframe_update_flag; subframe_update_flag = subframe_idx == ism_md_subframe_update; Loading Loading @@ -414,6 +434,21 @@ ivas_error TDREND_GetMix( { error = TDREND_REND_RenderSourceHRFilt( Src_p, hrf_left_delta, hrf_right_delta, intp_count, output_buf, subframe_length ); } #ifndef FIX_550_FIRST_FRAME_ACCESS_ALT if ( ( SrcRend_p->InputAvailable == TRUE ) && ( SrcRend_p->PlayStatus == TDREND_PLAYSTATUS_PLAYING_NON_DIEGETIC ) ) { pan_left = ( SrcSpatial_p->Pos_p[1] + 1.f ) * 0.5f; pan_right = 1.f - pan_left; #ifdef FIX_550_FIRST_FRAME_ACCESS v_multc_acc( Src_p->InputFrame_p, pan_left, output_buf[0], subframe_length ); v_multc_acc( Src_p->InputFrame_p, pan_right, output_buf[1], subframe_length ); #else v_multc_acc( &Src_p->InputFrame_p[subframe_idx * subframe_length], pan_left, output_buf[0], subframe_length ); v_multc_acc( &Src_p->InputFrame_p[subframe_idx * subframe_length], pan_right, output_buf[1], subframe_length ); #endif } #endif } /* Populate output variable */ Loading Loading @@ -494,11 +529,23 @@ void TDREND_Update_object_positions( Pos[1] = hIsmMetaData[nS]->azimuth / 90.f; Pos[2] = 0; TDREND_MIX_SRC_SetPos( hBinRendererTd, nS, Pos ); #ifdef FIX_550_FIRST_FRAME_ACCESS_ALT hBinRendererTd->Sources[nS]->SrcSpatial_p->PosType = TDREND_POSTYPE_NON_DIEGETIC; #else #ifndef FIX_550_FIRST_FRAME_ACCESS TDREND_MIX_SRC_SetPlayState( hBinRendererTd, nS, TDREND_PLAYSTATUS_PLAYING_NON_DIEGETIC ); #endif #endif } else { #ifdef FIX_550_FIRST_FRAME_ACCESS_ALT hBinRendererTd->Sources[nS]->SrcSpatial_p->PosType = TDREND_POSTYPE_ABSOLUTE; #else #ifndef FIX_550_FIRST_FRAME_ACCESS TDREND_MIX_SRC_SetPlayState( hBinRendererTd, nS, TDREND_PLAYSTATUS_PLAYING ); #endif #endif } TDREND_MIX_SRC_SetDir( hBinRendererTd, nS, Dir ); Loading lib_rend/ivas_objectRenderer_hrFilt.c +16 −4 Original line number Diff line number Diff line Loading @@ -79,6 +79,11 @@ ivas_error TDREND_REND_RenderSourceHRFilt( v_add( LeftOutputFrame, output_buf[0], output_buf[0], subframe_length ); v_add( RightOutputFrame, output_buf[1], output_buf[1], subframe_length ); #ifndef FIX_550_FIRST_FRAME_ACCESS Src_p->InputFrame_p += subframe_length; /* Increment input pointer */ #endif return IVAS_ERR_OK; } Loading @@ -94,7 +99,9 @@ void GetFilterFromAngle( TDREND_HRFILT_FiltSet_t *HrFiltSet_p, /* i/o: HR filter set structure */ const float Elev, /* i : Elevation, degrees */ float Azim, /* i : Azimuth, degrees */ #ifdef FIX_569_TD_FILTER_LENGTH const int16_t filterlength, /* i : Filter length */ #endif float *hrf_left, /* o : Left HR filter */ float *hrf_right, /* o : Right HR filter */ int16_t *itd /* o : ITD value */ Loading @@ -103,8 +110,13 @@ void GetFilterFromAngle( GenerateFilter( Elev, Azim, &HrFiltSet_p->ModelParams, &HrFiltSet_p->ModelEval ); #ifdef FIX_569_TD_FILTER_LENGTH mvr2r( HrFiltSet_p->ModelEval.hrfModL, hrf_left, filterlength ); mvr2r( HrFiltSet_p->ModelEval.hrfModR, hrf_right, filterlength ); #else mvr2r( HrFiltSet_p->ModelEval.hrfModL, hrf_left, HrFiltSet_p->ModelParams.K ); mvr2r( HrFiltSet_p->ModelEval.hrfModR, hrf_right, HrFiltSet_p->ModelParams.K ); #endif /* 4. Evaluate the ITD */ if ( HrFiltSet_p->ModelParams.UseItdModel ) Loading lib_rend/ivas_objectRenderer_mix.c +4 −0 Original line number Diff line number Diff line Loading @@ -309,7 +309,11 @@ ivas_error TDREND_MIX_AddSrc( } else { #ifdef FIX_550_FIRST_FRAME_ACCESS_ALT if ( ( PosType < TDREND_POSTYPE_ABSOLUTE ) || ( PosType > TDREND_POSTYPE_NON_DIEGETIC ) ) #else if ( ( PosType < TDREND_POSTYPE_ABSOLUTE ) || ( PosType > TDREND_POSTYPE_RELATIVE_TO_LISTENER ) ) #endif { return ( IVAS_ERROR( IVAS_ERR_INTERNAL, "Invalid position type!\n" ) ); } Loading lib_rend/ivas_objectRenderer_sources.c +115 −77 Original line number Diff line number Diff line Loading @@ -218,8 +218,11 @@ static void TDREND_SRC_REND_Init( /* Internal state */ SrcRend_p->InputAvailable = FALSE; #ifdef FIX_550_FIRST_FRAME_ACCESS_ALT SrcRend_p->PlayStatus = TDREND_PLAYSTATUS_PLAYING; #else SrcRend_p->PlayStatus = TDREND_PLAYSTATUS_INITIAL; #endif /* SrcGain */ for ( nC = 0; nC < SPAT_BIN_MAX_INPUT_CHANNELS; nC++ ) { Loading Loading @@ -276,14 +279,39 @@ void TDREND_SRC_REND_UpdateFiltersFromSpatialParams( Listener_p = hBinRendererTd->Listener_p; HrFiltSet_p = hBinRendererTd->HrFiltSet_p; #ifdef FIX_569_TD_FILTER_LENGTH *filterlength = min( HrFiltSet_p->FiltLength, SFX_SPAT_BIN_MAX_FILTER_LENGTH ); #else *filterlength = HrFiltSet_p->FiltLength; #endif #ifndef FIX_550_FIRST_FRAME_ACCESS_ALT /* 1. Map source pos to the coordinate system of the listener */ switch ( SrcSpatial_p->PosType ) { case TDREND_POSTYPE_RELATIVE_TO_LISTENER: /* Listener relative position */ mvr2r( SrcSpatial_p->Pos_p, ListRelPos, 3 ); break; case TDREND_POSTYPE_ABSOLUTE: /* Absolute position */ TDREND_SPATIAL_VecMapToNewCoordSystem( SrcSpatial_p->Pos_p, Listener_p->Pos, Listener_p->Front, Listener_p->Up, Listener_p->Right, ListRelPos, ListRelPosAbs ); break; default: /* Illegal position type */ #ifdef DEBUGGING printf( "Warning! TDREND_SRC_REND_UpdateFiltersFromSpatialParams: Invalid position type. Assuming absolute position!\n" ); #endif /* Assume absolute position */ TDREND_SPATIAL_VecMapToNewCoordSystem( SrcSpatial_p->Pos_p, Listener_p->Pos, Listener_p->Front, Listener_p->Up, Listener_p->Right, ListRelPos, ListRelPosAbs ); break; } #else if ( SrcSpatial_p->PosType == TDREND_POSTYPE_ABSOLUTE ) { /* Absolute position */ TDREND_SPATIAL_VecMapToNewCoordSystem( SrcSpatial_p->Pos_p, Listener_p->Pos, Listener_p->Front, Listener_p->Up, Listener_p->Right, ListRelPos, ListRelPosAbs ); #endif ListRelDist = TDREND_SPATIAL_VecNorm( ListRelPos ); /* 2. Evaluate the Elevation and Azimuth angles */ Loading @@ -299,7 +327,11 @@ void TDREND_SRC_REND_UpdateFiltersFromSpatialParams( Azim = -1.0f * _180_OVER_PI * (float) atan2f( ListRelPos[1], ListRelPos[0] ); } #ifdef FIX_569_TD_FILTER_LENGTH GetFilterFromAngle( HrFiltSet_p, Elev, Azim, *filterlength, hrf_left, hrf_right, itd ); #else GetFilterFromAngle( HrFiltSet_p, Elev, Azim, hrf_left, hrf_right, itd ); #endif /* 6. Evaluate the directional and distance gains */ /* Directional gain */ Loading Loading @@ -338,6 +370,7 @@ void TDREND_SRC_REND_UpdateFiltersFromSpatialParams( azim_delta = ( azim_delta > 180.0f ) ? ( azim_delta - 360 ) : ( ( azim_delta < -180.0f ) ? ( azim_delta + 360 ) : ( azim_delta ) ); /* map to -180:180 range */ *intp_count = min( MAX_INTERPOLATION_STEPS, max( (int16_t) ( fabsf( azim_delta ) * MAX_ANGULAR_STEP_INV ), (int16_t) ( fabsf( elev_delta ) * MAX_ANGULAR_STEP_INV ) ) ); #ifdef FIX_550_FIRST_FRAME_ACCESS_ALT } else /* TDREND_POSTYPE_NON_DIEGETIC */ { Loading @@ -351,7 +384,7 @@ void TDREND_SRC_REND_UpdateFiltersFromSpatialParams( Src_p->elev_prev = 0; Src_p->azim_prev = 360.0f; /* Dummy angle -- sets max interpolation if switching to TDREND_POSTYPE_ABSOLUTE */ } #endif if ( ( *intp_count > 0 ) && subframe_update_flag ) { Loading Loading @@ -675,8 +708,11 @@ void TDREND_SRC_Init( /* Reset memory buffers */ Src_p->itd = 0; Src_p->previtd = 0; #ifdef FIX_550_FIRST_FRAME_ACCESS Src_p->filterlength = 1; /* Init to unit impulse of length 1 */ #else Src_p->filterlength = -1; #endif set_f( Src_p->mem_itd, 0.0f, ITD_MEM_LEN ); set_f( Src_p->mem_hrf_left, 0.0f, SFX_SPAT_BIN_MAX_FILTER_LENGTH - 1 ); set_f( Src_p->mem_hrf_right, 0.0f, SFX_SPAT_BIN_MAX_FILTER_LENGTH - 1 ); Loading @@ -687,7 +723,9 @@ void TDREND_SRC_Init( Src_p->hrf_right_prev[0] = 1; Src_p->azim_prev = 0.0f; Src_p->elev_prev = 0.0f; #ifdef FIX_550_FIRST_FRAME_ACCESS Src_p->Gain = 1; #endif Src_p->prevGain = 1.0f; return; Loading Loading
lib_com/ivas_cnst.h +9 −0 Original line number Diff line number Diff line Loading @@ -1672,13 +1672,22 @@ typedef enum typedef enum { TDREND_POSTYPE_ABSOLUTE, /* The source position is in absolute coordinates */ #ifdef FIX_550_FIRST_FRAME_ACCESS_ALT TDREND_POSTYPE_NON_DIEGETIC /* The source position is non-diegetic */ #else TDREND_POSTYPE_RELATIVE_TO_LISTENER /* The source position is relative to the listener */ #endif } TDREND_PosType_t; typedef enum { TDREND_PLAYSTATUS_INITIAL, #ifndef FIX_550_FIRST_FRAME_ACCESS_ALT TDREND_PLAYSTATUS_PLAYING, TDREND_PLAYSTATUS_PLAYING_NON_DIEGETIC #else TDREND_PLAYSTATUS_PLAYING #endif } TDREND_PlayStatus_t; typedef enum Loading
lib_rend/ivas_objectRenderer.c +47 −0 Original line number Diff line number Diff line Loading @@ -307,6 +307,21 @@ ivas_error ivas_td_binaural_renderer_unwrap( hBinRendererTd->Sources[c_indx]->SrcRend_p->InputAvailable = TRUE; c_indx++; } #ifndef FIX_550_FIRST_FRAME_ACCESS_ALT #ifdef FIX_550_FIRST_FRAME_ACCESS if ( ivas_format == ISM_FORMAT ) { if ( hIsmMetaData[nS]->non_diegetic_flag ) { TDREND_MIX_SRC_SetPlayState( hBinRendererTd, nS, TDREND_PLAYSTATUS_PLAYING_NON_DIEGETIC ); } else { TDREND_MIX_SRC_SetPlayState( hBinRendererTd, nS, TDREND_PLAYSTATUS_PLAYING ); } } #endif #endif } for ( subframe_idx = 0; subframe_idx < MAX_PARAM_SPATIAL_SUBFRAMES; subframe_idx++ ) Loading @@ -333,6 +348,7 @@ ivas_error ivas_td_binaural_renderer_unwrap( return error; } #ifdef FIX_550_FIRST_FRAME_ACCESS /* Advance subframe pointer */ c_indx = 0; for ( nS = 0; nS < num_src; nS++ ) Loading @@ -343,6 +359,7 @@ ivas_error ivas_td_binaural_renderer_unwrap( c_indx++; } } #endif } if ( hReverb != NULL ) Loading Loading @@ -379,6 +396,9 @@ ivas_error TDREND_GetMix( float hrf_left_delta[SFX_SPAT_BIN_MAX_FILTER_LENGTH]; float hrf_right_delta[SFX_SPAT_BIN_MAX_FILTER_LENGTH]; int16_t intp_count; #ifndef FIX_550_FIRST_FRAME_ACCESS_ALT float pan_left, pan_right; #endif int16_t subframe_update_flag; subframe_update_flag = subframe_idx == ism_md_subframe_update; Loading Loading @@ -414,6 +434,21 @@ ivas_error TDREND_GetMix( { error = TDREND_REND_RenderSourceHRFilt( Src_p, hrf_left_delta, hrf_right_delta, intp_count, output_buf, subframe_length ); } #ifndef FIX_550_FIRST_FRAME_ACCESS_ALT if ( ( SrcRend_p->InputAvailable == TRUE ) && ( SrcRend_p->PlayStatus == TDREND_PLAYSTATUS_PLAYING_NON_DIEGETIC ) ) { pan_left = ( SrcSpatial_p->Pos_p[1] + 1.f ) * 0.5f; pan_right = 1.f - pan_left; #ifdef FIX_550_FIRST_FRAME_ACCESS v_multc_acc( Src_p->InputFrame_p, pan_left, output_buf[0], subframe_length ); v_multc_acc( Src_p->InputFrame_p, pan_right, output_buf[1], subframe_length ); #else v_multc_acc( &Src_p->InputFrame_p[subframe_idx * subframe_length], pan_left, output_buf[0], subframe_length ); v_multc_acc( &Src_p->InputFrame_p[subframe_idx * subframe_length], pan_right, output_buf[1], subframe_length ); #endif } #endif } /* Populate output variable */ Loading Loading @@ -494,11 +529,23 @@ void TDREND_Update_object_positions( Pos[1] = hIsmMetaData[nS]->azimuth / 90.f; Pos[2] = 0; TDREND_MIX_SRC_SetPos( hBinRendererTd, nS, Pos ); #ifdef FIX_550_FIRST_FRAME_ACCESS_ALT hBinRendererTd->Sources[nS]->SrcSpatial_p->PosType = TDREND_POSTYPE_NON_DIEGETIC; #else #ifndef FIX_550_FIRST_FRAME_ACCESS TDREND_MIX_SRC_SetPlayState( hBinRendererTd, nS, TDREND_PLAYSTATUS_PLAYING_NON_DIEGETIC ); #endif #endif } else { #ifdef FIX_550_FIRST_FRAME_ACCESS_ALT hBinRendererTd->Sources[nS]->SrcSpatial_p->PosType = TDREND_POSTYPE_ABSOLUTE; #else #ifndef FIX_550_FIRST_FRAME_ACCESS TDREND_MIX_SRC_SetPlayState( hBinRendererTd, nS, TDREND_PLAYSTATUS_PLAYING ); #endif #endif } TDREND_MIX_SRC_SetDir( hBinRendererTd, nS, Dir ); Loading
lib_rend/ivas_objectRenderer_hrFilt.c +16 −4 Original line number Diff line number Diff line Loading @@ -79,6 +79,11 @@ ivas_error TDREND_REND_RenderSourceHRFilt( v_add( LeftOutputFrame, output_buf[0], output_buf[0], subframe_length ); v_add( RightOutputFrame, output_buf[1], output_buf[1], subframe_length ); #ifndef FIX_550_FIRST_FRAME_ACCESS Src_p->InputFrame_p += subframe_length; /* Increment input pointer */ #endif return IVAS_ERR_OK; } Loading @@ -94,7 +99,9 @@ void GetFilterFromAngle( TDREND_HRFILT_FiltSet_t *HrFiltSet_p, /* i/o: HR filter set structure */ const float Elev, /* i : Elevation, degrees */ float Azim, /* i : Azimuth, degrees */ #ifdef FIX_569_TD_FILTER_LENGTH const int16_t filterlength, /* i : Filter length */ #endif float *hrf_left, /* o : Left HR filter */ float *hrf_right, /* o : Right HR filter */ int16_t *itd /* o : ITD value */ Loading @@ -103,8 +110,13 @@ void GetFilterFromAngle( GenerateFilter( Elev, Azim, &HrFiltSet_p->ModelParams, &HrFiltSet_p->ModelEval ); #ifdef FIX_569_TD_FILTER_LENGTH mvr2r( HrFiltSet_p->ModelEval.hrfModL, hrf_left, filterlength ); mvr2r( HrFiltSet_p->ModelEval.hrfModR, hrf_right, filterlength ); #else mvr2r( HrFiltSet_p->ModelEval.hrfModL, hrf_left, HrFiltSet_p->ModelParams.K ); mvr2r( HrFiltSet_p->ModelEval.hrfModR, hrf_right, HrFiltSet_p->ModelParams.K ); #endif /* 4. Evaluate the ITD */ if ( HrFiltSet_p->ModelParams.UseItdModel ) Loading
lib_rend/ivas_objectRenderer_mix.c +4 −0 Original line number Diff line number Diff line Loading @@ -309,7 +309,11 @@ ivas_error TDREND_MIX_AddSrc( } else { #ifdef FIX_550_FIRST_FRAME_ACCESS_ALT if ( ( PosType < TDREND_POSTYPE_ABSOLUTE ) || ( PosType > TDREND_POSTYPE_NON_DIEGETIC ) ) #else if ( ( PosType < TDREND_POSTYPE_ABSOLUTE ) || ( PosType > TDREND_POSTYPE_RELATIVE_TO_LISTENER ) ) #endif { return ( IVAS_ERROR( IVAS_ERR_INTERNAL, "Invalid position type!\n" ) ); } Loading
lib_rend/ivas_objectRenderer_sources.c +115 −77 Original line number Diff line number Diff line Loading @@ -218,8 +218,11 @@ static void TDREND_SRC_REND_Init( /* Internal state */ SrcRend_p->InputAvailable = FALSE; #ifdef FIX_550_FIRST_FRAME_ACCESS_ALT SrcRend_p->PlayStatus = TDREND_PLAYSTATUS_PLAYING; #else SrcRend_p->PlayStatus = TDREND_PLAYSTATUS_INITIAL; #endif /* SrcGain */ for ( nC = 0; nC < SPAT_BIN_MAX_INPUT_CHANNELS; nC++ ) { Loading Loading @@ -276,14 +279,39 @@ void TDREND_SRC_REND_UpdateFiltersFromSpatialParams( Listener_p = hBinRendererTd->Listener_p; HrFiltSet_p = hBinRendererTd->HrFiltSet_p; #ifdef FIX_569_TD_FILTER_LENGTH *filterlength = min( HrFiltSet_p->FiltLength, SFX_SPAT_BIN_MAX_FILTER_LENGTH ); #else *filterlength = HrFiltSet_p->FiltLength; #endif #ifndef FIX_550_FIRST_FRAME_ACCESS_ALT /* 1. Map source pos to the coordinate system of the listener */ switch ( SrcSpatial_p->PosType ) { case TDREND_POSTYPE_RELATIVE_TO_LISTENER: /* Listener relative position */ mvr2r( SrcSpatial_p->Pos_p, ListRelPos, 3 ); break; case TDREND_POSTYPE_ABSOLUTE: /* Absolute position */ TDREND_SPATIAL_VecMapToNewCoordSystem( SrcSpatial_p->Pos_p, Listener_p->Pos, Listener_p->Front, Listener_p->Up, Listener_p->Right, ListRelPos, ListRelPosAbs ); break; default: /* Illegal position type */ #ifdef DEBUGGING printf( "Warning! TDREND_SRC_REND_UpdateFiltersFromSpatialParams: Invalid position type. Assuming absolute position!\n" ); #endif /* Assume absolute position */ TDREND_SPATIAL_VecMapToNewCoordSystem( SrcSpatial_p->Pos_p, Listener_p->Pos, Listener_p->Front, Listener_p->Up, Listener_p->Right, ListRelPos, ListRelPosAbs ); break; } #else if ( SrcSpatial_p->PosType == TDREND_POSTYPE_ABSOLUTE ) { /* Absolute position */ TDREND_SPATIAL_VecMapToNewCoordSystem( SrcSpatial_p->Pos_p, Listener_p->Pos, Listener_p->Front, Listener_p->Up, Listener_p->Right, ListRelPos, ListRelPosAbs ); #endif ListRelDist = TDREND_SPATIAL_VecNorm( ListRelPos ); /* 2. Evaluate the Elevation and Azimuth angles */ Loading @@ -299,7 +327,11 @@ void TDREND_SRC_REND_UpdateFiltersFromSpatialParams( Azim = -1.0f * _180_OVER_PI * (float) atan2f( ListRelPos[1], ListRelPos[0] ); } #ifdef FIX_569_TD_FILTER_LENGTH GetFilterFromAngle( HrFiltSet_p, Elev, Azim, *filterlength, hrf_left, hrf_right, itd ); #else GetFilterFromAngle( HrFiltSet_p, Elev, Azim, hrf_left, hrf_right, itd ); #endif /* 6. Evaluate the directional and distance gains */ /* Directional gain */ Loading Loading @@ -338,6 +370,7 @@ void TDREND_SRC_REND_UpdateFiltersFromSpatialParams( azim_delta = ( azim_delta > 180.0f ) ? ( azim_delta - 360 ) : ( ( azim_delta < -180.0f ) ? ( azim_delta + 360 ) : ( azim_delta ) ); /* map to -180:180 range */ *intp_count = min( MAX_INTERPOLATION_STEPS, max( (int16_t) ( fabsf( azim_delta ) * MAX_ANGULAR_STEP_INV ), (int16_t) ( fabsf( elev_delta ) * MAX_ANGULAR_STEP_INV ) ) ); #ifdef FIX_550_FIRST_FRAME_ACCESS_ALT } else /* TDREND_POSTYPE_NON_DIEGETIC */ { Loading @@ -351,7 +384,7 @@ void TDREND_SRC_REND_UpdateFiltersFromSpatialParams( Src_p->elev_prev = 0; Src_p->azim_prev = 360.0f; /* Dummy angle -- sets max interpolation if switching to TDREND_POSTYPE_ABSOLUTE */ } #endif if ( ( *intp_count > 0 ) && subframe_update_flag ) { Loading Loading @@ -675,8 +708,11 @@ void TDREND_SRC_Init( /* Reset memory buffers */ Src_p->itd = 0; Src_p->previtd = 0; #ifdef FIX_550_FIRST_FRAME_ACCESS Src_p->filterlength = 1; /* Init to unit impulse of length 1 */ #else Src_p->filterlength = -1; #endif set_f( Src_p->mem_itd, 0.0f, ITD_MEM_LEN ); set_f( Src_p->mem_hrf_left, 0.0f, SFX_SPAT_BIN_MAX_FILTER_LENGTH - 1 ); set_f( Src_p->mem_hrf_right, 0.0f, SFX_SPAT_BIN_MAX_FILTER_LENGTH - 1 ); Loading @@ -687,7 +723,9 @@ void TDREND_SRC_Init( Src_p->hrf_right_prev[0] = 1; Src_p->azim_prev = 0.0f; Src_p->elev_prev = 0.0f; #ifdef FIX_550_FIRST_FRAME_ACCESS Src_p->Gain = 1; #endif Src_p->prevGain = 1.0f; return; Loading