diff --git a/Runner/suites/Multimedia/Audio/AudioRecord/AudioRecord.yaml b/Runner/suites/Multimedia/Audio/AudioRecord/AudioRecord.yaml index c5835b55..c2bf0e22 100644 --- a/Runner/suites/Multimedia/Audio/AudioRecord/AudioRecord.yaml +++ b/Runner/suites/Multimedia/Audio/AudioRecord/AudioRecord.yaml @@ -15,7 +15,8 @@ params: DURATIONS: "" # Recording durations: short, medium, long (legacy mode only, not used in config discovery mode), default: unset RECORD_SECONDS: "5s" # Recording duration with unit suffix (e.g., "5s", "10s", "30s"), default: 5s LOOPS: 1 # Number of recording loops, default: 1 - TIMEOUT: 0 # Recording timeout per loop (e.g., 15s, 0=none), default: 0 + TIMEOUT: 0 # Explicit timeout override per loop (e.g., 15s, 0=automatic), default: 0 + AUDIO_RECORD_START_GRACE: 5 # Startup headroom added to the automatic recorder watchdog, default: 5s STRICT: 0 # Enable strict mode (fail on any error), default: 0 DMESG_SCAN: 1 # Scan dmesg for errors after recording, default: 1 VERBOSE: 0 # Enable verbose logging, default: 0 @@ -26,5 +27,5 @@ run: steps: - REPO_PATH=$PWD - cd Runner/suites/Multimedia/Audio/AudioRecord/ - - ./run.sh --backend "${AUDIO_BACKEND}" --source "${SOURCE_CHOICE}" --config-name "${CONFIG_NAMES}" --config-filter "${CONFIG_FILTER}" --record-seconds "${RECORD_SECONDS}" --loops "${LOOPS}" --timeout "${TIMEOUT}" --strict "${STRICT}" --res-suffix "${RES_SUFFIX}" --lava-testcase-id "${LAVA_TESTCASE_ID}" || true + - ./run.sh --backend "${AUDIO_BACKEND}" --source "${SOURCE_CHOICE}" --config-name "${CONFIG_NAMES}" --config-filter "${CONFIG_FILTER}" --record-seconds "${RECORD_SECONDS}" --loops "${LOOPS}" --timeout "${TIMEOUT}" --start-grace "${AUDIO_RECORD_START_GRACE}" --strict "${STRICT}" --res-suffix "${RES_SUFFIX}" --lava-testcase-id "${LAVA_TESTCASE_ID}" || true - $REPO_PATH/Runner/utils/send-to-lava.sh AudioRecord${RES_SUFFIX:+_${RES_SUFFIX}}.res diff --git a/Runner/suites/Multimedia/Audio/AudioRecord/AudioRecord_Config01.yaml b/Runner/suites/Multimedia/Audio/AudioRecord/AudioRecord_Config01.yaml index 40b4799c..33de8593 100644 --- a/Runner/suites/Multimedia/Audio/AudioRecord/AudioRecord_Config01.yaml +++ b/Runner/suites/Multimedia/Audio/AudioRecord/AudioRecord_Config01.yaml @@ -15,7 +15,8 @@ params: DURATIONS: "" # Recording durations: short, medium, long (legacy mode only, not used in config discovery mode), default: unset RECORD_SECONDS: "5s" # Recording duration with unit suffix (e.g., "5s", "10s", "30s"), default: 5s LOOPS: 1 # Number of recording loops, default: 1 - TIMEOUT: 0 # Recording timeout per loop (e.g., 15s, 0=none), default: 0 + TIMEOUT: 0 # Explicit timeout override per loop (e.g., 15s, 0=automatic), default: 0 + AUDIO_RECORD_START_GRACE: 5 # Startup headroom added to the automatic recorder watchdog, default: 5s STRICT: 0 # Enable strict mode (fail on any error), default: 0 DMESG_SCAN: 1 # Scan dmesg for errors after recording, default: 1 VERBOSE: 0 # Enable verbose logging, default: 0 @@ -25,5 +26,5 @@ run: steps: - REPO_PATH=$PWD - cd Runner/suites/Multimedia/Audio/AudioRecord/ - - ./run.sh --backend "${AUDIO_BACKEND}" --source "${SOURCE_CHOICE}" --config-name "${CONFIG_NAMES}" --config-filter "${CONFIG_FILTER}" --record-seconds "${RECORD_SECONDS}" --loops "${LOOPS}" --timeout "${TIMEOUT}" --strict "${STRICT}" --res-suffix "${RES_SUFFIX}" || true + - ./run.sh --backend "${AUDIO_BACKEND}" --source "${SOURCE_CHOICE}" --config-name "${CONFIG_NAMES}" --config-filter "${CONFIG_FILTER}" --record-seconds "${RECORD_SECONDS}" --loops "${LOOPS}" --timeout "${TIMEOUT}" --start-grace "${AUDIO_RECORD_START_GRACE}" --strict "${STRICT}" --res-suffix "${RES_SUFFIX}" || true - $REPO_PATH/Runner/utils/send-to-lava.sh AudioRecord${RES_SUFFIX:+_${RES_SUFFIX}}.res diff --git a/Runner/suites/Multimedia/Audio/AudioRecord/AudioRecord_Config02.yaml b/Runner/suites/Multimedia/Audio/AudioRecord/AudioRecord_Config02.yaml index 347c579c..0680c820 100644 --- a/Runner/suites/Multimedia/Audio/AudioRecord/AudioRecord_Config02.yaml +++ b/Runner/suites/Multimedia/Audio/AudioRecord/AudioRecord_Config02.yaml @@ -15,7 +15,8 @@ params: DURATIONS: "" # Recording durations: short, medium, long (legacy mode only, not used in config discovery mode), default: unset RECORD_SECONDS: "5s" # Recording duration with unit suffix (e.g., "5s", "10s", "30s"), default: 5s LOOPS: 1 # Number of recording loops, default: 1 - TIMEOUT: 0 # Recording timeout per loop (e.g., 15s, 0=none), default: 0 + TIMEOUT: 0 # Explicit timeout override per loop (e.g., 15s, 0=automatic), default: 0 + AUDIO_RECORD_START_GRACE: 5 # Startup headroom added to the automatic recorder watchdog, default: 5s STRICT: 0 # Enable strict mode (fail on any error), default: 0 DMESG_SCAN: 1 # Scan dmesg for errors after recording, default: 1 VERBOSE: 0 # Enable verbose logging, default: 0 @@ -25,5 +26,5 @@ run: steps: - REPO_PATH=$PWD - cd Runner/suites/Multimedia/Audio/AudioRecord/ - - ./run.sh --backend "${AUDIO_BACKEND}" --source "${SOURCE_CHOICE}" --config-name "${CONFIG_NAMES}" --config-filter "${CONFIG_FILTER}" --record-seconds "${RECORD_SECONDS}" --loops "${LOOPS}" --timeout "${TIMEOUT}" --strict "${STRICT}" --res-suffix "${RES_SUFFIX}" || true + - ./run.sh --backend "${AUDIO_BACKEND}" --source "${SOURCE_CHOICE}" --config-name "${CONFIG_NAMES}" --config-filter "${CONFIG_FILTER}" --record-seconds "${RECORD_SECONDS}" --loops "${LOOPS}" --timeout "${TIMEOUT}" --start-grace "${AUDIO_RECORD_START_GRACE}" --strict "${STRICT}" --res-suffix "${RES_SUFFIX}" || true - $REPO_PATH/Runner/utils/send-to-lava.sh AudioRecord${RES_SUFFIX:+_${RES_SUFFIX}}.res diff --git a/Runner/suites/Multimedia/Audio/AudioRecord/AudioRecord_Config03.yaml b/Runner/suites/Multimedia/Audio/AudioRecord/AudioRecord_Config03.yaml index 77696c5c..f2de16a0 100644 --- a/Runner/suites/Multimedia/Audio/AudioRecord/AudioRecord_Config03.yaml +++ b/Runner/suites/Multimedia/Audio/AudioRecord/AudioRecord_Config03.yaml @@ -15,7 +15,8 @@ params: DURATIONS: "" # Recording durations: short, medium, long (legacy mode only, not used in config discovery mode), default: unset RECORD_SECONDS: "5s" # Recording duration with unit suffix (e.g., "5s", "10s", "30s"), default: 5s LOOPS: 1 # Number of recording loops, default: 1 - TIMEOUT: 0 # Recording timeout per loop (e.g., 15s, 0=none), default: 0 + TIMEOUT: 0 # Explicit timeout override per loop (e.g., 15s, 0=automatic), default: 0 + AUDIO_RECORD_START_GRACE: 5 # Startup headroom added to the automatic recorder watchdog, default: 5s STRICT: 0 # Enable strict mode (fail on any error), default: 0 DMESG_SCAN: 1 # Scan dmesg for errors after recording, default: 1 VERBOSE: 0 # Enable verbose logging, default: 0 @@ -25,5 +26,5 @@ run: steps: - REPO_PATH=$PWD - cd Runner/suites/Multimedia/Audio/AudioRecord/ - - ./run.sh --backend "${AUDIO_BACKEND}" --source "${SOURCE_CHOICE}" --config-name "${CONFIG_NAMES}" --config-filter "${CONFIG_FILTER}" --record-seconds "${RECORD_SECONDS}" --loops "${LOOPS}" --timeout "${TIMEOUT}" --strict "${STRICT}" --res-suffix "${RES_SUFFIX}" || true + - ./run.sh --backend "${AUDIO_BACKEND}" --source "${SOURCE_CHOICE}" --config-name "${CONFIG_NAMES}" --config-filter "${CONFIG_FILTER}" --record-seconds "${RECORD_SECONDS}" --loops "${LOOPS}" --timeout "${TIMEOUT}" --start-grace "${AUDIO_RECORD_START_GRACE}" --strict "${STRICT}" --res-suffix "${RES_SUFFIX}" || true - $REPO_PATH/Runner/utils/send-to-lava.sh AudioRecord${RES_SUFFIX:+_${RES_SUFFIX}}.res diff --git a/Runner/suites/Multimedia/Audio/AudioRecord/AudioRecord_Config04.yaml b/Runner/suites/Multimedia/Audio/AudioRecord/AudioRecord_Config04.yaml index 0f7f8f36..ebde5dcb 100644 --- a/Runner/suites/Multimedia/Audio/AudioRecord/AudioRecord_Config04.yaml +++ b/Runner/suites/Multimedia/Audio/AudioRecord/AudioRecord_Config04.yaml @@ -15,7 +15,8 @@ params: DURATIONS: "" # Recording durations: short, medium, long (legacy mode only, not used in config discovery mode), default: unset RECORD_SECONDS: "5s" # Recording duration with unit suffix (e.g., "5s", "10s", "30s"), default: 5s LOOPS: 1 # Number of recording loops, default: 1 - TIMEOUT: 0 # Recording timeout per loop (e.g., 15s, 0=none), default: 0 + TIMEOUT: 0 # Explicit timeout override per loop (e.g., 15s, 0=automatic), default: 0 + AUDIO_RECORD_START_GRACE: 5 # Startup headroom added to the automatic recorder watchdog, default: 5s STRICT: 0 # Enable strict mode (fail on any error), default: 0 DMESG_SCAN: 1 # Scan dmesg for errors after recording, default: 1 VERBOSE: 0 # Enable verbose logging, default: 0 @@ -25,5 +26,5 @@ run: steps: - REPO_PATH=$PWD - cd Runner/suites/Multimedia/Audio/AudioRecord/ - - ./run.sh --backend "${AUDIO_BACKEND}" --source "${SOURCE_CHOICE}" --config-name "${CONFIG_NAMES}" --config-filter "${CONFIG_FILTER}" --record-seconds "${RECORD_SECONDS}" --loops "${LOOPS}" --timeout "${TIMEOUT}" --strict "${STRICT}" --res-suffix "${RES_SUFFIX}" || true + - ./run.sh --backend "${AUDIO_BACKEND}" --source "${SOURCE_CHOICE}" --config-name "${CONFIG_NAMES}" --config-filter "${CONFIG_FILTER}" --record-seconds "${RECORD_SECONDS}" --loops "${LOOPS}" --timeout "${TIMEOUT}" --start-grace "${AUDIO_RECORD_START_GRACE}" --strict "${STRICT}" --res-suffix "${RES_SUFFIX}" || true - $REPO_PATH/Runner/utils/send-to-lava.sh AudioRecord${RES_SUFFIX:+_${RES_SUFFIX}}.res diff --git a/Runner/suites/Multimedia/Audio/AudioRecord/AudioRecord_Config05.yaml b/Runner/suites/Multimedia/Audio/AudioRecord/AudioRecord_Config05.yaml index 48e8c6f0..0d528a89 100644 --- a/Runner/suites/Multimedia/Audio/AudioRecord/AudioRecord_Config05.yaml +++ b/Runner/suites/Multimedia/Audio/AudioRecord/AudioRecord_Config05.yaml @@ -15,7 +15,8 @@ params: DURATIONS: "" # Recording durations: short, medium, long (legacy mode only, not used in config discovery mode), default: unset RECORD_SECONDS: "5s" # Recording duration with unit suffix (e.g., "5s", "10s", "30s"), default: 5s LOOPS: 1 # Number of recording loops, default: 1 - TIMEOUT: 0 # Recording timeout per loop (e.g., 15s, 0=none), default: 0 + TIMEOUT: 0 # Explicit timeout override per loop (e.g., 15s, 0=automatic), default: 0 + AUDIO_RECORD_START_GRACE: 5 # Startup headroom added to the automatic recorder watchdog, default: 5s STRICT: 0 # Enable strict mode (fail on any error), default: 0 DMESG_SCAN: 1 # Scan dmesg for errors after recording, default: 1 VERBOSE: 0 # Enable verbose logging, default: 0 @@ -25,5 +26,5 @@ run: steps: - REPO_PATH=$PWD - cd Runner/suites/Multimedia/Audio/AudioRecord/ - - ./run.sh --backend "${AUDIO_BACKEND}" --source "${SOURCE_CHOICE}" --config-name "${CONFIG_NAMES}" --config-filter "${CONFIG_FILTER}" --record-seconds "${RECORD_SECONDS}" --loops "${LOOPS}" --timeout "${TIMEOUT}" --strict "${STRICT}" --res-suffix "${RES_SUFFIX}" || true + - ./run.sh --backend "${AUDIO_BACKEND}" --source "${SOURCE_CHOICE}" --config-name "${CONFIG_NAMES}" --config-filter "${CONFIG_FILTER}" --record-seconds "${RECORD_SECONDS}" --loops "${LOOPS}" --timeout "${TIMEOUT}" --start-grace "${AUDIO_RECORD_START_GRACE}" --strict "${STRICT}" --res-suffix "${RES_SUFFIX}" || true - $REPO_PATH/Runner/utils/send-to-lava.sh AudioRecord${RES_SUFFIX:+_${RES_SUFFIX}}.res diff --git a/Runner/suites/Multimedia/Audio/AudioRecord/AudioRecord_Config06.yaml b/Runner/suites/Multimedia/Audio/AudioRecord/AudioRecord_Config06.yaml index 5021758a..85288f04 100644 --- a/Runner/suites/Multimedia/Audio/AudioRecord/AudioRecord_Config06.yaml +++ b/Runner/suites/Multimedia/Audio/AudioRecord/AudioRecord_Config06.yaml @@ -15,7 +15,8 @@ params: DURATIONS: "" # Recording durations: short, medium, long (legacy mode only, not used in config discovery mode), default: unset RECORD_SECONDS: "5s" # Recording duration with unit suffix (e.g., "5s", "10s", "30s"), default: 5s LOOPS: 1 # Number of recording loops, default: 1 - TIMEOUT: 0 # Recording timeout per loop (e.g., 15s, 0=none), default: 0 + TIMEOUT: 0 # Explicit timeout override per loop (e.g., 15s, 0=automatic), default: 0 + AUDIO_RECORD_START_GRACE: 5 # Startup headroom added to the automatic recorder watchdog, default: 5s STRICT: 0 # Enable strict mode (fail on any error), default: 0 DMESG_SCAN: 1 # Scan dmesg for errors after recording, default: 1 VERBOSE: 0 # Enable verbose logging, default: 0 @@ -25,5 +26,5 @@ run: steps: - REPO_PATH=$PWD - cd Runner/suites/Multimedia/Audio/AudioRecord/ - - ./run.sh --backend "${AUDIO_BACKEND}" --source "${SOURCE_CHOICE}" --config-name "${CONFIG_NAMES}" --config-filter "${CONFIG_FILTER}" --record-seconds "${RECORD_SECONDS}" --loops "${LOOPS}" --timeout "${TIMEOUT}" --strict "${STRICT}" --res-suffix "${RES_SUFFIX}" || true + - ./run.sh --backend "${AUDIO_BACKEND}" --source "${SOURCE_CHOICE}" --config-name "${CONFIG_NAMES}" --config-filter "${CONFIG_FILTER}" --record-seconds "${RECORD_SECONDS}" --loops "${LOOPS}" --timeout "${TIMEOUT}" --start-grace "${AUDIO_RECORD_START_GRACE}" --strict "${STRICT}" --res-suffix "${RES_SUFFIX}" || true - $REPO_PATH/Runner/utils/send-to-lava.sh AudioRecord${RES_SUFFIX:+_${RES_SUFFIX}}.res diff --git a/Runner/suites/Multimedia/Audio/AudioRecord/AudioRecord_Config07.yaml b/Runner/suites/Multimedia/Audio/AudioRecord/AudioRecord_Config07.yaml index bd4705fc..10257d39 100644 --- a/Runner/suites/Multimedia/Audio/AudioRecord/AudioRecord_Config07.yaml +++ b/Runner/suites/Multimedia/Audio/AudioRecord/AudioRecord_Config07.yaml @@ -15,7 +15,8 @@ params: DURATIONS: "" # Recording durations: short, medium, long (legacy mode only, not used in config discovery mode), default: unset RECORD_SECONDS: "5s" # Recording duration with unit suffix (e.g., "5s", "10s", "30s"), default: 5s LOOPS: 1 # Number of recording loops, default: 1 - TIMEOUT: 0 # Recording timeout per loop (e.g., 15s, 0=none), default: 0 + TIMEOUT: 0 # Explicit timeout override per loop (e.g., 15s, 0=automatic), default: 0 + AUDIO_RECORD_START_GRACE: 5 # Startup headroom added to the automatic recorder watchdog, default: 5s STRICT: 0 # Enable strict mode (fail on any error), default: 0 DMESG_SCAN: 1 # Scan dmesg for errors after recording, default: 1 VERBOSE: 0 # Enable verbose logging, default: 0 @@ -25,5 +26,5 @@ run: steps: - REPO_PATH=$PWD - cd Runner/suites/Multimedia/Audio/AudioRecord/ - - ./run.sh --backend "${AUDIO_BACKEND}" --source "${SOURCE_CHOICE}" --config-name "${CONFIG_NAMES}" --config-filter "${CONFIG_FILTER}" --record-seconds "${RECORD_SECONDS}" --loops "${LOOPS}" --timeout "${TIMEOUT}" --strict "${STRICT}" --res-suffix "${RES_SUFFIX}" || true + - ./run.sh --backend "${AUDIO_BACKEND}" --source "${SOURCE_CHOICE}" --config-name "${CONFIG_NAMES}" --config-filter "${CONFIG_FILTER}" --record-seconds "${RECORD_SECONDS}" --loops "${LOOPS}" --timeout "${TIMEOUT}" --start-grace "${AUDIO_RECORD_START_GRACE}" --strict "${STRICT}" --res-suffix "${RES_SUFFIX}" || true - $REPO_PATH/Runner/utils/send-to-lava.sh AudioRecord${RES_SUFFIX:+_${RES_SUFFIX}}.res diff --git a/Runner/suites/Multimedia/Audio/AudioRecord/AudioRecord_Config08.yaml b/Runner/suites/Multimedia/Audio/AudioRecord/AudioRecord_Config08.yaml index cb3c8cbc..25c5f7e3 100644 --- a/Runner/suites/Multimedia/Audio/AudioRecord/AudioRecord_Config08.yaml +++ b/Runner/suites/Multimedia/Audio/AudioRecord/AudioRecord_Config08.yaml @@ -15,7 +15,8 @@ params: DURATIONS: "" # Recording durations: short, medium, long (legacy mode only, not used in config discovery mode), default: unset RECORD_SECONDS: "5s" # Recording duration with unit suffix (e.g., "5s", "10s", "30s"), default: 5s LOOPS: 1 # Number of recording loops, default: 1 - TIMEOUT: 0 # Recording timeout per loop (e.g., 15s, 0=none), default: 0 + TIMEOUT: 0 # Explicit timeout override per loop (e.g., 15s, 0=automatic), default: 0 + AUDIO_RECORD_START_GRACE: 5 # Startup headroom added to the automatic recorder watchdog, default: 5s STRICT: 0 # Enable strict mode (fail on any error), default: 0 DMESG_SCAN: 1 # Scan dmesg for errors after recording, default: 1 VERBOSE: 0 # Enable verbose logging, default: 0 @@ -25,5 +26,5 @@ run: steps: - REPO_PATH=$PWD - cd Runner/suites/Multimedia/Audio/AudioRecord/ - - ./run.sh --backend "${AUDIO_BACKEND}" --source "${SOURCE_CHOICE}" --config-name "${CONFIG_NAMES}" --config-filter "${CONFIG_FILTER}" --record-seconds "${RECORD_SECONDS}" --loops "${LOOPS}" --timeout "${TIMEOUT}" --strict "${STRICT}" --res-suffix "${RES_SUFFIX}" || true + - ./run.sh --backend "${AUDIO_BACKEND}" --source "${SOURCE_CHOICE}" --config-name "${CONFIG_NAMES}" --config-filter "${CONFIG_FILTER}" --record-seconds "${RECORD_SECONDS}" --loops "${LOOPS}" --timeout "${TIMEOUT}" --start-grace "${AUDIO_RECORD_START_GRACE}" --strict "${STRICT}" --res-suffix "${RES_SUFFIX}" || true - $REPO_PATH/Runner/utils/send-to-lava.sh AudioRecord${RES_SUFFIX:+_${RES_SUFFIX}}.res diff --git a/Runner/suites/Multimedia/Audio/AudioRecord/AudioRecord_Config09.yaml b/Runner/suites/Multimedia/Audio/AudioRecord/AudioRecord_Config09.yaml index 99d4a845..5ed863a7 100644 --- a/Runner/suites/Multimedia/Audio/AudioRecord/AudioRecord_Config09.yaml +++ b/Runner/suites/Multimedia/Audio/AudioRecord/AudioRecord_Config09.yaml @@ -15,7 +15,8 @@ params: DURATIONS: "" # Recording durations: short, medium, long (legacy mode only, not used in config discovery mode), default: unset RECORD_SECONDS: "5s" # Recording duration with unit suffix (e.g., "5s", "10s", "30s"), default: 5s LOOPS: 1 # Number of recording loops, default: 1 - TIMEOUT: 0 # Recording timeout per loop (e.g., 15s, 0=none), default: 0 + TIMEOUT: 0 # Explicit timeout override per loop (e.g., 15s, 0=automatic), default: 0 + AUDIO_RECORD_START_GRACE: 5 # Startup headroom added to the automatic recorder watchdog, default: 5s STRICT: 0 # Enable strict mode (fail on any error), default: 0 DMESG_SCAN: 1 # Scan dmesg for errors after recording, default: 1 VERBOSE: 0 # Enable verbose logging, default: 0 @@ -25,5 +26,5 @@ run: steps: - REPO_PATH=$PWD - cd Runner/suites/Multimedia/Audio/AudioRecord/ - - ./run.sh --backend "${AUDIO_BACKEND}" --source "${SOURCE_CHOICE}" --config-name "${CONFIG_NAMES}" --config-filter "${CONFIG_FILTER}" --record-seconds "${RECORD_SECONDS}" --loops "${LOOPS}" --timeout "${TIMEOUT}" --strict "${STRICT}" --res-suffix "${RES_SUFFIX}" || true + - ./run.sh --backend "${AUDIO_BACKEND}" --source "${SOURCE_CHOICE}" --config-name "${CONFIG_NAMES}" --config-filter "${CONFIG_FILTER}" --record-seconds "${RECORD_SECONDS}" --loops "${LOOPS}" --timeout "${TIMEOUT}" --start-grace "${AUDIO_RECORD_START_GRACE}" --strict "${STRICT}" --res-suffix "${RES_SUFFIX}" || true - $REPO_PATH/Runner/utils/send-to-lava.sh AudioRecord${RES_SUFFIX:+_${RES_SUFFIX}}.res diff --git a/Runner/suites/Multimedia/Audio/AudioRecord/AudioRecord_Config10.yaml b/Runner/suites/Multimedia/Audio/AudioRecord/AudioRecord_Config10.yaml index 6e2a7e27..76cdea9d 100644 --- a/Runner/suites/Multimedia/Audio/AudioRecord/AudioRecord_Config10.yaml +++ b/Runner/suites/Multimedia/Audio/AudioRecord/AudioRecord_Config10.yaml @@ -15,7 +15,8 @@ params: DURATIONS: "" # Recording durations: short, medium, long (legacy mode only, not used in config discovery mode), default: unset RECORD_SECONDS: "5s" # Recording duration with unit suffix (e.g., "5s", "10s", "30s"), default: 5s LOOPS: 1 # Number of recording loops, default: 1 - TIMEOUT: 0 # Recording timeout per loop (e.g., 15s, 0=none), default: 0 + TIMEOUT: 0 # Explicit timeout override per loop (e.g., 15s, 0=automatic), default: 0 + AUDIO_RECORD_START_GRACE: 5 # Startup headroom added to the automatic recorder watchdog, default: 5s STRICT: 0 # Enable strict mode (fail on any error), default: 0 DMESG_SCAN: 1 # Scan dmesg for errors after recording, default: 1 VERBOSE: 0 # Enable verbose logging, default: 0 @@ -25,5 +26,5 @@ run: steps: - REPO_PATH=$PWD - cd Runner/suites/Multimedia/Audio/AudioRecord/ - - ./run.sh --backend "${AUDIO_BACKEND}" --source "${SOURCE_CHOICE}" --config-name "${CONFIG_NAMES}" --config-filter "${CONFIG_FILTER}" --record-seconds "${RECORD_SECONDS}" --loops "${LOOPS}" --timeout "${TIMEOUT}" --strict "${STRICT}" --res-suffix "${RES_SUFFIX}" || true + - ./run.sh --backend "${AUDIO_BACKEND}" --source "${SOURCE_CHOICE}" --config-name "${CONFIG_NAMES}" --config-filter "${CONFIG_FILTER}" --record-seconds "${RECORD_SECONDS}" --loops "${LOOPS}" --timeout "${TIMEOUT}" --start-grace "${AUDIO_RECORD_START_GRACE}" --strict "${STRICT}" --res-suffix "${RES_SUFFIX}" || true - $REPO_PATH/Runner/utils/send-to-lava.sh AudioRecord${RES_SUFFIX:+_${RES_SUFFIX}}.res diff --git a/Runner/suites/Multimedia/Audio/AudioRecord/AudioRecord_minimal.yaml b/Runner/suites/Multimedia/Audio/AudioRecord/AudioRecord_minimal.yaml index ad90058c..78b6698e 100644 --- a/Runner/suites/Multimedia/Audio/AudioRecord/AudioRecord_minimal.yaml +++ b/Runner/suites/Multimedia/Audio/AudioRecord/AudioRecord_minimal.yaml @@ -14,11 +14,12 @@ params: SOURCE: "mic" LOOPS: "1" TIMEOUT: "0" + AUDIO_RECORD_START_GRACE: "5" RECORD_SECONDS: "30s" run: steps: - REPO_PATH=$PWD - cd Runner/suites/Multimedia/Audio/AudioRecord/ - - ./run.sh --backend "${BACKEND}" --source "${SOURCE}" --loops "${LOOPS}" --timeout "${TIMEOUT}" --record-seconds "${RECORD_SECONDS}" --audio-bootstrap false || true + - ./run.sh --backend "${BACKEND}" --source "${SOURCE}" --loops "${LOOPS}" --timeout "${TIMEOUT}" --start-grace "${AUDIO_RECORD_START_GRACE}" --record-seconds "${RECORD_SECONDS}" --audio-bootstrap false || true - ./send-to-lava.sh AudioRecord.res diff --git a/Runner/suites/Multimedia/Audio/AudioRecord/Read_me.md b/Runner/suites/Multimedia/Audio/AudioRecord/Read_me.md index 62ff611f..59298505 100644 --- a/Runner/suites/Multimedia/Audio/AudioRecord/Read_me.md +++ b/Runner/suites/Multimedia/Audio/AudioRecord/Read_me.md @@ -201,7 +201,8 @@ CONFIG_FILTER Filter configs by pattern (e.g., "48KHz" or "2ch") DURATIONS Recording durations: short, medium, long (legacy mode only) "" RECORD_SECONDS Number of seconds to record (e.g., 5s, 10s) 30s LOOPS Number of recording loops 1 -TIMEOUT Recording timeout per loop (e.g., 15s, 0=none) 0 +TIMEOUT Explicit timeout override (e.g., 15s, 0=automatic) 0 +AUDIO_RECORD_START_GRACE Startup headroom added to the automatic watchdog 5 STRICT Strict mode (0=disabled, 1=enabled, fail on any error) 0 DMESG_SCAN Scan dmesg for errors after recording 1 VERBOSE Enable verbose logging 0 @@ -219,17 +220,40 @@ Option Description --record-seconds Number of seconds to record (e.g., 5s, 10s) --durations Recording durations: short, medium, long (legacy mode only) --loops Number of recording loops ---timeout Recording timeout per loop (e.g., 15s) +--timeout Override the automatic duration-based watchdog +--start-grace Recorder startup headroom, default: 5 --strict [0|1] Enable strict mode (0=disabled, 1=enabled) --no-dmesg Disable dmesg scan --res-suffix Suffix for unique result file and log directory (e.g., "Config01" generates AudioRecord_Config01.res and results/AudioRecord_Config01/) --lava-testcase-id Unique testcase ID written into the .res file for LAVA (e.g., "AudioRecord_Config01") --junit Write JUnit XML output --verbose Enable verbose logging ---help Show usage instructions -``` - -Sample Output: +--help Show usage instructions +``` + +### Recording watchdog and clock handling + +When `TIMEOUT=0`, AudioRecord uses an automatic watchdog for recorder commands. +The watchdog duration is the requested recording duration plus +`AUDIO_RECORD_START_GRACE`, which defaults to five seconds. The additional time +allows PipeWire or PulseAudio to establish the stream without reducing the WAV +duration being validated. An explicit `--timeout` value overrides the automatic +watchdog and does not receive startup grace. + +Watchdog deadlines and elapsed-time reporting use monotonic uptime rather than +the system wall clock. RTC or NTP corrections during recording therefore do not +terminate the recorder early or produce an invalid elapsed time. When the wall +clock changes materially during a case, stdout includes a diagnostic such as: + +```text +[WARN] ... [record_8KHz_1ch] [AUDIO-CLOCK] wall-clock correction detected step=4581451s, watchdog and elapsed accounting used monotonic time +``` + +The requested recording duration remains the WAV validation target. Startup +grace affects only when the recorder is stopped, so a valid recording may be +longer than the requested minimum. + +Sample Output: **Example 1: Testing specific config using config naming** ``` @@ -237,11 +261,11 @@ sh-5.3# ./run.sh --config-name "record_config1" [INFO] 2026-01-02 12:00:46 - Base build detected (no audioreach modules), skipping overlay setup [INFO] 2026-01-02 12:00:46 - ---------------- Starting AudioRecord ---------------- [INFO] 2026-01-02 12:00:46 - Platform Details: machine='Qualcomm Technologies, Inc. Robotics RB3gen2' target='Kodiak' kernel='6.18.0-00393-g27507852413b' arch='aarch64' -[INFO] 2026-01-02 12:00:46 - Args: backend=auto source=mic loops=1 durations='short' record_seconds=30s timeout=0 strict=0 dmesg=1 +[INFO] 2026-01-02 12:00:46 - Args: backend=auto source=mic overlay=0 loops=1 durations='' record_seconds=30s timeout=0 start_grace=5 strict=0 signal_strict=0 dmesg=1 bootstrap=auto runtime_dir=auto [INFO] 2026-01-02 12:00:46 - Backend fallback chain: pipewire pulseaudio alsa [INFO] 2026-01-02 12:00:46 - Using backend: pipewire [INFO] 2026-01-02 12:00:46 - Routing to source: id/name=45 label='Built-in Audio internal Mic' choice=mic -[INFO] 2026-01-02 12:00:46 - Watchdog/timeout: disabled (no timeout) +[INFO] 2026-01-02 12:00:46 - Watchdog/timeout: automatic per case, requested duration plus start_grace=5s [INFO] 2026-01-02 12:00:46 - Using config discovery mode [INFO] 2026-01-02 12:00:46 - Discovered 1 configs to test [INFO] 2026-01-02 12:00:46 - [record_8KHz_1ch] Using config: record_config1 (rate=8000Hz channels=1) diff --git a/Runner/suites/Multimedia/Audio/AudioRecord/run.sh b/Runner/suites/Multimedia/Audio/AudioRecord/run.sh index 37d59724..924dda59 100755 --- a/Runner/suites/Multimedia/Audio/AudioRecord/run.sh +++ b/Runner/suites/Multimedia/Audio/AudioRecord/run.sh @@ -96,7 +96,8 @@ SRC_CHOICE="${SRC_CHOICE:-mic}" # mic|null DURATIONS="" # Will be set to default only if using legacy mode RECORD_SECONDS="${RECORD_SECONDS:-30s}" # DEFAULT: 30s; 'auto' maps short/med/long LOOPS="${LOOPS:-1}" -TIMEOUT="${TIMEOUT:-0}" # 0 = no watchdog +TIMEOUT="${TIMEOUT:-0}" # 0 = automatic duration-based watchdog +AUDIO_RECORD_START_GRACE="${AUDIO_RECORD_START_GRACE:-5}" STRICT="${STRICT:-0}" DMESG_SCAN="${DMESG_SCAN:-1}" VERBOSE=0 @@ -147,7 +148,8 @@ Usage: $0 [options] # false = never bootstrap manually --runtime-dir PATH # Override XDG_RUNTIME_DIR for minimal ramdisk mode --loops N - --timeout SECS + --timeout SECS Override the automatic duration-based watchdog + --start-grace SECS Recorder startup headroom, default: 5 --strict [0|1] --no-dmesg --junit FILE.xml @@ -297,6 +299,10 @@ while [ $# -gt 0 ]; do TIMEOUT="$2" shift 2 ;; + --start-grace) + AUDIO_RECORD_START_GRACE="$2" + shift 2 + ;; --strict) case "$2" in --*|"") @@ -539,7 +545,7 @@ if [ -n "$CONFIG_NAMES" ] && [ -n "$CONFIG_FILTER" ]; then CONFIG_FILTER="" fi -log_info "Args: backend=${AUDIO_BACKEND:-auto} source=$SRC_CHOICE overlay=$AUDIO_OVERLAY_REQUESTED loops=$LOOPS durations='$DURATIONS' record_seconds=$RECORD_SECONDS timeout=$TIMEOUT strict=$STRICT signal_strict=$AUDIO_RECORD_STRICT_SIGNAL dmesg=$DMESG_SCAN bootstrap=$AUDIO_BOOTSTRAP_MODE runtime_dir=${AUDIO_RUNTIME_DIR:-auto}" +log_info "Args: backend=${AUDIO_BACKEND:-auto} source=$SRC_CHOICE overlay=$AUDIO_OVERLAY_REQUESTED loops=$LOOPS durations='$DURATIONS' record_seconds=$RECORD_SECONDS timeout=$TIMEOUT start_grace=${AUDIO_RECORD_START_GRACE:-5} strict=$STRICT signal_strict=$AUDIO_RECORD_STRICT_SIGNAL dmesg=$DMESG_SCAN bootstrap=$AUDIO_BOOTSTRAP_MODE runtime_dir=${AUDIO_RUNTIME_DIR:-auto}" # Resolve backend (allow minimal-build ALSA capture fallback) if [ -z "$AUDIO_BACKEND" ]; then @@ -909,9 +915,9 @@ esac dur_s="$(duration_to_secs "$TIMEOUT" 2>/dev/null || echo 0)" [ -z "$dur_s" ] && dur_s=0 if [ "$dur_s" -gt 0 ] 2>/dev/null; then - log_info "Watchdog/timeout: ${TIMEOUT}" + log_info "Watchdog/timeout: explicit override=${TIMEOUT}" else - log_info "Watchdog/timeout: disabled (no timeout)" + log_info "Watchdog/timeout: automatic per case, requested duration plus start_grace=${AUDIO_RECORD_START_GRACE}s" fi # JUnit init (optional) @@ -1079,7 +1085,7 @@ if [ "$USE_CONFIG_DISCOVERY" = "true" ]; then while [ "$i" -le "$LOOPS" ]; do iso="$(date -u +%Y-%m-%dT%H:%M:%SZ)" - effective_timeout="$secs" + effective_timeout="$(audio_record_timeout_with_grace "$secs")" if [ -n "$TIMEOUT" ] && [ "$TIMEOUT" != "0" ]; then effective_timeout="$TIMEOUT" fi @@ -1099,7 +1105,8 @@ if [ "$USE_CONFIG_DISCOVERY" = "true" ]; then audio_record_set_capture_paths "$case_name" audio_record_reset_capture_output - start_s="$(date +%s 2>/dev/null || echo 0)" + start_mono="$(get_monotonic_seconds)" + start_wall="$(date +%s 2>/dev/null || echo 0)" validation_rate="$rate" validation_channels="$channels" @@ -1287,10 +1294,22 @@ if [ "$USE_CONFIG_DISCOVERY" = "true" ]; then bytes=0 fi - end_s="$(date +%s 2>/dev/null || echo 0)" - last_elapsed=$((end_s - start_s)) + end_mono="$(get_monotonic_seconds)" + end_wall="$(date +%s 2>/dev/null || echo 0)" + last_elapsed=$((end_mono - start_mono)) [ "$last_elapsed" -lt 0 ] && last_elapsed=0 + clock_step="$( + clock_step_seconds \ + "$start_mono" \ + "$start_wall" \ + "$end_mono" \ + "$end_wall" + )" + if [ "$clock_step" -gt 1 ] 2>/dev/null; then + log_warn "[$case_name] [AUDIO-CLOCK] wall-clock correction detected step=${clock_step}s, watchdog and elapsed accounting used monotonic time" + fi + audio_record_validate_final_output # Evidence @@ -1384,7 +1403,7 @@ else while [ "$i" -le "$LOOPS" ]; do iso="$(date -u +%Y-%m-%dT%H:%M:%SZ)" - effective_timeout="$secs" + effective_timeout="$(audio_record_timeout_with_grace "$secs")" if [ -n "$TIMEOUT" ] && [ "$TIMEOUT" != "0" ]; then effective_timeout="$TIMEOUT" fi @@ -1404,7 +1423,8 @@ else audio_record_set_capture_paths "$case_name" audio_record_reset_capture_output - start_s="$(date +%s 2>/dev/null || echo 0)" + start_mono="$(get_monotonic_seconds)" + start_wall="$(date +%s 2>/dev/null || echo 0)" validation_rate=0 validation_channels=0 @@ -1578,10 +1598,22 @@ else bytes=0 fi - end_s="$(date +%s 2>/dev/null || echo 0)" - last_elapsed=$((end_s - start_s)) + end_mono="$(get_monotonic_seconds)" + end_wall="$(date +%s 2>/dev/null || echo 0)" + last_elapsed=$((end_mono - start_mono)) [ "$last_elapsed" -lt 0 ] && last_elapsed=0 + clock_step="$( + clock_step_seconds \ + "$start_mono" \ + "$start_wall" \ + "$end_mono" \ + "$end_wall" + )" + if [ "$clock_step" -gt 1 ] 2>/dev/null; then + log_warn "[$case_name] [AUDIO-CLOCK] wall-clock correction detected step=${clock_step}s, watchdog and elapsed accounting used monotonic time" + fi + audio_record_validate_final_output # Evidence diff --git a/Runner/utils/audio_common.sh b/Runner/utils/audio_common.sh index 213958b0..322371d8 100755 --- a/Runner/utils/audio_common.sh +++ b/Runner/utils/audio_common.sh @@ -597,7 +597,7 @@ audio_scratch_dir() { audio_restart_pipewire_service() { aprs_label="${1:-1/1}" aprs_timeout="${PIPEWIRE_SYSTEMCTL_TIMEOUT:-180}" - aprs_start_s="$(date +%s 2>/dev/null || echo 0)" + aprs_start_s="$(get_monotonic_seconds)" aprs_next_log=10 aprs_scope="system" aprs_exec_text="systemctl restart pipewire" @@ -710,7 +710,7 @@ audio_restart_pipewire_service() { rm -f "$aprs_output_file" while :; do - aprs_now_s="$(date +%s 2>/dev/null || echo 0)" + aprs_now_s="$(get_monotonic_seconds)" aprs_elapsed=$((aprs_now_s - aprs_start_s)) if [ "$aprs_elapsed" -lt 0 ]; then @@ -1414,7 +1414,30 @@ audio_parse_secs() { esac } +# Add startup headroom to an AudioRecord capture watchdog. +# PipeWire and PulseAudio recorders do not take a duration on these paths, so +# the watchdog starts before the stream is ready. Preserve the requested WAV +# duration by adding configurable startup grace to the watchdog only. +audio_record_timeout_with_grace() { + artg_requested="$(audio_parse_secs "$1" 2>/dev/null || echo 0)" + artg_grace="${AUDIO_RECORD_START_GRACE:-5}" + + if ! is_unsigned_number "$artg_grace"; then + artg_grace=5 + fi + + if [ "${artg_requested:-0}" -gt 0 ] 2>/dev/null && + [ "$artg_grace" -gt 0 ] 2>/dev/null; then + printf '%ss\n' "$((artg_requested + artg_grace))" + return 0 + fi + + printf '%s\n' "$1" +} + # Run a command with a bounded timeout. +# Timeout accounting uses monotonic uptime so an RTC or NTP correction cannot +# prematurely terminate the child. # # Return: # child status - command exited before the timeout @@ -1449,19 +1472,13 @@ audio_exec_with_timeout() { "$@" & aewt_pid=$! - aewt_start="$( - date +%s 2>/dev/null || - echo 0 - )" + aewt_start="$(get_monotonic_seconds)" aewt_deadline=$((aewt_start + aewt_dur_norm)) aewt_timed_out=0 while kill -0 "$aewt_pid" 2>/dev/null; do - aewt_now="$( - date +%s 2>/dev/null || - echo 0 - )" + aewt_now="$(get_monotonic_seconds)" if [ "$aewt_now" -ge "$aewt_deadline" ] 2>/dev/null; then aewt_timed_out=1 @@ -1502,11 +1519,11 @@ audio_exec_with_timeout() { audio_wait_audio_ready() { max_s="${1:-${PIPEWIRE_READY_TIMEOUT:-120}}" backend_name="${2:-auto}" - start_s="$(date +%s 2>/dev/null || echo 0)" + start_s="$(get_monotonic_seconds)" next_log=10 while :; do - now_s="$(date +%s 2>/dev/null || echo 0)" + now_s="$(get_monotonic_seconds)" elapsed=$((now_s - start_s)) if [ "$elapsed" -lt 0 ]; then elapsed=0