Commit 1757186e authored by Marek Szczerba's avatar Marek Szczerba
Browse files

Orientation tracking processing in quaternions instead of Euler

parent f215ee32
Loading
Loading
Loading
Loading
+838 −0

File added.

Preview size limit exceeded, changes collapsed.

+10 −2
Original line number Diff line number Diff line
@@ -5504,9 +5504,13 @@ ivas_error ivas_orient_trk_SetTrackingType(

ivas_error ivas_orient_trk_SetAbsoluteOrientation( 
    ivas_orient_trk_state_t *pOTR,
#ifdef FIX_I109_ORIENTATION_TRACKING
    const Quaternion* pQuat
#else
    float yaw, 
    float pitch, 
    float roll 
#endif
);

ivas_error ivas_orient_trk_Process( 
@@ -5515,9 +5519,13 @@ ivas_error ivas_orient_trk_Process(

ivas_error ivas_orient_trk_GetTrackedOrientation( 
    ivas_orient_trk_state_t *pOTR,
#ifdef FIX_I109_ORIENTATION_TRACKING
    Quaternion *pQuat
#else
    float *yaw,
    float *pitch, 
    float *roll 
#endif
);

void TonalMdctConceal_create_concealment_noise(
+4 −5
Original line number Diff line number Diff line
@@ -874,7 +874,7 @@ void ivas_binRenderer(
    int16_t chIdx, k;
    int16_t numTimeSlots = MAX_PARAM_SPATIAL_SUBFRAMES;
#ifdef FIX_I109_ORIENTATION_TRACKING
    float yaw, pitch, roll;
    Quaternion trackedHeadOrientation;
#endif

    wmops_sub_start( "fastconv_binaural_rendering" );
@@ -899,11 +899,10 @@ void ivas_binRenderer(
            if ( hHeadTrackData->shd_rot_max_order == -1 )
            {
#ifdef FIX_I109_ORIENTATION_TRACKING
                Quat2Euler( hHeadTrackData->Quaternions[hHeadTrackData->num_quaternions++], &( yaw ), &( pitch ), &( roll ) );
                ivas_orient_trk_SetAbsoluteOrientation( hHeadTrackData->OrientationTracker, yaw, pitch, roll );
                ivas_orient_trk_SetAbsoluteOrientation( hHeadTrackData->OrientationTracker, &( hHeadTrackData->Quaternions[hHeadTrackData->num_quaternions++] ) );
                ivas_orient_trk_Process( hHeadTrackData->OrientationTracker );
                ivas_orient_trk_GetTrackedOrientation( hHeadTrackData->OrientationTracker, &( yaw ), &( pitch ), &( roll ) );
                Euler2RotMat( yaw, pitch, roll, hHeadTrackData->Rmat );
                ivas_orient_trk_GetTrackedOrientation( hHeadTrackData->OrientationTracker, &trackedHeadOrientation );
                QuatToRotMat( trackedHeadOrientation, hHeadTrackData->Rmat );
#else
                QuatToRotMat( hHeadTrackData->Quaternions[hHeadTrackData->num_quaternions++], hHeadTrackData->Rmat );
#endif
+5 −6
Original line number Diff line number Diff line
@@ -1787,10 +1787,10 @@ void ivas_dirac_dec(
    float *reference_power, *reference_power_smooth;
    float *onset_filter, *onset_filter_subframe, *p_onset_filter = NULL;
    uint16_t coherence_flag;

#ifdef FIX_I109_ORIENTATION_TRACKING
    float yaw, pitch, roll;
    Quaternion trackedHeadOrientation;
#endif

    wmops_sub_start( "ivas_dirac_dec" );

    /* Initialize aux buffers */
@@ -1856,11 +1856,10 @@ void ivas_dirac_dec(
        if ( st_ivas->hHeadTrackData )
        {
#ifdef FIX_I109_ORIENTATION_TRACKING
            Quat2Euler( st_ivas->hHeadTrackData->Quaternions[st_ivas->hHeadTrackData->num_quaternions++], &( yaw ), &( pitch ), &( roll ) );
            ivas_orient_trk_SetAbsoluteOrientation( st_ivas->hHeadTrackData->OrientationTracker, yaw, pitch, roll );
            ivas_orient_trk_SetAbsoluteOrientation( st_ivas->hHeadTrackData->OrientationTracker, &( st_ivas->hHeadTrackData->Quaternions[st_ivas->hHeadTrackData->num_quaternions++] ) );
            ivas_orient_trk_Process( st_ivas->hHeadTrackData->OrientationTracker );
            ivas_orient_trk_GetTrackedOrientation( st_ivas->hHeadTrackData->OrientationTracker, &( yaw ), &( pitch ), &( roll ) );
            Euler2RotMat( yaw, pitch, roll, st_ivas->hHeadTrackData->Rmat );
            ivas_orient_trk_GetTrackedOrientation( st_ivas->hHeadTrackData->OrientationTracker, &trackedHeadOrientation );
            QuatToRotMat( trackedHeadOrientation, st_ivas->hHeadTrackData->Rmat );
#else
            QuatToRotMat( st_ivas->hHeadTrackData->Quaternions[st_ivas->hHeadTrackData->num_quaternions++], st_ivas->hHeadTrackData->Rmat );
#endif
+4 −6
Original line number Diff line number Diff line
@@ -337,9 +337,8 @@ static void ivas_dirac_dec_binaural_internal(
    uint8_t firstSlot, slotEnd;
    int16_t max_band_decorr;
    DIFFUSE_DISTRIBUTION_DATA diffuseDistData;

#ifdef FIX_I109_ORIENTATION_TRACKING
    float yaw, pitch, roll;
    Quaternion trackedHeadOrientation;
#endif

    firstSlot = firstSubframe * ( CLDFB_NO_COL_MAX / MAX_PARAM_SPATIAL_SUBFRAMES );
@@ -474,11 +473,10 @@ static void ivas_dirac_dec_binaural_internal(
    if ( st_ivas->hHeadTrackData && st_ivas->hHeadTrackData->num_quaternions >= 0 )
    {
#ifdef FIX_I109_ORIENTATION_TRACKING
        Quat2Euler( st_ivas->hHeadTrackData->Quaternions[firstSubframe], &( yaw ), &( pitch ), &( roll ) );
        ivas_orient_trk_SetAbsoluteOrientation( st_ivas->hHeadTrackData->OrientationTracker, yaw, pitch, roll );
        ivas_orient_trk_SetAbsoluteOrientation( st_ivas->hHeadTrackData->OrientationTracker, &( st_ivas->hHeadTrackData->Quaternions[firstSubframe] ) );
        ivas_orient_trk_Process( st_ivas->hHeadTrackData->OrientationTracker );
        ivas_orient_trk_GetTrackedOrientation( st_ivas->hHeadTrackData->OrientationTracker, &( yaw ), &( pitch ), &( roll ) );
        Euler2RotMat( yaw, pitch, roll, Rmat );
        ivas_orient_trk_GetTrackedOrientation( st_ivas->hHeadTrackData->OrientationTracker, &trackedHeadOrientation );
        QuatToRotMat( trackedHeadOrientation, Rmat );
#else
        QuatToRotMat( st_ivas->hHeadTrackData->Quaternions[firstSubframe], Rmat );
#endif
Loading