Loading apps/decoder.c +1 −1 Original line number Diff line number Diff line Loading @@ -1400,7 +1400,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/encoder.c +3 −5 Original line number Diff line number Diff line Loading @@ -1685,15 +1685,13 @@ static void usage_enc( void ) fprintf( stdout, "-stereo [Mode] : Stereo format, default is unified stereo \n" ); fprintf( stdout, " optional for Mode: 1: DFT Stereo, 2: TD Stereo, 3: MDCT Stereo\n" ); #ifdef TD5 fprintf( stdout, "-ism (+)Ch Files : ISm format \n" ); fprintf( stdout, " where Ch specifies the number of ISms (1-4)\n" ); fprintf( stdout, "-ism (+)Ch Files : ISM format \n" ); fprintf( stdout, " where Ch specifies the number of ISMs (1-4)\n" ); fprintf( stdout, " where positive (+) means extended metadata format is used (including orientation and radius) \n" ); #else fprintf( stdout, "-ism Channels Files : ISm format \n" ); fprintf( stdout, " where Channels specifies the number of ISms (1-4)\n" ); #endif fprintf( stdout, "-ism Channels Files : ISM format \n" ); fprintf( stdout, " where Channels specifies the number of ISMs (1-4)\n" ); #endif fprintf( stdout, " and Files specify input files containing metadata, one file per object\n" ); fprintf( stdout, " (use NULL for no input metadata)\n" ); fprintf( stdout, "-sba +/-Order : Scene Based Audio input format (Ambisonics ACN/SN3D),\n" ); Loading apps/renderer.c +74 −32 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 @@ -661,10 +664,14 @@ 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' ) { Loading @@ -672,7 +679,7 @@ int main( /* sanity check */ #ifdef TD5 if ( ( args.outConfig.audioConfig != IVAS_REND_AUDIO_CONFIG_BINAURAL ) && ( args.outConfig.audioConfig != IVAS_REND_AUDIO_CONFIG_BINAURAL_ROOM ) ) 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 Loading Loading @@ -913,21 +920,17 @@ 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 #ifdef TD5 IVAS_REND_SetHeadRotationAndPosition( hIvasRend, quatBuffer, Pos ); #else IVAS_REND_SetHeadRotation( hIvasRend, quatBuffer ); #endif } else { #ifdef TD5 IVAS_REND_SetHeadRotationAndPosition( hIvasRend, NULL, NULL ); IVAS_REND_SetHeadRotation( hIvasRend, NULL, NULL ); #else IVAS_REND_SetHeadRotation( hIvasRend, NULL ); #endif Loading Loading @@ -1762,9 +1765,10 @@ void getMetadataFromFileReader( 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 @@ -1820,6 +1824,8 @@ static void IsmPositionProvider_getNextFrame( 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 } Loading @@ -1835,6 +1841,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 @@ -2069,6 +2089,28 @@ static void parseObjectPosition( uint16_t *positionDuration ) { char *endptr; #ifdef TD5 int16_t read_values; float meta_prm[7] = { 0.0f, 0.0f, 1.0f, 0.0f, 1.0f, 0.0f, 0.0f }; readNextMetadataChunk( line, "," ); *positionDuration = (uint16_t) strtol( line, &endptr, 10 ); readNextMetadataChunk( line, "\n" ); read_values = (int16_t) sscanf( line, "%f,%f,%f,%f,%f,%f,%f", &meta_prm[0], &meta_prm[1], &meta_prm[2], &meta_prm[3], &meta_prm[4], &meta_prm[5], &meta_prm[6] ); if ( read_values < 2 ) { fprintf( stderr, "Error reading metadata\n" ); exit( -1 ); } position->azimuth = meta_prm[0]; position->elevation = meta_prm[1]; position->radius = meta_prm[2]; position->yaw = meta_prm[5]; position->pitch = meta_prm[6]; #else readNextMetadataChunk( line, "," ); *positionDuration = (uint16_t) strtol( line, &endptr, 10 ); Loading @@ -2095,7 +2137,7 @@ static void parseObjectPosition( fprintf( stderr, "Error reading metadata\n" ); exit( -1 ); } #endif return; } Loading lib_com/common_api_types.h +2 −0 Original line number Diff line number Diff line Loading @@ -129,6 +129,8 @@ typedef struct float elevation; #ifdef TD5 float radius; float yaw; float pitch; #endif } IVAS_REND_AudioObjectPosition; Loading lib_com/ivas_prot.h +1 −1 Original line number Diff line number Diff line Loading @@ -789,7 +789,7 @@ ivas_error set_ism_metadata( ISM_METADATA_HANDLE hIsmMeta, /* i/o: ISM metadata handle */ float azimuth, /* i : azimuth */ #ifdef TD5 float elevation, /* i : elevation */ const float elevation, /* i : elevation value */ float radius_meta, /* i : radius */ float yaw, /* i : yaw */ float pitch /* i : pitch */ Loading Loading
apps/decoder.c +1 −1 Original line number Diff line number Diff line Loading @@ -1400,7 +1400,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/encoder.c +3 −5 Original line number Diff line number Diff line Loading @@ -1685,15 +1685,13 @@ static void usage_enc( void ) fprintf( stdout, "-stereo [Mode] : Stereo format, default is unified stereo \n" ); fprintf( stdout, " optional for Mode: 1: DFT Stereo, 2: TD Stereo, 3: MDCT Stereo\n" ); #ifdef TD5 fprintf( stdout, "-ism (+)Ch Files : ISm format \n" ); fprintf( stdout, " where Ch specifies the number of ISms (1-4)\n" ); fprintf( stdout, "-ism (+)Ch Files : ISM format \n" ); fprintf( stdout, " where Ch specifies the number of ISMs (1-4)\n" ); fprintf( stdout, " where positive (+) means extended metadata format is used (including orientation and radius) \n" ); #else fprintf( stdout, "-ism Channels Files : ISm format \n" ); fprintf( stdout, " where Channels specifies the number of ISms (1-4)\n" ); #endif fprintf( stdout, "-ism Channels Files : ISM format \n" ); fprintf( stdout, " where Channels specifies the number of ISMs (1-4)\n" ); #endif fprintf( stdout, " and Files specify input files containing metadata, one file per object\n" ); fprintf( stdout, " (use NULL for no input metadata)\n" ); fprintf( stdout, "-sba +/-Order : Scene Based Audio input format (Ambisonics ACN/SN3D),\n" ); Loading
apps/renderer.c +74 −32 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 @@ -661,10 +664,14 @@ 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' ) { Loading @@ -672,7 +679,7 @@ int main( /* sanity check */ #ifdef TD5 if ( ( args.outConfig.audioConfig != IVAS_REND_AUDIO_CONFIG_BINAURAL ) && ( args.outConfig.audioConfig != IVAS_REND_AUDIO_CONFIG_BINAURAL_ROOM ) ) 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 Loading Loading @@ -913,21 +920,17 @@ 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 #ifdef TD5 IVAS_REND_SetHeadRotationAndPosition( hIvasRend, quatBuffer, Pos ); #else IVAS_REND_SetHeadRotation( hIvasRend, quatBuffer ); #endif } else { #ifdef TD5 IVAS_REND_SetHeadRotationAndPosition( hIvasRend, NULL, NULL ); IVAS_REND_SetHeadRotation( hIvasRend, NULL, NULL ); #else IVAS_REND_SetHeadRotation( hIvasRend, NULL ); #endif Loading Loading @@ -1762,9 +1765,10 @@ void getMetadataFromFileReader( 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 @@ -1820,6 +1824,8 @@ static void IsmPositionProvider_getNextFrame( 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 } Loading @@ -1835,6 +1841,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 @@ -2069,6 +2089,28 @@ static void parseObjectPosition( uint16_t *positionDuration ) { char *endptr; #ifdef TD5 int16_t read_values; float meta_prm[7] = { 0.0f, 0.0f, 1.0f, 0.0f, 1.0f, 0.0f, 0.0f }; readNextMetadataChunk( line, "," ); *positionDuration = (uint16_t) strtol( line, &endptr, 10 ); readNextMetadataChunk( line, "\n" ); read_values = (int16_t) sscanf( line, "%f,%f,%f,%f,%f,%f,%f", &meta_prm[0], &meta_prm[1], &meta_prm[2], &meta_prm[3], &meta_prm[4], &meta_prm[5], &meta_prm[6] ); if ( read_values < 2 ) { fprintf( stderr, "Error reading metadata\n" ); exit( -1 ); } position->azimuth = meta_prm[0]; position->elevation = meta_prm[1]; position->radius = meta_prm[2]; position->yaw = meta_prm[5]; position->pitch = meta_prm[6]; #else readNextMetadataChunk( line, "," ); *positionDuration = (uint16_t) strtol( line, &endptr, 10 ); Loading @@ -2095,7 +2137,7 @@ static void parseObjectPosition( fprintf( stderr, "Error reading metadata\n" ); exit( -1 ); } #endif return; } Loading
lib_com/common_api_types.h +2 −0 Original line number Diff line number Diff line Loading @@ -129,6 +129,8 @@ typedef struct float elevation; #ifdef TD5 float radius; float yaw; float pitch; #endif } IVAS_REND_AudioObjectPosition; Loading
lib_com/ivas_prot.h +1 −1 Original line number Diff line number Diff line Loading @@ -789,7 +789,7 @@ ivas_error set_ism_metadata( ISM_METADATA_HANDLE hIsmMeta, /* i/o: ISM metadata handle */ float azimuth, /* i : azimuth */ #ifdef TD5 float elevation, /* i : elevation */ const float elevation, /* i : elevation value */ float radius_meta, /* i : radius */ float yaw, /* i : yaw */ float pitch /* i : pitch */ Loading