Loading .gitlab-ci.yml +19 −13 Original line number Diff line number Diff line Loading @@ -379,6 +379,17 @@ branch-is-up-to-date-with-main-pre: - echo $commits_behind_count - if [ $commits_behind_count -eq 0 ]; then exit 0; else echo "Your branch is behind main, run 'git merge origin/main' to update."; exit 1; fi; check-self-test-names-pre: extends: - .rules-merge-request stage: prevalidate needs: [] tags: - ivas-linux script: - python3 ci/check_self_test_names.py scripts/config/self_test.prm 135 branch-is-up-to-date-with-main-post: extends: - .rules-merge-request Loading Loading @@ -558,6 +569,8 @@ codec-asan: codec-usan: extends: - .sanitizer-selftest-on-mr tags: - ivas-linux-fast before_script: - CLANG_NUM=3 - SELFTEST_SANITY_TIMEOUT=$TESTCASE_TIMEOUT_STV_SANITIZERS Loading Loading @@ -1338,22 +1351,17 @@ ivas-conformance: timeout: "60 minutes" rules: - if: ($CI_PIPELINE_SOURCE == 'web' || $CI_PIPELINE_SOURCE == 'trigger') && $MANUAL_PIPELINE_TYPE == 'ivas-conformance' # - if: $CI_PIPELINE_SOURCE == 'push' && $CI_COMMIT_BRANCH == $CI_DEFAULT_BRANCH allow_failure: exit_codes: - 123 script: - *print-common-info-windows # Prepare reference exec, use tests and scripts from reference - $source_branch_commit_sha = $(git rev-parse HEAD) - git checkout main # This should be set to a relevant reference - git pull # Ensure to get the latest version - python .\scripts\strip_split_rendering.py - MSBuild.exe -maxcpucount .\Workspace_msvc\Workspace_msvc.sln /property:Configuration=Debug - cp -force IVAS_cod.exe IVAS_cod_ref.exe - cp -force IVAS_dec.exe IVAS_dec_ref.exe - cp -force IVAS_rend.exe IVAS_rend_ref.exe - git restore . - git checkout $source_branch_commit_sha # Reference creation - python tests/create_short_testvectors.py Loading @@ -1368,12 +1376,16 @@ ivas-conformance: # Copy input data and output ref data - if (Test-Path testvec) {rm -r -force testvec} - if (Test-Path TMP_DEC) {rm -r -force TMP_DEC} - if (Test-Path TMP_ENC) {rm -r -force TMP_ENC} - if (Test-Path TMP_JBM) {rm -r -force TMP_JBM} - if (Test-Path TMP_REND) {rm -r -force TMP_REND} - mkdir testvec - mkdir testvec/binauralRenderer_interface - mkdir testvec/testv - mkdir testvec/testv/renderer - mkdir testvec/bin - cp -r -force -ErrorAction Ignore scripts/testv/* testvec/testv - cp -force -ErrorAction Ignore scripts/testv/* testvec/testv - cp -r -force -ErrorAction Ignore scripts/ls_layouts testvec - cp -r -force -ErrorAction Ignore scripts/switchPaths testvec - cp -r -force -ErrorAction Ignore scripts/trajectories testvec Loading Loading @@ -1423,16 +1435,10 @@ ivas-conformance-linux: - 123 script: - *print-common-info # Prepare reference exec, use tests and scripts from reference - source_branch_commit_sha=$(git rev-parse HEAD) - git checkout main # This should be set to a relevant reference - make -j - cp IVAS_cod IVAS_cod_ref - cp IVAS_dec IVAS_dec_ref - cp IVAS_rend IVAS_rend_ref - git restore . - git checkout $source_branch_commit_sha # Reference creation - python3 tests/create_short_testvectors.py Loading .gitlab/issue_templates/asan_ltv_error.md +1 −0 Original line number Diff line number Diff line Loading @@ -19,6 +19,7 @@ Link to test pipeline: XXX Using the [scripts](https://forge.3gpp.org/rep/ivas-codec-pc/ivas-codec/-/wikis/Software-development/pyivastest-howto#how-to-reproduce-tests): <!--- check correct sanitizer type --> <!--- add error pattern if needed --> <!--- copy as needed: -J dly_profile.dat -T head_rot_traj.csv -exof exof_traj.csv --> ``` python3 scripts/IvasBuildAndRunChecks.py --checks CLANG2 -m MODE -p /path/to/my/local/ci_linux_ltv_local.json ``` Loading .gitlab/issue_templates/msan_ltv_error.md +1 −0 Original line number Diff line number Diff line Loading @@ -25,6 +25,7 @@ in the `Makefile` at lines 71 and 72. Note that this may increase runtime heavil Using the [scripts](https://forge.3gpp.org/rep/ivas-codec-pc/ivas-codec/-/wikis/Software-development/pyivastest-howto#how-to-reproduce-tests): <!--- check correct sanitizer type --> <!--- add error pattern if needed --> <!--- copy as needed: -J dly_profile.dat -T head_rot_traj.csv -exof exof_traj.csv --> ``` python3 scripts/IvasBuildAndRunChecks.py --checks CLANG1 -m MODE -p /path/to/my/local/ci_linux_ltv_local.json Loading .gitlab/issue_templates/usan_ltv_error.md +4 −2 Original line number Diff line number Diff line Loading @@ -19,6 +19,8 @@ Link to test pipeline: XXX Using the [scripts](https://forge.3gpp.org/rep/ivas-codec-pc/ivas-codec/-/wikis/Software-development/pyivastest-howto#how-to-reproduce-tests): <!--- check correct sanitizer type --> <!--- add error pattern if needed --> <!--- copy as needed: -J dly_profile.dat -T head_rot_traj.csv -exof exof_traj.csv --> ``` python3 scripts/IvasBuildAndRunChecks.py --checks CLANG3 -m MODE -p /path/to/my/local/ci_linux_ltv_local.json --usan_supp_file scripts/ubsan.supp ``` Loading @@ -27,9 +29,9 @@ or directly: ``` make clean make -j CLANG=3 ./IVAS_cod ... UBSAN_OPTIONS=suppressions=scripts/ubsan.supp,report_error_type=1,log_path=usan_log_catchall ./IVAS_cod ... networkSimulator_g192 dly_profile.dat bit bit_err trace_dump 1 ./IVAS_dec ... UBSAN_OPTIONS=suppressions=scripts/ubsan.supp,report_error_type=1,log_path=usan_log_catchall ./IVAS_dec ... ``` <!--- Below are labels that will be added but are not shown in description. This is a template to help fill them. Loading apps/decoder.c +191 −1 Original line number Diff line number Diff line Loading @@ -90,6 +90,17 @@ static * Local structure for storing cmdln arguments *------------------------------------------------------------------------------------------*/ #ifdef FIX_1053_REVERB_RECONFIGURATION typedef struct { uint16_t *pID; uint16_t *pValidity; uint16_t count; uint16_t selected; uint16_t frameCounter; } AcousticEnvironmentSequence; #endif typedef struct { char *inputBitstreamFilename; Loading Loading @@ -141,7 +152,11 @@ typedef struct uint16_t tsmScale; #endif #endif #ifdef FIX_1053_REVERB_RECONFIGURATION AcousticEnvironmentSequence aeSequence; #else uint16_t acousticEnvironmentId; #endif int16_t Opt_dpid_on; uint16_t directivityPatternId[IVAS_MAX_NUM_OBJECTS]; Loading Loading @@ -432,9 +447,14 @@ int main( *------------------------------------------------------------------------------------------*/ asked_frame_size = arg.renderFramesize; #ifdef FIX_1053_REVERB_RECONFIGURATION uint16_t aeID = arg.aeSequence.count > 0 ? arg.aeSequence.pID[0] : 65535; if ( ( error = IVAS_DEC_Configure( hIvasDec, arg.output_Fs, arg.outputConfig, arg.tsmEnabled, arg.renderFramesize, arg.customLsOutputEnabled, arg.hrtfReaderEnabled, arg.enableHeadRotation, arg.enableExternalOrientation, arg.orientation_tracking, arg.renderConfigEnabled, arg.Opt_non_diegetic_pan, arg.non_diegetic_pan_gain, arg.Opt_dpid_on, aeID, arg.delayCompensationEnabled ) ) != IVAS_ERR_OK ) #else if ( ( error = IVAS_DEC_Configure( hIvasDec, arg.output_Fs, arg.outputConfig, arg.tsmEnabled, arg.renderFramesize, arg.customLsOutputEnabled, arg.hrtfReaderEnabled, arg.enableHeadRotation, arg.enableExternalOrientation, arg.orientation_tracking, arg.renderConfigEnabled, arg.Opt_non_diegetic_pan, arg.non_diegetic_pan_gain, arg.Opt_dpid_on, arg.acousticEnvironmentId, arg.delayCompensationEnabled ) ) != IVAS_ERR_OK ) #endif { fprintf( stderr, "\nConfigure failed: %s\n\n", IVAS_DEC_GetErrorMessage( error ) ); goto cleanup; Loading Loading @@ -658,7 +678,11 @@ int main( if ( arg.outputConfig == IVAS_AUDIO_CONFIG_BINAURAL_ROOM_REVERB ) { #ifdef FIX_1053_REVERB_RECONFIGURATION if ( ( error = RenderConfigReader_getAcousticEnvironment( renderConfigReader, aeID, &renderConfig.roomAcoustics ) ) == IVAS_ERR_OK ) #else if ( ( error = RenderConfigReader_getAcousticEnvironment( renderConfigReader, arg.acousticEnvironmentId, &renderConfig.roomAcoustics ) ) == IVAS_ERR_OK ) #endif { if ( RenderConfigReader_checkValues( &renderConfig ) != IVAS_ERR_OK ) { Loading @@ -668,7 +692,11 @@ int main( } else { #ifdef FIX_1053_REVERB_RECONFIGURATION fprintf( stderr, "Failed to get acoustic environment with ID: %d\n\n", aeID ); #else fprintf( stderr, "Failed to get acoustic environment with ID: %d\n\n", arg.acousticEnvironmentId ); #endif goto cleanup; } renderConfig.roomAcoustics.override = true; Loading Loading @@ -875,6 +903,13 @@ cleanup: free( pcmBuf ); #ifdef FIX_1053_REVERB_RECONFIGURATION if ( arg.aeSequence.count > 0 ) { free( arg.aeSequence.pID ); free( arg.aeSequence.pValidity ); } #endif #ifdef DEBUG_SBA_AUDIO_DUMP IVAS_DEC_GetSbaDebugParams( hIvasDec, &numOutChannels, &numTransportChannels, &pca_ingest_channels ); Loading Loading @@ -1090,7 +1125,15 @@ static bool parseCmdlIVAS_dec( arg->tsmScaleFileName = NULL; #endif #endif #ifdef FIX_1053_REVERB_RECONFIGURATION arg->aeSequence.count = 0; arg->aeSequence.pID = NULL; arg->aeSequence.pValidity = NULL; arg->aeSequence.selected = 0; arg->aeSequence.frameCounter = 0; #else arg->acousticEnvironmentId = 65535; #endif for ( i = 0; i < IVAS_MAX_NUM_OBJECTS; ++i ) { arg->directivityPatternId[i] = 65535; Loading Loading @@ -1474,11 +1517,90 @@ static bool parseCmdlIVAS_dec( if ( !is_digits_only( argv[i] ) ) { #ifdef FIX_1053_REVERB_RECONFIGURATION uint16_t k; char *s = argv[i]; char *token = argv[i]; for ( k = 0; s[k]; ) { s[k] == ',' ? k++ : *s++; } k++; if ( k == 0 ) { fprintf( stdout, "Error: Invalid acoustic environment sequence specified: %s\n\n", argv[i] ); usage_dec(); return false; } if ( NULL == ( arg->aeSequence.pID = malloc( sizeof( uint16_t ) * k ) ) || NULL == ( arg->aeSequence.pValidity = malloc( sizeof( uint16_t ) * k ) ) ) { fprintf( stdout, "Error: Unable to allocate memory for acoustic environment sequence: %s\n\n", argv[i] ); usage_dec(); return false; } arg->aeSequence.count = k; k = 0; token = strtok( argv[i++], ":" ); while ( token != NULL ) { if ( !is_number( token ) ) { fprintf( stdout, "Error: Invalid token %s found in acoustic environment sequence: %s\n\n", token, argv[i] ); usage_dec(); return false; } arg->aeSequence.pID[k] = (uint16_t) atoi( token ); token = strtok( NULL, "," ); if ( !is_number( token ) ) { fprintf( stdout, "Error: Invalid token %s found in acoustic environment sequence: %s\n\n", token, argv[i] ); usage_dec(); return false; } arg->aeSequence.pValidity[k] = (uint16_t) atoi( token ); token = strtok( NULL, ":" ); k++; } if ( k != arg->aeSequence.count ) { fprintf( stdout, "Error while parsing acoustic environment sequence: %s\n\n", argv[i] ); usage_dec(); return false; } #else fprintf( stdout, "Error: Invalid acoustic environment ID specified: %s\n\n", argv[i] ); usage_dec(); return false; #endif } #ifdef FIX_1053_REVERB_RECONFIGURATION else { /* A single acoustic environment */ if ( NULL == ( arg->aeSequence.pID = malloc( sizeof( uint16_t ) ) ) || NULL == ( arg->aeSequence.pValidity = malloc( sizeof( uint16_t ) ) ) ) { fprintf( stdout, "Error: Unable to allocate memory for acoustic environment sequence: %s\n\n", argv[i] ); usage_dec(); return false; } arg->aeSequence.count = 1; arg->aeSequence.pID[0] = (int16_t) atoi( argv[i++] ); arg->aeSequence.pValidity[0] = 0; } #else arg->acousticEnvironmentId = (int16_t) atoi( argv[i++] ); #endif } else if ( strcmp( argv_to_upper, "-DPID" ) == 0 ) { Loading Loading @@ -1717,7 +1839,15 @@ static void usage_dec( void ) fprintf( stdout, " output configuration. ID1, ID2, ID3, ID4 specify the directivity pattern IDs used for\n" ); fprintf( stdout, " ISMs 1,2,3 and 4 respectively. This options needs to be accompanied by a render_config file,\n" ); fprintf( stdout, " otherwise a default directivity pattern is used.\n" ); #ifdef FIX_1053_REVERB_RECONFIGURATION fprintf( stdout, "-aeid ID : Acoustic environment ID (number > 0) or\n" ); fprintf( stdout, " a sequence thereof in the format [ID1:duration1,ID2:duration2...]\n" ); fprintf( stdout, " without braces and spaces, with ':' character separating ID from duration and ',' separating\n" ); fprintf( stdout, " ID and duration pairs, where duration is specified in frames\n" ); fprintf( stdout, " for BINAURAL_ROOM_REVERB output configuration.\n" ); #else fprintf( stdout, "-aeid ID : Acoustic environment ID (number >= 0) for BINAURAL_ROOM_REVERB output configuration\n" ); #endif fprintf( stdout, "-level level : Complexity level, level = (1, 2, 3), will be defined after characterisation. \n" ); fprintf( stdout, " Currently, all values default to level 3 (full functionality).\n" ); fprintf( stdout, "-q : Quiet mode, no frame counter\n" ); Loading Loading @@ -2082,6 +2212,31 @@ static ivas_error decodeG192( SplitFileReadWrite *splitRendWriter = NULL; #endif #ifdef FIX_1053_REVERB_RECONFIGURATION IVAS_RENDER_CONFIG_DATA renderConfig; RenderConfigReader *renderConfigReader = NULL; if ( arg.renderConfigEnabled ) { if ( ( error = RenderConfigReader_open( arg.renderConfigFilename, &renderConfigReader ) ) != IVAS_ERR_OK ) { fprintf( stderr, "\nError: Can't open Renderer configuration file %s \n\n", arg.renderConfigFilename ); goto cleanup; } if ( ( error = IVAS_DEC_GetRenderConfig( hIvasDec, &renderConfig ) ) != IVAS_ERR_OK ) { fprintf( stderr, "\nIVAS_DEC_GetRenderConfig failed: %s\n\n", IVAS_DEC_GetErrorMessage( error ) ); goto cleanup; } if ( RenderConfigReader_read( renderConfigReader, arg.renderConfigFilename, &renderConfig ) != IVAS_ERR_OK ) { fprintf( stderr, "Failed to read renderer configuration from file %s\n\n", arg.renderConfigFilename ); goto cleanup; } } #endif for ( i = 0; i < IVAS_MAX_NUM_OBJECTS; ++i ) { ismWriters[i] = NULL; Loading Loading @@ -2291,6 +2446,38 @@ static ivas_error decodeG192( { if ( needNewFrame ) { #ifdef FIX_1053_REVERB_RECONFIGURATION if ( arg.outputConfig == IVAS_AUDIO_CONFIG_BINAURAL_ROOM_REVERB && renderConfigReader != NULL && arg.aeSequence.count > 0 && arg.aeSequence.pValidity[arg.aeSequence.selected] != 0 ) { if ( ++arg.aeSequence.frameCounter >= arg.aeSequence.pValidity[arg.aeSequence.selected] ) { if ( ++arg.aeSequence.selected >= arg.aeSequence.count ) { arg.aeSequence.selected = 0; } arg.aeSequence.frameCounter = 0; if ( ( error = RenderConfigReader_getAcousticEnvironment( renderConfigReader, arg.aeSequence.pID[arg.aeSequence.selected], &renderConfig.roomAcoustics ) ) == IVAS_ERR_OK ) { if ( RenderConfigReader_checkValues( &renderConfig ) != IVAS_ERR_OK ) { fprintf( stderr, "Invalid acoustic environment configuratoin parameters\n\n" ); goto cleanup; } } else { fprintf( stderr, "Failed to get acoustic environment with ID %d\n\n", arg.aeSequence.pID[arg.aeSequence.selected] ); goto cleanup; } if ( ( error = IVAS_DEC_FeedRenderConfig( hIvasDec, renderConfig ) ) != IVAS_ERR_OK ) { fprintf( stderr, "\nIVAS_DEC_FeedRenderConfig failed: %s\n\n", IVAS_DEC_GetErrorMessage( error ) ); goto cleanup; } } } #endif #ifdef DEBUGGING #ifdef VARIABLE_SPEED_DECODING if ( arg.tsmScaleFileEnabled ) Loading Loading @@ -2738,6 +2925,9 @@ static ivas_error decodeG192( cleanup: #ifdef FIX_1053_REVERB_RECONFIGURATION RenderConfigReader_close( &renderConfigReader ); #endif #ifdef SPLIT_REND_WITH_HEAD_ROT split_rend_reader_writer_close( &splitRendWriter ); #endif Loading Loading
.gitlab-ci.yml +19 −13 Original line number Diff line number Diff line Loading @@ -379,6 +379,17 @@ branch-is-up-to-date-with-main-pre: - echo $commits_behind_count - if [ $commits_behind_count -eq 0 ]; then exit 0; else echo "Your branch is behind main, run 'git merge origin/main' to update."; exit 1; fi; check-self-test-names-pre: extends: - .rules-merge-request stage: prevalidate needs: [] tags: - ivas-linux script: - python3 ci/check_self_test_names.py scripts/config/self_test.prm 135 branch-is-up-to-date-with-main-post: extends: - .rules-merge-request Loading Loading @@ -558,6 +569,8 @@ codec-asan: codec-usan: extends: - .sanitizer-selftest-on-mr tags: - ivas-linux-fast before_script: - CLANG_NUM=3 - SELFTEST_SANITY_TIMEOUT=$TESTCASE_TIMEOUT_STV_SANITIZERS Loading Loading @@ -1338,22 +1351,17 @@ ivas-conformance: timeout: "60 minutes" rules: - if: ($CI_PIPELINE_SOURCE == 'web' || $CI_PIPELINE_SOURCE == 'trigger') && $MANUAL_PIPELINE_TYPE == 'ivas-conformance' # - if: $CI_PIPELINE_SOURCE == 'push' && $CI_COMMIT_BRANCH == $CI_DEFAULT_BRANCH allow_failure: exit_codes: - 123 script: - *print-common-info-windows # Prepare reference exec, use tests and scripts from reference - $source_branch_commit_sha = $(git rev-parse HEAD) - git checkout main # This should be set to a relevant reference - git pull # Ensure to get the latest version - python .\scripts\strip_split_rendering.py - MSBuild.exe -maxcpucount .\Workspace_msvc\Workspace_msvc.sln /property:Configuration=Debug - cp -force IVAS_cod.exe IVAS_cod_ref.exe - cp -force IVAS_dec.exe IVAS_dec_ref.exe - cp -force IVAS_rend.exe IVAS_rend_ref.exe - git restore . - git checkout $source_branch_commit_sha # Reference creation - python tests/create_short_testvectors.py Loading @@ -1368,12 +1376,16 @@ ivas-conformance: # Copy input data and output ref data - if (Test-Path testvec) {rm -r -force testvec} - if (Test-Path TMP_DEC) {rm -r -force TMP_DEC} - if (Test-Path TMP_ENC) {rm -r -force TMP_ENC} - if (Test-Path TMP_JBM) {rm -r -force TMP_JBM} - if (Test-Path TMP_REND) {rm -r -force TMP_REND} - mkdir testvec - mkdir testvec/binauralRenderer_interface - mkdir testvec/testv - mkdir testvec/testv/renderer - mkdir testvec/bin - cp -r -force -ErrorAction Ignore scripts/testv/* testvec/testv - cp -force -ErrorAction Ignore scripts/testv/* testvec/testv - cp -r -force -ErrorAction Ignore scripts/ls_layouts testvec - cp -r -force -ErrorAction Ignore scripts/switchPaths testvec - cp -r -force -ErrorAction Ignore scripts/trajectories testvec Loading Loading @@ -1423,16 +1435,10 @@ ivas-conformance-linux: - 123 script: - *print-common-info # Prepare reference exec, use tests and scripts from reference - source_branch_commit_sha=$(git rev-parse HEAD) - git checkout main # This should be set to a relevant reference - make -j - cp IVAS_cod IVAS_cod_ref - cp IVAS_dec IVAS_dec_ref - cp IVAS_rend IVAS_rend_ref - git restore . - git checkout $source_branch_commit_sha # Reference creation - python3 tests/create_short_testvectors.py Loading
.gitlab/issue_templates/asan_ltv_error.md +1 −0 Original line number Diff line number Diff line Loading @@ -19,6 +19,7 @@ Link to test pipeline: XXX Using the [scripts](https://forge.3gpp.org/rep/ivas-codec-pc/ivas-codec/-/wikis/Software-development/pyivastest-howto#how-to-reproduce-tests): <!--- check correct sanitizer type --> <!--- add error pattern if needed --> <!--- copy as needed: -J dly_profile.dat -T head_rot_traj.csv -exof exof_traj.csv --> ``` python3 scripts/IvasBuildAndRunChecks.py --checks CLANG2 -m MODE -p /path/to/my/local/ci_linux_ltv_local.json ``` Loading
.gitlab/issue_templates/msan_ltv_error.md +1 −0 Original line number Diff line number Diff line Loading @@ -25,6 +25,7 @@ in the `Makefile` at lines 71 and 72. Note that this may increase runtime heavil Using the [scripts](https://forge.3gpp.org/rep/ivas-codec-pc/ivas-codec/-/wikis/Software-development/pyivastest-howto#how-to-reproduce-tests): <!--- check correct sanitizer type --> <!--- add error pattern if needed --> <!--- copy as needed: -J dly_profile.dat -T head_rot_traj.csv -exof exof_traj.csv --> ``` python3 scripts/IvasBuildAndRunChecks.py --checks CLANG1 -m MODE -p /path/to/my/local/ci_linux_ltv_local.json Loading
.gitlab/issue_templates/usan_ltv_error.md +4 −2 Original line number Diff line number Diff line Loading @@ -19,6 +19,8 @@ Link to test pipeline: XXX Using the [scripts](https://forge.3gpp.org/rep/ivas-codec-pc/ivas-codec/-/wikis/Software-development/pyivastest-howto#how-to-reproduce-tests): <!--- check correct sanitizer type --> <!--- add error pattern if needed --> <!--- copy as needed: -J dly_profile.dat -T head_rot_traj.csv -exof exof_traj.csv --> ``` python3 scripts/IvasBuildAndRunChecks.py --checks CLANG3 -m MODE -p /path/to/my/local/ci_linux_ltv_local.json --usan_supp_file scripts/ubsan.supp ``` Loading @@ -27,9 +29,9 @@ or directly: ``` make clean make -j CLANG=3 ./IVAS_cod ... UBSAN_OPTIONS=suppressions=scripts/ubsan.supp,report_error_type=1,log_path=usan_log_catchall ./IVAS_cod ... networkSimulator_g192 dly_profile.dat bit bit_err trace_dump 1 ./IVAS_dec ... UBSAN_OPTIONS=suppressions=scripts/ubsan.supp,report_error_type=1,log_path=usan_log_catchall ./IVAS_dec ... ``` <!--- Below are labels that will be added but are not shown in description. This is a template to help fill them. Loading
apps/decoder.c +191 −1 Original line number Diff line number Diff line Loading @@ -90,6 +90,17 @@ static * Local structure for storing cmdln arguments *------------------------------------------------------------------------------------------*/ #ifdef FIX_1053_REVERB_RECONFIGURATION typedef struct { uint16_t *pID; uint16_t *pValidity; uint16_t count; uint16_t selected; uint16_t frameCounter; } AcousticEnvironmentSequence; #endif typedef struct { char *inputBitstreamFilename; Loading Loading @@ -141,7 +152,11 @@ typedef struct uint16_t tsmScale; #endif #endif #ifdef FIX_1053_REVERB_RECONFIGURATION AcousticEnvironmentSequence aeSequence; #else uint16_t acousticEnvironmentId; #endif int16_t Opt_dpid_on; uint16_t directivityPatternId[IVAS_MAX_NUM_OBJECTS]; Loading Loading @@ -432,9 +447,14 @@ int main( *------------------------------------------------------------------------------------------*/ asked_frame_size = arg.renderFramesize; #ifdef FIX_1053_REVERB_RECONFIGURATION uint16_t aeID = arg.aeSequence.count > 0 ? arg.aeSequence.pID[0] : 65535; if ( ( error = IVAS_DEC_Configure( hIvasDec, arg.output_Fs, arg.outputConfig, arg.tsmEnabled, arg.renderFramesize, arg.customLsOutputEnabled, arg.hrtfReaderEnabled, arg.enableHeadRotation, arg.enableExternalOrientation, arg.orientation_tracking, arg.renderConfigEnabled, arg.Opt_non_diegetic_pan, arg.non_diegetic_pan_gain, arg.Opt_dpid_on, aeID, arg.delayCompensationEnabled ) ) != IVAS_ERR_OK ) #else if ( ( error = IVAS_DEC_Configure( hIvasDec, arg.output_Fs, arg.outputConfig, arg.tsmEnabled, arg.renderFramesize, arg.customLsOutputEnabled, arg.hrtfReaderEnabled, arg.enableHeadRotation, arg.enableExternalOrientation, arg.orientation_tracking, arg.renderConfigEnabled, arg.Opt_non_diegetic_pan, arg.non_diegetic_pan_gain, arg.Opt_dpid_on, arg.acousticEnvironmentId, arg.delayCompensationEnabled ) ) != IVAS_ERR_OK ) #endif { fprintf( stderr, "\nConfigure failed: %s\n\n", IVAS_DEC_GetErrorMessage( error ) ); goto cleanup; Loading Loading @@ -658,7 +678,11 @@ int main( if ( arg.outputConfig == IVAS_AUDIO_CONFIG_BINAURAL_ROOM_REVERB ) { #ifdef FIX_1053_REVERB_RECONFIGURATION if ( ( error = RenderConfigReader_getAcousticEnvironment( renderConfigReader, aeID, &renderConfig.roomAcoustics ) ) == IVAS_ERR_OK ) #else if ( ( error = RenderConfigReader_getAcousticEnvironment( renderConfigReader, arg.acousticEnvironmentId, &renderConfig.roomAcoustics ) ) == IVAS_ERR_OK ) #endif { if ( RenderConfigReader_checkValues( &renderConfig ) != IVAS_ERR_OK ) { Loading @@ -668,7 +692,11 @@ int main( } else { #ifdef FIX_1053_REVERB_RECONFIGURATION fprintf( stderr, "Failed to get acoustic environment with ID: %d\n\n", aeID ); #else fprintf( stderr, "Failed to get acoustic environment with ID: %d\n\n", arg.acousticEnvironmentId ); #endif goto cleanup; } renderConfig.roomAcoustics.override = true; Loading Loading @@ -875,6 +903,13 @@ cleanup: free( pcmBuf ); #ifdef FIX_1053_REVERB_RECONFIGURATION if ( arg.aeSequence.count > 0 ) { free( arg.aeSequence.pID ); free( arg.aeSequence.pValidity ); } #endif #ifdef DEBUG_SBA_AUDIO_DUMP IVAS_DEC_GetSbaDebugParams( hIvasDec, &numOutChannels, &numTransportChannels, &pca_ingest_channels ); Loading Loading @@ -1090,7 +1125,15 @@ static bool parseCmdlIVAS_dec( arg->tsmScaleFileName = NULL; #endif #endif #ifdef FIX_1053_REVERB_RECONFIGURATION arg->aeSequence.count = 0; arg->aeSequence.pID = NULL; arg->aeSequence.pValidity = NULL; arg->aeSequence.selected = 0; arg->aeSequence.frameCounter = 0; #else arg->acousticEnvironmentId = 65535; #endif for ( i = 0; i < IVAS_MAX_NUM_OBJECTS; ++i ) { arg->directivityPatternId[i] = 65535; Loading Loading @@ -1474,11 +1517,90 @@ static bool parseCmdlIVAS_dec( if ( !is_digits_only( argv[i] ) ) { #ifdef FIX_1053_REVERB_RECONFIGURATION uint16_t k; char *s = argv[i]; char *token = argv[i]; for ( k = 0; s[k]; ) { s[k] == ',' ? k++ : *s++; } k++; if ( k == 0 ) { fprintf( stdout, "Error: Invalid acoustic environment sequence specified: %s\n\n", argv[i] ); usage_dec(); return false; } if ( NULL == ( arg->aeSequence.pID = malloc( sizeof( uint16_t ) * k ) ) || NULL == ( arg->aeSequence.pValidity = malloc( sizeof( uint16_t ) * k ) ) ) { fprintf( stdout, "Error: Unable to allocate memory for acoustic environment sequence: %s\n\n", argv[i] ); usage_dec(); return false; } arg->aeSequence.count = k; k = 0; token = strtok( argv[i++], ":" ); while ( token != NULL ) { if ( !is_number( token ) ) { fprintf( stdout, "Error: Invalid token %s found in acoustic environment sequence: %s\n\n", token, argv[i] ); usage_dec(); return false; } arg->aeSequence.pID[k] = (uint16_t) atoi( token ); token = strtok( NULL, "," ); if ( !is_number( token ) ) { fprintf( stdout, "Error: Invalid token %s found in acoustic environment sequence: %s\n\n", token, argv[i] ); usage_dec(); return false; } arg->aeSequence.pValidity[k] = (uint16_t) atoi( token ); token = strtok( NULL, ":" ); k++; } if ( k != arg->aeSequence.count ) { fprintf( stdout, "Error while parsing acoustic environment sequence: %s\n\n", argv[i] ); usage_dec(); return false; } #else fprintf( stdout, "Error: Invalid acoustic environment ID specified: %s\n\n", argv[i] ); usage_dec(); return false; #endif } #ifdef FIX_1053_REVERB_RECONFIGURATION else { /* A single acoustic environment */ if ( NULL == ( arg->aeSequence.pID = malloc( sizeof( uint16_t ) ) ) || NULL == ( arg->aeSequence.pValidity = malloc( sizeof( uint16_t ) ) ) ) { fprintf( stdout, "Error: Unable to allocate memory for acoustic environment sequence: %s\n\n", argv[i] ); usage_dec(); return false; } arg->aeSequence.count = 1; arg->aeSequence.pID[0] = (int16_t) atoi( argv[i++] ); arg->aeSequence.pValidity[0] = 0; } #else arg->acousticEnvironmentId = (int16_t) atoi( argv[i++] ); #endif } else if ( strcmp( argv_to_upper, "-DPID" ) == 0 ) { Loading Loading @@ -1717,7 +1839,15 @@ static void usage_dec( void ) fprintf( stdout, " output configuration. ID1, ID2, ID3, ID4 specify the directivity pattern IDs used for\n" ); fprintf( stdout, " ISMs 1,2,3 and 4 respectively. This options needs to be accompanied by a render_config file,\n" ); fprintf( stdout, " otherwise a default directivity pattern is used.\n" ); #ifdef FIX_1053_REVERB_RECONFIGURATION fprintf( stdout, "-aeid ID : Acoustic environment ID (number > 0) or\n" ); fprintf( stdout, " a sequence thereof in the format [ID1:duration1,ID2:duration2...]\n" ); fprintf( stdout, " without braces and spaces, with ':' character separating ID from duration and ',' separating\n" ); fprintf( stdout, " ID and duration pairs, where duration is specified in frames\n" ); fprintf( stdout, " for BINAURAL_ROOM_REVERB output configuration.\n" ); #else fprintf( stdout, "-aeid ID : Acoustic environment ID (number >= 0) for BINAURAL_ROOM_REVERB output configuration\n" ); #endif fprintf( stdout, "-level level : Complexity level, level = (1, 2, 3), will be defined after characterisation. \n" ); fprintf( stdout, " Currently, all values default to level 3 (full functionality).\n" ); fprintf( stdout, "-q : Quiet mode, no frame counter\n" ); Loading Loading @@ -2082,6 +2212,31 @@ static ivas_error decodeG192( SplitFileReadWrite *splitRendWriter = NULL; #endif #ifdef FIX_1053_REVERB_RECONFIGURATION IVAS_RENDER_CONFIG_DATA renderConfig; RenderConfigReader *renderConfigReader = NULL; if ( arg.renderConfigEnabled ) { if ( ( error = RenderConfigReader_open( arg.renderConfigFilename, &renderConfigReader ) ) != IVAS_ERR_OK ) { fprintf( stderr, "\nError: Can't open Renderer configuration file %s \n\n", arg.renderConfigFilename ); goto cleanup; } if ( ( error = IVAS_DEC_GetRenderConfig( hIvasDec, &renderConfig ) ) != IVAS_ERR_OK ) { fprintf( stderr, "\nIVAS_DEC_GetRenderConfig failed: %s\n\n", IVAS_DEC_GetErrorMessage( error ) ); goto cleanup; } if ( RenderConfigReader_read( renderConfigReader, arg.renderConfigFilename, &renderConfig ) != IVAS_ERR_OK ) { fprintf( stderr, "Failed to read renderer configuration from file %s\n\n", arg.renderConfigFilename ); goto cleanup; } } #endif for ( i = 0; i < IVAS_MAX_NUM_OBJECTS; ++i ) { ismWriters[i] = NULL; Loading Loading @@ -2291,6 +2446,38 @@ static ivas_error decodeG192( { if ( needNewFrame ) { #ifdef FIX_1053_REVERB_RECONFIGURATION if ( arg.outputConfig == IVAS_AUDIO_CONFIG_BINAURAL_ROOM_REVERB && renderConfigReader != NULL && arg.aeSequence.count > 0 && arg.aeSequence.pValidity[arg.aeSequence.selected] != 0 ) { if ( ++arg.aeSequence.frameCounter >= arg.aeSequence.pValidity[arg.aeSequence.selected] ) { if ( ++arg.aeSequence.selected >= arg.aeSequence.count ) { arg.aeSequence.selected = 0; } arg.aeSequence.frameCounter = 0; if ( ( error = RenderConfigReader_getAcousticEnvironment( renderConfigReader, arg.aeSequence.pID[arg.aeSequence.selected], &renderConfig.roomAcoustics ) ) == IVAS_ERR_OK ) { if ( RenderConfigReader_checkValues( &renderConfig ) != IVAS_ERR_OK ) { fprintf( stderr, "Invalid acoustic environment configuratoin parameters\n\n" ); goto cleanup; } } else { fprintf( stderr, "Failed to get acoustic environment with ID %d\n\n", arg.aeSequence.pID[arg.aeSequence.selected] ); goto cleanup; } if ( ( error = IVAS_DEC_FeedRenderConfig( hIvasDec, renderConfig ) ) != IVAS_ERR_OK ) { fprintf( stderr, "\nIVAS_DEC_FeedRenderConfig failed: %s\n\n", IVAS_DEC_GetErrorMessage( error ) ); goto cleanup; } } } #endif #ifdef DEBUGGING #ifdef VARIABLE_SPEED_DECODING if ( arg.tsmScaleFileEnabled ) Loading Loading @@ -2738,6 +2925,9 @@ static ivas_error decodeG192( cleanup: #ifdef FIX_1053_REVERB_RECONFIGURATION RenderConfigReader_close( &renderConfigReader ); #endif #ifdef SPLIT_REND_WITH_HEAD_ROT split_rend_reader_writer_close( &splitRendWriter ); #endif Loading