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

Merge branch '109-harmonize-head-and-orientation-tracking-xcheck' into...

Merge branch '109-harmonize-head-and-orientation-tracking-xcheck' into '109-harmonize-head-and-orientation-tracking'

[Non-BE] Orientation tracking cross-check review

See merge request !482
parents 05addaab 166517f6
Loading
Loading
Loading
Loading
Loading
+30 −31
Original line number Diff line number Diff line
@@ -1597,36 +1597,25 @@ static ivas_error decodeG192(
            goto cleanup;
        }

        /* Head-tracking input simulation */
        if ( arg.enableHeadRotation )
        {
            IVAS_QUATERNION Quaternions[IVAS_MAX_PARAM_SPATIAL_SUBFRAMES];

#ifdef FIX_I109_ORIENTATION_TRACKING
            for ( i = 0; i < IVAS_MAX_PARAM_SPATIAL_SUBFRAMES; i++ )
            {
                if ( ( error = HeadRotationFileReading( headRotReader, &Quaternions[i] ) ) != IVAS_ERR_OK )
#ifdef OTR_REFERENCE_VECTOR_TRACKING
        /* reference vector */
        if ( arg.enableReferenceVectorTracking )
        {
                    fprintf( stderr, "\nError %s while reading head orientation from %s\n", IVAS_DEC_GetErrorMessage( error ), HeadRotationFileReader_getFilePath( headRotReader ) );
                    goto cleanup;
                }
            }
#else
            if ( ( error = HeadRotationFileReading( headRotReader, Quaternions, frame ) ) != IVAS_ERR_OK )
            IVAS_VECTOR3 listenerPosition, referencePosition;
            if ( ( error = Vector3PairFileReader_read( referenceVectorReader, &listenerPosition, &referencePosition ) ) != IVAS_ERR_OK )
            {
                fprintf( stderr, "\nError %s while reading head orientation from %s\n", IVAS_DEC_GetErrorMessage( error ), HeadRotationFileReader_getFilePath( headRotReader ) );
                fprintf( stderr, "\nError %s while reading listener and reference positions from %s\n", IVAS_DEC_GetErrorMessage( error ), Vector3PairFileReader_getFilePath( referenceVectorReader ) );
                goto cleanup;
            }
#endif

            if ( ( error = IVAS_DEC_FeedHeadTrackData( hIvasDec, Quaternions ) ) != IVAS_ERR_OK )
            if ( ( error = IVAS_DEC_FeedRefVectorData( hIvasDec, listenerPosition, referencePosition ) ) != IVAS_ERR_OK )
            {
                fprintf( stderr, "\nIVAS_DEC_FeedHeadTrackData failed: %s\n", IVAS_DEC_GetErrorMessage( error ) );
                fprintf( stderr, "\nIVAS_DEC_FeedRefVectorData failed: %s\n", IVAS_DEC_GetErrorMessage( error ) );
                goto cleanup;
            }
        }

#ifdef FIX_I109_ORIENTATION_TRACKING
#endif /* OTR_REFERENCE_VECTOR_TRACKING */
        /* Reference rotation */
        if ( arg.enableReferenceRotation )
        {
@@ -1643,25 +1632,35 @@ static ivas_error decodeG192(
                goto cleanup;
            }
        }
#ifdef OTR_REFERENCE_VECTOR_TRACKING
        /* reference vector */
        if ( arg.enableReferenceVectorTracking )
#endif
        /* Head-tracking input simulation */
        if ( arg.enableHeadRotation )
        {
            IVAS_VECTOR3 listenerPosition, referencePosition;
            if ( ( error = Vector3PairFileReader_read( referenceVectorReader, &listenerPosition, &referencePosition ) ) != IVAS_ERR_OK )
            IVAS_QUATERNION Quaternions[IVAS_MAX_PARAM_SPATIAL_SUBFRAMES];

#ifdef FIX_I109_ORIENTATION_TRACKING
            for ( i = 0; i < IVAS_MAX_PARAM_SPATIAL_SUBFRAMES; i++ )
            {
                fprintf( stderr, "\nError %s while reading listener and reference positions from %s\n", IVAS_DEC_GetErrorMessage( error ), Vector3PairFileReader_getFilePath( referenceVectorReader ) );
                if ( ( error = HeadRotationFileReading( headRotReader, &Quaternions[i] ) ) != IVAS_ERR_OK )
                {
                    fprintf( stderr, "\nError %s while reading head orientation from %s\n", IVAS_DEC_GetErrorMessage( error ), HeadRotationFileReader_getFilePath( headRotReader ) );
                    goto cleanup;
                }
            }
#else
            if ( ( error = HeadRotationFileReading( headRotReader, Quaternions, frame ) ) != IVAS_ERR_OK )
            {
                fprintf( stderr, "\nError %s while reading head orientation from %s\n", IVAS_DEC_GetErrorMessage( error ), HeadRotationFileReader_getFilePath( headRotReader ) );
                goto cleanup;
            }
#endif

            if ( ( error = IVAS_DEC_FeedRefVectorData( hIvasDec, listenerPosition, referencePosition ) ) != IVAS_ERR_OK )
            if ( ( error = IVAS_DEC_FeedHeadTrackData( hIvasDec, Quaternions ) ) != IVAS_ERR_OK )
            {
                fprintf( stderr, "\nIVAS_DEC_FeedRefVectorData failed: %s\n", IVAS_DEC_GetErrorMessage( error ) );
                fprintf( stderr, "\nIVAS_DEC_FeedHeadTrackData failed: %s\n", IVAS_DEC_GetErrorMessage( error ) );
                goto cleanup;
            }
        }
#endif /* OTR_REFERENCE_VECTOR_TRACKING */
#endif
        /* Run decoder for one frame (get rendered output) */
        if ( ( error = IVAS_DEC_GetSamples( hIvasDec, pcmBuf, &nOutSamples ) ) != IVAS_ERR_OK )
        {
+31 −31
Original line number Diff line number Diff line
@@ -979,37 +979,6 @@ int main(
        ObjectPositionBuffer mtdBuffer;
        IsmPositionProvider_getNextFrame( positionProvider, &mtdBuffer );

        /* Read from head rotation trajectory file if specified */
        if ( headRotReader != NULL )
        {
            IVAS_QUATERNION quatBuffer[RENDERER_HEAD_POSITIONS_PER_FRAME];
#ifdef FIX_I109_ORIENTATION_TRACKING
            for ( i = 0; i < RENDERER_HEAD_POSITIONS_PER_FRAME; i++ )
            {
                if ( HeadRotationFileReading( headRotReader, &quatBuffer[i] ) != IVAS_ERR_OK )
                {
                    fprintf( stderr, "Error in Head Rotation File Reading.\r\n" );
                    exit( -1 );
                }
            }
#else
            HeadRotationFileReading( headRotReader, quatBuffer, frame );
#endif
            if ( IVAS_REND_SetHeadRotation( hIvasRend, quatBuffer ) != IVAS_ERR_OK )
            {
                fprintf( stderr, "Error setting Head Rotation\n" );
                exit( -1 );
            }
        }
        else
        {
            if ( ( IVAS_REND_SetHeadRotation( hIvasRend, NULL ) != IVAS_ERR_OK ) && ( IVAS_REND_SetHeadRotation( hIvasRend, NULL ) != IVAS_ERR_INVALID_OUTPUT_FORMAT ) )
            {
                fprintf( stderr, "Error setting Head Rotation\n" );
                exit( -1 );
            }
        }

#ifdef FIX_I109_ORIENTATION_TRACKING
#ifdef OTR_REFERENCE_VECTOR_TRACKING
        if ( referenceVectorReader != NULL )
@@ -1044,6 +1013,37 @@ int main(
        }
#endif

        /* Read from head rotation trajectory file if specified */
        if ( headRotReader != NULL )
        {
            IVAS_QUATERNION quatBuffer[RENDERER_HEAD_POSITIONS_PER_FRAME];
#ifdef FIX_I109_ORIENTATION_TRACKING
            for ( i = 0; i < RENDERER_HEAD_POSITIONS_PER_FRAME; i++ )
            {
                if ( HeadRotationFileReading( headRotReader, &quatBuffer[i] ) != IVAS_ERR_OK )
                {
                    fprintf( stderr, "Error in Head Rotation File Reading.\r\n" );
                    exit( -1 );
                }
            }
#else
            HeadRotationFileReading( headRotReader, quatBuffer, frame );
#endif
            if ( IVAS_REND_SetHeadRotation( hIvasRend, quatBuffer ) != IVAS_ERR_OK )
            {
                fprintf( stderr, "Error setting Head Rotation\n" );
                exit( -1 );
            }
        }
        else
        {
            if ( ( IVAS_REND_SetHeadRotation( hIvasRend, NULL ) != IVAS_ERR_OK ) && ( IVAS_REND_SetHeadRotation( hIvasRend, NULL ) != IVAS_ERR_INVALID_OUTPUT_FORMAT ) )
            {
                fprintf( stderr, "Error setting Head Rotation\n" );
                exit( -1 );
            }
        }

        for ( i = 0; i < args.inConfig.numMultiChannelBuses; ++i )
        {
            if ( ( error = IVAS_REND_GetInputNumChannels( hIvasRend, mcIds[i], &numChannels ) ) != IVAS_ERR_OK )
+0 −12
Original line number Diff line number Diff line
@@ -989,9 +989,6 @@ void ivas_binRenderer(
{
    int16_t chIdx, k;
    int16_t numTimeSlots = MAX_PARAM_SPATIAL_SUBFRAMES;
#ifdef FIX_I109_ORIENTATION_TRACKING
    IVAS_QUATERNION trackedHeadOrientation;
#endif

    push_wmops( "fastconv_binaural_rendering" );

@@ -1014,16 +1011,7 @@ void ivas_binRenderer(
            /* Rotation in SHD (HOA3) */
            if ( hHeadTrackData->shd_rot_max_order == -1 )
            {
#ifdef FIX_I109_ORIENTATION_TRACKING
                ivas_orient_trk_Process( hHeadTrackData->OrientationTracker,
                                         &hHeadTrackData->Quaternions[hHeadTrackData->num_quaternions++],
                                         FRAMES_PER_SEC * MAX_PARAM_SPATIAL_SUBFRAMES,
                                         &trackedHeadOrientation );
                QuatToRotMat( trackedHeadOrientation, hHeadTrackData->Rmat );
#else
                QuatToRotMat( hHeadTrackData->Quaternions[hHeadTrackData->num_quaternions++], hHeadTrackData->Rmat );
#endif

                rotateFrame_shd_cldfb( RealBuffer, ImagBuffer, hHeadTrackData->Rmat, hBinRenderer->hInputSetup->nchan_out_woLFE, 3 );
            }
            else if ( hHeadTrackData->shd_rot_max_order > 0 )
+0 −11
Original line number Diff line number Diff line
@@ -2096,9 +2096,6 @@ 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
    IVAS_QUATERNION trackedHeadOrientation;
#endif

    push_wmops( "ivas_dirac_dec" );

@@ -2165,15 +2162,7 @@ void ivas_dirac_dec(

        if ( st_ivas->hHeadTrackData )
        {
#ifdef FIX_I109_ORIENTATION_TRACKING
            ivas_orient_trk_Process( st_ivas->hHeadTrackData->OrientationTracker,
                                     &st_ivas->hHeadTrackData->Quaternions[st_ivas->hHeadTrackData->num_quaternions++],
                                     (float) ( FRAMES_PER_SEC * ( sf2 - sf1 ) ),
                                     &trackedHeadOrientation );
            QuatToRotMat( trackedHeadOrientation, st_ivas->hHeadTrackData->Rmat );
#else
            QuatToRotMat( st_ivas->hHeadTrackData->Quaternions[st_ivas->hHeadTrackData->num_quaternions++], st_ivas->hHeadTrackData->Rmat );
#endif

            p_Rmat = &st_ivas->hHeadTrackData->Rmat[0][0];

+0 −12
Original line number Diff line number Diff line
@@ -110,9 +110,6 @@ void ivas_ism_render(
    int16_t num_objects, nchan_out_woLFE, lfe_index;
    int16_t azimuth, elevation;
    float Rmat[3][3];
#ifdef FIX_I109_ORIENTATION_TRACKING
    IVAS_QUATERNION trackedHeadOrientation;
#endif

    num_objects = st_ivas->nchan_transport;
    nchan_out_woLFE = st_ivas->hIntSetup.nchan_out_woLFE;
@@ -136,17 +133,8 @@ void ivas_ism_render(

    if ( st_ivas->hHeadTrackData != NULL && st_ivas->hHeadTrackData->num_quaternions >= 0 )
    {
#ifdef FIX_I109_ORIENTATION_TRACKING
        ivas_orient_trk_Process( st_ivas->hHeadTrackData->OrientationTracker,
                                 &st_ivas->hHeadTrackData->Quaternions[st_ivas->hHeadTrackData->num_quaternions++],
                                 FRAMES_PER_SEC,
                                 &trackedHeadOrientation );
        /* Calculate rotation matrix from the quaternion */
        QuatToRotMat( trackedHeadOrientation, Rmat );
#else
        /* Calculate rotation matrix from the quaternion */
        QuatToRotMat( st_ivas->hHeadTrackData->Quaternions[st_ivas->hHeadTrackData->num_quaternions++], Rmat );
#endif
    }

    for ( i = 0; i < num_objects; i++ )
Loading