diff --git a/Workspace_msvc/lib_com.vcxproj b/Workspace_msvc/lib_com.vcxproj
index 223f837a2e1685afeedb952a5137dab7b902b3a6..c28b36a1454bdb9bd3245a0ce9050d258602a13a 100644
--- a/Workspace_msvc/lib_com.vcxproj
+++ b/Workspace_msvc/lib_com.vcxproj
@@ -223,7 +223,7 @@
-
+
diff --git a/Workspace_msvc/lib_lc3plus.vcxproj b/Workspace_msvc/lib_lc3plus.vcxproj
index 55a291fa9c768769f213dac4423688e2db81f8e3..3f1527357ad6c96d8629a85f7ab3937e82fb3bb0 100644
--- a/Workspace_msvc/lib_lc3plus.vcxproj
+++ b/Workspace_msvc/lib_lc3plus.vcxproj
@@ -106,7 +106,6 @@
-
@@ -116,13 +115,13 @@
-
-
+
+
-
+
@@ -133,35 +132,36 @@
+
-
-
-
+
+
+
+
-
-
-
+
+
+
-
@@ -169,14 +169,12 @@
-
-
-
-
+
+
+
+
-
-
diff --git a/Workspace_msvc/lib_rend.vcxproj b/Workspace_msvc/lib_rend.vcxproj
index 27d4a19a693cf86f60b3ce654912c65b4a7cbaa6..854c99a979e4ae274d9c002b2ca6686a96e75870 100644
--- a/Workspace_msvc/lib_rend.vcxproj
+++ b/Workspace_msvc/lib_rend.vcxproj
@@ -175,6 +175,7 @@
+
diff --git a/Workspace_msvc/lib_rend.vcxproj.filters b/Workspace_msvc/lib_rend.vcxproj.filters
index 942c63712f66e57821488868f81981d3042c56b0..2d1d7d46c0b86e517f6f5a9a35d3c5a985a4caac 100644
--- a/Workspace_msvc/lib_rend.vcxproj.filters
+++ b/Workspace_msvc/lib_rend.vcxproj.filters
@@ -32,30 +32,12 @@
rend_c
-
- rend_c
-
-
- rend_c
-
-
- rend_c
-
-
- rend_c
-
rend_c
rend_c
-
- rend_c
-
-
- rend_c
-
rend_c
@@ -83,15 +65,6 @@
rend_c
-
- rend_c
-
-
- rend_c
-
-
- rend_c
-
rend_c
@@ -113,9 +86,6 @@
rend_c
-
- rend_c
-
rend_c
@@ -134,24 +104,6 @@
rend_c
-
- rend_c
-
-
- rend_c
-
-
- rend_c
-
-
- rend_c
-
-
- rend_c
-
-
- rend_c
-
rend_c
@@ -161,30 +113,15 @@
rend_c
-
- rend_c
-
-
- rend_c
-
-
+
rend_c
-
+
rend_c
-
- rend_h
-
-
- rend_h
-
-
- rend_h
-
rend_h
@@ -203,12 +140,6 @@
rend_h
-
- rend_h
-
-
- rend_h
-
diff --git a/apps/decoder.c b/apps/decoder.c
index 71379c6575451f68f2ee8c76a656db9f46fcd232..4a28b4470b7c26a1673b05209a6c3d834a0882df 100644
--- a/apps/decoder.c
+++ b/apps/decoder.c
@@ -1617,6 +1617,18 @@ static bool parseCmdlIVAS_dec(
return false;
}
+#ifdef SUPPORT_JBM_TRACEFILE
+ /* Validate options that depend on other options */
+ if ( arg->jbmTraceFilename != NULL && arg->delayCompensationEnabled
+ /* This decMode check should be removed once timestamp sync issues between JBM trace and audio are fixed in EVS */
+ && arg->decMode != IVAS_DEC_MODE_EVS )
+ {
+ fprintf( stderr, "Error: Writing to a JBM trace file requires delay compensation to be disabled with -no_delay_cmp\n\n" );
+ usage_dec();
+ return false;
+ }
+#endif
+
return true;
}
@@ -1653,7 +1665,8 @@ static void usage_dec( void )
fprintf( stdout, " EVS RTP Payload Format. The SDP parameter hf_only is required.\n" );
fprintf( stdout, " Reading RFC4867 AMR/AMR-WB RTP payload format is not supported.\n" );
#ifdef SUPPORT_JBM_TRACEFILE
- fprintf( stdout, "-Tracefile TF : VoIP mode: Generate trace file named TF\n" );
+ fprintf( stdout, "-Tracefile TF : VoIP mode: Generate trace file named TF. Requires -no_delay_cmp to\n" );
+ fprintf( stdout, " be enabled so that trace contents remain in sync with audio output.\n" );
#endif
#ifdef DEBUGGING
#ifdef VARIABLE_SPEED_DECODING
diff --git a/apps/renderer.c b/apps/renderer.c
index 8e44fd6cc19cf316afea7a5563e67c357acdf3d6..26c4b349d2b8e436a01db2d5d3dda8a9f86f0d31 100644
--- a/apps/renderer.c
+++ b/apps/renderer.c
@@ -68,6 +68,8 @@
#define IVAS_MAX16B_FLT 32767.0f
#define IVAS_MIN16B_FLT ( -32768.0f )
+#define OMASA_TDREND_MATCHING_GAIN_DB ( -2.0f )
+
#if !defined( DEBUGGING ) && !defined( WMOPS )
static
#endif
@@ -562,12 +564,19 @@ static void setupWithSingleFormatInput(
positionProvider->numObjects = args.inConfig.numAudioObjects;
for ( int16_t i = 0; i < positionProvider->numObjects; ++i )
{
- /* It is allowed on CLI to have no metadata for an ISM input - skip opening if string is empty or contains "NULL" */
+ /* Check if path to metadata file was given */
+ if ( isEmptyString( args.inMetadataFilePaths[i] ) )
+ {
+ fprintf( stderr, "No metadata file was given for ISM input %d\n", i );
+ exit( -1 );
+ }
+
+ /* It is allowed on CLI to have no metadata for an ISM input - skip opening if string contains "NULL" */
char charBuf[FILENAME_MAX];
strncpy( charBuf, args.inMetadataFilePaths[i], min( FILENAME_MAX, RENDERER_MAX_CLI_ARG_LENGTH ) - 1 );
charBuf[min( FILENAME_MAX, RENDERER_MAX_CLI_ARG_LENGTH ) - 1] = '\0';
to_upper( charBuf );
- if ( isEmptyString( args.inMetadataFilePaths[i] ) || strncmp( charBuf, "NULL", 4 ) == 0 )
+ if ( strncmp( charBuf, "NULL", 4 ) == 0 )
{
continue;
}
@@ -698,6 +707,7 @@ int main(
SplitFileReadWrite *hSplitRendFileReadWrite;
int16_t delayNumSamples_temp;
int32_t delayTimeScale_temp;
+ bool flushRendererLastFrame = false;
int16_t numSamplesRead;
int16_t delayNumSamples = -1;
int16_t delayNumSamples_orig = 0;
@@ -742,8 +752,11 @@ int main(
CmdlnArgs args = parseCmdlnArgs( argc, argv );
- if ( args.nonDiegeticPan && !( ( args.inConfig.numAudioObjects == 0 && args.inConfig.multiChannelBuses[0].audioConfig == IVAS_AUDIO_CONFIG_MONO ) ||
- ( args.inConfig.numAudioObjects > 0 && args.inConfig.audioObjects[0].audioConfig == IVAS_AUDIO_CONFIG_OBA && args.inConfig.numAudioObjects == 1 ) ) )
+ if ( args.nonDiegeticPan &&
+ !( ( args.inConfig.numAudioObjects == 0 &&
+ args.inConfig.multiChannelBuses[0].audioConfig == IVAS_AUDIO_CONFIG_MONO ) ||
+ ( args.inConfig.numAudioObjects > 0 &&
+ args.inConfig.audioObjects[0].audioConfig == IVAS_AUDIO_CONFIG_OBA && args.inConfig.numAudioObjects == 1 ) ) )
{
fprintf( stderr, "\ninvalid configuration - non-diegetic panning requires mono or ISM1 input\n" );
goto cleanup;
@@ -1064,7 +1077,10 @@ int main(
{
/* sanity check */
- if ( ( args.outConfig.audioConfig != IVAS_AUDIO_CONFIG_BINAURAL ) && ( args.outConfig.audioConfig != IVAS_AUDIO_CONFIG_BINAURAL_ROOM_IR ) && ( args.outConfig.audioConfig != IVAS_AUDIO_CONFIG_BINAURAL_ROOM_REVERB ) && !is_split_pre_rend_mode( &args ) )
+ if ( ( args.outConfig.audioConfig != IVAS_AUDIO_CONFIG_BINAURAL ) &&
+ ( args.outConfig.audioConfig != IVAS_AUDIO_CONFIG_BINAURAL_ROOM_IR ) &&
+ ( args.outConfig.audioConfig != IVAS_AUDIO_CONFIG_BINAURAL_ROOM_REVERB ) &&
+ !is_split_pre_rend_mode( &args ) )
{
fprintf( stderr, "\nExternal Renderer Config is supported only when binaural output configurations is used as output OR when Split pre-rendering mode is enabled. Exiting. \n" );
goto cleanup;
@@ -1153,20 +1169,30 @@ int main(
}
}
- /* Set the total number of objects */
if ( args.inConfig.numAudioObjects > 0 )
{
+ /* Set the total number of objects */
if ( ( error = IVAS_REND_SetTotalNumberOfObjects( hIvasRend, args.inConfig.numAudioObjects ) ) != IVAS_ERR_OK )
{
fprintf( stderr, "\nError in IVAS_REND_SetTotalNumberOfObjects(): %s\n", ivas_error_to_string( error ) );
goto cleanup;
}
+ /* Set the metadata delay for objects */
if ( ( error = IVAS_REND_SetIsmMetadataDelay( hIvasRend, args.syncMdDelay ) ) != IVAS_ERR_OK )
{
fprintf( stderr, "\nError in IVAS_REND_SetIsmMetadataDelay(): %s\n", ivas_error_to_string( error ) );
goto cleanup;
}
+
+ /* For OMASA input and BINAURAL output, apply a gain to objects to match the loudness with MASA part */
+ if ( args.inConfig.numMasaBuses > 0 && args.outConfig.audioConfig == IVAS_AUDIO_CONFIG_BINAURAL )
+ {
+ for ( i = 0; i < args.inConfig.numAudioObjects; ++i )
+ {
+ args.inConfig.audioObjects[i].gain_dB += OMASA_TDREND_MATCHING_GAIN_DB;
+ }
+ }
}
IVAS_REND_LfePanMtx lfePanMatrix;
@@ -1351,7 +1377,7 @@ int main(
}
int16_t numOutChannels;
- if ( ( error = IVAS_REND_NumOutChannels( hIvasRend, &numOutChannels ) ) != IVAS_ERR_OK )
+ if ( ( error = IVAS_REND_GetNumOutChannels( hIvasRend, &numOutChannels ) ) != IVAS_ERR_OK )
{
fprintf( stderr, "\nError in IVAS_REND_NumOutChannels(): %s\n", ivas_error_to_string( error ) );
goto cleanup;
@@ -1366,8 +1392,16 @@ int main(
}
}
- if ( args.outConfig.audioConfig == IVAS_AUDIO_CONFIG_BINAURAL_SPLIT_CODED )
+ if ( args.outConfig.audioConfig == IVAS_AUDIO_CONFIG_BINAURAL_SPLIT_CODED || args.outConfig.audioConfig == IVAS_AUDIO_CONFIG_BINAURAL_SPLIT_PCM )
{
+ char *outFile = args.outMetadataFilePath;
+
+ if ( args.outConfig.audioConfig == IVAS_AUDIO_CONFIG_BINAURAL_SPLIT_CODED )
+ {
+ outFile = args.outputFilePath;
+ audioWriter = NULL;
+ }
+
if ( ( error = IVAS_REND_GetSplitRendBitstreamHeader( hIvasRend, &bitsBuffer.config.codec, &bitsBuffer.config.poseCorrection, &bitsBuffer.config.codec_frame_size_ms, &bitsBuffer.config.isar_frame_size_ms ) ) != IVAS_ERR_OK )
{
fprintf( stderr, "\nError in IVAS_REND_GetSplitRendBitstreamHeader()!\n" );
@@ -1380,36 +1414,15 @@ int main(
goto cleanup;
}
- if ( ( error = split_rend_writer_open( &hSplitRendFileReadWrite, args.outputFilePath, delayNumSamples_temp, delayTimeScale_temp, bitsBuffer.config.codec, bitsBuffer.config.poseCorrection, bitsBuffer.config.codec_frame_size_ms, bitsBuffer.config.isar_frame_size_ms, args.sampleRate, bitsBuffer.config.lc3plus_highres ) ) != IVAS_ERR_OK )
+ if ( ( error = split_rend_writer_open( &hSplitRendFileReadWrite, outFile, delayNumSamples_temp, delayTimeScale_temp, bitsBuffer.config.codec, bitsBuffer.config.poseCorrection, bitsBuffer.config.codec_frame_size_ms, bitsBuffer.config.isar_frame_size_ms, args.sampleRate, bitsBuffer.config.lc3plus_highres ) ) != IVAS_ERR_OK )
{
- fprintf( stderr, "\nCould not open split rend metadata file %s\n", args.outputFilePath );
+ fprintf( stderr, "\nCould not open split rend metadata file %s\n", outFile );
goto cleanup;
}
- audioWriter = NULL;
}
- else
- {
- if ( args.outConfig.audioConfig == IVAS_AUDIO_CONFIG_BINAURAL_SPLIT_PCM )
- {
- if ( ( error = IVAS_REND_GetSplitRendBitstreamHeader( hIvasRend, &bitsBuffer.config.codec, &bitsBuffer.config.poseCorrection, &bitsBuffer.config.codec_frame_size_ms, &bitsBuffer.config.isar_frame_size_ms ) ) != IVAS_ERR_OK )
- {
- fprintf( stderr, "\nError in IVAS_REND_GetSplitRendBitstreamHeader()!\n" );
- goto cleanup;
- }
-
- if ( IVAS_REND_GetDelay( hIvasRend, &delayNumSamples_temp, &delayTimeScale_temp ) != IVAS_ERR_OK )
- {
- fprintf( stderr, "\nUnable to get delay of renderer!\n" );
- goto cleanup;
- }
-
- if ( ( error = split_rend_writer_open( &hSplitRendFileReadWrite, args.outMetadataFilePath, delayNumSamples_temp, delayTimeScale_temp, bitsBuffer.config.codec, bitsBuffer.config.poseCorrection, bitsBuffer.config.codec_frame_size_ms, bitsBuffer.config.isar_frame_size_ms, args.sampleRate, bitsBuffer.config.lc3plus_highres ) ) != IVAS_ERR_OK )
- {
- fprintf( stderr, "\nCould not open split rend metadata file %s\n", args.outMetadataFilePath );
- goto cleanup;
- }
- }
+ if ( args.outConfig.audioConfig != IVAS_AUDIO_CONFIG_BINAURAL_SPLIT_CODED )
+ {
if ( AudioFileWriter_open( &audioWriter, args.outputFilePath, args.sampleRate, numOutChannels ) != IVAS_ERR_OK )
{
fprintf( stderr, "\nFailed to open file: %s\n", args.outputFilePath );
@@ -1535,16 +1548,23 @@ int main(
if ( numSamplesRead == 0 )
{
/* end of input data */
- break;
+ flushRendererLastFrame = true;
}
/* Convert from int to float and from interleaved to packed */
- convertInputBuffer( inpInt16Buffer, numSamplesRead, inBuffer.config.numSamplesPerChannel, num_in_channels, inFloatBuffer, inBuffer.config.is_cldfb, cldfbAna );
+ if ( !flushRendererLastFrame )
+ {
+ convertInputBuffer( inpInt16Buffer, numSamplesRead, inBuffer.config.numSamplesPerChannel, num_in_channels, inFloatBuffer, inBuffer.config.is_cldfb, cldfbAna );
+ }
+ else
+ {
+ memset( inBuffer.data, 0, inBuffer.config.numChannels * inBuffer.config.numSamplesPerChannel * sizeof( float ) );
+ }
int16_t num_subframes, sf_idx;
num_subframes = (int16_t) args.render_framesize;
- if ( isCurrentFrameMultipleOf20ms )
+ if ( isCurrentFrameMultipleOf20ms && !flushRendererLastFrame )
{
IsmPositionProvider_getNextFrame( positionProvider, &mtdBuffer );
@@ -1656,7 +1676,7 @@ int main(
}
IVAS_REND_ReadOnlyAudioBuffer tmpBuffer = getReadOnlySubBuffer( inBuffer, (int16_t) args.inConfig.multiChannelBuses[i].inputChannelIndex, numChannels );
- if ( ( error = IVAS_REND_FeedInputAudio( hIvasRend, mcIds[i], tmpBuffer ) ) != IVAS_ERR_OK )
+ if ( ( error = IVAS_REND_FeedInputAudio( hIvasRend, mcIds[i], tmpBuffer, flushRendererLastFrame ) ) != IVAS_ERR_OK )
{
fprintf( stderr, "\nIVAS_REND_FeedInputAudio failed: %s\n", ivas_error_to_string( error ) );
goto cleanup;
@@ -1671,7 +1691,7 @@ int main(
{
IVAS_REND_ReadOnlyAudioBuffer tmpBuffer = getReadOnlySubBuffer( inBuffer, (int16_t) args.inConfig.audioObjects[i].inputChannelIndex, args.inConfig.numAudioObjects );
- if ( ( error = IVAS_REND_FeedInputAudio( hIvasRend, ismIds[i], tmpBuffer ) ) != IVAS_ERR_OK )
+ if ( ( error = IVAS_REND_FeedInputAudio( hIvasRend, ismIds[i], tmpBuffer, flushRendererLastFrame ) ) != IVAS_ERR_OK )
{
fprintf( stderr, "\nIVAS_REND_FeedInputAudio failed: %s\n", ivas_error_to_string( error ) );
goto cleanup;
@@ -1688,7 +1708,7 @@ int main(
{
IVAS_REND_ReadOnlyAudioBuffer tmpBuffer = getReadOnlySubBuffer( inBuffer, (int16_t) args.inConfig.audioObjects[i].inputChannelIndex, 1 );
- if ( ( error = IVAS_REND_FeedInputAudio( hIvasRend, ismIds[i], tmpBuffer ) ) != IVAS_ERR_OK )
+ if ( ( error = IVAS_REND_FeedInputAudio( hIvasRend, ismIds[i], tmpBuffer, flushRendererLastFrame ) ) != IVAS_ERR_OK )
{
fprintf( stderr, "\nIVAS_REND_FeedInputAudio failed: %s\n", ivas_error_to_string( error ) );
goto cleanup;
@@ -1711,7 +1731,7 @@ int main(
}
IVAS_REND_ReadOnlyAudioBuffer tmpBuffer = getReadOnlySubBuffer( inBuffer, (int16_t) args.inConfig.ambisonicsBuses[i].inputChannelIndex, numChannels );
- if ( ( error = IVAS_REND_FeedInputAudio( hIvasRend, sbaIds[i], tmpBuffer ) ) != IVAS_ERR_OK )
+ if ( ( error = IVAS_REND_FeedInputAudio( hIvasRend, sbaIds[i], tmpBuffer, flushRendererLastFrame ) ) != IVAS_ERR_OK )
{
fprintf( stderr, "\nIVAS_REND_FeedInputAudio failed: %s\n", ivas_error_to_string( error ) );
goto cleanup;
@@ -1727,13 +1747,13 @@ int main(
}
IVAS_REND_ReadOnlyAudioBuffer tmpBuffer = getReadOnlySubBuffer( inBuffer, (int16_t) args.inConfig.masaBuses[i].inputChannelIndex, numChannels );
- if ( ( error = IVAS_REND_FeedInputAudio( hIvasRend, masaIds[i], tmpBuffer ) ) != IVAS_ERR_OK )
+ if ( ( error = IVAS_REND_FeedInputAudio( hIvasRend, masaIds[i], tmpBuffer, flushRendererLastFrame ) ) != IVAS_ERR_OK )
{
fprintf( stderr, "IVAS_REND_FeedInputAudio failed: %s\n", ivas_error_to_string( error ) );
goto cleanup;
}
- if ( isCurrentFrameMultipleOf20ms )
+ if ( isCurrentFrameMultipleOf20ms && !flushRendererLastFrame )
{
if ( masaReaders[i] != NULL )
{
@@ -1796,7 +1816,7 @@ int main(
zeroPad = delayNumSamples;
}
- if ( is_split_pre_rend_mode( &args ) )
+ if ( is_split_pre_rend_mode( &args ) && !flushRendererLastFrame )
{
if ( split_rend_write_bitstream_to_file( hSplitRendFileReadWrite, bitsBuffer.bits, &bitsBuffer.config.bitsRead,
&bitsBuffer.config.bitsWritten ) != IVAS_ERR_OK )
@@ -1806,7 +1826,7 @@ int main(
}
}
- if ( audioWriter != NULL )
+ if ( audioWriter != NULL && !flushRendererLastFrame )
{
if ( delayNumSamples * num_out_channels < outBufferSize )
{
@@ -1827,7 +1847,7 @@ int main(
bitsBuffer.config.bitsWritten = 0;
/* Write MASA metadata for MASA outputs */
- if ( args.outConfig.audioConfig == IVAS_AUDIO_CONFIG_MASA1 || args.outConfig.audioConfig == IVAS_AUDIO_CONFIG_MASA2 )
+ if ( !flushRendererLastFrame && ( args.outConfig.audioConfig == IVAS_AUDIO_CONFIG_MASA1 || args.outConfig.audioConfig == IVAS_AUDIO_CONFIG_MASA2 ) )
{
IVAS_REND_AudioConfigType inputType1;
IVAS_REND_AudioConfigType inputType2;
@@ -1899,7 +1919,8 @@ int main(
}
}
- if ( ( args.inConfig.numAmbisonicsBuses > 0 || args.inConfig.numMultiChannelBuses > 0 || args.inConfig.numMasaBuses > 0 ) && args.inConfig.numAudioObjects > 0 )
+ if ( ( args.inConfig.numAmbisonicsBuses > 0 || args.inConfig.numMultiChannelBuses > 0 || args.inConfig.numMasaBuses > 0 ) &&
+ args.inConfig.numAudioObjects > 0 )
{
inputType2 = IVAS_REND_AUDIO_CONFIG_TYPE_OBJECT_BASED;
if ( ( error = IVAS_REND_MergeMasaMetadata( hIvasRend, &hMetaOutput, inputType1, inputType2 ) ) != IVAS_ERR_OK )
@@ -1916,6 +1937,13 @@ int main(
}
}
+ /* no new input was actually read, only delay buffers were flushed
+ * therefore this is not a real frame */
+ if ( flushRendererLastFrame )
+ {
+ break;
+ }
+
frame++;
if ( !args.quietModeEnabled )
{
@@ -1928,12 +1956,13 @@ int main(
#endif
}
- /* add zeros at the end to have equal length of synthesized signals */
+ /* add zeros at the end to have equal length of synthesized signals
+ * the output buffer will contain either leftover input samples from delay aligned inputs
+ * or zeros for padding */
if ( audioWriter != NULL )
{
for ( zeroPadToWrite = zeroPad; zeroPadToWrite > frameSize_smpls; zeroPadToWrite -= frameSize_smpls )
{
- memset( outInt16Buffer, 0, outBufferSize * sizeof( int16_t ) );
if ( ( error = AudioFileWriter_write( audioWriter, outInt16Buffer, outBufferSize ) ) != IVAS_ERR_OK )
{
fprintf( stderr, "\nOutput audio file writer error\n" );
@@ -1941,7 +1970,6 @@ int main(
}
}
- memset( outInt16Buffer, 0, zeroPadToWrite * outBuffer.config.numChannels * sizeof( int16_t ) );
if ( ( error = AudioFileWriter_write( audioWriter, outInt16Buffer, zeroPadToWrite * outBuffer.config.numChannels ) ) != IVAS_ERR_OK )
{
fprintf( stderr, "\nOutput audio file writer error\n" );
@@ -1950,9 +1978,10 @@ int main(
zeroPadToWrite = 0;
}
- if ( args.inConfig.numAudioObjects != 0 && ( args.outConfig.audioConfig == IVAS_AUDIO_CONFIG_BINAURAL || args.outConfig.audioConfig == IVAS_AUDIO_CONFIG_BINAURAL_ROOM_REVERB ) )
+ if ( args.inConfig.numAudioObjects != 0 &&
+ ( args.outConfig.audioConfig == IVAS_AUDIO_CONFIG_BINAURAL || args.outConfig.audioConfig == IVAS_AUDIO_CONFIG_BINAURAL_ROOM_REVERB ) )
{
- fprintf( stdout, "\n\nMetadata delayed %d subframes\n\n", (int16_t) round( args.syncMdDelay / ( 1000 / IVAS_NUM_FRAMES_PER_SEC / IVAS_MAX_PARAM_SPATIAL_SUBFRAMES ) ) );
+ fprintf( stdout, "\n\nMetadata delayed %d subframes\n\n", (int16_t) round( args.syncMdDelay / ( 1000.f / IVAS_NUM_FRAMES_PER_SEC / IVAS_MAX_PARAM_SPATIAL_SUBFRAMES ) ) );
}
if ( !args.quietModeEnabled && args.delayCompensationEnabled )
@@ -2555,6 +2584,7 @@ static CmdlnArgs defaultArgs(
const char *executableName )
{
CmdlnArgs args;
+ int16_t i;
strncpy( args.executableName, executableName, RENDERER_MAX_CLI_ARG_LENGTH );
clearString( args.inputFilePath );
@@ -2573,7 +2603,7 @@ static CmdlnArgs defaultArgs(
args.outConfig.outSetupCustom.num_lfe = 0;
args.inConfig.ambisonicsBuses->audioConfig = IVAS_AUDIO_CONFIG_INVALID;
- for ( int32_t i = 0; i < RENDERER_MAX_ISM_INPUTS; ++i )
+ for ( i = 0; i < RENDERER_MAX_ISM_INPUTS + RENDERER_MAX_MASA_INPUTS; ++i )
{
clearString( args.inMetadataFilePaths[i] );
}
@@ -2610,7 +2640,7 @@ static CmdlnArgs defaultArgs(
args.render_framesize = IVAS_RENDER_FRAMESIZE_20MS;
args.syncMdDelay = 0;
- for ( int32_t i = 0; i < RENDERER_MAX_ISM_INPUTS; ++i )
+ for ( i = 0; i < RENDERER_MAX_ISM_INPUTS; ++i )
{
args.directivityPatternId[i] = 65535;
}
@@ -3282,7 +3312,8 @@ static void parseObjectPosition(
*positionDuration = (uint16_t) strtol( line, &endptr, 10 );
readNextMetadataChunk( line, "\n" );
- read_values = (int16_t) sscanf( line, "%f,%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], &meta_prm[7] );
+ read_values = (int16_t) sscanf( line, "%f,%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], &meta_prm[7] );
if ( read_values < 2 )
{
@@ -3491,20 +3522,8 @@ static void parseCombinedFormatInput(
inConfig->numAmbisonicsBuses = 1;
inConfig->ambisonicsBuses[0].audioConfig = audioConfig;
inConfig->ambisonicsBuses[0].inputChannelIndex = inConfig->numAudioObjects;
-#ifdef NONBE_1352_HARMONIZE_OSBA_LOUDNESS
inConfig->ambisonicsBuses[0].gain_dB = 0.f;
-#else
- inConfig->ambisonicsBuses[0].gain_dB = -6.f;
-#endif
*configString += 4;
-
-#ifndef NONBE_1352_HARMONIZE_OSBA_LOUDNESS
- /* Modify input gain for objects too */
- for ( int16_t i = 0; i < inConfig->numAudioObjects; ++i )
- {
- inConfig->audioObjects[i].gain_dB = -6.f;
- }
-#endif
}
else if ( audioConfig == IVAS_AUDIO_CONFIG_MASA1 || audioConfig == IVAS_AUDIO_CONFIG_MASA2 )
{
diff --git a/ci/basop-pages/basop_index.html b/ci/basop-pages/basop_index.html
index bfa01eed801cf69167e8db6317c176cb87ab74fd..3183acd4deef26072fcacc17a017b95da8f4a4e5 100644
--- a/ci/basop-pages/basop_index.html
+++ b/ci/basop-pages/basop_index.html
@@ -29,8 +29,7 @@
Test Coverage