Commit cc890b45 authored by Marek Szczerba's avatar Marek Szczerba
Browse files

Orientation tracker interface update. Cleanup.

parent a152e15f
Loading
Loading
Loading
Loading
+15 −1
Original line number Diff line number Diff line
@@ -5634,7 +5634,11 @@ void ivas_reverb_get_hrtf_set_properties(
 * Orientation tracking
 *----------------------------------------------------------------------------------*/

#ifdef FIX_I109_ORIENTATION_TRACKING
ivas_error ivas_orient_trk_Init(
#else
void ivas_orient_trk_Init(
#endif
    ivas_orient_trk_state_t *pOTR       /* i/o  : orientation tracker handle    */
);

@@ -5648,6 +5652,16 @@ ivas_error ivas_orient_trk_SetReferenceRotation(
    ivas_orient_trk_state_t *pOTR,      /* i/o  : orientatoin trakcer handle    */
    IVAS_QUATERNION refRot              /* i    : reference rotation            */
);

ivas_error ivas_orient_trk_GetMainOrientation(
    ivas_orient_trk_state_t *pOTR,      /* i/o  : orientation tracker handle    */
    IVAS_QUATERNION *pOrientation       /* i/o  : average/reference orientation */
);

ivas_error ivas_orient_trk_GetTrackedRotation(
    ivas_orient_trk_state_t *pOTR,      /* i/o  : orientation tracker handle    */
    IVAS_QUATERNION *pRotation          /* i/o  : processed rotation            */
);
#endif

#ifdef FIX_I109_ORIENTATION_TRACKING
+3 −2
Original line number Diff line number Diff line
@@ -1313,6 +1313,7 @@ typedef struct ivas_orient_trk_state_t
    float alpha;
    IVAS_QUATERNION absAvgRot;  /* average absolute orientation */
    IVAS_QUATERNION refRot;     /* reference orientation */
    IVAS_QUATERNION trkRot;     /* tracked rotation */

} ivas_orient_trk_state_t;
#endif
+84 −1
Original line number Diff line number Diff line
@@ -63,6 +63,9 @@
 * Declarations
 *------------------------------------------------------------------------------------------*/

static IVAS_QUATERNION IdentityQuaternion(
    void );

void QuaternionProduct(
    const IVAS_QUATERNION q1,
    const IVAS_QUATERNION q2,
@@ -99,6 +102,18 @@ void QuaternionInverse(
    const IVAS_QUATERNION q,
    IVAS_QUATERNION *const result );

/*------------------------------------------------------------------------------------------*
 * Quaternion product
 *------------------------------------------------------------------------------------------*/
static IVAS_QUATERNION IdentityQuaternion(
    void )
{
    IVAS_QUATERNION q;
    q.w = 1.0f;
    q.x = q.y = q.z = 0.0f;
    return q;
}

/*------------------------------------------------------------------------------------------*
 * Quaternion product
 *------------------------------------------------------------------------------------------*/
@@ -267,12 +282,21 @@ static float ClipAngle(
 *
 *-------------------------------------------------------------------*/

#ifdef FIX_I109_ORIENTATION_TRACKING
ivas_error ivas_orient_trk_Init(
#else
void ivas_orient_trk_Init(
#endif
    ivas_orient_trk_state_t *pOTR ) /* i/o  : orientation tracker handle    */
{
#ifdef FIX_I109_ORIENTATION_TRACKING
    IVAS_QUATERNION identity;

    if ( pOTR == NULL )
    {
        return IVAS_ERR_UNEXPECTED_NULL_POINTER;
    }

    identity.w = 1.0f;
    identity.x = identity.y = identity.z = 0.0f;
#else
@@ -291,6 +315,8 @@ void ivas_orient_trk_Init(
    pOTR->absAvgRot = identity;
    /* Use frontal and horiontal orientation as reference orientation, unless/until overridden  */
    pOTR->refRot = identity;

    return IVAS_ERR_OK;
#else
    pOTR->absYaw = 0.0f;
    pOTR->absPitch = 0.0f;
@@ -323,18 +349,65 @@ ivas_error ivas_orient_trk_SetTrackingType(
    ivas_orient_trk_state_t *pOTR, /* i/o  : orientation tracker handle    */
    OTR_TRACKING_T trackingType )  /* i/o  : orientation tracking type     */
{
    if ( pOTR == NULL )
    {
        return IVAS_ERR_UNEXPECTED_NULL_POINTER;
    }
    pOTR->trackingType = trackingType;
    return IVAS_ERR_OK;
}

#ifdef FIX_I109_ORIENTATION_TRACKING
ivas_error ivas_orient_trk_SetReferenceRotation(
    ivas_orient_trk_state_t *pOTR, /* i/o  : orientation trakcer handle     */
    ivas_orient_trk_state_t *pOTR, /* i/o  : orientation tracker handle     */
    IVAS_QUATERNION refRot )       /* i    : reference rotation             */
{
    if ( pOTR == NULL )
    {
        return IVAS_ERR_UNEXPECTED_NULL_POINTER;
    }
    pOTR->refRot = refRot;
    return IVAS_ERR_OK;
}

ivas_error ivas_orient_trk_GetMainOrientation(
    ivas_orient_trk_state_t *pOTR, /* i/o  : orientation tracker handle     */
    IVAS_QUATERNION *pOrientation  /* i/o  : average/reference orientation  */
)
{
    if ( pOTR == NULL || pOrientation == NULL )
    {
        return IVAS_ERR_UNEXPECTED_NULL_POINTER;
    }
    switch ( pOTR->trackingType )
    {
        case OTR_TRACKING_NONE:
            *pOrientation = IdentityQuaternion();
            break;
        case OTR_TRACKING_REF_ORIENT:
            *pOrientation = pOTR->refRot;
            break;
        case OTR_TRACKING_AVG_ORIENT:
            *pOrientation = pOTR->absAvgRot;
            break;
    }
    return IVAS_ERR_OK;
}

ivas_error ivas_orient_trk_GetTrackedRotation(
    ivas_orient_trk_state_t *pOTR, /* i/o  : orientation tracker handle    */
    IVAS_QUATERNION *pRotation     /* i/o  : processed rotation            */
)
{
    if ( pOTR == NULL || pRotation == NULL )
    {
        return IVAS_ERR_UNEXPECTED_NULL_POINTER;
    }

    *pRotation = pOTR->trkRot;

    return IVAS_ERR_OK;
}
#else
/*-------------------------------------------------------------------*
 * ivas_orient_trk_SetAbsoluteOrientation()
@@ -378,6 +451,11 @@ ivas_error ivas_orient_trk_Process(
    float ang;
    ivas_error result;

    if ( pOTR == NULL || pTrkRot == NULL )
    {
        return IVAS_ERR_UNEXPECTED_NULL_POINTER;
    }

    result = IVAS_ERR_OK;

    switch ( pOTR->trackingType )
@@ -440,6 +518,11 @@ ivas_error ivas_orient_trk_Process(
            break;
    }

    if (result == IVAS_ERR_OK)
    {
        pOTR->trkRot = *pTrkRot;
    }

    return result;
}
#else
+38 −27
Original line number Diff line number Diff line
@@ -3395,23 +3395,29 @@ ivas_error IVAS_REND_SetOrientationTrackingMode(
    const uint8_t otrMode       /* i  : Orientation tracking mode                           */
)
{
    if ( hIvasRend == NULL || hIvasRend->headRotData.hOrientationTracker == NULL )
    OTR_TRACKING_T mode;

    if ( hIvasRend == NULL )
    {
        return IVAS_ERR_UNEXPECTED_NULL_POINTER;
    }
    if ( otrMode == IVAS_ORIENT_TRK_REF )
    {
        hIvasRend->headRotData.hOrientationTracker->trackingType = OTR_TRACKING_REF_ORIENT;
    }
    else if ( otrMode == IVAS_ORIENT_TRK_AVG )
    {
        hIvasRend->headRotData.hOrientationTracker->trackingType = OTR_TRACKING_AVG_ORIENT;
    }
    else

    switch ( otrMode )
    {
        hIvasRend->headRotData.hOrientationTracker->trackingType = OTR_TRACKING_NONE;
        case IVAS_ORIENT_TRK_AVG:
            mode = OTR_TRACKING_AVG_ORIENT;
            break;
        case IVAS_ORIENT_TRK_REF:
            mode = OTR_TRACKING_REF_ORIENT;
            break;
        case IVAS_ORIENT_TRK_NONE:
        default:
            mode = OTR_TRACKING_NONE;
            break;
    }

    ivas_orient_trk_SetTrackingType( hIvasRend->headRotData.hOrientationTracker, mode );

    return IVAS_ERR_OK;
}

@@ -3424,37 +3430,42 @@ ivas_error IVAS_REND_SetReferenceRotation(
     * Validate function arguments
     *-----------------------------------------------------------------*/

    if ( hIvasRend == NULL || hIvasRend->headRotData.hOrientationTracker == NULL )
    if ( hIvasRend == NULL )
    {
        return IVAS_ERR_UNEXPECTED_NULL_POINTER;
    }
    hIvasRend->headRotData.hOrientationTracker->refRot = refRot;
    ivas_orient_trk_SetReferenceRotation( hIvasRend->headRotData.hOrientationTracker, refRot );

    return IVAS_ERR_OK;
}

ivas_error IVAS_REND_GetTrackedOrientation(
ivas_error IVAS_REND_GetMainOrientation(
    IVAS_REND_HANDLE hIvasRend,   /* i/o: Renderer handle                           */
    IVAS_QUATERNION *pOrientation /* i/o: Quaternion pointer for tracked orientation          */
    IVAS_QUATERNION *pOrientation /* i/o: Quaternion pointer for main orientation   */
)
{
    if ( hIvasRend == NULL || hIvasRend->headRotData.hOrientationTracker == NULL || pOrientation == NULL )
    if ( hIvasRend == NULL || pOrientation == NULL )
    {
        return IVAS_ERR_UNEXPECTED_NULL_POINTER;
    }
    switch ( hIvasRend->headRotData.hOrientationTracker->trackingType )

    ivas_orient_trk_GetMainOrientation( hIvasRend->headRotData.hOrientationTracker, pOrientation );

    return IVAS_ERR_OK;
}

ivas_error IVAS_REND_GetTrackedRotation(
    IVAS_REND_HANDLE hIvasRend, /* i/o: Renderer handle                             */
    IVAS_QUATERNION *pRotation  /* i/o: Quaternion pointer processed rotation       */
)
{
        case OTR_TRACKING_NONE:
            *pOrientation = quaternionInit();
            break;
        case OTR_TRACKING_REF_ORIENT:
            *pOrientation = hIvasRend->headRotData.hOrientationTracker->refRot;
            break;
        case OTR_TRACKING_AVG_ORIENT:
            *pOrientation = hIvasRend->headRotData.hOrientationTracker->absAvgRot;
            break;
    if ( hIvasRend == NULL || pRotation == NULL )
    {
        return IVAS_ERR_UNEXPECTED_NULL_POINTER;
    }

    ivas_orient_trk_GetTrackedRotation( hIvasRend->headRotData.hOrientationTracker, pRotation );

    return IVAS_ERR_OK;
}
#endif
+7 −2
Original line number Diff line number Diff line
@@ -265,9 +265,14 @@ ivas_error IVAS_REND_SetReferenceRotation(
    const IVAS_QUATERNION refRot                    /* i  : Reference rotation                                  */
);

ivas_error IVAS_REND_GetTrackedOrientation(
ivas_error IVAS_REND_GetMainOrientation(
    IVAS_REND_HANDLE hIvasRend,                     /* i/o: Renderer handle                                     */
    IVAS_QUATERNION *pOrientation                   /* i/o: Quaternion pointer for tracked orientation          */
    IVAS_QUATERNION *pOrientation                   /* i/o: Quaternion pointer for main orientation             */
);

ivas_error IVAS_REND_GetTrackedRotation(
    IVAS_REND_HANDLE hIvasRend,                     /* i/o: Renderer handle                                     */
    IVAS_QUATERNION *pRotation                      /* i/o: Quaternion pointer for processed rotation           */
);
#endif