test(sync): auto-select theia host capture mode
This commit is contained in:
parent
c482f44fbc
commit
2aa4a27f9f
@ -18,13 +18,14 @@ TAIL_SECONDS=${TAIL_SECONDS:-2}
|
|||||||
CAPTURE_SECONDS=${CAPTURE_SECONDS:-$((PROBE_DURATION_SECONDS + PROBE_WARMUP_SECONDS + LEAD_IN_SECONDS + TAIL_SECONDS))}
|
CAPTURE_SECONDS=${CAPTURE_SECONDS:-$((PROBE_DURATION_SECONDS + PROBE_WARMUP_SECONDS + LEAD_IN_SECONDS + TAIL_SECONDS))}
|
||||||
REMOTE_CAPTURE=${REMOTE_CAPTURE:-/tmp/lesavka-upstream-av-sync.mkv}
|
REMOTE_CAPTURE=${REMOTE_CAPTURE:-/tmp/lesavka-upstream-av-sync.mkv}
|
||||||
LOCAL_OUTPUT_DIR=${LOCAL_OUTPUT_DIR:-"${REPO_ROOT}/tmp"}
|
LOCAL_OUTPUT_DIR=${LOCAL_OUTPUT_DIR:-"${REPO_ROOT}/tmp"}
|
||||||
VIDEO_SIZE=${VIDEO_SIZE:-1280x720}
|
VIDEO_SIZE=${VIDEO_SIZE:-auto}
|
||||||
VIDEO_FPS=${VIDEO_FPS:-30}
|
VIDEO_FPS=${VIDEO_FPS:-30}
|
||||||
VIDEO_FORMAT=${VIDEO_FORMAT:-mjpeg}
|
VIDEO_FORMAT=${VIDEO_FORMAT:-mjpeg}
|
||||||
REMOTE_CAPTURE_STACK=${REMOTE_CAPTURE_STACK:-auto}
|
REMOTE_CAPTURE_STACK=${REMOTE_CAPTURE_STACK:-auto}
|
||||||
REMOTE_AUDIO_SOURCE=${REMOTE_AUDIO_SOURCE:-auto}
|
REMOTE_AUDIO_SOURCE=${REMOTE_AUDIO_SOURCE:-auto}
|
||||||
REMOTE_AUDIO_QUIESCE_USER_AUDIO=${REMOTE_AUDIO_QUIESCE_USER_AUDIO:-auto}
|
REMOTE_AUDIO_QUIESCE_USER_AUDIO=${REMOTE_AUDIO_QUIESCE_USER_AUDIO:-auto}
|
||||||
ANALYSIS_NORMALIZE=${ANALYSIS_NORMALIZE:-1}
|
ANALYSIS_NORMALIZE=${ANALYSIS_NORMALIZE:-1}
|
||||||
|
ANALYSIS_SCALE_WIDTH=${ANALYSIS_SCALE_WIDTH:-1280}
|
||||||
SSH_OPTS=${SSH_OPTS:-"-o BatchMode=yes -o ConnectTimeout=5"}
|
SSH_OPTS=${SSH_OPTS:-"-o BatchMode=yes -o ConnectTimeout=5"}
|
||||||
LOCAL_AUDIO_SANITY=${LOCAL_AUDIO_SANITY:-1}
|
LOCAL_AUDIO_SANITY=${LOCAL_AUDIO_SANITY:-1}
|
||||||
PROBE_PREBUILD=${PROBE_PREBUILD:-1}
|
PROBE_PREBUILD=${PROBE_PREBUILD:-1}
|
||||||
@ -78,10 +79,6 @@ remote_audio_source=$7
|
|||||||
remote_audio_quiesce_user_audio=$8
|
remote_audio_quiesce_user_audio=$8
|
||||||
|
|
||||||
rm -f "${remote_capture}"
|
rm -f "${remote_capture}"
|
||||||
video_args=(-f video4linux2 -framerate "${video_fps}" -video_size "${video_size}")
|
|
||||||
if [[ -n "${video_format}" ]]; then
|
|
||||||
video_args+=(-input_format "${video_format}")
|
|
||||||
fi
|
|
||||||
|
|
||||||
restore_user_audio() {
|
restore_user_audio() {
|
||||||
systemctl --user start pipewire.socket pipewire-pulse.socket wireplumber.service >/dev/null 2>&1 || true
|
systemctl --user start pipewire.socket pipewire-pulse.socket wireplumber.service >/dev/null 2>&1 || true
|
||||||
@ -111,11 +108,33 @@ resolve_pulse_source() {
|
|||||||
'
|
'
|
||||||
}
|
}
|
||||||
|
|
||||||
|
resolve_video_size() {
|
||||||
|
local requested=$1
|
||||||
|
if [[ "${requested}" != "auto" ]]; then
|
||||||
|
printf '%s\n' "${requested}"
|
||||||
|
return 0
|
||||||
|
fi
|
||||||
|
if ! command -v v4l2-ctl >/dev/null 2>&1; then
|
||||||
|
printf '1280x720\n'
|
||||||
|
return 0
|
||||||
|
fi
|
||||||
|
local listing
|
||||||
|
listing="$(v4l2-ctl -d /dev/video0 --list-formats-ext 2>/dev/null || true)"
|
||||||
|
local preferred
|
||||||
|
for preferred in 1920x1080 1360x768 1280x720; do
|
||||||
|
if grep -q "Size: Discrete ${preferred}" <<<"${listing}"; then
|
||||||
|
printf '%s\n' "${preferred}"
|
||||||
|
return 0
|
||||||
|
fi
|
||||||
|
done
|
||||||
|
printf '1280x720\n'
|
||||||
|
}
|
||||||
|
|
||||||
resolve_pw_audio_target() {
|
resolve_pw_audio_target() {
|
||||||
if ! command -v pw-dump >/dev/null 2>&1 || ! command -v python3 >/dev/null 2>&1; then
|
if ! command -v pw-dump >/dev/null 2>&1 || ! command -v python3 >/dev/null 2>&1; then
|
||||||
return 1
|
return 1
|
||||||
fi
|
fi
|
||||||
pw-dump | python3 - <<'PY'
|
pw-dump | python3 -c '
|
||||||
import json
|
import json
|
||||||
import sys
|
import sys
|
||||||
|
|
||||||
@ -140,7 +159,7 @@ for obj in objs:
|
|||||||
raise SystemExit(0)
|
raise SystemExit(0)
|
||||||
|
|
||||||
raise SystemExit(1)
|
raise SystemExit(1)
|
||||||
PY
|
'
|
||||||
}
|
}
|
||||||
|
|
||||||
capture_mode="alsa"
|
capture_mode="alsa"
|
||||||
@ -208,13 +227,20 @@ case "${remote_capture_stack}" in
|
|||||||
;;
|
;;
|
||||||
esac
|
esac
|
||||||
|
|
||||||
|
resolved_video_size="$(resolve_video_size "${video_size}")"
|
||||||
|
printf 'using video mode: %s (%s)\n' "${resolved_video_size}" "${video_format:-driver-default}" >&2
|
||||||
|
video_args=(-f video4linux2 -framerate "${video_fps}" -video_size "${resolved_video_size}")
|
||||||
|
if [[ -n "${video_format}" ]]; then
|
||||||
|
video_args+=(-input_format "${video_format}")
|
||||||
|
fi
|
||||||
|
|
||||||
quiesce_for_alsa=0
|
quiesce_for_alsa=0
|
||||||
case "${remote_audio_quiesce_user_audio}" in
|
case "${remote_audio_quiesce_user_audio}" in
|
||||||
1|true|yes)
|
1|true|yes)
|
||||||
quiesce_for_alsa=1
|
quiesce_for_alsa=1
|
||||||
;;
|
;;
|
||||||
auto)
|
auto)
|
||||||
if [[ "${audio_mode}" == "alsa" ]]; then
|
if [[ "${capture_mode}" == "alsa" ]]; then
|
||||||
quiesce_for_alsa=1
|
quiesce_for_alsa=1
|
||||||
fi
|
fi
|
||||||
;;
|
;;
|
||||||
@ -305,14 +331,16 @@ if ssh ${SSH_OPTS} "${TETHYS_HOST}" "test -f '${REMOTE_CAPTURE}'"; then
|
|||||||
ssh ${SSH_OPTS} "${TETHYS_HOST}" bash -s -- \
|
ssh ${SSH_OPTS} "${TETHYS_HOST}" bash -s -- \
|
||||||
"${REMOTE_CAPTURE}" \
|
"${REMOTE_CAPTURE}" \
|
||||||
"${remote_fetch_capture}" \
|
"${remote_fetch_capture}" \
|
||||||
"${VIDEO_FPS}" <<'REMOTE_NORMALIZE_SCRIPT' || normalize_status=$?
|
"${VIDEO_FPS}" \
|
||||||
|
"${ANALYSIS_SCALE_WIDTH}" <<'REMOTE_NORMALIZE_SCRIPT' || normalize_status=$?
|
||||||
set -euo pipefail
|
set -euo pipefail
|
||||||
src=$1
|
src=$1
|
||||||
dst=$2
|
dst=$2
|
||||||
fps=$3
|
fps=$3
|
||||||
|
scale_width=$4
|
||||||
ffmpeg -hide_banner -loglevel error -y \
|
ffmpeg -hide_banner -loglevel error -y \
|
||||||
-i "${src}" \
|
-i "${src}" \
|
||||||
-vf "fps=${fps}" \
|
-vf "fps=${fps},scale='min(${scale_width},iw)':-2" \
|
||||||
-c:v libx264 -preset ultrafast -crf 12 -g 1 -pix_fmt yuv420p \
|
-c:v libx264 -preset ultrafast -crf 12 -g 1 -pix_fmt yuv420p \
|
||||||
-c:a pcm_s16le \
|
-c:a pcm_s16le \
|
||||||
"${dst}"
|
"${dst}"
|
||||||
|
|||||||
Loading…
x
Reference in New Issue
Block a user