Loading lib_com/ivas_prot.h +15 −1 Original line number Diff line number Diff line Loading @@ -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 */ ); Loading @@ -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 Loading lib_dec/ivas_stat_dec.h +3 −2 Original line number Diff line number Diff line Loading @@ -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 Loading lib_rend/ivas_orient_trk.c +84 −1 Original line number Diff line number Diff line Loading @@ -63,6 +63,9 @@ * Declarations *------------------------------------------------------------------------------------------*/ static IVAS_QUATERNION IdentityQuaternion( void ); void QuaternionProduct( const IVAS_QUATERNION q1, const IVAS_QUATERNION q2, Loading Loading @@ -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 *------------------------------------------------------------------------------------------*/ Loading Loading @@ -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 Loading @@ -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; Loading Loading @@ -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() Loading Loading @@ -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 ) Loading Loading @@ -440,6 +518,11 @@ ivas_error ivas_orient_trk_Process( break; } if (result == IVAS_ERR_OK) { pOTR->trkRot = *pTrkRot; } return result; } #else Loading lib_rend/lib_rend.c +38 −27 Original line number Diff line number Diff line Loading @@ -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; } Loading @@ -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 Loading lib_rend/lib_rend.h +7 −2 Original line number Diff line number Diff line Loading @@ -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 Loading Loading
lib_com/ivas_prot.h +15 −1 Original line number Diff line number Diff line Loading @@ -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 */ ); Loading @@ -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 Loading
lib_dec/ivas_stat_dec.h +3 −2 Original line number Diff line number Diff line Loading @@ -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 Loading
lib_rend/ivas_orient_trk.c +84 −1 Original line number Diff line number Diff line Loading @@ -63,6 +63,9 @@ * Declarations *------------------------------------------------------------------------------------------*/ static IVAS_QUATERNION IdentityQuaternion( void ); void QuaternionProduct( const IVAS_QUATERNION q1, const IVAS_QUATERNION q2, Loading Loading @@ -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 *------------------------------------------------------------------------------------------*/ Loading Loading @@ -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 Loading @@ -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; Loading Loading @@ -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() Loading Loading @@ -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 ) Loading Loading @@ -440,6 +518,11 @@ ivas_error ivas_orient_trk_Process( break; } if (result == IVAS_ERR_OK) { pOTR->trkRot = *pTrkRot; } return result; } #else Loading
lib_rend/lib_rend.c +38 −27 Original line number Diff line number Diff line Loading @@ -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; } Loading @@ -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 Loading
lib_rend/lib_rend.h +7 −2 Original line number Diff line number Diff line Loading @@ -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 Loading