This repository has no description
1.9 kB
83 lines
1#!/usr/bin/env bash
2
3SHADER_PATH="@shaderPath@"
4ASCII_MODE=false
5
6while [[ $# -gt 0 ]]; do
7 case $1 in
8 --ascii)
9 ASCII_MODE=true
10 shift
11 ;;
12 *)
13 echo "Unknown option: $1" >&2
14 echo "Usage: android-webcam [--ascii]" >&2
15 exit 1
16 ;;
17 esac
18done
19
20# Check if v4l2loopback module is loaded
21if ! lsmod | grep -q v4l2loopback; then
22 echo "Error: v4l2loopback kernel module is not loaded" >&2
23 echo "Make sure you have rebooted after enabling the android-webcam module" >&2
24 exit 1
25fi
26
27if $ASCII_MODE; then
28 # ASCII mode needs both devices
29 if [[ ! -e /dev/video0 ]] || [[ ! -e /dev/video1 ]]; then
30 echo "Error: /dev/video0 and /dev/video1 must exist for ASCII mode" >&2
31 echo "v4l2loopback should be configured with devices=2" >&2
32 exit 1
33 fi
34else
35 if [[ ! -e /dev/video0 ]]; then
36 echo "Error: /dev/video0 must exist" >&2
37 exit 1
38 fi
39fi
40
41cleanup() {
42 echo "Stopping..."
43 kill $SCRCPY_PID 2>/dev/null || true
44 [[ -n "${FFMPEG_PID:-}" ]] && kill $FFMPEG_PID 2>/dev/null || true
45}
46trap cleanup EXIT
47
48# Start scrcpy to stream phone camera to /dev/video0
49echo "Starting phone camera stream..."
50scrcpy \
51 --video-source=camera \
52 --camera-facing=back \
53 --no-audio \
54 --v4l2-sink=/dev/video0 \
55 --video-encoder=c2.exynos.h264.encoder \
56 --camera-size=1920x1080 &
57SCRCPY_PID=$!
58
59if $ASCII_MODE; then
60 sleep 2
61
62 # Start ffmpeg with ASCII shader to /dev/video1
63 echo "Starting ASCII filter pipeline..."
64 ffmpeg \
65 -f v4l2 -i /dev/video0 \
66 -vf "libplacebo=custom_shader_path=${SHADER_PATH}" \
67 -f v4l2 -pix_fmt yuv420p /dev/video1 &
68 FFMPEG_PID=$!
69
70 echo ""
71 echo "Android ASCII webcam running!"
72 echo " Raw camera: /dev/video0 (Phone Camera)"
73 echo " ASCII output: /dev/video1 (ASCII Webcam)"
74else
75 echo ""
76 echo "Android webcam running!"
77 echo " Camera: /dev/video0 (Phone Camera)"
78fi
79
80echo ""
81echo "Press Ctrl+C to stop"
82
83wait