Commit f84b1fba authored by vaclav's avatar vaclav
Browse files

fix differences wrt. main

parent 09f4406a
Loading
Loading
Loading
Loading
Loading
+9 −0
Original line number Diff line number Diff line
@@ -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
+47 −0
Original line number Diff line number Diff line
@@ -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++ )
@@ -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++ )
@@ -343,6 +359,7 @@ ivas_error ivas_td_binaural_renderer_unwrap(
                c_indx++;
            }
        }
#endif
    }

    if ( hReverb != NULL )
@@ -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;
@@ -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 */
@@ -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 );
+16 −4
Original line number Diff line number Diff line
@@ -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;
}

@@ -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                */
@@ -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 )
+4 −0
Original line number Diff line number Diff line
@@ -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" ) );
        }
+115 −77
Original line number Diff line number Diff line
@@ -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++ )
    {
@@ -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  */
@@ -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 */
@@ -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 */
{
@@ -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 )
{
@@ -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 );
@@ -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