aboutsummaryrefslogtreecommitdiff
path: root/home/dot_local/share/bin/executable_ccpreview
diff options
context:
space:
mode:
Diffstat (limited to 'home/dot_local/share/bin/executable_ccpreview')
-rw-r--r--home/dot_local/share/bin/executable_ccpreview74
1 files changed, 74 insertions, 0 deletions
diff --git a/home/dot_local/share/bin/executable_ccpreview b/home/dot_local/share/bin/executable_ccpreview
new file mode 100644
index 0000000..9f13acc
--- /dev/null
+++ b/home/dot_local/share/bin/executable_ccpreview
@@ -0,0 +1,74 @@
+#!/bin/sh
+
+# capture card sysfs device path
+SYSFS_PATH="/devices/pci0000:00/0000:00:14.0/usb1/1-12"
+
+# script args
+WIDTH="$1"
+HEIGHT="$2"
+FRAMERATE="$3"
+
+# find audio device (pulseaudio)
+PULSE_DEVICE="$(pactl -f json list sources | jq \
+ --arg sysfs_path "$SYSFS_PATH" --raw-output \
+ '.[] | select(.properties["sysfs.path"] | . != null and startswith($sysfs_path)) | .name')"
+AUDIO_URL="av://pulse:$PULSE_DEVICE"
+
+# find video device (video4linux)
+V4L_PATH="$(find "/sys$SYSFS_PATH" -name 'video4linux' | head -n1)"
+V4L_PATH="$(find "$V4L_PATH" -name 'index' | xargs grep -l '^0$')"
+V4L_PATH="$(echo "$V4L_PATH" | sed 's#/index$#/uevent#')"
+VIDEO_DEVICE="$(. "$V4L_PATH" ; echo "/dev/$DEVNAME")"
+VIDEO_DEVICE="$(readlink -f "$VIDEO_DEVICE")"
+VIDEO_URL="av://v4l2:$VIDEO_DEVICE"
+
+RESOLUTION="${WIDTH}x${HEIGHT}"
+
+fork() {
+ JOBS="$JOBS $(
+ "$@" > /dev/null 2> /dev/null &
+ echo $!
+ )"
+}
+
+# set capture card v4l parameters
+v4l2-ctl --silent --device "$VIDEO_DEVICE" \
+ --set-parm "$FRAMERATE" \
+ --set-fmt-video "width=$WIDTH,height=$HEIGHT,pixelformat=MJPG" \
+ --set-ctrl "brightness=0,contrast=128,saturation=128,hue=0"
+
+_mpv() {
+ fork mpv \
+ --quiet --msg-level=input=no \
+ --no-config --input-conf=/dev/null \
+ --no-osc --no-border \
+ --no-input-default-bindings --pause=no --force-seekable=no \
+ --cache=no \
+ "$@"
+}
+
+# audio preview
+_mpv \
+ --no-demuxer-thread \
+ --audio-buffer=0 \
+ --cache-pause=no \
+ --interpolation=no \
+ --stream-buffer-size=4k \
+ --profile=low-latency \
+ --speed=1.001 \
+ "$AUDIO_URL"
+
+# video preview
+_mpv \
+ --untimed --no-correct-pts --no-demuxer-thread \
+ --profile=low-latency \
+ --demuxer-lavf-o-add=input_format=mjpeg \
+ --demuxer-lavf-o-add=framerate="$FRAMERATE" \
+ --demuxer-lavf-o-add=resolution="$RESOLUTION" \
+ --demuxer-lavf-o-add=rw_timeout=30000000 \
+ --speed=1.05 \
+ "$VIDEO_URL"
+
+sleep infinity
+kill -9 -- $JOBS
+