Loading .gitignore +3 −3 Original line number Diff line number Diff line Loading @@ -52,9 +52,9 @@ scripts/testv/stvOMASA_*.csv scripts/testv/stvOMASA_2ISM_1MASA1TC48c.wav scripts/testv/stvOMASA_3ISM_1MASA1TC48c.wav # default reference binary name IVAS_cod_ref IVAS_dec_ref IVAS_rend_ref IVAS_cod_ref* IVAS_dec_ref* IVAS_rend_ref* # Python files that pop up when running scripts __pycache__/ Loading .gitlab-ci.yml +32 −35 Original line number Diff line number Diff line Loading @@ -68,12 +68,12 @@ stages: # needed when depth is lower than the number of commits in the branch - git fetch origin $CI_MERGE_REQUEST_TARGET_BRANCH_NAME:$CI_MERGE_REQUEST_TARGET_BRANCH_NAME .mr-get-target-commit: &mr-get-target-commit # compare to last target branch commit before pipeline was created .mr-get-target-commit: &mr-get-target-commit # compare to last target branch commit before pipeline was created - target_commit=$(git log $CI_MERGE_REQUEST_TARGET_BRANCH_NAME -1 --oneline --before=${CI_PIPELINE_CREATED_AT} --format=%H) .check-for-testvectors: &check-for-testvectors # check if the testvector files specified in scripts/config/ci_linux*.json are present .check-for-testvectors: &check-for-testvectors # check if the testvector files specified in scripts/config/ci_linux*.json are present - python3 -m pytest ci/test_vectors_available.py .merge-request-comparison-setup-codec: Loading Loading @@ -162,7 +162,6 @@ stages: rules: - if: $CI_PIPELINE_SOURCE == 'schedule' && $CI_COMMIT_BRANCH == $CI_DEFAULT_BRANCH # templates to define stages and platforms .test-job-linux: tags: Loading Loading @@ -202,7 +201,6 @@ stages: exit_codes: - 123 # --------------------------------------------------------------- # .pre jobs for setting up things # --------------------------------------------------------------- Loading @@ -225,8 +223,6 @@ uninterruptible: tags: - ivas-linux # --------------------------------------------------------------- # Validation jobs # --------------------------------------------------------------- Loading @@ -245,7 +241,6 @@ check-if-branch-is-up-to-date-with-main: - echo $commits_behind_count - if [ $commits_behind_count -eq 0 ]; then exit 0; else exit 1; fi; # --------------------------------------------------------------- # Build jobs # --------------------------------------------------------------- Loading Loading @@ -526,8 +521,7 @@ renderer-pytest-on-merge-request: # write to temporary file as workaround for failures observed with piping echo - echo $CI_MERGE_REQUEST_TITLE > tmp.txt - non_be_flag=$(grep -c --ignore-case "\[rend\(erer\)*[ -]*non[ -]*be\]" tmp.txt) || true # TODO: needs splitting the test between reference and cut generation #- ref_using_main=$(echo $CI_MERGE_REQUEST_TITLE | grep -c --ignore-case "\[ref[ -]*using[ -]*main\]") || true - ref_using_main=$(grep -c --ignore-case "\[ref[ -]*using[ -]*main\]" tmp.txt) || true # store the current commit hash - source_branch_commit_sha=$(git rev-parse HEAD) Loading @@ -545,6 +539,9 @@ renderer-pytest-on-merge-request: - make clean - make -j IVAS_rend ### Run test using scripts and input from main - if [ $ref_using_main == 1 ]; then git checkout $target_commit; fi # run test - exit_code=0 - python3 -m pytest -q --log-level ERROR -n auto -rA --html=report.html --self-contained-html --junit-xml=report-junit.xml tests/renderer/test_renderer_be_comparison.py || exit_code=$? Loading Loading @@ -605,8 +602,7 @@ split-rendering-pytest-on-merge-request: # write to temporary file as workaround for failures observed with piping echo - echo $CI_MERGE_REQUEST_TITLE > tmp.txt - non_be_flag=$(grep -c --ignore-case "\[split*[ -]*non[ -]*be\]" tmp.txt) || true # TODO: needs splitting the test between reference and cut generation #- ref_using_main=$(echo $CI_MERGE_REQUEST_TITLE | grep -c --ignore-case "\[ref[ -]*using[ -]*main\]") || true - ref_using_main=$(grep -c --ignore-case "\[ref[ -]*using[ -]*main\]" tmp.txt) || true # store the current commit hash - source_branch_commit_sha=$(git rev-parse HEAD) Loading @@ -629,6 +625,9 @@ split-rendering-pytest-on-merge-request: - *enable-split-rendering - make -j INCLUDE_SPLIT=1 ### Run test using scripts and input from main - if [ $ref_using_main == 1 ]; then git checkout $target_commit; fi # run test - exit_code=0 - python3 -m pytest -q --log-level ERROR -n auto -rA --html=report.html --self-contained-html --junit-xml=report-junit.xml tests/split_rendering/test_split_rendering_be_comparison.py || exit_code=$? Loading Loading @@ -807,7 +806,7 @@ clang-format-check: - tmp-formatting-fix/ when: on_failure name: "$ARTIFACT_BASE_NAME" expose_as: 'formatting patch' expose_as: "formatting patch" # check for crashes if first received frame on decoder side is an SID check-first-frame-is-sid: Loading @@ -829,11 +828,13 @@ check-first-frame-is-sid: # TODO: for some MASA modes, we currently do not have testvectors that actually trigger DTX # SBA is run separately to use shorter part of file - exit_code_no_sba=0 - exit_code_sba=0 - modes=$(scripts/runIvasCodec.py -l | grep dtx | grep -v MASA | grep -v SBA) - scripts/runIvasCodec.py -p scripts/config/ci_linux_sidstart_test.json -m $modes -s --bs_length 500 -U 0:20 || exit_code_no_sba=$? - modes=$(scripts/runIvasCodec.py -l | grep dtx | grep SBA) - scripts/runIvasCodec.py -p scripts/config/ci_linux_sidstart_test.json -m $modes -s --bs_length 500 -U 70:80 || exit_code_sba=$? - if [ $exit_code_no_sba != 0 || $exit_code_sba != 0 ]; then exit 1; fi - if [ $exit_code_no_sba -ne 0 ] || [ $exit_code_sba -ne 0 ]; then exit 1; fi artifacts: paths: - out/logs Loading Loading @@ -896,7 +897,6 @@ lc3plus-ensure-no-code-changes: - modified_files=$(git status -s) - if [[ $modified_files ]]; then printf 'LC3plus codebase was modified!\n\n'"$modified_files"'\n\n'; exit $EXIT_CODE_FAIL; fi # --------------------------------------------------------------- # Test jobs for main branch # --------------------------------------------------------------- Loading Loading @@ -1060,7 +1060,6 @@ codec-comparison-on-main-push: extends: - .sanitizer-test-template sanitizer-test-mono: extends: .sanitizer-test-schedule-A rules: Loading Loading @@ -1275,7 +1274,6 @@ sanitizer-test-ism+4: - *update-ltv-repo - python3 ci/run_scheduled_sanitizer_test.py ISM+4 $OUT_FORMATS_CHANNEL_BASED $OUT_FORMATS_SCENE_BASED $OUT_FORMATS_BINAURAL EXT --tests $SANITIZER_TESTS # GCOV/LCOV coverage analysis of self_test suite coverage-test-on-main-scheduled: extends: Loading Loading @@ -1310,13 +1308,12 @@ coverage-test-on-main-scheduled: - coverage.info - coverage # --------------------------------------------------------------- # Complexity measurement jobs # --------------------------------------------------------------- .complexity-measurements-setup: &complexity-measurements-setup # create necessary environment .complexity-measurements-setup: &complexity-measurements-setup # create necessary environment - mkdir -p wmops/logs - job_id=$(python3 ci/get_id_of_last_job_occurence.py $CI_COMMIT_REF_NAME $CI_JOB_NAME) Loading @@ -1331,8 +1328,8 @@ coverage-test-on-main-scheduled: - rm artifacts.zip - rm -rf $public_dir .complexity-measurements-prepare-artifacts: &complexity-measurements-prepare-artifacts # prepare artifacts -> move to public directory .complexity-measurements-prepare-artifacts: &complexity-measurements-prepare-artifacts # prepare artifacts -> move to public directory - public_dir="$CI_JOB_NAME-public" - mkdir $public_dir - mv -f wmops/log_*_all.txt wmops/*.js ${public_dir}/ Loading apps/decoder.c +1090 −106 File changed.Preview size limit exceeded, changes collapsed. Show changes apps/renderer.c +211 −50 Original line number Diff line number Diff line Loading @@ -777,7 +777,12 @@ int main( int32_t delayTimeScale = 0; int16_t i, numChannels; ivas_error error = IVAS_ERR_OK; #ifndef API_5MS IVAS_VECTOR3 Pos[RENDERER_HEAD_POSITIONS_PER_FRAME]; #endif #ifdef API_5MS bool splitBinNeedsNewFrame = true; #endif #ifdef WMOPS reset_wmops(); Loading Loading @@ -996,7 +1001,13 @@ int main( #ifdef SPLIT_REND_WITH_HEAD_ROT } #endif const int16_t frameSize_smpls = (int16_t) ( 20 * args.sampleRate / 1000 ); const int16_t frameSize_smpls = (int16_t) ( #ifdef API_5MS ( args.framing_5ms ? 5 : 20 ) #else 20 #endif * args.sampleRate / 1000 ); IVAS_REND_InputId mcIds[RENDERER_MAX_MC_INPUTS] = { 0 }; IVAS_REND_InputId ismIds[RENDERER_MAX_ISM_INPUTS] = { 0 }; Loading @@ -1006,7 +1017,12 @@ int main( IVAS_REND_InputId splitBinIds[RENDERER_MAX_BIN_INPUTS] = { 0 }; #endif if ( ( error = IVAS_REND_Open( &hIvasRend, args.sampleRate, args.outConfig.audioConfig, args.nonDiegeticPan, args.nonDiegeticPanGain ) ) != IVAS_ERR_OK ) if ( ( error = IVAS_REND_Open( &hIvasRend, args.sampleRate, args.outConfig.audioConfig, args.nonDiegeticPan, args.nonDiegeticPanGain #ifdef API_5MS , ( args.framing_5ms ) ? 1 : 4 #endif ) ) != IVAS_ERR_OK ) { fprintf( stderr, "Error opening renderer handle: %s\n", ivas_error_to_string( error ) ); exit( -1 ); Loading Loading @@ -1408,6 +1424,11 @@ int main( bitsBuffer.config.bitsRead = 0; bitsBuffer.config.bitsWritten = 0; bitsBuffer.config.bufLenInBytes = bitsBufferSize; bitsBuffer.config.codec = IVAS_SPLIT_REND_CODEC_DEFAULT; bitsBuffer.config.poseCorrection = IVAS_SPLIT_REND_POSE_CORRECTION_MODE_NONE; #ifdef API_5MS bitsBuffer.config.codec_frame_size_ms = 20; #endif #else inFloatBuffer = malloc( inBufferSize * sizeof( float ) ); outInt16Buffer = malloc( outBufferSize * sizeof( int16_t ) ); Loading Loading @@ -1437,19 +1458,35 @@ int main( fprintf( stdout, "\n\n-- Start the renderer (quiet mode) --\n\n" ); } #ifdef API_5MS ObjectPositionBuffer mtdBuffer; #endif while ( 1 ) { int16_t num_in_channels; num_in_channels = inBuffer.config.numChannels; #ifdef API_5MS const bool isCurrentFrameMultipleOf20ms = !args.framing_5ms || frame % 4 == 0; #endif #ifdef SPLIT_REND_WITH_HEAD_ROT numSamplesRead = 0; if ( ( hSplitRendFileReadWrite != NULL ) && is_split_post_rend_mode( &args ) ) if ( ( hSplitRendFileReadWrite != NULL ) && is_split_post_rend_mode( &args ) #ifdef API_5MS && splitBinNeedsNewFrame #endif ) { ivas_error error_tmp; numSamplesRead = (int16_t) inBufferSize; error_tmp = split_rend_read_bits_from_file( hSplitRendFileReadWrite, bitsBuffer.bits, &bitsBuffer.config.bitsRead, &bitsBuffer.config.bitsWritten, &bitsBuffer.config.codec, &bitsBuffer.config.poseCorrection ); &bitsBuffer.config.codec, &bitsBuffer.config.poseCorrection #ifdef API_5MS , &bitsBuffer.config.codec_frame_size_ms #endif ); if ( error_tmp != IVAS_ERR_OK ) { if ( error_tmp == IVAS_ERR_END_OF_FILE ) Loading Loading @@ -1477,7 +1514,11 @@ int main( } #endif if ( numSamplesRead == 0 ) if ( numSamplesRead == 0 #ifdef API_5MS && splitBinNeedsNewFrame #endif ) { /* end of input data */ break; Loading @@ -1491,7 +1532,19 @@ int main( #endif ); int16_t num_subframes, sf_idx; #ifdef API_5MS num_subframes = ( args.framing_5ms ) ? 1 : IVAS_MAX_PARAM_SPATIAL_SUBFRAMES; #else num_subframes = IVAS_MAX_PARAM_SPATIAL_SUBFRAMES; #endif #ifdef API_5MS if ( isCurrentFrameMultipleOf20ms ) { #else ObjectPositionBuffer mtdBuffer; #endif IsmPositionProvider_getNextFrame( positionProvider, &mtdBuffer ); if ( referenceVectorReader != NULL ) Loading @@ -1511,23 +1564,56 @@ int main( /* Read from reference rotation trajectory file if specified */ if ( referenceRotReader != NULL ) { IVAS_QUATERNION quaternion; if ( ( error = HeadRotationFileReading( referenceRotReader, &quaternion, NULL ) ) != IVAS_ERR_OK ) for ( sf_idx = 0; sf_idx < num_subframes; sf_idx++ ) { IVAS_QUATERNION quaternions[IVAS_MAX_PARAM_SPATIAL_SUBFRAMES]; if ( ( error = HeadRotationFileReading( referenceRotReader, &quaternions[sf_idx], NULL ) ) != IVAS_ERR_OK ) { fprintf( stderr, "Error in Head Rotation File Reading: %s\n", ivas_error_to_string( error ) ); exit( -1 ); } if ( ( error = IVAS_REND_SetReferenceRotation( hIvasRend, quaternion ) ) != IVAS_ERR_OK ) if ( ( error = IVAS_REND_SetReferenceRotation( hIvasRend, quaternions[sf_idx] ) ) != IVAS_ERR_OK ) { fprintf( stderr, "Error setting Reference Rotation: %s\n", ivas_error_to_string( error ) ); exit( -1 ); } } } #ifdef API_5MS } #endif /* Read from head rotation trajectory file if specified */ if ( headRotReader != NULL ) { #ifdef API_5MS for ( sf_idx = 0; sf_idx < num_subframes; sf_idx++ ) { IVAS_QUATERNION headRot; IVAS_VECTOR3 Pos; if ( ( error = HeadRotationFileReading( headRotReader, &headRot, &Pos ) ) != IVAS_ERR_OK ) { fprintf( stderr, "Error in Head Rotation File Reading: %s\n", ivas_error_to_string( error ) ); exit( -1 ); } if ( ( error = IVAS_REND_SetHeadRotation( hIvasRend, headRot, Pos #ifdef SPLIT_REND_WITH_HEAD_ROT , DEFAULT_AXIS #endif #ifdef API_5MS , sf_idx #endif ) ) != IVAS_ERR_OK ) { fprintf( stderr, "Error setting Head Rotation: %s\n", ivas_error_to_string( error ) ); exit( -1 ); } } #else IVAS_QUATERNION quatBuffer[RENDERER_HEAD_POSITIONS_PER_FRAME]; for ( i = 0; i < RENDERER_HEAD_POSITIONS_PER_FRAME; i++ ) Loading @@ -1549,9 +1635,17 @@ int main( fprintf( stderr, "Error setting Head Rotation: %s\n", ivas_error_to_string( error ) ); exit( -1 ); } #endif } else { #ifdef API_5MS if ( ( error = IVAS_REND_DisableHeadRotation( hIvasRend ) ) != IVAS_ERR_OK ) { fprintf( stderr, "Error disabling head rotation: %s\n", ivas_error_to_string( error ) ); exit( -1 ); } #else /* API_5MS */ error = IVAS_REND_SetHeadRotation( hIvasRend, NULL, NULL #ifdef SPLIT_REND_WITH_HEAD_ROT , Loading @@ -1563,11 +1657,16 @@ int main( fprintf( stderr, "Error setting Head Rotation: %s\n", ivas_error_to_string( error ) ); exit( -1 ); } #endif /* API_5MS */ } #ifdef SPLIT_REND_WITH_HEAD_ROT /* Read from split renderer bfi file if specified */ if ( splitRendBFIReader != NULL ) if ( splitRendBFIReader != NULL #ifdef API_5MS && splitBinNeedsNewFrame #endif ) { int16_t bfi; SplitRendBFIFileReading( splitRendBFIReader, &bfi ); Loading @@ -1578,13 +1677,16 @@ int main( /* Read from external orientation file if specified */ if ( externalOrientationFileReader != NULL ) { IVAS_QUATERNION quatBuffer[RENDERER_HEAD_POSITIONS_PER_FRAME]; int8_t enableHeadRotation[RENDERER_HEAD_POSITIONS_PER_FRAME]; int8_t enableExternalOrientation[RENDERER_HEAD_POSITIONS_PER_FRAME]; IVAS_QUATERNION quatBuffer[IVAS_MAX_PARAM_SPATIAL_SUBFRAMES]; int8_t enableHeadRotation[IVAS_MAX_PARAM_SPATIAL_SUBFRAMES]; int8_t enableExternalOrientation[IVAS_MAX_PARAM_SPATIAL_SUBFRAMES]; int8_t enableRotationInterpolation[IVAS_MAX_PARAM_SPATIAL_SUBFRAMES]; int16_t numFramesToTargetOrientation[IVAS_MAX_PARAM_SPATIAL_SUBFRAMES]; #ifdef API_5MS for ( sf_idx = 0; sf_idx < num_subframes; sf_idx++ ) #else for ( i = 0; i < RENDERER_HEAD_POSITIONS_PER_FRAME; i++ ) #endif { if ( ( error = ExternalOrientationFileReading( externalOrientationFileReader, &quatBuffer[i], &enableHeadRotation[i], &enableExternalOrientation[i], &enableRotationInterpolation[i], &numFramesToTargetOrientation[i] ) ) != IVAS_ERR_OK ) { Loading @@ -1592,12 +1694,27 @@ int main( exit( -1 ); } } #ifdef API_5MS for ( sf_idx = 0; sf_idx < num_subframes; sf_idx++ ) { if ( ( error = IVAS_REND_SetExternalOrientation( hIvasRend, &quatBuffer[sf_idx], enableHeadRotation[sf_idx], enableExternalOrientation[sf_idx], enableRotationInterpolation[sf_idx], numFramesToTargetOrientation[sf_idx] #ifdef API_5MS , sf_idx #endif ) ) != IVAS_ERR_OK ) { fprintf( stderr, "Error setting External Orientation: %s\n", ivas_error_to_string( error ) ); exit( -1 ); } } #else if ( ( error = IVAS_REND_SetExternalOrientation( hIvasRend, quatBuffer, enableHeadRotation, enableExternalOrientation, enableRotationInterpolation, numFramesToTargetOrientation ) ) != IVAS_ERR_OK ) { fprintf( stderr, "Error setting External Orientation: %s\n", ivas_error_to_string( error ) ); exit( -1 ); } #endif } /* Combine external orientations and head rotation */ Loading Loading @@ -1711,6 +1828,10 @@ int main( #ifdef SPLIT_REND_WITH_HEAD_ROT for ( i = 0; i < args.inConfig.numBinBuses; ++i ) { #ifdef API_5MS if ( splitBinNeedsNewFrame ) { #endif if ( ( error = IVAS_REND_GetInputNumChannels( hIvasRend, splitBinIds[i], &numChannels ) ) != IVAS_ERR_OK ) { fprintf( stderr, "Error: %s\n", ivas_error_to_string( error ) ); Loading @@ -1723,13 +1844,45 @@ int main( fprintf( stderr, "Error: %s\n", ivas_error_to_string( error ) ); exit( -1 ); } if ( ( error = IVAS_REND_FeedSplitBinauralBitstream( hIvasRend, splitBinIds[i], &bitsBuffer ) ) != IVAS_ERR_OK ) { fprintf( stderr, "Error: %s\n", ivas_error_to_string( error ) ); exit( -1 ); } #ifdef API_5MS } #endif } #endif #if defined API_5MS && defined SPLIT_REND_WITH_HEAD_ROT if ( args.inConfig.numBinBuses != 0 ) { if ( ( error = IVAS_REND_GetSplitBinauralSamples( hIvasRend, outBuffer, &splitBinNeedsNewFrame ) ) != IVAS_ERR_OK ) { fprintf( stderr, "Error: %s\n", ivas_error_to_string( error ) ); exit( -1 ); } } else if ( args.outConfig.audioConfig == AUDIO_CONFIG_BINAURAL_SPLIT_CODED || args.outConfig.audioConfig == AUDIO_CONFIG_BINAURAL_SPLIT_PCM ) { if ( ( error = IVAS_REND_GetSplitBinauralBitstream( hIvasRend, outBuffer, &bitsBuffer ) ) != IVAS_ERR_OK ) { fprintf( stderr, "Error: %s\n", ivas_error_to_string( error ) ); exit( -1 ); } } else { #endif if ( ( error = IVAS_REND_GetSamples( hIvasRend, outBuffer #ifndef API_5MS #ifdef SPLIT_REND_WITH_HEAD_ROT , &bitsBuffer #endif #endif ) ) != IVAS_ERR_OK ) { Loading @@ -1740,6 +1893,9 @@ int main( #endif exit( -1 ); } #if defined API_5MS && defined SPLIT_REND_WITH_HEAD_ROT } #endif int16_t num_out_channels; num_out_channels = outBuffer.config.numChannels; Loading Loading @@ -1788,7 +1944,12 @@ int main( if ( ( hSplitRendFileReadWrite != NULL ) && is_split_pre_rend_mode( &args ) ) { if ( split_rend_write_bitstream_to_file( hSplitRendFileReadWrite, bitsBuffer.bits, &bitsBuffer.config.bitsRead, &bitsBuffer.config.bitsWritten, bitsBuffer.config.codec, bitsBuffer.config.poseCorrection ) != IVAS_ERR_OK ) bitsBuffer.config.codec, bitsBuffer.config.poseCorrection #ifdef API_5MS , bitsBuffer.config.codec_frame_size_ms #endif ) != IVAS_ERR_OK ) { fprintf( stderr, "\nUnable to write to bitstream file!\n" ); exit( -1 ); Loading Loading @@ -1929,6 +2090,7 @@ int main( } #endif if ( args.inConfig.numAudioObjects != 0 && ( args.outConfig.audioConfig == AUDIO_CONFIG_BINAURAL || args.outConfig.audioConfig == 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 ) ) ); Loading Loading @@ -2695,7 +2857,6 @@ static void parseOption( args->directivityPatternId[i] = (int16_t) strtol( optionValues[i], NULL, 10 ); } break; case CmdLnOptionId_acousticEnvironmentId: assert( numOptionValues == 1 ); args->acousticEnvironmentId = (int16_t) strtol( optionValues[0], NULL, 10 ); Loading lib_com/common_api_types.h +10 −1 Original line number Diff line number Diff line Loading @@ -55,8 +55,11 @@ #define IVAS_CLDFB_NO_CHANNELS_MAX 60 #define IVAS_MAX_INPUT_LFE_CHANNELS 4 #define IVAS_MAX_PARAM_SPATIAL_SUBFRAMES 4 #ifndef API_5MS #define RENDERER_HEAD_POSITIONS_PER_FRAME 4 // ToDo: should it be harmonized with IVAS_MAX_PARAM_SPATIAL_SUBFRAMES? #endif #define QC_ABS_COEFF 6 #ifdef SPLIT_REND_WITH_HEAD_ROT Loading Loading @@ -178,6 +181,9 @@ typedef struct ivas_split_rend_bits_t int32_t buf_len; /*size of bits_buf in bytes. This field should be set by allocator of bits_buf*/ int32_t bits_written; int32_t bits_read; #ifdef API_5MS int16_t codec_frame_size_ms; #endif IVAS_SPLIT_REND_CODEC codec; IVAS_SPLIT_REND_POSE_CORRECTION_MODE pose_correction; } ivas_split_rend_bits_t, IVAS_SPLIT_REND_BITS_DATA, *IVAS_SPLIT_REND_BITS_HANDLE; Loading Loading @@ -260,6 +266,9 @@ typedef struct _IVAS_SPLIT_REND_CONFIG 3 - (3dof correction. By default YAW, PITCH and ROLL correction) */ int16_t codec_delay_ms; /*PLACEHOLDER (currently being ignored) : look ahead delay of the codec that is used to code BIN signal output of pre-renderer*/ #ifdef API_5MS int16_t codec_frame_size_ms; /*Codec frame size in milliseconds, only relevant with LC3plus */ #endif IVAS_SPLIT_REND_POSE_CORRECTION_MODE poseCorrectionMode; IVAS_SPLIT_REND_CODEC codec; IVAS_SPLIT_REND_RENDERER_SELECTION rendererSelection; Loading Loading
.gitignore +3 −3 Original line number Diff line number Diff line Loading @@ -52,9 +52,9 @@ scripts/testv/stvOMASA_*.csv scripts/testv/stvOMASA_2ISM_1MASA1TC48c.wav scripts/testv/stvOMASA_3ISM_1MASA1TC48c.wav # default reference binary name IVAS_cod_ref IVAS_dec_ref IVAS_rend_ref IVAS_cod_ref* IVAS_dec_ref* IVAS_rend_ref* # Python files that pop up when running scripts __pycache__/ Loading
.gitlab-ci.yml +32 −35 Original line number Diff line number Diff line Loading @@ -68,12 +68,12 @@ stages: # needed when depth is lower than the number of commits in the branch - git fetch origin $CI_MERGE_REQUEST_TARGET_BRANCH_NAME:$CI_MERGE_REQUEST_TARGET_BRANCH_NAME .mr-get-target-commit: &mr-get-target-commit # compare to last target branch commit before pipeline was created .mr-get-target-commit: &mr-get-target-commit # compare to last target branch commit before pipeline was created - target_commit=$(git log $CI_MERGE_REQUEST_TARGET_BRANCH_NAME -1 --oneline --before=${CI_PIPELINE_CREATED_AT} --format=%H) .check-for-testvectors: &check-for-testvectors # check if the testvector files specified in scripts/config/ci_linux*.json are present .check-for-testvectors: &check-for-testvectors # check if the testvector files specified in scripts/config/ci_linux*.json are present - python3 -m pytest ci/test_vectors_available.py .merge-request-comparison-setup-codec: Loading Loading @@ -162,7 +162,6 @@ stages: rules: - if: $CI_PIPELINE_SOURCE == 'schedule' && $CI_COMMIT_BRANCH == $CI_DEFAULT_BRANCH # templates to define stages and platforms .test-job-linux: tags: Loading Loading @@ -202,7 +201,6 @@ stages: exit_codes: - 123 # --------------------------------------------------------------- # .pre jobs for setting up things # --------------------------------------------------------------- Loading @@ -225,8 +223,6 @@ uninterruptible: tags: - ivas-linux # --------------------------------------------------------------- # Validation jobs # --------------------------------------------------------------- Loading @@ -245,7 +241,6 @@ check-if-branch-is-up-to-date-with-main: - echo $commits_behind_count - if [ $commits_behind_count -eq 0 ]; then exit 0; else exit 1; fi; # --------------------------------------------------------------- # Build jobs # --------------------------------------------------------------- Loading Loading @@ -526,8 +521,7 @@ renderer-pytest-on-merge-request: # write to temporary file as workaround for failures observed with piping echo - echo $CI_MERGE_REQUEST_TITLE > tmp.txt - non_be_flag=$(grep -c --ignore-case "\[rend\(erer\)*[ -]*non[ -]*be\]" tmp.txt) || true # TODO: needs splitting the test between reference and cut generation #- ref_using_main=$(echo $CI_MERGE_REQUEST_TITLE | grep -c --ignore-case "\[ref[ -]*using[ -]*main\]") || true - ref_using_main=$(grep -c --ignore-case "\[ref[ -]*using[ -]*main\]" tmp.txt) || true # store the current commit hash - source_branch_commit_sha=$(git rev-parse HEAD) Loading @@ -545,6 +539,9 @@ renderer-pytest-on-merge-request: - make clean - make -j IVAS_rend ### Run test using scripts and input from main - if [ $ref_using_main == 1 ]; then git checkout $target_commit; fi # run test - exit_code=0 - python3 -m pytest -q --log-level ERROR -n auto -rA --html=report.html --self-contained-html --junit-xml=report-junit.xml tests/renderer/test_renderer_be_comparison.py || exit_code=$? Loading Loading @@ -605,8 +602,7 @@ split-rendering-pytest-on-merge-request: # write to temporary file as workaround for failures observed with piping echo - echo $CI_MERGE_REQUEST_TITLE > tmp.txt - non_be_flag=$(grep -c --ignore-case "\[split*[ -]*non[ -]*be\]" tmp.txt) || true # TODO: needs splitting the test between reference and cut generation #- ref_using_main=$(echo $CI_MERGE_REQUEST_TITLE | grep -c --ignore-case "\[ref[ -]*using[ -]*main\]") || true - ref_using_main=$(grep -c --ignore-case "\[ref[ -]*using[ -]*main\]" tmp.txt) || true # store the current commit hash - source_branch_commit_sha=$(git rev-parse HEAD) Loading @@ -629,6 +625,9 @@ split-rendering-pytest-on-merge-request: - *enable-split-rendering - make -j INCLUDE_SPLIT=1 ### Run test using scripts and input from main - if [ $ref_using_main == 1 ]; then git checkout $target_commit; fi # run test - exit_code=0 - python3 -m pytest -q --log-level ERROR -n auto -rA --html=report.html --self-contained-html --junit-xml=report-junit.xml tests/split_rendering/test_split_rendering_be_comparison.py || exit_code=$? Loading Loading @@ -807,7 +806,7 @@ clang-format-check: - tmp-formatting-fix/ when: on_failure name: "$ARTIFACT_BASE_NAME" expose_as: 'formatting patch' expose_as: "formatting patch" # check for crashes if first received frame on decoder side is an SID check-first-frame-is-sid: Loading @@ -829,11 +828,13 @@ check-first-frame-is-sid: # TODO: for some MASA modes, we currently do not have testvectors that actually trigger DTX # SBA is run separately to use shorter part of file - exit_code_no_sba=0 - exit_code_sba=0 - modes=$(scripts/runIvasCodec.py -l | grep dtx | grep -v MASA | grep -v SBA) - scripts/runIvasCodec.py -p scripts/config/ci_linux_sidstart_test.json -m $modes -s --bs_length 500 -U 0:20 || exit_code_no_sba=$? - modes=$(scripts/runIvasCodec.py -l | grep dtx | grep SBA) - scripts/runIvasCodec.py -p scripts/config/ci_linux_sidstart_test.json -m $modes -s --bs_length 500 -U 70:80 || exit_code_sba=$? - if [ $exit_code_no_sba != 0 || $exit_code_sba != 0 ]; then exit 1; fi - if [ $exit_code_no_sba -ne 0 ] || [ $exit_code_sba -ne 0 ]; then exit 1; fi artifacts: paths: - out/logs Loading Loading @@ -896,7 +897,6 @@ lc3plus-ensure-no-code-changes: - modified_files=$(git status -s) - if [[ $modified_files ]]; then printf 'LC3plus codebase was modified!\n\n'"$modified_files"'\n\n'; exit $EXIT_CODE_FAIL; fi # --------------------------------------------------------------- # Test jobs for main branch # --------------------------------------------------------------- Loading Loading @@ -1060,7 +1060,6 @@ codec-comparison-on-main-push: extends: - .sanitizer-test-template sanitizer-test-mono: extends: .sanitizer-test-schedule-A rules: Loading Loading @@ -1275,7 +1274,6 @@ sanitizer-test-ism+4: - *update-ltv-repo - python3 ci/run_scheduled_sanitizer_test.py ISM+4 $OUT_FORMATS_CHANNEL_BASED $OUT_FORMATS_SCENE_BASED $OUT_FORMATS_BINAURAL EXT --tests $SANITIZER_TESTS # GCOV/LCOV coverage analysis of self_test suite coverage-test-on-main-scheduled: extends: Loading Loading @@ -1310,13 +1308,12 @@ coverage-test-on-main-scheduled: - coverage.info - coverage # --------------------------------------------------------------- # Complexity measurement jobs # --------------------------------------------------------------- .complexity-measurements-setup: &complexity-measurements-setup # create necessary environment .complexity-measurements-setup: &complexity-measurements-setup # create necessary environment - mkdir -p wmops/logs - job_id=$(python3 ci/get_id_of_last_job_occurence.py $CI_COMMIT_REF_NAME $CI_JOB_NAME) Loading @@ -1331,8 +1328,8 @@ coverage-test-on-main-scheduled: - rm artifacts.zip - rm -rf $public_dir .complexity-measurements-prepare-artifacts: &complexity-measurements-prepare-artifacts # prepare artifacts -> move to public directory .complexity-measurements-prepare-artifacts: &complexity-measurements-prepare-artifacts # prepare artifacts -> move to public directory - public_dir="$CI_JOB_NAME-public" - mkdir $public_dir - mv -f wmops/log_*_all.txt wmops/*.js ${public_dir}/ Loading
apps/renderer.c +211 −50 Original line number Diff line number Diff line Loading @@ -777,7 +777,12 @@ int main( int32_t delayTimeScale = 0; int16_t i, numChannels; ivas_error error = IVAS_ERR_OK; #ifndef API_5MS IVAS_VECTOR3 Pos[RENDERER_HEAD_POSITIONS_PER_FRAME]; #endif #ifdef API_5MS bool splitBinNeedsNewFrame = true; #endif #ifdef WMOPS reset_wmops(); Loading Loading @@ -996,7 +1001,13 @@ int main( #ifdef SPLIT_REND_WITH_HEAD_ROT } #endif const int16_t frameSize_smpls = (int16_t) ( 20 * args.sampleRate / 1000 ); const int16_t frameSize_smpls = (int16_t) ( #ifdef API_5MS ( args.framing_5ms ? 5 : 20 ) #else 20 #endif * args.sampleRate / 1000 ); IVAS_REND_InputId mcIds[RENDERER_MAX_MC_INPUTS] = { 0 }; IVAS_REND_InputId ismIds[RENDERER_MAX_ISM_INPUTS] = { 0 }; Loading @@ -1006,7 +1017,12 @@ int main( IVAS_REND_InputId splitBinIds[RENDERER_MAX_BIN_INPUTS] = { 0 }; #endif if ( ( error = IVAS_REND_Open( &hIvasRend, args.sampleRate, args.outConfig.audioConfig, args.nonDiegeticPan, args.nonDiegeticPanGain ) ) != IVAS_ERR_OK ) if ( ( error = IVAS_REND_Open( &hIvasRend, args.sampleRate, args.outConfig.audioConfig, args.nonDiegeticPan, args.nonDiegeticPanGain #ifdef API_5MS , ( args.framing_5ms ) ? 1 : 4 #endif ) ) != IVAS_ERR_OK ) { fprintf( stderr, "Error opening renderer handle: %s\n", ivas_error_to_string( error ) ); exit( -1 ); Loading Loading @@ -1408,6 +1424,11 @@ int main( bitsBuffer.config.bitsRead = 0; bitsBuffer.config.bitsWritten = 0; bitsBuffer.config.bufLenInBytes = bitsBufferSize; bitsBuffer.config.codec = IVAS_SPLIT_REND_CODEC_DEFAULT; bitsBuffer.config.poseCorrection = IVAS_SPLIT_REND_POSE_CORRECTION_MODE_NONE; #ifdef API_5MS bitsBuffer.config.codec_frame_size_ms = 20; #endif #else inFloatBuffer = malloc( inBufferSize * sizeof( float ) ); outInt16Buffer = malloc( outBufferSize * sizeof( int16_t ) ); Loading Loading @@ -1437,19 +1458,35 @@ int main( fprintf( stdout, "\n\n-- Start the renderer (quiet mode) --\n\n" ); } #ifdef API_5MS ObjectPositionBuffer mtdBuffer; #endif while ( 1 ) { int16_t num_in_channels; num_in_channels = inBuffer.config.numChannels; #ifdef API_5MS const bool isCurrentFrameMultipleOf20ms = !args.framing_5ms || frame % 4 == 0; #endif #ifdef SPLIT_REND_WITH_HEAD_ROT numSamplesRead = 0; if ( ( hSplitRendFileReadWrite != NULL ) && is_split_post_rend_mode( &args ) ) if ( ( hSplitRendFileReadWrite != NULL ) && is_split_post_rend_mode( &args ) #ifdef API_5MS && splitBinNeedsNewFrame #endif ) { ivas_error error_tmp; numSamplesRead = (int16_t) inBufferSize; error_tmp = split_rend_read_bits_from_file( hSplitRendFileReadWrite, bitsBuffer.bits, &bitsBuffer.config.bitsRead, &bitsBuffer.config.bitsWritten, &bitsBuffer.config.codec, &bitsBuffer.config.poseCorrection ); &bitsBuffer.config.codec, &bitsBuffer.config.poseCorrection #ifdef API_5MS , &bitsBuffer.config.codec_frame_size_ms #endif ); if ( error_tmp != IVAS_ERR_OK ) { if ( error_tmp == IVAS_ERR_END_OF_FILE ) Loading Loading @@ -1477,7 +1514,11 @@ int main( } #endif if ( numSamplesRead == 0 ) if ( numSamplesRead == 0 #ifdef API_5MS && splitBinNeedsNewFrame #endif ) { /* end of input data */ break; Loading @@ -1491,7 +1532,19 @@ int main( #endif ); int16_t num_subframes, sf_idx; #ifdef API_5MS num_subframes = ( args.framing_5ms ) ? 1 : IVAS_MAX_PARAM_SPATIAL_SUBFRAMES; #else num_subframes = IVAS_MAX_PARAM_SPATIAL_SUBFRAMES; #endif #ifdef API_5MS if ( isCurrentFrameMultipleOf20ms ) { #else ObjectPositionBuffer mtdBuffer; #endif IsmPositionProvider_getNextFrame( positionProvider, &mtdBuffer ); if ( referenceVectorReader != NULL ) Loading @@ -1511,23 +1564,56 @@ int main( /* Read from reference rotation trajectory file if specified */ if ( referenceRotReader != NULL ) { IVAS_QUATERNION quaternion; if ( ( error = HeadRotationFileReading( referenceRotReader, &quaternion, NULL ) ) != IVAS_ERR_OK ) for ( sf_idx = 0; sf_idx < num_subframes; sf_idx++ ) { IVAS_QUATERNION quaternions[IVAS_MAX_PARAM_SPATIAL_SUBFRAMES]; if ( ( error = HeadRotationFileReading( referenceRotReader, &quaternions[sf_idx], NULL ) ) != IVAS_ERR_OK ) { fprintf( stderr, "Error in Head Rotation File Reading: %s\n", ivas_error_to_string( error ) ); exit( -1 ); } if ( ( error = IVAS_REND_SetReferenceRotation( hIvasRend, quaternion ) ) != IVAS_ERR_OK ) if ( ( error = IVAS_REND_SetReferenceRotation( hIvasRend, quaternions[sf_idx] ) ) != IVAS_ERR_OK ) { fprintf( stderr, "Error setting Reference Rotation: %s\n", ivas_error_to_string( error ) ); exit( -1 ); } } } #ifdef API_5MS } #endif /* Read from head rotation trajectory file if specified */ if ( headRotReader != NULL ) { #ifdef API_5MS for ( sf_idx = 0; sf_idx < num_subframes; sf_idx++ ) { IVAS_QUATERNION headRot; IVAS_VECTOR3 Pos; if ( ( error = HeadRotationFileReading( headRotReader, &headRot, &Pos ) ) != IVAS_ERR_OK ) { fprintf( stderr, "Error in Head Rotation File Reading: %s\n", ivas_error_to_string( error ) ); exit( -1 ); } if ( ( error = IVAS_REND_SetHeadRotation( hIvasRend, headRot, Pos #ifdef SPLIT_REND_WITH_HEAD_ROT , DEFAULT_AXIS #endif #ifdef API_5MS , sf_idx #endif ) ) != IVAS_ERR_OK ) { fprintf( stderr, "Error setting Head Rotation: %s\n", ivas_error_to_string( error ) ); exit( -1 ); } } #else IVAS_QUATERNION quatBuffer[RENDERER_HEAD_POSITIONS_PER_FRAME]; for ( i = 0; i < RENDERER_HEAD_POSITIONS_PER_FRAME; i++ ) Loading @@ -1549,9 +1635,17 @@ int main( fprintf( stderr, "Error setting Head Rotation: %s\n", ivas_error_to_string( error ) ); exit( -1 ); } #endif } else { #ifdef API_5MS if ( ( error = IVAS_REND_DisableHeadRotation( hIvasRend ) ) != IVAS_ERR_OK ) { fprintf( stderr, "Error disabling head rotation: %s\n", ivas_error_to_string( error ) ); exit( -1 ); } #else /* API_5MS */ error = IVAS_REND_SetHeadRotation( hIvasRend, NULL, NULL #ifdef SPLIT_REND_WITH_HEAD_ROT , Loading @@ -1563,11 +1657,16 @@ int main( fprintf( stderr, "Error setting Head Rotation: %s\n", ivas_error_to_string( error ) ); exit( -1 ); } #endif /* API_5MS */ } #ifdef SPLIT_REND_WITH_HEAD_ROT /* Read from split renderer bfi file if specified */ if ( splitRendBFIReader != NULL ) if ( splitRendBFIReader != NULL #ifdef API_5MS && splitBinNeedsNewFrame #endif ) { int16_t bfi; SplitRendBFIFileReading( splitRendBFIReader, &bfi ); Loading @@ -1578,13 +1677,16 @@ int main( /* Read from external orientation file if specified */ if ( externalOrientationFileReader != NULL ) { IVAS_QUATERNION quatBuffer[RENDERER_HEAD_POSITIONS_PER_FRAME]; int8_t enableHeadRotation[RENDERER_HEAD_POSITIONS_PER_FRAME]; int8_t enableExternalOrientation[RENDERER_HEAD_POSITIONS_PER_FRAME]; IVAS_QUATERNION quatBuffer[IVAS_MAX_PARAM_SPATIAL_SUBFRAMES]; int8_t enableHeadRotation[IVAS_MAX_PARAM_SPATIAL_SUBFRAMES]; int8_t enableExternalOrientation[IVAS_MAX_PARAM_SPATIAL_SUBFRAMES]; int8_t enableRotationInterpolation[IVAS_MAX_PARAM_SPATIAL_SUBFRAMES]; int16_t numFramesToTargetOrientation[IVAS_MAX_PARAM_SPATIAL_SUBFRAMES]; #ifdef API_5MS for ( sf_idx = 0; sf_idx < num_subframes; sf_idx++ ) #else for ( i = 0; i < RENDERER_HEAD_POSITIONS_PER_FRAME; i++ ) #endif { if ( ( error = ExternalOrientationFileReading( externalOrientationFileReader, &quatBuffer[i], &enableHeadRotation[i], &enableExternalOrientation[i], &enableRotationInterpolation[i], &numFramesToTargetOrientation[i] ) ) != IVAS_ERR_OK ) { Loading @@ -1592,12 +1694,27 @@ int main( exit( -1 ); } } #ifdef API_5MS for ( sf_idx = 0; sf_idx < num_subframes; sf_idx++ ) { if ( ( error = IVAS_REND_SetExternalOrientation( hIvasRend, &quatBuffer[sf_idx], enableHeadRotation[sf_idx], enableExternalOrientation[sf_idx], enableRotationInterpolation[sf_idx], numFramesToTargetOrientation[sf_idx] #ifdef API_5MS , sf_idx #endif ) ) != IVAS_ERR_OK ) { fprintf( stderr, "Error setting External Orientation: %s\n", ivas_error_to_string( error ) ); exit( -1 ); } } #else if ( ( error = IVAS_REND_SetExternalOrientation( hIvasRend, quatBuffer, enableHeadRotation, enableExternalOrientation, enableRotationInterpolation, numFramesToTargetOrientation ) ) != IVAS_ERR_OK ) { fprintf( stderr, "Error setting External Orientation: %s\n", ivas_error_to_string( error ) ); exit( -1 ); } #endif } /* Combine external orientations and head rotation */ Loading Loading @@ -1711,6 +1828,10 @@ int main( #ifdef SPLIT_REND_WITH_HEAD_ROT for ( i = 0; i < args.inConfig.numBinBuses; ++i ) { #ifdef API_5MS if ( splitBinNeedsNewFrame ) { #endif if ( ( error = IVAS_REND_GetInputNumChannels( hIvasRend, splitBinIds[i], &numChannels ) ) != IVAS_ERR_OK ) { fprintf( stderr, "Error: %s\n", ivas_error_to_string( error ) ); Loading @@ -1723,13 +1844,45 @@ int main( fprintf( stderr, "Error: %s\n", ivas_error_to_string( error ) ); exit( -1 ); } if ( ( error = IVAS_REND_FeedSplitBinauralBitstream( hIvasRend, splitBinIds[i], &bitsBuffer ) ) != IVAS_ERR_OK ) { fprintf( stderr, "Error: %s\n", ivas_error_to_string( error ) ); exit( -1 ); } #ifdef API_5MS } #endif } #endif #if defined API_5MS && defined SPLIT_REND_WITH_HEAD_ROT if ( args.inConfig.numBinBuses != 0 ) { if ( ( error = IVAS_REND_GetSplitBinauralSamples( hIvasRend, outBuffer, &splitBinNeedsNewFrame ) ) != IVAS_ERR_OK ) { fprintf( stderr, "Error: %s\n", ivas_error_to_string( error ) ); exit( -1 ); } } else if ( args.outConfig.audioConfig == AUDIO_CONFIG_BINAURAL_SPLIT_CODED || args.outConfig.audioConfig == AUDIO_CONFIG_BINAURAL_SPLIT_PCM ) { if ( ( error = IVAS_REND_GetSplitBinauralBitstream( hIvasRend, outBuffer, &bitsBuffer ) ) != IVAS_ERR_OK ) { fprintf( stderr, "Error: %s\n", ivas_error_to_string( error ) ); exit( -1 ); } } else { #endif if ( ( error = IVAS_REND_GetSamples( hIvasRend, outBuffer #ifndef API_5MS #ifdef SPLIT_REND_WITH_HEAD_ROT , &bitsBuffer #endif #endif ) ) != IVAS_ERR_OK ) { Loading @@ -1740,6 +1893,9 @@ int main( #endif exit( -1 ); } #if defined API_5MS && defined SPLIT_REND_WITH_HEAD_ROT } #endif int16_t num_out_channels; num_out_channels = outBuffer.config.numChannels; Loading Loading @@ -1788,7 +1944,12 @@ int main( if ( ( hSplitRendFileReadWrite != NULL ) && is_split_pre_rend_mode( &args ) ) { if ( split_rend_write_bitstream_to_file( hSplitRendFileReadWrite, bitsBuffer.bits, &bitsBuffer.config.bitsRead, &bitsBuffer.config.bitsWritten, bitsBuffer.config.codec, bitsBuffer.config.poseCorrection ) != IVAS_ERR_OK ) bitsBuffer.config.codec, bitsBuffer.config.poseCorrection #ifdef API_5MS , bitsBuffer.config.codec_frame_size_ms #endif ) != IVAS_ERR_OK ) { fprintf( stderr, "\nUnable to write to bitstream file!\n" ); exit( -1 ); Loading Loading @@ -1929,6 +2090,7 @@ int main( } #endif if ( args.inConfig.numAudioObjects != 0 && ( args.outConfig.audioConfig == AUDIO_CONFIG_BINAURAL || args.outConfig.audioConfig == 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 ) ) ); Loading Loading @@ -2695,7 +2857,6 @@ static void parseOption( args->directivityPatternId[i] = (int16_t) strtol( optionValues[i], NULL, 10 ); } break; case CmdLnOptionId_acousticEnvironmentId: assert( numOptionValues == 1 ); args->acousticEnvironmentId = (int16_t) strtol( optionValues[0], NULL, 10 ); Loading
lib_com/common_api_types.h +10 −1 Original line number Diff line number Diff line Loading @@ -55,8 +55,11 @@ #define IVAS_CLDFB_NO_CHANNELS_MAX 60 #define IVAS_MAX_INPUT_LFE_CHANNELS 4 #define IVAS_MAX_PARAM_SPATIAL_SUBFRAMES 4 #ifndef API_5MS #define RENDERER_HEAD_POSITIONS_PER_FRAME 4 // ToDo: should it be harmonized with IVAS_MAX_PARAM_SPATIAL_SUBFRAMES? #endif #define QC_ABS_COEFF 6 #ifdef SPLIT_REND_WITH_HEAD_ROT Loading Loading @@ -178,6 +181,9 @@ typedef struct ivas_split_rend_bits_t int32_t buf_len; /*size of bits_buf in bytes. This field should be set by allocator of bits_buf*/ int32_t bits_written; int32_t bits_read; #ifdef API_5MS int16_t codec_frame_size_ms; #endif IVAS_SPLIT_REND_CODEC codec; IVAS_SPLIT_REND_POSE_CORRECTION_MODE pose_correction; } ivas_split_rend_bits_t, IVAS_SPLIT_REND_BITS_DATA, *IVAS_SPLIT_REND_BITS_HANDLE; Loading Loading @@ -260,6 +266,9 @@ typedef struct _IVAS_SPLIT_REND_CONFIG 3 - (3dof correction. By default YAW, PITCH and ROLL correction) */ int16_t codec_delay_ms; /*PLACEHOLDER (currently being ignored) : look ahead delay of the codec that is used to code BIN signal output of pre-renderer*/ #ifdef API_5MS int16_t codec_frame_size_ms; /*Codec frame size in milliseconds, only relevant with LC3plus */ #endif IVAS_SPLIT_REND_POSE_CORRECTION_MODE poseCorrectionMode; IVAS_SPLIT_REND_CODEC codec; IVAS_SPLIT_REND_RENDERER_SELECTION rendererSelection; Loading