Loading apps/decoder.c +1 −1 Original line number Diff line number Diff line Loading @@ -1384,7 +1384,7 @@ static ivas_error decodeG192( uint16_t numObj = 0; IVAS_DEC_BS_FORMAT bsFormat = IVAS_DEC_BS_UNKOWN; #ifdef TD5 float Pos[IVAS_MAX_PARAM_SPATIAL_SUBFRAMES][3] = { 0 }; /* Initialization needed for gcc */ IVAS_POSITION Pos[IVAS_MAX_PARAM_SPATIAL_SUBFRAMES]; #endif IsmFileWriter *ismWriters[IVAS_MAX_NUM_OBJECTS]; Loading apps/renderer.c +71 −2 Original line number Diff line number Diff line Loading @@ -517,6 +517,9 @@ int main( int32_t delayTimeScale = 0; int16_t i, numChannels; ivas_error error = IVAS_ERR_OK; #ifdef TD5 IVAS_POSITION Pos[RENDERER_HEAD_POSITIONS_PER_FRAME]; #endif #ifdef WMOPS reset_wmops(); Loading Loading @@ -645,19 +648,31 @@ int main( } /* === Configure === */ #ifdef TD5 if ( ( error = IVAS_REND_InitConfig( hIvasRend, ( args.outConfig.audioConfig == IVAS_REND_AUDIO_CONFIG_BINAURAL_ROOM ) || ( args.outConfig.audioConfig == IVAS_REND_AUDIO_CONFIG_BINAURAL ) ) ) != IVAS_ERR_OK ) #else if ( ( error = IVAS_REND_InitConfig( hIvasRend, strlen( args.renderConfigFilePath ) != 0 ) ) != IVAS_ERR_OK ) { exit( -1 ); } #endif if ( args.renderConfigFilePath[0] != '\0' ) { IVAS_RENDER_CONFIG_DATA renderConfig; /* sanity check */ #ifdef TD5 if ( ( args.outConfig.audioConfig != IVAS_REND_AUDIO_CONFIG_BINAURAL_ROOM ) && ( args.outConfig.audioConfig != IVAS_REND_AUDIO_CONFIG_BINAURAL ) ) #else if ( args.outConfig.audioConfig != IVAS_REND_AUDIO_CONFIG_BINAURAL_ROOM ) #endif { #ifdef TD5 fprintf( stderr, "\nExternal Renderer Config is supported only when BINAURAL or BINAURAL_ROOM is used as output. Exiting. \n" ); #else fprintf( stderr, "\nExternal Renderer Config is supported only when BINAURAL_ROOM is used as output. Exiting. \n" ); #endif exit( -1 ); } Loading Loading @@ -889,16 +904,20 @@ int main( { IVAS_QUATERNION quatBuffer[RENDERER_HEAD_POSITIONS_PER_FRAME]; #ifdef TD5 float Pos[RENDERER_HEAD_POSITIONS_PER_FRAME][3]; HeadRotationFileReading( headRotReader, quatBuffer, Pos ); IVAS_REND_SetHeadRotation( hIvasRend, quatBuffer, Pos ); #else HeadRotationFileReading( headRotReader, quatBuffer, frame ); #endif IVAS_REND_SetHeadRotation( hIvasRend, quatBuffer ); #endif } else { #ifdef TD5 IVAS_REND_SetHeadRotation( hIvasRend, NULL, NULL ); #else IVAS_REND_SetHeadRotation( hIvasRend, NULL ); #endif } for ( i = 0; i < args.inConfig.numMultiChannelBuses; ++i ) Loading Loading @@ -1720,6 +1739,11 @@ void getMetadataFromFileReader( objectMetadataBuffer->positions[objIdx].azimuth = ismMetadata.azimuth; objectMetadataBuffer->positions[objIdx].elevation = ismMetadata.elevation; #ifdef TD5 objectMetadataBuffer->positions[objIdx].radius = ismMetadata.radius; objectMetadataBuffer->positions[objIdx].yaw = ismMetadata.yaw; objectMetadataBuffer->positions[objIdx].pitch = ismMetadata.pitch; #endif return; } Loading Loading @@ -1774,6 +1798,11 @@ static void IsmPositionProvider_getNextFrame( { objectMetadataBuffer->positions[objIdx].azimuth = 0.0f; objectMetadataBuffer->positions[objIdx].elevation = 0.0f; #ifdef TD5 objectMetadataBuffer->positions[objIdx].radius = 1.0f; objectMetadataBuffer->positions[objIdx].yaw = 0.0f; objectMetadataBuffer->positions[objIdx].pitch = 0.0f; #endif } /* Wrap azimuth to lie within (-180, 180] range */ Loading @@ -1788,6 +1817,20 @@ static void IsmPositionProvider_getNextFrame( /* Clamp elevation to lie within [-90, 90] range (can't be wrapped easily) */ objectMetadataBuffer->positions[objIdx].elevation = min( max( objectMetadataBuffer->positions[objIdx].elevation, -90 ), 90 ); #ifdef TD5 /* Wrap yaw to lie within (-180, 180] range */ while ( objectMetadataBuffer->positions[objIdx].yaw < 0.0f ) { objectMetadataBuffer->positions[objIdx].yaw += 360.0f; } while ( objectMetadataBuffer->positions[objIdx].yaw >= 360.0f ) { objectMetadataBuffer->positions[objIdx].yaw -= 360.0f; } /* Clamp pitch to lie within [-90, 90] range (can't be wrapped easily) */ objectMetadataBuffer->positions[objIdx].pitch = min( max( objectMetadataBuffer->positions[objIdx].pitch, -90 ), 90 ); #endif } ++positionProvider->frameCounter; Loading Loading @@ -2049,6 +2092,32 @@ static void parseObjectPosition( exit( -1 ); } #ifdef TD5 readNextMetadataChunk( line, "," ); position->radius = strtof( line, &endptr ); if ( *endptr != '\0' ) { fprintf( stderr, "Error reading metadata\n" ); exit( -1 ); } readNextMetadataChunk( line, "\n" ); position->yaw = strtof( line, &endptr ); if ( *endptr != '\0' ) { fprintf( stderr, "Error reading metadata\n" ); exit( -1 ); } readNextMetadataChunk( line, "\n" ); position->pitch = strtof( line, &endptr ); if ( *endptr != '\0' ) { fprintf( stderr, "Error reading metadata\n" ); exit( -1 ); } #endif return; } Loading lib_com/common_api_types.h +5 −0 Original line number Diff line number Diff line Loading @@ -123,6 +123,11 @@ typedef struct { float azimuth; float elevation; #ifdef TD5 float radius; float yaw; float pitch; #endif } IVAS_REND_AudioObjectPosition; typedef struct _IVAS_ROOM_ACOUSTICS_CONFIG Loading lib_dec/lib_dec.c +4 −4 Original line number Diff line number Diff line Loading @@ -915,7 +915,7 @@ ivas_error IVAS_DEC_FeedHeadTrackData( IVAS_DEC_HANDLE hIvasDec, /* i/o: IVAS decoder handle */ #ifdef TD5 IVAS_QUATERNION *orientation, /* i : head-tracking data, listener orientation */ float Pos[4][3] /* i : listener position */ IVAS_POSITION *Pos /* i : listener position */ #else IVAS_QUATERNION *orientation /* i : head-tracking data, listener orientation */ #endif Loading Loading @@ -944,9 +944,9 @@ ivas_error IVAS_DEC_FeedHeadTrackData( hHeadTrackData->Quaternions[i].y = orientation[i].y; hHeadTrackData->Quaternions[i].z = orientation[i].z; #ifdef TD5 hHeadTrackData->Pos[i].x = Pos[i][0]; hHeadTrackData->Pos[i].y = Pos[i][1]; hHeadTrackData->Pos[i].z = Pos[i][2]; hHeadTrackData->Pos[i].x = Pos[i].x; hHeadTrackData->Pos[i].y = Pos[i].y; hHeadTrackData->Pos[i].z = Pos[i].z; #endif } Loading lib_dec/lib_dec.h +1 −1 Original line number Diff line number Diff line Loading @@ -187,7 +187,7 @@ ivas_error IVAS_DEC_FeedHeadTrackData( IVAS_DEC_HANDLE hIvasDec, /* i/o: IVAS decoder handle */ #ifdef TD5 IVAS_QUATERNION *orientation, /* i : head-tracking data */ float Pos[4][3] /* i : listener position */ IVAS_POSITION *Pos /* i : listener position */ #else IVAS_QUATERNION *orientation /* i : head-tracking data */ #endif Loading Loading
apps/decoder.c +1 −1 Original line number Diff line number Diff line Loading @@ -1384,7 +1384,7 @@ static ivas_error decodeG192( uint16_t numObj = 0; IVAS_DEC_BS_FORMAT bsFormat = IVAS_DEC_BS_UNKOWN; #ifdef TD5 float Pos[IVAS_MAX_PARAM_SPATIAL_SUBFRAMES][3] = { 0 }; /* Initialization needed for gcc */ IVAS_POSITION Pos[IVAS_MAX_PARAM_SPATIAL_SUBFRAMES]; #endif IsmFileWriter *ismWriters[IVAS_MAX_NUM_OBJECTS]; Loading
apps/renderer.c +71 −2 Original line number Diff line number Diff line Loading @@ -517,6 +517,9 @@ int main( int32_t delayTimeScale = 0; int16_t i, numChannels; ivas_error error = IVAS_ERR_OK; #ifdef TD5 IVAS_POSITION Pos[RENDERER_HEAD_POSITIONS_PER_FRAME]; #endif #ifdef WMOPS reset_wmops(); Loading Loading @@ -645,19 +648,31 @@ int main( } /* === Configure === */ #ifdef TD5 if ( ( error = IVAS_REND_InitConfig( hIvasRend, ( args.outConfig.audioConfig == IVAS_REND_AUDIO_CONFIG_BINAURAL_ROOM ) || ( args.outConfig.audioConfig == IVAS_REND_AUDIO_CONFIG_BINAURAL ) ) ) != IVAS_ERR_OK ) #else if ( ( error = IVAS_REND_InitConfig( hIvasRend, strlen( args.renderConfigFilePath ) != 0 ) ) != IVAS_ERR_OK ) { exit( -1 ); } #endif if ( args.renderConfigFilePath[0] != '\0' ) { IVAS_RENDER_CONFIG_DATA renderConfig; /* sanity check */ #ifdef TD5 if ( ( args.outConfig.audioConfig != IVAS_REND_AUDIO_CONFIG_BINAURAL_ROOM ) && ( args.outConfig.audioConfig != IVAS_REND_AUDIO_CONFIG_BINAURAL ) ) #else if ( args.outConfig.audioConfig != IVAS_REND_AUDIO_CONFIG_BINAURAL_ROOM ) #endif { #ifdef TD5 fprintf( stderr, "\nExternal Renderer Config is supported only when BINAURAL or BINAURAL_ROOM is used as output. Exiting. \n" ); #else fprintf( stderr, "\nExternal Renderer Config is supported only when BINAURAL_ROOM is used as output. Exiting. \n" ); #endif exit( -1 ); } Loading Loading @@ -889,16 +904,20 @@ int main( { IVAS_QUATERNION quatBuffer[RENDERER_HEAD_POSITIONS_PER_FRAME]; #ifdef TD5 float Pos[RENDERER_HEAD_POSITIONS_PER_FRAME][3]; HeadRotationFileReading( headRotReader, quatBuffer, Pos ); IVAS_REND_SetHeadRotation( hIvasRend, quatBuffer, Pos ); #else HeadRotationFileReading( headRotReader, quatBuffer, frame ); #endif IVAS_REND_SetHeadRotation( hIvasRend, quatBuffer ); #endif } else { #ifdef TD5 IVAS_REND_SetHeadRotation( hIvasRend, NULL, NULL ); #else IVAS_REND_SetHeadRotation( hIvasRend, NULL ); #endif } for ( i = 0; i < args.inConfig.numMultiChannelBuses; ++i ) Loading Loading @@ -1720,6 +1739,11 @@ void getMetadataFromFileReader( objectMetadataBuffer->positions[objIdx].azimuth = ismMetadata.azimuth; objectMetadataBuffer->positions[objIdx].elevation = ismMetadata.elevation; #ifdef TD5 objectMetadataBuffer->positions[objIdx].radius = ismMetadata.radius; objectMetadataBuffer->positions[objIdx].yaw = ismMetadata.yaw; objectMetadataBuffer->positions[objIdx].pitch = ismMetadata.pitch; #endif return; } Loading Loading @@ -1774,6 +1798,11 @@ static void IsmPositionProvider_getNextFrame( { objectMetadataBuffer->positions[objIdx].azimuth = 0.0f; objectMetadataBuffer->positions[objIdx].elevation = 0.0f; #ifdef TD5 objectMetadataBuffer->positions[objIdx].radius = 1.0f; objectMetadataBuffer->positions[objIdx].yaw = 0.0f; objectMetadataBuffer->positions[objIdx].pitch = 0.0f; #endif } /* Wrap azimuth to lie within (-180, 180] range */ Loading @@ -1788,6 +1817,20 @@ static void IsmPositionProvider_getNextFrame( /* Clamp elevation to lie within [-90, 90] range (can't be wrapped easily) */ objectMetadataBuffer->positions[objIdx].elevation = min( max( objectMetadataBuffer->positions[objIdx].elevation, -90 ), 90 ); #ifdef TD5 /* Wrap yaw to lie within (-180, 180] range */ while ( objectMetadataBuffer->positions[objIdx].yaw < 0.0f ) { objectMetadataBuffer->positions[objIdx].yaw += 360.0f; } while ( objectMetadataBuffer->positions[objIdx].yaw >= 360.0f ) { objectMetadataBuffer->positions[objIdx].yaw -= 360.0f; } /* Clamp pitch to lie within [-90, 90] range (can't be wrapped easily) */ objectMetadataBuffer->positions[objIdx].pitch = min( max( objectMetadataBuffer->positions[objIdx].pitch, -90 ), 90 ); #endif } ++positionProvider->frameCounter; Loading Loading @@ -2049,6 +2092,32 @@ static void parseObjectPosition( exit( -1 ); } #ifdef TD5 readNextMetadataChunk( line, "," ); position->radius = strtof( line, &endptr ); if ( *endptr != '\0' ) { fprintf( stderr, "Error reading metadata\n" ); exit( -1 ); } readNextMetadataChunk( line, "\n" ); position->yaw = strtof( line, &endptr ); if ( *endptr != '\0' ) { fprintf( stderr, "Error reading metadata\n" ); exit( -1 ); } readNextMetadataChunk( line, "\n" ); position->pitch = strtof( line, &endptr ); if ( *endptr != '\0' ) { fprintf( stderr, "Error reading metadata\n" ); exit( -1 ); } #endif return; } Loading
lib_com/common_api_types.h +5 −0 Original line number Diff line number Diff line Loading @@ -123,6 +123,11 @@ typedef struct { float azimuth; float elevation; #ifdef TD5 float radius; float yaw; float pitch; #endif } IVAS_REND_AudioObjectPosition; typedef struct _IVAS_ROOM_ACOUSTICS_CONFIG Loading
lib_dec/lib_dec.c +4 −4 Original line number Diff line number Diff line Loading @@ -915,7 +915,7 @@ ivas_error IVAS_DEC_FeedHeadTrackData( IVAS_DEC_HANDLE hIvasDec, /* i/o: IVAS decoder handle */ #ifdef TD5 IVAS_QUATERNION *orientation, /* i : head-tracking data, listener orientation */ float Pos[4][3] /* i : listener position */ IVAS_POSITION *Pos /* i : listener position */ #else IVAS_QUATERNION *orientation /* i : head-tracking data, listener orientation */ #endif Loading Loading @@ -944,9 +944,9 @@ ivas_error IVAS_DEC_FeedHeadTrackData( hHeadTrackData->Quaternions[i].y = orientation[i].y; hHeadTrackData->Quaternions[i].z = orientation[i].z; #ifdef TD5 hHeadTrackData->Pos[i].x = Pos[i][0]; hHeadTrackData->Pos[i].y = Pos[i][1]; hHeadTrackData->Pos[i].z = Pos[i][2]; hHeadTrackData->Pos[i].x = Pos[i].x; hHeadTrackData->Pos[i].y = Pos[i].y; hHeadTrackData->Pos[i].z = Pos[i].z; #endif } Loading
lib_dec/lib_dec.h +1 −1 Original line number Diff line number Diff line Loading @@ -187,7 +187,7 @@ ivas_error IVAS_DEC_FeedHeadTrackData( IVAS_DEC_HANDLE hIvasDec, /* i/o: IVAS decoder handle */ #ifdef TD5 IVAS_QUATERNION *orientation, /* i : head-tracking data */ float Pos[4][3] /* i : listener position */ IVAS_POSITION *Pos /* i : listener position */ #else IVAS_QUATERNION *orientation /* i : head-tracking data */ #endif Loading