#!/usr/bin/env bash set -euo pipefail ROOT_DIR="$(cd -- "$(dirname -- "${BASH_SOURCE[0]}")/.." && pwd)" BUILD_DIR="${BUILD_DIR:-$ROOT_DIR/build}" REPLAY_BIN="${REPLAY_BIN:-$BUILD_DIR/mcap_replay_tester}" FFPLAY_BIN="${FFPLAY_BIN:-ffplay}" FFPLAY_ARGS="${FFPLAY_ARGS:-}" usage() { cat <<'EOF' Usage: replay_mcap.sh [h264|h265] This replays MCAP video using the recorded timestamps and pipes frames to ffplay. The optional codec argument defaults to h264. Extra ffplay flags may be supplied via FFPLAY_ARGS, for example: FFPLAY_ARGS='-window_title replay'. EOF } if [[ "${1:-}" == "--help" || "${1:-}" == "-h" ]]; then usage exit 0 fi if [[ $# -lt 1 || $# -gt 2 ]]; then usage >&2 exit 1 fi INPUT_PATH="$1" FORMAT="${2:-h264}" if [[ "$FORMAT" != "h264" && "$FORMAT" != "h265" ]]; then echo "unsupported format: $FORMAT (expected h264 or h265)" >&2 exit 1 fi if [[ ! -f "$INPUT_PATH" ]]; then echo "input MCAP not found: $INPUT_PATH" >&2 exit 1 fi if [[ ! -x "$REPLAY_BIN" ]]; then echo "replay binary not found: $REPLAY_BIN" >&2 exit 1 fi if ! command -v "$FFPLAY_BIN" >/dev/null 2>&1; then echo "ffplay not found: $FFPLAY_BIN" >&2 exit 1 fi extra_args=() if [[ -n "$FFPLAY_ARGS" ]]; then # shellcheck disable=SC2206 extra_args=($FFPLAY_ARGS) fi cmd=( "$REPLAY_BIN" "$INPUT_PATH" --expect-format "$FORMAT" --ffplay-path "$FFPLAY_BIN" ) for arg in "${extra_args[@]}"; do cmd+=(--ffplay-arg "$arg") done "${cmd[@]}"