Commit 4970f2be authored by vaclav's avatar vaclav
Browse files

add more error codes for orientation tracking

parent d36437a7
Loading
Loading
Loading
Loading
Loading
+20 −5
Original line number Diff line number Diff line
@@ -757,24 +757,39 @@ ivas_error ivas_init_decoder(
    {
        if ( st_ivas->hDecoderConfig->orientation_tracking == IVAS_ORIENT_TRK_NONE )
        {
            ivas_orient_trk_SetTrackingType( st_ivas->hHeadTrackData->OrientationTracker, OTR_TRACKING_NONE );
            if ( ( error = ivas_orient_trk_SetTrackingType( st_ivas->hHeadTrackData->OrientationTracker, OTR_TRACKING_NONE ) ) != IVAS_ERR_OK )
            {
                return error;
            }
        }
        else if ( st_ivas->hDecoderConfig->orientation_tracking == IVAS_ORIENT_TRK_AVG )
        {
            ivas_orient_trk_SetTrackingType( st_ivas->hHeadTrackData->OrientationTracker, OTR_TRACKING_AVG_ORIENT );
            if ( ( error = ivas_orient_trk_SetTrackingType( st_ivas->hHeadTrackData->OrientationTracker, OTR_TRACKING_AVG_ORIENT ) ) != IVAS_ERR_OK )
            {
                return error;
            }
        }
        else if ( st_ivas->hDecoderConfig->orientation_tracking == IVAS_ORIENT_TRK_REF )
        {
            ivas_orient_trk_SetTrackingType( st_ivas->hHeadTrackData->OrientationTracker, OTR_TRACKING_REF_ORIENT );
            if ( ( error = ivas_orient_trk_SetTrackingType( st_ivas->hHeadTrackData->OrientationTracker, OTR_TRACKING_REF_ORIENT ) ) != IVAS_ERR_OK )
            {
                return error;
            }
        }
#ifdef OTR_REFERENCE_VECTOR_TRACKING
        else if ( st_ivas->hDecoderConfig->orientation_tracking == IVAS_ORIENT_TRK_REF_VEC )
        {
            ivas_orient_trk_SetTrackingType( st_ivas->hHeadTrackData->OrientationTracker, OTR_TRACKING_REF_VEC );
            if ( ( error = ivas_orient_trk_SetTrackingType( st_ivas->hHeadTrackData->OrientationTracker, OTR_TRACKING_REF_VEC ) ) != IVAS_ERR_OK )
            {
                return error;
            }
        }
        else if ( st_ivas->hDecoderConfig->orientation_tracking == IVAS_ORIENT_TRK_REF_VEC_LEV )
        {
            ivas_orient_trk_SetTrackingType( st_ivas->hHeadTrackData->OrientationTracker, OTR_TRACKING_REF_VEC_LEV );
            if ( ( error = ivas_orient_trk_SetTrackingType( st_ivas->hHeadTrackData->OrientationTracker, OTR_TRACKING_REF_VEC_LEV ) ) != IVAS_ERR_OK )
            {
                return error;
            }
        }
        else
        {
+19 −15
Original line number Diff line number Diff line
@@ -496,7 +496,8 @@ void ivas_orient_trk_Init(
#ifdef FIX_I109_ORIENTATION_TRACKING
ivas_error ivas_orient_trk_SetTrackingType(
    ivas_orient_trk_state_t *pOTR,    /* i/o: orientation tracker handle    */
    const OTR_TRACKING_T trackingType ) /* i/o  : orientation tracking type     */
    const OTR_TRACKING_T trackingType /* i/o: orientation tracking type     */
)
{
    if ( pOTR == NULL )
    {
@@ -524,7 +525,8 @@ void ivas_orient_trk_SetTrackingType(

ivas_error ivas_orient_trk_SetReferenceRotation(
    ivas_orient_trk_state_t *pOTR, /* i/o: orientation tracker handle     */
    IVAS_QUATERNION refRot )       /* i    : reference rotation             */
    const IVAS_QUATERNION refRot   /* i  : reference rotation             */
)
{
    if ( pOTR == NULL )
    {
@@ -696,7 +698,8 @@ ivas_error ivas_orient_trk_Process(
    ivas_orient_trk_state_t *pOTR, /* i/o: orientation tracker handle    */
    IVAS_QUATERNION absRot,        /* i  : absolute head rotation        */
    float updateRate,              /* i  : rotation update rate [Hz]     */
    IVAS_QUATERNION *pTrkRot )     /* o    : tracked rotation              */
    IVAS_QUATERNION *pTrkRot       /* o  : tracked rotation              */
)
{
    float normalizedOrientation;
    float relativeOrientationRate;
@@ -779,6 +782,7 @@ ivas_error ivas_orient_trk_Process(
    {
        *pTrkRot = pOTR->trkRot;
    }

    return result;
}
#else
+16 −16
Original line number Diff line number Diff line
@@ -892,7 +892,7 @@ void ivas_orient_trk_SetTrackingType(
#ifdef FIX_I109_ORIENTATION_TRACKING
ivas_error ivas_orient_trk_SetReferenceRotation(
    ivas_orient_trk_state_t *pOTR,                              /* i/o: orientatoin trakcer handle              */
    IVAS_QUATERNION refRot              /* i    : reference rotation            */
    const IVAS_QUATERNION refRot                                /* i  : reference rotation                      */
);

#ifdef OTR_REFERENCE_VECTOR_TRACKING
+6 −1
Original line number Diff line number Diff line
@@ -55,6 +55,7 @@ ivas_error ivas_headTrack_open(
)
{
    int16_t i;
    ivas_error error;

    /* Allocate Head-Tracking handle */
    if ( ( *hHeadTrackData = (HEAD_TRACK_DATA_HANDLE) malloc( sizeof( HEAD_TRACK_DATA ) ) ) == NULL )
@@ -72,7 +73,11 @@ ivas_error ivas_headTrack_open(
    {
        return IVAS_ERROR( IVAS_ERR_FAILED_ALLOC, "Can not allocate memory for Orientation tracking" );
    }
    ivas_orient_trk_Init( ( *hHeadTrackData )->OrientationTracker );

    if ( ( error = ivas_orient_trk_Init( ( *hHeadTrackData )->OrientationTracker ) ) != IVAS_ERR_OK )
    {
        return error;
    }
#endif

    /* Initialise Rmat_prev to I, Rmat will be computed later */
+66 −15
Original line number Diff line number Diff line
@@ -910,6 +910,7 @@ static void initHeadRotation(
{
    int16_t i, crossfade_len;
    float tmp;
    ivas_error error;

    /* Head rotation is enabled by default */
    hIvasRend->headRotData.headRotEnabled = 1;
@@ -933,7 +934,11 @@ static void initHeadRotation(
    {
        return IVAS_ERROR( IVAS_ERR_FAILED_ALLOC, "Can not allocate memory for Orientation tracking" );
    }
    ivas_orient_trk_Init( hIvasRend->headRotData.hOrientationTracker );

    if ( ( error = ivas_orient_trk_Init( hIvasRend->headRotData.hOrientationTracker ) ) != IVAS_ERR_OK )
    {
        return error;
    }

    return IVAS_ERR_OK;
#else
@@ -3953,13 +3958,21 @@ ivas_error IVAS_REND_SetHeadRotation(
    return IVAS_ERR_OK;
}


#ifdef FIX_I109_ORIENTATION_TRACKING
/*-------------------------------------------------------------------*
 * IVAS_REND_SetOrientationTrackingMode()
 *
 *
 *-------------------------------------------------------------------*/

ivas_error IVAS_REND_SetOrientationTrackingMode(
    IVAS_REND_HANDLE hIvasRend, /* i/o: Renderer handle             */
    const uint8_t otrMode       /* i  : Orientation tracking mode   */
)
{
    OTR_TRACKING_T mode;
    ivas_error error;

    if ( hIvasRend == NULL )
    {
@@ -3988,59 +4001,97 @@ ivas_error IVAS_REND_SetOrientationTrackingMode(
            break;
    }

    ivas_orient_trk_SetTrackingType( hIvasRend->headRotData.hOrientationTracker, mode );
    if ( ( error = ivas_orient_trk_SetTrackingType( hIvasRend->headRotData.hOrientationTracker, mode ) ) != IVAS_ERR_OK )
    {
        return error;
    }

    return IVAS_ERR_OK;
}


/*-------------------------------------------------------------------*
 * IVAS_REND_SetReferenceRotation()
 *
 *
 *-------------------------------------------------------------------*/

ivas_error IVAS_REND_SetReferenceRotation(
    IVAS_REND_HANDLE hIvasRend,  /* i/o: Renderer handle        */
    const IVAS_QUATERNION refRot /* i  : Reference rotation     */
)
{
    /*-----------------------------------------------------------------*
     * Validate function arguments
     *-----------------------------------------------------------------*/
    ivas_error error;

    /* Validate function arguments */
    if ( hIvasRend == NULL )
    {
        return IVAS_ERR_UNEXPECTED_NULL_POINTER;
    }
    ivas_orient_trk_SetReferenceRotation( hIvasRend->headRotData.hOrientationTracker, refRot );

    if ( ( error = ivas_orient_trk_SetReferenceRotation( hIvasRend->headRotData.hOrientationTracker, refRot ) ) != IVAS_ERR_OK )
    {
        return error;
    }

    return IVAS_ERR_OK;
}


/*-------------------------------------------------------------------*
 * IVAS_REND_GetMainOrientation()
 *
 *
 *-------------------------------------------------------------------*/

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

    if ( hIvasRend == NULL || pOrientation == NULL )
    {
        return IVAS_ERR_UNEXPECTED_NULL_POINTER;
    }

    ivas_orient_trk_GetMainOrientation( hIvasRend->headRotData.hOrientationTracker, pOrientation );
    if ( ( error = ivas_orient_trk_GetMainOrientation( hIvasRend->headRotData.hOrientationTracker, pOrientation ) ) != IVAS_ERR_OK )
    {
        return error;
    }

    return IVAS_ERR_OK;
}


/*-------------------------------------------------------------------*
 * IVAS_REND_GetTrackedRotation()
 *
 *
 *-------------------------------------------------------------------*/

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

    if ( hIvasRend == NULL || pRotation == NULL )
    {
        return IVAS_ERR_UNEXPECTED_NULL_POINTER;
    }

    ivas_orient_trk_GetTrackedRotation( hIvasRend->headRotData.hOrientationTracker, pRotation );
    if ( ( error = ivas_orient_trk_GetTrackedRotation( hIvasRend->headRotData.hOrientationTracker, pRotation ) ) != IVAS_ERR_OK )
    {
        return error;
    }

    return IVAS_ERR_OK;
}


#ifdef OTR_REFERENCE_VECTOR_TRACKING
/*---------------------------------------------------------------------*
 * IVAS_REND_SetReferenceVector( )