Loading .gitlab-ci.yml +3 −3 Original line number Diff line number Diff line Loading @@ -550,7 +550,7 @@ renderer-smoke-test: - .rules-merge-request-to-main needs: ["build-codec-linux-cmake"] stage: test timeout: "30 minutes" timeout: "1 hour" artifacts: name: "mr-$CI_MERGE_REQUEST_IID--sha-$CI_COMMIT_SHORT_SHA--job-$CI_JOB_NAME--results" expire_in: 1 week Loading Loading @@ -1012,7 +1012,7 @@ check-first-frame-is-sid: expose_as: "logs-sidstart" expire_in: "5 days" .lc3plus-ensure-no-code-changes: lc3plus-ensure-no-code-changes: extends: - .test-job-linux - .rules-merge-request-to-main Loading @@ -1024,7 +1024,7 @@ check-first-frame-is-sid: - ./scripts/lc3plus_lib_setup/get_lc3plus.sh # Ensure git reports no changes - modified_files=$(git status -s) - modified_files=$(git status -su lib_lc3plus) - if [[ $modified_files ]]; then printf 'LC3plus codebase was modified!\n\n'"$modified_files"'\n\n'; exit $EXIT_CODE_FAIL; fi check-bitexactness-hrtf-rom-and-file: Loading Workspace_msvc/lib_lc3plus.vcxproj +15 −17 Original line number Diff line number Diff line Loading @@ -106,7 +106,6 @@ <ClCompile Include="..\lib_lc3plus\apply_global_gain.c" /> <ClCompile Include="..\lib_lc3plus\ari_codec.c" /> <ClCompile Include="..\lib_lc3plus\attack_detector.c" /> <ClCompile Include="..\lib_lc3plus\plc_compute_stab_fac.c" /> <ClCompile Include="..\lib_lc3plus\constants.c" /> <ClCompile Include="..\lib_lc3plus\cutoff_bandwidth.c" /> <ClCompile Include="..\lib_lc3plus\dct4.c" /> Loading @@ -116,13 +115,13 @@ <ClCompile Include="..\lib_lc3plus\enc_entropy.c" /> <ClCompile Include="..\lib_lc3plus\enc_lc3_fl.c" /> <ClCompile Include="..\lib_lc3plus\estimate_global_gain.c" /> <ClCompile Include="..\lib_lc3plus\lc3plus_fft.c" /> <ClCompile Include="..\lib_lc3plus\imdct.c" /> <ClCompile Include="..\lib_lc3plus\lc3.c" /> <ClCompile Include="..\lib_lc3plus\lc3plus_fft.c" /> <ClCompile Include="..\lib_lc3plus\lc3plus.c" /> <ClCompile Include="..\lib_lc3plus\ltpf_coder.c" /> <ClCompile Include="..\lib_lc3plus\ltpf_decoder.c" /> <ClCompile Include="..\lib_lc3plus\mdct.c" /> <ClCompile Include="..\lib_lc3plus\mdct_shaping.c" /> <ClCompile Include="..\lib_lc3plus\mdct.c" /> <ClCompile Include="..\lib_lc3plus\near_nyquist_detector.c" /> <ClCompile Include="..\lib_lc3plus\noise_factor.c" /> <ClCompile Include="..\lib_lc3plus\noise_filling.c" /> Loading @@ -133,35 +132,36 @@ <ClCompile Include="..\lib_lc3plus\pc_update.c" /> <ClCompile Include="..\lib_lc3plus\per_band_energy.c" /> <ClCompile Include="..\lib_lc3plus\plc_classify.c" /> <ClCompile Include="..\lib_lc3plus\plc_compute_stab_fac.c" /> <ClCompile Include="..\lib_lc3plus\plc_damping_scrambling.c" /> <ClCompile Include="..\lib_lc3plus\plc_main.c" /> <ClCompile Include="..\lib_lc3plus\plc_noise_substitution.c" /> <ClCompile Include="..\lib_lc3plus\plc_tdc_tdac.c" /> <ClCompile Include="..\lib_lc3plus\plc_update.c" /> <ClCompile Include="..\lib_lc3plus\plc_phecu_f0_refine_first.c" /> <ClCompile Include="..\lib_lc3plus\plc_phecu_fec_hq.c" /> <ClCompile Include="..\lib_lc3plus\plc_phecu_hq_ecu.c" /> <ClCompile Include="..\lib_lc3plus\plc_phecu_lf_peak_analysis.c" /> <ClCompile Include="..\lib_lc3plus\plc_phecu_rec_frame.c" /> <ClCompile Include="..\lib_lc3plus\plc_phecu_setf0hz.c" /> <ClCompile Include="..\lib_lc3plus\plc_phecu_subst_spec.c" /> <ClCompile Include="..\lib_lc3plus\plc_phecu_spec_ana.c" /> <ClCompile Include="..\lib_lc3plus\plc_phecu_subst_spec.c" /> <ClCompile Include="..\lib_lc3plus\plc_phecu_tba_per_band_gain.c" /> <ClCompile Include="..\lib_lc3plus\plc_phecu_tba_spect_Xavg.c" /> <ClCompile Include="..\lib_lc3plus\plc_phecu_tba_trans_dect_gains.c" /> <ClCompile Include="..\lib_lc3plus\plc_phecu_trans_burst_ana_sub.c" /> <ClCompile Include="..\lib_lc3plus\plc_tdc_tdac.c" /> <ClCompile Include="..\lib_lc3plus\plc_tdc.c" /> <ClCompile Include="..\lib_lc3plus\plc_update.c" /> <ClCompile Include="..\lib_lc3plus\quantize_spec.c" /> <ClCompile Include="..\lib_lc3plus\reorder_bitstream.c" /> <ClCompile Include="..\lib_lc3plus\resamp12k8.c" /> <ClCompile Include="..\lib_lc3plus\residual_coding.c" /> <ClCompile Include="..\lib_lc3plus\residual_decoding.c" /> <ClCompile Include="..\lib_lc3plus\setup_dec_lc3.c" /> <ClCompile Include="..\lib_lc3plus\setup_enc_lc3.c" /> <ClCompile Include="..\lib_lc3plus\setup_com_lc3.c" /> <ClCompile Include="..\lib_lc3plus\setup_com_lc3plus.c" /> <ClCompile Include="..\lib_lc3plus\setup_dec_lc3plus.c" /> <ClCompile Include="..\lib_lc3plus\setup_enc_lc3plus.c" /> <ClCompile Include="..\lib_lc3plus\sns_compute_scf.c" /> <ClCompile Include="..\lib_lc3plus\sns_interpolate_scf.c" /> <ClCompile Include="..\lib_lc3plus\sns_quantize_scf.c" /> <ClCompile Include="..\lib_lc3plus\plc_tdc.c" /> <ClCompile Include="..\lib_lc3plus\tns_coder.c" /> <ClCompile Include="..\lib_lc3plus\tns_decoder.c" /> </ItemGroup> Loading @@ -169,14 +169,12 @@ <ClInclude Include="..\lib_lc3plus\clib.h" /> <ClInclude Include="..\lib_lc3plus\constants.h" /> <ClInclude Include="..\lib_lc3plus\defines.h" /> <ClInclude Include="..\lib_lc3plus\file_io.h" /> <ClInclude Include="..\lib_lc3plus\functions.h" /> <ClInclude Include="..\lib_lc3plus\lc3.h" /> <ClInclude Include="..\lib_lc3plus\setup_dec_lc3.h" /> <ClInclude Include="..\lib_lc3plus\setup_enc_lc3.h" /> <ClInclude Include="..\lib_lc3plus\lc3plus.h" /> <ClInclude Include="..\lib_lc3plus\license.h" /> <ClInclude Include="..\lib_lc3plus\setup_dec_lc3plus.h" /> <ClInclude Include="..\lib_lc3plus\setup_enc_lc3plus.h" /> <ClInclude Include="..\lib_lc3plus\structs.h" /> <ClInclude Include="..\lib_lc3plus\tinywavein_c.h" /> <ClInclude Include="..\lib_lc3plus\tinywaveout_c.h" /> <ClInclude Include="..\lib_lc3plus\util.h" /> </ItemGroup> <Import Project="$(VCTargetsPath)\Microsoft.Cpp.targets" /> Loading Workspace_msvc/lib_rend.vcxproj +1 −0 Original line number Diff line number Diff line Loading @@ -175,6 +175,7 @@ <ClCompile Include="..\lib_rend\ivas_rom_rend.c" /> <ClCompile Include="..\lib_rend\ivas_shoebox.c" /> <ClCompile Include="..\lib_rend\ivas_td_decorr.c" /> <ClCompile Include="..\lib_rend\ivas_td_ring_buffer.c" /> <ClCompile Include="..\lib_rend\ivas_vbap.c" /> <ClCompile Include="..\lib_rend\lib_rend.c" /> </ItemGroup> Loading Workspace_msvc/lib_rend.vcxproj.filters +2 −71 Original line number Diff line number Diff line Loading @@ -32,30 +32,12 @@ <ClCompile Include="..\lib_rend\ivas_hrtf.c"> <Filter>rend_c</Filter> </ClCompile> <ClCompile Include="..\lib_rend\ivas_lc3plus_common.c"> <Filter>rend_c</Filter> </ClCompile> <ClCompile Include="..\lib_rend\ivas_lc3plus_dec.c"> <Filter>rend_c</Filter> </ClCompile> <ClCompile Include="..\lib_rend\ivas_lc3plus_enc.c"> <Filter>rend_c</Filter> </ClCompile> <ClCompile Include="..\lib_rend\ivas_limiter.c"> <Filter>rend_c</Filter> </ClCompile> <ClCompile Include="..\lib_rend\ivas_masa_merge.c"> <Filter>rend_c</Filter> </ClCompile> <ClCompile Include="..\lib_rend\ivas_mcmasa_ana.c"> <Filter>rend_c</Filter> </ClCompile> <ClCompile Include="..\lib_rend\ivas_MSPred.c"> <Filter>rend_c</Filter> </ClCompile> <ClCompile Include="..\lib_rend\ivas_NoiseGen.c"> <Filter>rend_c</Filter> </ClCompile> <ClCompile Include="..\lib_rend\ivas_objectRenderer.c"> <Filter>rend_c</Filter> </ClCompile> Loading Loading @@ -83,15 +65,6 @@ <ClCompile Include="..\lib_rend\ivas_output_init.c"> <Filter>rend_c</Filter> </ClCompile> <ClCompile Include="..\lib_rend\ivas_PerceptualModel.c"> <Filter>rend_c</Filter> </ClCompile> <ClCompile Include="..\lib_rend\ivas_PredDecoder.c"> <Filter>rend_c</Filter> </ClCompile> <ClCompile Include="..\lib_rend\ivas_PredEncoder.c"> <Filter>rend_c</Filter> </ClCompile> <ClCompile Include="..\lib_rend\ivas_render_config.c"> <Filter>rend_c</Filter> </ClCompile> Loading @@ -113,9 +86,6 @@ <ClCompile Include="..\lib_rend\ivas_reverb_utils.c"> <Filter>rend_c</Filter> </ClCompile> <ClCompile Include="..\lib_rend\ivas_RMSEnvGrouping.c"> <Filter>rend_c</Filter> </ClCompile> <ClCompile Include="..\lib_rend\ivas_rom_binaural_crend_head.c"> <Filter>rend_c</Filter> </ClCompile> Loading @@ -134,24 +104,6 @@ <ClCompile Include="..\lib_rend\ivas_sba_rendering.c"> <Filter>rend_c</Filter> </ClCompile> <ClCompile Include="..\lib_rend\ivas_splitRend_lcld_dec.c"> <Filter>rend_c</Filter> </ClCompile> <ClCompile Include="..\lib_rend\ivas_splitRend_lcld_enc.c"> <Filter>rend_c</Filter> </ClCompile> <ClCompile Include="..\lib_rend\ivas_splitRenderer_utils.c"> <Filter>rend_c</Filter> </ClCompile> <ClCompile Include="..\lib_rend\ivas_splitRendererPLC.c"> <Filter>rend_c</Filter> </ClCompile> <ClCompile Include="..\lib_rend\ivas_splitRendererPost.c"> <Filter>rend_c</Filter> </ClCompile> <ClCompile Include="..\lib_rend\ivas_splitRendererPre.c"> <Filter>rend_c</Filter> </ClCompile> <ClCompile Include="..\lib_rend\ivas_shoebox.c"> <Filter>rend_c</Filter> </ClCompile> Loading @@ -161,30 +113,15 @@ <ClCompile Include="..\lib_rend\ivas_vbap.c"> <Filter>rend_c</Filter> </ClCompile> <ClCompile Include="..\lib_rend\ivas_lcld_rom_tables.c"> <Filter>rend_c</Filter> </ClCompile> <ClCompile Include="..\lib_rend\ivas_lcld_decoder.c"> <Filter>rend_c</Filter> </ClCompile> <ClCompile Include="..\lib_rend\ivas_lcld_encoder.c"> <ClCompile Include="..\lib_rend\ivas_td_decorr.c"> <Filter>rend_c</Filter> </ClCompile> <ClCompile Include="..\lib_rend\ivas_td_decorr.c"> <ClCompile Include="..\lib_rend\ivas_td_ring_buffer.c"> <Filter>rend_c</Filter> </ClCompile> </ItemGroup> <ItemGroup> <ClInclude Include="..\lib_rend\lib_rend.h" /> <ClInclude Include="..\lib_rend\ivas_lc3plus_common.h"> <Filter>rend_h</Filter> </ClInclude> <ClInclude Include="..\lib_rend\ivas_lc3plus_enc.h"> <Filter>rend_h</Filter> </ClInclude> <ClInclude Include="..\lib_rend\ivas_lc3plus_dec.h"> <Filter>rend_h</Filter> </ClInclude> <ClInclude Include="..\lib_rend\ivas_prot_rend.h"> <Filter>rend_h</Filter> </ClInclude> Loading @@ -203,12 +140,6 @@ <ClInclude Include="..\lib_rend\ivas_rom_TdBinauralRenderer.h"> <Filter>rend_h</Filter> </ClInclude> <ClInclude Include="..\lib_rend\ivas_lcld_prot.h"> <Filter>rend_h</Filter> </ClInclude> <ClInclude Include="..\lib_rend\ivas_lcld_rom_tables.h"> <Filter>rend_h</Filter> </ClInclude> </ItemGroup> <ItemGroup> <Filter Include="rend_h"> Loading apps/renderer.c +60 −49 Original line number Diff line number Diff line Loading @@ -702,6 +702,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; Loading Loading @@ -746,8 +747,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; Loading Loading @@ -1068,7 +1072,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; Loading Loading @@ -1374,7 +1381,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; Loading @@ -1389,31 +1396,16 @@ int main( } } if ( args.outConfig.audioConfig == IVAS_AUDIO_CONFIG_BINAURAL_SPLIT_CODED ) { 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 ) if ( args.outConfig.audioConfig == IVAS_AUDIO_CONFIG_BINAURAL_SPLIT_CODED || args.outConfig.audioConfig == IVAS_AUDIO_CONFIG_BINAURAL_SPLIT_PCM ) { fprintf( stderr, "\nUnable to get delay of renderer!\n" ); goto cleanup; } char *outFile = args.outMetadataFilePath; 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 ( args.outConfig.audioConfig == IVAS_AUDIO_CONFIG_BINAURAL_SPLIT_CODED ) { fprintf( stderr, "\nCould not open split rend metadata file %s\n", args.outputFilePath ); goto cleanup; } outFile = args.outputFilePath; 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" ); Loading @@ -1426,13 +1418,15 @@ int main( 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 ) 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.outMetadataFilePath ); fprintf( stderr, "\nCould not open split rend metadata file %s\n", outFile ); 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 ); Loading Loading @@ -1558,16 +1552,23 @@ int main( if ( numSamplesRead == 0 ) { /* end of input data */ break; flushRendererLastFrame = true; } /* Convert from int to float and from interleaved to packed */ 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 ); Loading Loading @@ -1679,7 +1680,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; Loading @@ -1694,7 +1695,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; Loading @@ -1711,7 +1712,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; Loading @@ -1734,7 +1735,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; Loading @@ -1750,13 +1751,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 ) { Loading Loading @@ -1819,7 +1820,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 ) Loading @@ -1829,7 +1830,7 @@ int main( } } if ( audioWriter != NULL ) if ( audioWriter != NULL && !flushRendererLastFrame ) { if ( delayNumSamples * num_out_channels < outBufferSize ) { Loading @@ -1850,7 +1851,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; Loading Loading @@ -1922,7 +1923,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 ) Loading @@ -1939,6 +1941,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 ) { Loading @@ -1951,12 +1960,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" ); Loading @@ -1964,7 +1974,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" ); Loading @@ -1973,9 +1982,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 ) Loading Loading @@ -3305,7 +3315,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 ) { Loading Loading
.gitlab-ci.yml +3 −3 Original line number Diff line number Diff line Loading @@ -550,7 +550,7 @@ renderer-smoke-test: - .rules-merge-request-to-main needs: ["build-codec-linux-cmake"] stage: test timeout: "30 minutes" timeout: "1 hour" artifacts: name: "mr-$CI_MERGE_REQUEST_IID--sha-$CI_COMMIT_SHORT_SHA--job-$CI_JOB_NAME--results" expire_in: 1 week Loading Loading @@ -1012,7 +1012,7 @@ check-first-frame-is-sid: expose_as: "logs-sidstart" expire_in: "5 days" .lc3plus-ensure-no-code-changes: lc3plus-ensure-no-code-changes: extends: - .test-job-linux - .rules-merge-request-to-main Loading @@ -1024,7 +1024,7 @@ check-first-frame-is-sid: - ./scripts/lc3plus_lib_setup/get_lc3plus.sh # Ensure git reports no changes - modified_files=$(git status -s) - modified_files=$(git status -su lib_lc3plus) - if [[ $modified_files ]]; then printf 'LC3plus codebase was modified!\n\n'"$modified_files"'\n\n'; exit $EXIT_CODE_FAIL; fi check-bitexactness-hrtf-rom-and-file: Loading
Workspace_msvc/lib_lc3plus.vcxproj +15 −17 Original line number Diff line number Diff line Loading @@ -106,7 +106,6 @@ <ClCompile Include="..\lib_lc3plus\apply_global_gain.c" /> <ClCompile Include="..\lib_lc3plus\ari_codec.c" /> <ClCompile Include="..\lib_lc3plus\attack_detector.c" /> <ClCompile Include="..\lib_lc3plus\plc_compute_stab_fac.c" /> <ClCompile Include="..\lib_lc3plus\constants.c" /> <ClCompile Include="..\lib_lc3plus\cutoff_bandwidth.c" /> <ClCompile Include="..\lib_lc3plus\dct4.c" /> Loading @@ -116,13 +115,13 @@ <ClCompile Include="..\lib_lc3plus\enc_entropy.c" /> <ClCompile Include="..\lib_lc3plus\enc_lc3_fl.c" /> <ClCompile Include="..\lib_lc3plus\estimate_global_gain.c" /> <ClCompile Include="..\lib_lc3plus\lc3plus_fft.c" /> <ClCompile Include="..\lib_lc3plus\imdct.c" /> <ClCompile Include="..\lib_lc3plus\lc3.c" /> <ClCompile Include="..\lib_lc3plus\lc3plus_fft.c" /> <ClCompile Include="..\lib_lc3plus\lc3plus.c" /> <ClCompile Include="..\lib_lc3plus\ltpf_coder.c" /> <ClCompile Include="..\lib_lc3plus\ltpf_decoder.c" /> <ClCompile Include="..\lib_lc3plus\mdct.c" /> <ClCompile Include="..\lib_lc3plus\mdct_shaping.c" /> <ClCompile Include="..\lib_lc3plus\mdct.c" /> <ClCompile Include="..\lib_lc3plus\near_nyquist_detector.c" /> <ClCompile Include="..\lib_lc3plus\noise_factor.c" /> <ClCompile Include="..\lib_lc3plus\noise_filling.c" /> Loading @@ -133,35 +132,36 @@ <ClCompile Include="..\lib_lc3plus\pc_update.c" /> <ClCompile Include="..\lib_lc3plus\per_band_energy.c" /> <ClCompile Include="..\lib_lc3plus\plc_classify.c" /> <ClCompile Include="..\lib_lc3plus\plc_compute_stab_fac.c" /> <ClCompile Include="..\lib_lc3plus\plc_damping_scrambling.c" /> <ClCompile Include="..\lib_lc3plus\plc_main.c" /> <ClCompile Include="..\lib_lc3plus\plc_noise_substitution.c" /> <ClCompile Include="..\lib_lc3plus\plc_tdc_tdac.c" /> <ClCompile Include="..\lib_lc3plus\plc_update.c" /> <ClCompile Include="..\lib_lc3plus\plc_phecu_f0_refine_first.c" /> <ClCompile Include="..\lib_lc3plus\plc_phecu_fec_hq.c" /> <ClCompile Include="..\lib_lc3plus\plc_phecu_hq_ecu.c" /> <ClCompile Include="..\lib_lc3plus\plc_phecu_lf_peak_analysis.c" /> <ClCompile Include="..\lib_lc3plus\plc_phecu_rec_frame.c" /> <ClCompile Include="..\lib_lc3plus\plc_phecu_setf0hz.c" /> <ClCompile Include="..\lib_lc3plus\plc_phecu_subst_spec.c" /> <ClCompile Include="..\lib_lc3plus\plc_phecu_spec_ana.c" /> <ClCompile Include="..\lib_lc3plus\plc_phecu_subst_spec.c" /> <ClCompile Include="..\lib_lc3plus\plc_phecu_tba_per_band_gain.c" /> <ClCompile Include="..\lib_lc3plus\plc_phecu_tba_spect_Xavg.c" /> <ClCompile Include="..\lib_lc3plus\plc_phecu_tba_trans_dect_gains.c" /> <ClCompile Include="..\lib_lc3plus\plc_phecu_trans_burst_ana_sub.c" /> <ClCompile Include="..\lib_lc3plus\plc_tdc_tdac.c" /> <ClCompile Include="..\lib_lc3plus\plc_tdc.c" /> <ClCompile Include="..\lib_lc3plus\plc_update.c" /> <ClCompile Include="..\lib_lc3plus\quantize_spec.c" /> <ClCompile Include="..\lib_lc3plus\reorder_bitstream.c" /> <ClCompile Include="..\lib_lc3plus\resamp12k8.c" /> <ClCompile Include="..\lib_lc3plus\residual_coding.c" /> <ClCompile Include="..\lib_lc3plus\residual_decoding.c" /> <ClCompile Include="..\lib_lc3plus\setup_dec_lc3.c" /> <ClCompile Include="..\lib_lc3plus\setup_enc_lc3.c" /> <ClCompile Include="..\lib_lc3plus\setup_com_lc3.c" /> <ClCompile Include="..\lib_lc3plus\setup_com_lc3plus.c" /> <ClCompile Include="..\lib_lc3plus\setup_dec_lc3plus.c" /> <ClCompile Include="..\lib_lc3plus\setup_enc_lc3plus.c" /> <ClCompile Include="..\lib_lc3plus\sns_compute_scf.c" /> <ClCompile Include="..\lib_lc3plus\sns_interpolate_scf.c" /> <ClCompile Include="..\lib_lc3plus\sns_quantize_scf.c" /> <ClCompile Include="..\lib_lc3plus\plc_tdc.c" /> <ClCompile Include="..\lib_lc3plus\tns_coder.c" /> <ClCompile Include="..\lib_lc3plus\tns_decoder.c" /> </ItemGroup> Loading @@ -169,14 +169,12 @@ <ClInclude Include="..\lib_lc3plus\clib.h" /> <ClInclude Include="..\lib_lc3plus\constants.h" /> <ClInclude Include="..\lib_lc3plus\defines.h" /> <ClInclude Include="..\lib_lc3plus\file_io.h" /> <ClInclude Include="..\lib_lc3plus\functions.h" /> <ClInclude Include="..\lib_lc3plus\lc3.h" /> <ClInclude Include="..\lib_lc3plus\setup_dec_lc3.h" /> <ClInclude Include="..\lib_lc3plus\setup_enc_lc3.h" /> <ClInclude Include="..\lib_lc3plus\lc3plus.h" /> <ClInclude Include="..\lib_lc3plus\license.h" /> <ClInclude Include="..\lib_lc3plus\setup_dec_lc3plus.h" /> <ClInclude Include="..\lib_lc3plus\setup_enc_lc3plus.h" /> <ClInclude Include="..\lib_lc3plus\structs.h" /> <ClInclude Include="..\lib_lc3plus\tinywavein_c.h" /> <ClInclude Include="..\lib_lc3plus\tinywaveout_c.h" /> <ClInclude Include="..\lib_lc3plus\util.h" /> </ItemGroup> <Import Project="$(VCTargetsPath)\Microsoft.Cpp.targets" /> Loading
Workspace_msvc/lib_rend.vcxproj +1 −0 Original line number Diff line number Diff line Loading @@ -175,6 +175,7 @@ <ClCompile Include="..\lib_rend\ivas_rom_rend.c" /> <ClCompile Include="..\lib_rend\ivas_shoebox.c" /> <ClCompile Include="..\lib_rend\ivas_td_decorr.c" /> <ClCompile Include="..\lib_rend\ivas_td_ring_buffer.c" /> <ClCompile Include="..\lib_rend\ivas_vbap.c" /> <ClCompile Include="..\lib_rend\lib_rend.c" /> </ItemGroup> Loading
Workspace_msvc/lib_rend.vcxproj.filters +2 −71 Original line number Diff line number Diff line Loading @@ -32,30 +32,12 @@ <ClCompile Include="..\lib_rend\ivas_hrtf.c"> <Filter>rend_c</Filter> </ClCompile> <ClCompile Include="..\lib_rend\ivas_lc3plus_common.c"> <Filter>rend_c</Filter> </ClCompile> <ClCompile Include="..\lib_rend\ivas_lc3plus_dec.c"> <Filter>rend_c</Filter> </ClCompile> <ClCompile Include="..\lib_rend\ivas_lc3plus_enc.c"> <Filter>rend_c</Filter> </ClCompile> <ClCompile Include="..\lib_rend\ivas_limiter.c"> <Filter>rend_c</Filter> </ClCompile> <ClCompile Include="..\lib_rend\ivas_masa_merge.c"> <Filter>rend_c</Filter> </ClCompile> <ClCompile Include="..\lib_rend\ivas_mcmasa_ana.c"> <Filter>rend_c</Filter> </ClCompile> <ClCompile Include="..\lib_rend\ivas_MSPred.c"> <Filter>rend_c</Filter> </ClCompile> <ClCompile Include="..\lib_rend\ivas_NoiseGen.c"> <Filter>rend_c</Filter> </ClCompile> <ClCompile Include="..\lib_rend\ivas_objectRenderer.c"> <Filter>rend_c</Filter> </ClCompile> Loading Loading @@ -83,15 +65,6 @@ <ClCompile Include="..\lib_rend\ivas_output_init.c"> <Filter>rend_c</Filter> </ClCompile> <ClCompile Include="..\lib_rend\ivas_PerceptualModel.c"> <Filter>rend_c</Filter> </ClCompile> <ClCompile Include="..\lib_rend\ivas_PredDecoder.c"> <Filter>rend_c</Filter> </ClCompile> <ClCompile Include="..\lib_rend\ivas_PredEncoder.c"> <Filter>rend_c</Filter> </ClCompile> <ClCompile Include="..\lib_rend\ivas_render_config.c"> <Filter>rend_c</Filter> </ClCompile> Loading @@ -113,9 +86,6 @@ <ClCompile Include="..\lib_rend\ivas_reverb_utils.c"> <Filter>rend_c</Filter> </ClCompile> <ClCompile Include="..\lib_rend\ivas_RMSEnvGrouping.c"> <Filter>rend_c</Filter> </ClCompile> <ClCompile Include="..\lib_rend\ivas_rom_binaural_crend_head.c"> <Filter>rend_c</Filter> </ClCompile> Loading @@ -134,24 +104,6 @@ <ClCompile Include="..\lib_rend\ivas_sba_rendering.c"> <Filter>rend_c</Filter> </ClCompile> <ClCompile Include="..\lib_rend\ivas_splitRend_lcld_dec.c"> <Filter>rend_c</Filter> </ClCompile> <ClCompile Include="..\lib_rend\ivas_splitRend_lcld_enc.c"> <Filter>rend_c</Filter> </ClCompile> <ClCompile Include="..\lib_rend\ivas_splitRenderer_utils.c"> <Filter>rend_c</Filter> </ClCompile> <ClCompile Include="..\lib_rend\ivas_splitRendererPLC.c"> <Filter>rend_c</Filter> </ClCompile> <ClCompile Include="..\lib_rend\ivas_splitRendererPost.c"> <Filter>rend_c</Filter> </ClCompile> <ClCompile Include="..\lib_rend\ivas_splitRendererPre.c"> <Filter>rend_c</Filter> </ClCompile> <ClCompile Include="..\lib_rend\ivas_shoebox.c"> <Filter>rend_c</Filter> </ClCompile> Loading @@ -161,30 +113,15 @@ <ClCompile Include="..\lib_rend\ivas_vbap.c"> <Filter>rend_c</Filter> </ClCompile> <ClCompile Include="..\lib_rend\ivas_lcld_rom_tables.c"> <Filter>rend_c</Filter> </ClCompile> <ClCompile Include="..\lib_rend\ivas_lcld_decoder.c"> <Filter>rend_c</Filter> </ClCompile> <ClCompile Include="..\lib_rend\ivas_lcld_encoder.c"> <ClCompile Include="..\lib_rend\ivas_td_decorr.c"> <Filter>rend_c</Filter> </ClCompile> <ClCompile Include="..\lib_rend\ivas_td_decorr.c"> <ClCompile Include="..\lib_rend\ivas_td_ring_buffer.c"> <Filter>rend_c</Filter> </ClCompile> </ItemGroup> <ItemGroup> <ClInclude Include="..\lib_rend\lib_rend.h" /> <ClInclude Include="..\lib_rend\ivas_lc3plus_common.h"> <Filter>rend_h</Filter> </ClInclude> <ClInclude Include="..\lib_rend\ivas_lc3plus_enc.h"> <Filter>rend_h</Filter> </ClInclude> <ClInclude Include="..\lib_rend\ivas_lc3plus_dec.h"> <Filter>rend_h</Filter> </ClInclude> <ClInclude Include="..\lib_rend\ivas_prot_rend.h"> <Filter>rend_h</Filter> </ClInclude> Loading @@ -203,12 +140,6 @@ <ClInclude Include="..\lib_rend\ivas_rom_TdBinauralRenderer.h"> <Filter>rend_h</Filter> </ClInclude> <ClInclude Include="..\lib_rend\ivas_lcld_prot.h"> <Filter>rend_h</Filter> </ClInclude> <ClInclude Include="..\lib_rend\ivas_lcld_rom_tables.h"> <Filter>rend_h</Filter> </ClInclude> </ItemGroup> <ItemGroup> <Filter Include="rend_h"> Loading
apps/renderer.c +60 −49 Original line number Diff line number Diff line Loading @@ -702,6 +702,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; Loading Loading @@ -746,8 +747,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; Loading Loading @@ -1068,7 +1072,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; Loading Loading @@ -1374,7 +1381,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; Loading @@ -1389,31 +1396,16 @@ int main( } } if ( args.outConfig.audioConfig == IVAS_AUDIO_CONFIG_BINAURAL_SPLIT_CODED ) { 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 ) if ( args.outConfig.audioConfig == IVAS_AUDIO_CONFIG_BINAURAL_SPLIT_CODED || args.outConfig.audioConfig == IVAS_AUDIO_CONFIG_BINAURAL_SPLIT_PCM ) { fprintf( stderr, "\nUnable to get delay of renderer!\n" ); goto cleanup; } char *outFile = args.outMetadataFilePath; 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 ( args.outConfig.audioConfig == IVAS_AUDIO_CONFIG_BINAURAL_SPLIT_CODED ) { fprintf( stderr, "\nCould not open split rend metadata file %s\n", args.outputFilePath ); goto cleanup; } outFile = args.outputFilePath; 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" ); Loading @@ -1426,13 +1418,15 @@ int main( 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 ) 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.outMetadataFilePath ); fprintf( stderr, "\nCould not open split rend metadata file %s\n", outFile ); 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 ); Loading Loading @@ -1558,16 +1552,23 @@ int main( if ( numSamplesRead == 0 ) { /* end of input data */ break; flushRendererLastFrame = true; } /* Convert from int to float and from interleaved to packed */ 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 ); Loading Loading @@ -1679,7 +1680,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; Loading @@ -1694,7 +1695,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; Loading @@ -1711,7 +1712,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; Loading @@ -1734,7 +1735,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; Loading @@ -1750,13 +1751,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 ) { Loading Loading @@ -1819,7 +1820,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 ) Loading @@ -1829,7 +1830,7 @@ int main( } } if ( audioWriter != NULL ) if ( audioWriter != NULL && !flushRendererLastFrame ) { if ( delayNumSamples * num_out_channels < outBufferSize ) { Loading @@ -1850,7 +1851,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; Loading Loading @@ -1922,7 +1923,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 ) Loading @@ -1939,6 +1941,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 ) { Loading @@ -1951,12 +1960,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" ); Loading @@ -1964,7 +1974,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" ); Loading @@ -1973,9 +1982,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 ) Loading Loading @@ -3305,7 +3315,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 ) { Loading