Commit 9c320ce3 authored by Archit Tamarapu's avatar Archit Tamarapu
Browse files

Merge branch 'tmu/loudness-measurement' into 'main'

Loudness measurement jobs

See merge request !75
parents f8a9c987 1d1da831
Loading
Loading
Loading
Loading
+3 −1
Original line number Diff line number Diff line
@@ -131,7 +131,9 @@ build-codec-windows-msbuild:
  rules:
    - if: $MANUAL_PIPELINE_TYPE == 'long-term-logs' || $MANUAL_PIPELINE_TYPE == 'backup-long-term-logs' || $MANUAL_PIPELINE_TYPE == 'ivas-conformance-linux' || $UPDATE_PAGES || $MANUAL_PIPELINE_TYPE == 'complexity' || $MEASURE_COMPLEXITY_LINUX
      when: never
    - if: $CI_PIPELINE_SOURCE == 'web'
    - if: $CI_PIPELINE_SOURCE == 'web'  && $MANUAL_PIPELINE_TYPE != 'loudness' &&
        $MANUAL_PIPELINE_TYPE != 'loudness-measurement-only' &&
        $MANUAL_PIPELINE_TYPE != 'loudness-analysis-only'
    - if: $CI_PIPELINE_SOURCE == 'push' && $CI_COMMIT_BRANCH == $CI_DEFAULT_BRANCH
    - if: $CI_PIPELINE_SOURCE == 'merge_request_event'
    - if: $CI_PIPELINE_SOURCE == 'schedule'
+127 −0
Original line number Diff line number Diff line
loudness-measurement:
  tags:
    - processing-scripts-linux

  extends:
    - .test-job-linux-needs-testv-dir

  stage: test
  timeout: 24 hours
  rules:
    - if: $CI_PIPELINE_SOURCE == 'web' && $MANUAL_PIPELINE_TYPE == 'loudness'
    - if: $CI_PIPELINE_SOURCE == 'web' && $MANUAL_PIPELINE_TYPE ==
        'loudness-measurement-only'

  variables:
    FORMAT_LIST: $LOUDNESS_FORMATS
    CONFIG_JSON: $LOUDNESS_CONFIG
    OUT_CONFIGS: $LOUDNESS_OUT_FORMATS
    FLT_SUFFIX: $LOUDNESS_FILTER_SUFFIX
    DEC_OPTS: $LOUDNESS_DEC_OPTS

  allow_failure:
    exit_codes:
      - 123

  script:
    - bash "${CI_PROJECT_DIR}"/ivas-codec-ci/snippets/print-common-info.sh
    - set -x
    - echo "Using formats ${FORMAT_LIST}"
    - echo "Using config ${CONFIG_JSON}"
    - echo "Using output configs ${OUT_CONFIGS}"
    - git clone --single-branch --branch main
      https://gitlab-ci-token:${CI_JOB_TOKEN}@forge.3gpp.org/rep/ivas-codec-pc/ivas-processing-scripts.git
    - |
      if [[ "$CONFIG_JSON" == "scripts/config/ci_linux_ltv.json" ]]; then
        TEMP_LTV_DIR=$(mktemp -d)
        cp -r /usr/local/ltv "${TEMP_LTV_DIR}/"
        sed -i "s|/usr/local/ltv|${TEMP_LTV_DIR}/ltv|g" "${CONFIG_JSON}"
        export LTV_DIR="${TEMP_LTV_DIR}/ltv"
        ./scripts/copy-ltv-metadata.sh
      fi
    - make -j
    - |
      OC_ARG=""
      [ -n "${OUT_CONFIGS}" ] && OC_ARG="--oc ${OUT_CONFIGS}"
      DEC_ARG=""
      [ -n "${DEC_OPTS}" ] && DEC_ARG="-D=${DEC_OPTS}"
      for fmt in ${FORMAT_LIST}; do
        ./scripts/runIvasCodec.py -z console -p "${CONFIG_JSON}" -x "${fmt}_b${FLT_SUFFIX}" ${OC_ARG:+${OC_ARG}} ${DEC_ARG:+"${DEC_ARG}"} | tee -a smoke_test_output.txt
      done
    - ./scripts/get_loudness_data.py ${CONFIG_JSON} --formats ${FORMAT_LIST}

  artifacts:
    name: "loudness-measurements--sha-$CI_COMMIT_SHORT_SHA--results"
    when: always
    expire_in: 2 weeks
    paths:
      - loudness.csv
      - smoke_test_output.txt

    expose_as: "loudness measurements"

loudness-analysis:
  tags:
    - processing-scripts-linux

  extends:
    - .test-job-linux-needs-testv-dir

  stage: compare
  rules:
    - if: $CI_PIPELINE_SOURCE == 'web' && $MANUAL_PIPELINE_TYPE == 'loudness'
    - if: $CI_PIPELINE_SOURCE == 'web' && $MANUAL_PIPELINE_TYPE ==
        'loudness-analysis-only'

  needs:
    - job: loudness-measurement

      artifacts: true
      optional: true
  before_script:
    - !reference [ .test-job-linux-needs-testv-dir, before_script ]
    - |
      if [ ! -f "loudness.csv" ]; then
        echo "No loudness.csv found in current pipeline, fetching from last successful measurement job..."
        
        job_id=$(python3 ci/get_id_of_last_job_occurence.py $CI_COMMIT_REF_NAME "loudness-measurement" $CI_PROJECT_ID --success_only)
        echo "Found job ID: $job_id"
        
        if [ "$JOB_ID_INJECT" != "" ]; then 
          job_id=$JOB_ID_INJECT
          echo "Using injected job ID: $job_id"
        fi
        
        if [ "$job_id" == "-1" ]; then
          echo "ERROR: No successful loudness-measurement job found on branch $CI_COMMIT_REF_NAME"
          exit 1
        fi
        
        # Download and extract artifacts
        curl --silent --show-error --request GET "$CI_API_V4_URL/projects/$CI_PROJECT_ID/jobs/$job_id/artifacts" --output artifacts.zip
        unzip -qq artifacts.zip || true
        
        if [ ! -f "loudness.csv" ]; then
          echo "ERROR: loudness.csv not found in artifacts from job $job_id"
          exit 1
        fi
        
        echo "Successfully fetched loudness.csv from job $job_id"
      else
        echo "loudness.csv found in current pipeline artifacts"
      fi
  script:
    - bash "${CI_PROJECT_DIR}"/ivas-codec-ci/snippets/print-common-info.sh
    - set -x
    - git clone --single-branch --branch main
      https://gitlab-ci-token:${CI_JOB_TOKEN}@forge.3gpp.org/rep/ivas-codec-pc/ivas-processing-scripts.git
    - ./scripts/parse_loudness_data.py

  artifacts:
    name: "loudness-analysis--sha-$CI_COMMIT_SHORT_SHA--results"
    when: always
    expire_in: 2 weeks
    paths:
      - plots/

    expose_as: "loudness analysis results"
+55 −1
Original line number Diff line number Diff line
@@ -3,6 +3,7 @@ include:
  - local: includes/default-variables.yml
  - local: includes/job-templates.yml
  - local: includes/complexity-jobs.yml
  - local: includes/loudness-jobs.yml
  - local: includes/smoke-test.yml
  - local: includes/build-jobs.yml
  - local: includes/rules.yml
@@ -53,6 +54,50 @@ variables:
  COVERAGE_OUTPUT_FILE_MERGED: "coverage-merged.info"
  MAKE_BUILD_LOG_FILE_REFERENCE: "make-build-log-ref"

  LOUDNESS_CONFIG:
    description: "Config JSON file path (needs MANUAL_PIPELINE_TYPE loudness*)"
    value: "scripts/config/ci_loudness_linux.json"
    options:
      - "scripts/config/ci_linux_ltv.json"
      - "scripts/config/ci_linux.json"
      - "scripts/config/ci_loudness_linux.json"
  LOUDNESS_FORMATS:
    description: "Space-separated list of formats to test (needs MANUAL_PIPELINE_TYPE loudness*)"
    value: >
      mono stereo
      MC_5_1 MC_5_1_2 MC_5_1_4 MC_7_1 MC_7_1_4
      ISM1 ISM2 ISM3 ISM4
      FOA HOA2 HOA3
      MASA_1TC MASA_2TC
      OMASA_ISM1_1TC OMASA_ISM2_1TC OMASA_ISM3_1TC OMASA_ISM4_1TC
      OMASA_ISM1_2TC OMASA_ISM2_2TC OMASA_ISM3_2TC OMASA_ISM4_2TC
      OSBA_ISM1_FOA OSBA_ISM2_FOA OSBA_ISM3_FOA OSBA_ISM4_FOA
      OSBA_ISM1_HOA2 OSBA_ISM2_HOA2 OSBA_ISM3_HOA2 OSBA_ISM4_HOA2
      OSBA_ISM1_HOA3 OSBA_ISM2_HOA3 OSBA_ISM3_HOA3 OSBA_ISM4_HOA3
  LOUDNESS_OUT_FORMATS:
      description: "Space-separated lists of output formats to run (needs MANUAL_PIPELINE_TYPE loudness*). Available options: mono stereo 5_1 5_1_2 5_1_4 7_1 7_1_4 FOA HOA2 HOA3 BINAURAL BINAURAL_ROOM_IR BINAURAL_ROOM_REVERB EXT"
      value: ""
  LOUDNESS_DEC_OPTS:
      description: "Decoder options for runIvasCodec.py; will be added with -D='LOUDNESS_DEC_OPTS' (needs MANUAL_PIPELINE_TYPE loudness*)"
      value: ""
  LOUDNESS_FILTER_SUFFIX:
      description: "Additional regex to append to -x argument of runIvasCodec.py (needs MANUAL_PIPELINE_TYPE loudness*)"
      value: '.*'
      options:
        - '.*'
        - '.*_fb_cbr'
        - '.*_swb_cbr'
        - '.*_wb_cbr'
        - '[\d_]*_fb_cbr'
        - '[\d_]*_swb_cbr'
        - '[\d_]*_wb_cbr'
        - '[\d_]*_dtx_fb_cbr'
        - '[\d_]*_dtx_swb_cbr'
        - '[\d_]*_dtx_wb_cbr'
        - '.*_fb_rs'
        - '.*_swb_rs'
        - '.*_wb_rs'

# This sets when pipelines are created. Jobs have more specific rules to restrict them.
workflow:
  name: "$IVAS_PIPELINE_NAME"
@@ -98,7 +143,16 @@ workflow:
        IVAS_PIPELINE_NAME: "Coverage measurement"
    - if: $CI_PIPELINE_SOURCE == 'web' && $MANUAL_PIPELINE_TYPE == 'complexity'
      variables:
        IVAS_PIPELINE_NAME: 'Complexity Measurement on $CI_COMMIT_BRANCH'
        IVAS_PIPELINE_NAME: "Complexity Measurement on $CI_COMMIT_BRANCH"
    - if: $CI_PIPELINE_SOURCE == 'web' && $MANUAL_PIPELINE_TYPE == 'loudness'
      variables:
        IVAS_PIPELINE_NAME: "Loudness measurement and analysis on $CI_COMMIT_BRANCH for $LOUDNESS_CONFIG $LOUDNESS_FILTER_SUFFIX"
    - if: $CI_PIPELINE_SOURCE == 'web' && $MANUAL_PIPELINE_TYPE == 'loudness-measurement-only'
      variables:
        IVAS_PIPELINE_NAME: "Loudness measurement on $CI_COMMIT_BRANCH for $LOUDNESS_CONFIG $LOUDNESS_FILTER_SUFFIX"
    - if: $CI_PIPELINE_SOURCE == 'web' && $MANUAL_PIPELINE_TYPE == 'loudness-analysis-only'
      variables:
        IVAS_PIPELINE_NAME: "Loudness analysis on $CI_COMMIT_BRANCH for $LOUDNESS_CONFIG $LOUDNESS_FILTER_SUFFIX"

# ---------------------------------------------------------------
# Rules templates