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