Commit a7674b95 authored by Sandesh Venkatesh's avatar Sandesh Venkatesh
Browse files

Few functions in ivas_orient_trk converted to fixed point

[x] Functions converted:
IdentityQuaternion, ivas_orient_trk_SetTrackingType,
ivas_orient_trk_GetTrackedRotation, ivas_orient_trk_GetMainOrientation
parent d79d5d9c
Loading
Loading
Loading
Loading
Loading
+10 −1
Original line number Diff line number Diff line
@@ -758,12 +758,21 @@ ivas_error ivas_init_decoder_front(
        {
            return error;
        }
#ifdef IVAS_FLOAT_FIXED
        error = ivas_orient_trk_SetTrackingType_fx( st_ivas->hHeadTrackData->OrientationTracker_fx, st_ivas->hDecoderConfig->orientation_tracking );
        st_ivas->hHeadTrackData->OrientationTracker->orientation_tracking = st_ivas->hHeadTrackData->OrientationTracker_fx->orientation_tracking_fx;
        IF( ( error ) != IVAS_ERR_OK )
        {
            return error;
        }
    }
#else
        IF ( ( error = ivas_orient_trk_SetTrackingType( st_ivas->hHeadTrackData->OrientationTracker, st_ivas->hDecoderConfig->orientation_tracking ) ) != IVAS_ERR_OK )
        {
            return error;
        }
    }

#endif
    /*-------------------------------------------------------------------*
     * Allocate and initialize external orientation handle
     *--------------------------------------------------------------------*/
+75 −0
Original line number Diff line number Diff line
@@ -72,6 +72,19 @@ static IVAS_QUATERNION IdentityQuaternion(
    return q;
}

#ifdef IVAS_FLOAT_FIXED
static IVAS_QUATERNION_FX IdentityQuaternion_fx(
    void )
{
    IVAS_QUATERNION_FX q;

    q.w_fx = ONE_IN_Q31;
    q.x_fx = q.y_fx = q.z_fx = 0;
    q.w_qfact = q.x_qfact = q.y_qfact = q.z_qfact = Q31;

    return q;
}
#endif

/*------------------------------------------------------------------------------------------*
 * QuaternionProduct()
@@ -796,6 +809,23 @@ ivas_error ivas_orient_trk_SetTrackingType(
    return IVAS_ERR_OK;
}

#ifdef IVAS_FLOAT_FIXED
ivas_error ivas_orient_trk_SetTrackingType_fx(
    ivas_orient_trk_state_t_fx *pOTR,                    /* i/o: orientation tracker handle    */
    const IVAS_HEAD_ORIENT_TRK_T orientation_tracking /* i  : orientation tracking type     */
)
{
    if ( pOTR == NULL )
    {
        return IVAS_ERR_UNEXPECTED_NULL_POINTER;
    }

    pOTR->orientation_tracking_fx = orientation_tracking;

    return IVAS_ERR_OK;
}
#endif

/*-------------------------------------------------------------------*
 * ivas_orient_trk_SetReferenceRotation()
 *
@@ -860,6 +890,35 @@ ivas_error ivas_orient_trk_GetMainOrientation(
    return IVAS_ERR_OK;
}

#ifdef IVAS_FLOAT_FIXED
ivas_error ivas_orient_trk_GetMainOrientation_fx(
    ivas_orient_trk_state_t_fx *pOTR, /* i/o: orientation tracker handle     */
    IVAS_QUATERNION_FX *pOrientation  /* i/o: average/reference orientation  */
)
{
    if ( pOTR == NULL || pOrientation == NULL )
    {
        return IVAS_ERR_UNEXPECTED_NULL_POINTER;
    }

    switch ( pOTR->orientation_tracking_fx )
    {
        case IVAS_HEAD_ORIENT_TRK_NONE:
            *pOrientation = IdentityQuaternion_fx();
            break;
        case IVAS_HEAD_ORIENT_TRK_REF_VEC:
        case IVAS_HEAD_ORIENT_TRK_REF_VEC_LEV:
        case IVAS_HEAD_ORIENT_TRK_REF:
            *pOrientation = pOTR->refRot_fx;
            break;
        case IVAS_HEAD_ORIENT_TRK_AVG:
            *pOrientation = pOTR->absAvgRot_fx;
            break;
    }

    return IVAS_ERR_OK;
}
#endif

/*-------------------------------------------------------------------*
 * ivas_orient_trk_GetTrackedRotation()
@@ -882,6 +941,22 @@ ivas_error ivas_orient_trk_GetTrackedRotation(
    return IVAS_ERR_OK;
}

#ifdef IVAS_FLOAT_FIXED
ivas_error ivas_orient_trk_GetTrackedRotation_fx(
  ivas_orient_trk_state_t_fx *pOTR, /* i/o: orientation tracker handle    */
  IVAS_QUATERNION_FX *pRotation     /* i/o: processed rotation            */
)
{
  if (pOTR == NULL || pRotation == NULL)
  {
    return IVAS_ERR_UNEXPECTED_NULL_POINTER;
  }

  *pRotation = pOTR->trkRot_fx;

  return IVAS_ERR_OK;
}
#endif

/*-------------------------------------------------------------------*
 * ivas_orient_trk_SetReferenceVector()
+17 −0
Original line number Diff line number Diff line
@@ -1787,6 +1787,23 @@ ivas_error ivas_orient_trk_Process(
    IVAS_QUATERNION *pTrkRot                                    /* o  : tracked rotation                        */
);

#ifdef IVAS_FLOAT_FIXED

ivas_error ivas_orient_trk_SetTrackingType_fx(
  ivas_orient_trk_state_t_fx *pOTR,                              /* i/o: orientation tracker handle              */
  const IVAS_HEAD_ORIENT_TRK_T orientation_tracking           /* i  : orientation tracking type               */
);

ivas_error ivas_orient_trk_GetMainOrientation_fx(
  ivas_orient_trk_state_t_fx *pOTR,                              /* i/o: orientation tracker handle              */
  IVAS_QUATERNION_FX *pOrientation                               /* i/o: average/reference orientation           */
);

ivas_error ivas_orient_trk_GetTrackedRotation_fx(
  ivas_orient_trk_state_t_fx *pOTR,                              /* i/o: orientation tracker handle              */
  IVAS_QUATERNION_FX *pRotation                                  /* i/o: processed rotation                      */
);
#endif

/*----------------------------------------------------------------------------------*
 * Rendering & merging to MASA format
+15 −0
Original line number Diff line number Diff line
@@ -131,6 +131,13 @@ ivas_error ivas_headTrack_open(
        return IVAS_ERROR( IVAS_ERR_FAILED_ALLOC, "Can not allocate memory for Orientation tracking" );
    }

#ifdef IVAS_FLOAT_FIXED
    if (((*hHeadTrackData)->OrientationTracker_fx = (ivas_orient_trk_state_t_fx *)malloc(sizeof(ivas_orient_trk_state_t_fx))) == NULL)
    {
      return IVAS_ERROR(IVAS_ERR_FAILED_ALLOC, "Can not allocate memory for Orientation tracking");
    }
#endif

    if ( ( error = ivas_orient_trk_Init( ( *hHeadTrackData )->OrientationTracker ) ) != IVAS_ERR_OK )
    {
        return error;
@@ -174,6 +181,14 @@ void ivas_headTrack_close(
        ( *hHeadTrackData )->OrientationTracker = NULL;
    }

#ifdef IVAS_FLOAT_FIXED
    if ((*hHeadTrackData)->OrientationTracker_fx != NULL)
    {
      free((*hHeadTrackData)->OrientationTracker_fx);
      (*hHeadTrackData)->OrientationTracker_fx = NULL;
    }
#endif

    free( ( *hHeadTrackData ) );
    *hHeadTrackData = NULL;

+11 −5
Original line number Diff line number Diff line
@@ -803,11 +803,11 @@ typedef struct ivas_orient_trk_state_t
typedef struct ivas_orient_trk_state_t_fx
{
    IVAS_HEAD_ORIENT_TRK_T orientation_tracking_fx;
    Word16 centerAdaptationRate_fx;
    Word16 offCenterAdaptationRate_fx;
    Word16 adaptationAngle_fx;
    Word32 centerAdaptationRate_fx;
    Word32 offCenterAdaptationRate_fx;
    Word32 adaptationAngle_fx;

    Word16 alpha_fx;
    Word32 alpha_fx;
    IVAS_QUATERNION_FX absAvgRot_fx; /* average absolute orientation */
    IVAS_QUATERNION_FX refRot_fx;    /* reference orientation */
    IVAS_QUATERNION_FX trkRot_fx;    /* tracked rotation */
@@ -827,6 +827,7 @@ typedef struct
    IVAS_VECTOR3 Pos[MAX_PARAM_SPATIAL_SUBFRAMES];
#ifdef IVAS_FLOAT_FIXED
    Word32 crossfade_fx[L_FRAME48k / MAX_PARAM_SPATIAL_SUBFRAMES];
    ivas_orient_trk_state_t_fx *hOrientationTracker_fx;
#endif
    float crossfade[L_FRAME48k / MAX_PARAM_SPATIAL_SUBFRAMES];
    ivas_orient_trk_state_t *hOrientationTracker;
@@ -859,7 +860,9 @@ typedef struct ivas_binaural_head_track_struct

    int16_t shd_rot_max_order;
    ivas_orient_trk_state_t *OrientationTracker;

#ifdef IVAS_FLOAT_FIXED
    ivas_orient_trk_state_t_fx *OrientationTracker_fx;
#endif

} HEAD_TRACK_DATA, *HEAD_TRACK_DATA_HANDLE;

@@ -874,6 +877,9 @@ typedef struct ivas_external_orientation_struct
    int8_t enableRotationInterpolation[MAX_PARAM_SPATIAL_SUBFRAMES];   /* 0 - disable, 1 - enable                                     */
    int16_t numFramesToTargetOrientation[MAX_PARAM_SPATIAL_SUBFRAMES]; /* Number of frames until target orientation is reached        */
    IVAS_QUATERNION Quaternions[MAX_PARAM_SPATIAL_SUBFRAMES];          /* External orientation in quaternions                         */
#ifdef IVAS_FLOAT_FIXED
    IVAS_QUATERNION_FX Quaternions_fx[MAX_PARAM_SPATIAL_SUBFRAMES]; /* External orientation in quaternions                         */
#endif
    int16_t num_subframes;

} EXTERNAL_ORIENTATION_DATA, *EXTERNAL_ORIENTATION_HANDLE;
Loading