diff --git a/.gitlab-ci.yml b/.gitlab-ci.yml index c7f9ae025e6502c83abb935018ca47afc79e242e..9a69b946bd918dd93431f2e3f0f5ccd821c9074f 100644 --- a/.gitlab-ci.yml +++ b/.gitlab-ci.yml @@ -623,6 +623,7 @@ split-rendering-pytest-on-merge-request: - mv IVAS_rend IVAS_rend_ref # back to source branch + - git restore lib_com/options.h # Revert changes back before checking out another branch to avoid conflicts - git checkout $source_branch_commit_sha - make clean - *enable-split-rendering diff --git a/apps/renderer.c b/apps/renderer.c index 37bf0ea3d5c28d1b4878fc3b54ac903d03566a47..91de00004d9bf5a51549243c87e7606906d7b27b 100644 --- a/apps/renderer.c +++ b/apps/renderer.c @@ -747,6 +747,9 @@ int main( int16_t delayNumSamples = -1; int16_t delayNumSamples_orig = 0; int16_t zeroPad = 0; +#ifdef FIX_LARGE_RENDERER_DELAY_COMP + int16_t zeroPadToWrite = 0; +#endif int32_t delayTimeScale = 0; int16_t i, numChannels; ivas_error error = IVAS_ERR_OK; @@ -1764,7 +1767,11 @@ int main( if ( audioWriter != NULL ) { #endif - if ( delayNumSamples < outBufferSize ) +#ifdef FIX_LARGE_RENDERER_DELAY_COMP + if ( delayNumSamples * num_out_channels < outBufferSize ) +#else + if ( delayNumSamples < outBufferSize ) +#endif { if ( AudioFileWriter_write( audioWriter, &outInt16Buffer[delayNumSamples * num_out_channels], outBufferSize - ( delayNumSamples * num_out_channels ) ) != IVAS_ERR_OK ) { @@ -1775,7 +1782,11 @@ int main( } else { - delayNumSamples -= (int16_t) outBufferSize; +#ifdef FIX_LARGE_RENDERER_DELAY_COMP + delayNumSamples -= (int16_t) ( outBufferSize / num_out_channels ); +#else + delayNumSamples -= (int16_t) outBufferSize; +#endif } #ifdef SPLIT_REND_WITH_HEAD_ROT } @@ -1875,12 +1886,32 @@ int main( if ( audioWriter != NULL ) { #endif - memset( outInt16Buffer, 0, zeroPad * outBuffer.config.numChannels * sizeof( int16_t ) ); - if ( ( error = AudioFileWriter_write( audioWriter, outInt16Buffer, zeroPad * outBuffer.config.numChannels ) ) != IVAS_ERR_OK ) +#ifdef FIX_LARGE_RENDERER_DELAY_COMP + 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" ); + exit( -1 ); + } + } + + 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" ); exit( -1 ); } + zeroPadToWrite = 0; +#else + memset( outInt16Buffer, 0, zeroPad * outBuffer.config.numChannels * sizeof( int16_t ) ); + if ( ( error = AudioFileWriter_write( audioWriter, outInt16Buffer, zeroPad * outBuffer.config.numChannels ) ) != IVAS_ERR_OK ) + { + fprintf( stderr, "\nOutput audio file writer error\n" ); + exit( -1 ); + } +#endif #ifdef SPLIT_REND_WITH_HEAD_ROT } #endif diff --git a/lib_com/options.h b/lib_com/options.h index fa70769baf56ef1e98a67d922c8015867e6b7122..d3eb80da56533c257a3208b0ed8410455496489c 100644 --- a/lib_com/options.h +++ b/lib_com/options.h @@ -171,6 +171,8 @@ #define FIX_691_OSBA_CRASH /* FhG: Fix for issue 691: Crash for OSBA Stereo out */ #define FIX_694_OMASA_EXTREME /* Nokia: fix for crash in OMASA on extreme sample */ +#define FIX_LARGE_RENDERER_DELAY_COMP /* Fix renderer delay compensation with delays greater than 1 frame */ + /* ################## End BE DEVELOPMENT switches ######################### */