summaryrefslogtreecommitdiff
path: root/debian/.local/bin/webcam
diff options
context:
space:
mode:
Diffstat (limited to 'debian/.local/bin/webcam')
-rwxr-xr-xdebian/.local/bin/webcam48
1 files changed, 48 insertions, 0 deletions
diff --git a/debian/.local/bin/webcam b/debian/.local/bin/webcam
new file mode 100755
index 0000000..0a4a297
--- /dev/null
+++ b/debian/.local/bin/webcam
@@ -0,0 +1,48 @@
+#!/bin/sh
+
+case "$1" in
+-h | h | hflip) flip="--vf=lavfi=hflip" ;;
+-v | v | vflip) flip="--vf=lavfi=vflip" ;;
+-hv | hv | hvflip) flip="--vf=lavfi=hflip,vflip" ;;
+*) flip="" ;;
+esac
+
+# Extract full camera names and their first /dev/video* device
+cameras=$(
+ v4l2-ctl --list-devices | awk '
+ BEGIN { RS=""; FS="\n" }
+ {
+ name = $1;
+ sub(/ \(.*$/, "", name);
+ gsub(/^[ \t]+|[ \t]+$/, "", name);
+ for (i=2; i<=NF; i++) {
+ if ($i ~ /\/dev\/video/) {
+ gsub(/^[ \t]+/, "", $i);
+ print name "|" $i;
+ break;
+ }
+ }
+ }'
+)
+
+# Extract only camera names for dmenu
+names=$(echo "$cameras" | cut -d '|' -f1)
+
+# Select camera with dmenu
+choice=$(echo "$names" | dmenu -i -p 'Choose a camera:')
+
+# Find corresponding /dev/video* device
+camera=$(echo "$cameras" | awk -F '|' -v sel="$choice" '$1 == sel {print $2}')
+
+# If no selection, exit
+[ -z "$camera" ] && exit 1
+
+mpv --untimed \
+ --no-cache \
+ --no-osc \
+ --no-input-default-bindings \
+ --profile=low-latency \
+ --input-conf=/dev/null \
+ --title=webcam \
+ --x11-name=webcam \
+ $flip "$camera"