From f73558f1fbd7780fd2792fee4db3c65e6a19fa6a Mon Sep 17 00:00:00 2001 From: hsd Date: Mon, 6 Mar 2023 14:18:02 +0100 Subject: [PATCH 1/2] [fix] call SetReferenceRotation before SetHeadRotation. Ohterwise the reference rotation gets applied one frame too late --- apps/decoder.c | 54 ++++++++++++++++++++++++++++++++----------------- apps/renderer.c | 36 ++++++++++++++++----------------- 2 files changed, 54 insertions(+), 36 deletions(-) diff --git a/apps/decoder.c b/apps/decoder.c index 40ac02238e..dcd5cf62e8 100644 --- a/apps/decoder.c +++ b/apps/decoder.c @@ -1509,6 +1509,42 @@ static ivas_error decodeG192( goto cleanup; } +#ifdef FIX_I109_ORIENTATION_TRACKING + /* Reference rotation */ + if ( arg.enableReferenceRotation ) + { + IVAS_QUATERNION quaternion; + if ( ( error = HeadRotationFileReading( refRotReader, &quaternion ) ) != IVAS_ERR_OK ) + { + fprintf( stderr, "\nError %s while reading reference rotation from %s\n", IVAS_DEC_GetErrorMessage( error ), HeadRotationFileReader_getFilePath( refRotReader ) ); + goto cleanup; + } + + if ( ( error = IVAS_DEC_FeedRefRotData( hIvasDec, quaternion ) ) != IVAS_ERR_OK ) + { + fprintf( stderr, "\nIVAS_DEC_FeedRefRotData failed: %s\n", IVAS_DEC_GetErrorMessage( error ) ); + goto cleanup; + } + } +#endif +#ifdef FIX_I109_ORIENTATION_TRACKING + /* Reference rotation */ + if ( arg.enableReferenceRotation ) + { + IVAS_QUATERNION quaternion; + if ( ( error = HeadRotationFileReading( refRotReader, &quaternion ) ) != IVAS_ERR_OK ) + { + fprintf( stderr, "\nError %s while reading reference rotation from %s\n", IVAS_DEC_GetErrorMessage( error ), HeadRotationFileReader_getFilePath( refRotReader ) ); + goto cleanup; + } + + if ( ( error = IVAS_DEC_FeedRefRotData( hIvasDec, quaternion ) ) != IVAS_ERR_OK ) + { + fprintf( stderr, "\nIVAS_DEC_FeedRefRotData failed: %s\n", IVAS_DEC_GetErrorMessage( error ) ); + goto cleanup; + } + } +#endif /* Head-tracking input simulation */ if ( arg.enableHeadRotation ) { @@ -1538,24 +1574,6 @@ static ivas_error decodeG192( } } -#ifdef FIX_I109_ORIENTATION_TRACKING - /* Reference rotation */ - if ( arg.enableReferenceRotation ) - { - IVAS_QUATERNION quaternion; - if ( ( error = HeadRotationFileReading( refRotReader, &quaternion ) ) != IVAS_ERR_OK ) - { - fprintf( stderr, "\nError %s while reading reference rotation from %s\n", IVAS_DEC_GetErrorMessage( error ), HeadRotationFileReader_getFilePath( refRotReader ) ); - goto cleanup; - } - - if ( ( error = IVAS_DEC_FeedRefRotData( hIvasDec, quaternion ) ) != IVAS_ERR_OK ) - { - fprintf( stderr, "\nIVAS_DEC_FeedRefRotData failed: %s\n", IVAS_DEC_GetErrorMessage( error ) ); - goto cleanup; - } - } -#endif /* Run decoder for one frame (get rendered output) */ if ( ( error = IVAS_DEC_GetSamples( hIvasDec, pcmBuf, &nOutSamples ) ) != IVAS_ERR_OK ) { diff --git a/apps/renderer.c b/apps/renderer.c index fa3a3d21ee..fef1e65eba 100644 --- a/apps/renderer.c +++ b/apps/renderer.c @@ -942,6 +942,24 @@ int main( ObjectPositionBuffer mtdBuffer; IsmPositionProvider_getNextFrame( positionProvider, &mtdBuffer ); +#ifdef FIX_I109_ORIENTATION_TRACKING + /* Read from reference rotation trajectory file if specified */ + if ( referenceRotReader != NULL ) + { + IVAS_QUATERNION quaternion; + if ( HeadRotationFileReading( referenceRotReader, &quaternion ) != IVAS_ERR_OK ) + { + fprintf( stderr, "Error in Head Rotation File Reading.\r\n" ); + exit( -1 ); + } + if ( IVAS_REND_SetReferenceRotation( hIvasRend, quaternion ) != IVAS_ERR_OK ) + { + fprintf( stderr, "Error setting Reference Rotation.\r\n" ); + exit( -1 ); + } + } +#endif + /* Read from head rotation trajectory file if specified */ if ( headRotReader != NULL ) { @@ -973,24 +991,6 @@ int main( } } -#ifdef FIX_I109_ORIENTATION_TRACKING - /* Read from reference rotation trajectory file if specified */ - if ( referenceRotReader != NULL ) - { - IVAS_QUATERNION quaternion; - if ( HeadRotationFileReading( referenceRotReader, &quaternion ) != IVAS_ERR_OK ) - { - fprintf( stderr, "Error in Head Rotation File Reading.\r\n" ); - exit( -1 ); - } - if ( IVAS_REND_SetReferenceRotation( hIvasRend, quaternion ) != IVAS_ERR_OK ) - { - fprintf( stderr, "Error setting Reference Rotation.\r\n" ); - exit( -1 ); - } - } -#endif - for ( i = 0; i < args.inConfig.numMultiChannelBuses; ++i ) { if ( ( error = IVAS_REND_GetInputNumChannels( hIvasRend, mcIds[i], &numChannels ) ) != IVAS_ERR_OK ) -- GitLab From 826f05f83310afa425c8d70f548c65f8985c3bcb Mon Sep 17 00:00:00 2001 From: hsd Date: Tue, 7 Mar 2023 10:00:07 +0100 Subject: [PATCH 2/2] [fix] removed duplicated HeadRotationFileReading block, thx2szczerba --- apps/decoder.c | 18 ------------------ 1 file changed, 18 deletions(-) diff --git a/apps/decoder.c b/apps/decoder.c index dcd5cf62e8..0612c9b2a5 100644 --- a/apps/decoder.c +++ b/apps/decoder.c @@ -1509,24 +1509,6 @@ static ivas_error decodeG192( goto cleanup; } -#ifdef FIX_I109_ORIENTATION_TRACKING - /* Reference rotation */ - if ( arg.enableReferenceRotation ) - { - IVAS_QUATERNION quaternion; - if ( ( error = HeadRotationFileReading( refRotReader, &quaternion ) ) != IVAS_ERR_OK ) - { - fprintf( stderr, "\nError %s while reading reference rotation from %s\n", IVAS_DEC_GetErrorMessage( error ), HeadRotationFileReader_getFilePath( refRotReader ) ); - goto cleanup; - } - - if ( ( error = IVAS_DEC_FeedRefRotData( hIvasDec, quaternion ) ) != IVAS_ERR_OK ) - { - fprintf( stderr, "\nIVAS_DEC_FeedRefRotData failed: %s\n", IVAS_DEC_GetErrorMessage( error ) ); - goto cleanup; - } - } -#endif #ifdef FIX_I109_ORIENTATION_TRACKING /* Reference rotation */ if ( arg.enableReferenceRotation ) -- GitLab