|
|
|
#!/usr/bin/env sh
|
|
|
|
REAR_NODE="ov5640 4-004c"
|
|
|
|
REAR_LINK='"gc2145 4-003c":0->"sun6i-csi":0'
|
|
|
|
REAR_MODE="1920x1080@20"
|
|
|
|
FRONT_NODE="gc2145 4-003c"
|
|
|
|
FRONT_LINK='"ov5640 4-004c":0->"sun6i-csi":0'
|
|
|
|
FRONT_MODE="1600x1200@15"
|
|
|
|
FMTPIX='UYVY'
|
|
|
|
FMTBUS='UYVY8_2X8'
|
|
|
|
|
|
|
|
err() {
|
|
|
|
printf %b "$1" | dmenu -fn Terminus-20 -c -l 10
|
|
|
|
exit 1
|
|
|
|
}
|
|
|
|
setupmediactllinks() {
|
|
|
|
media-ctl -d /dev/media1 --links "$1"
|
|
|
|
media-ctl -d /dev/media1 --links "$2"
|
|
|
|
}
|
|
|
|
setupv4l2() {
|
|
|
|
MODE="$1"
|
|
|
|
NODE="$2"
|
|
|
|
RES="${MODE%%@*}"
|
|
|
|
SPEED="${MODE##*@}"
|
|
|
|
HEIGHT="${RES%%x*}"
|
|
|
|
WIDTH="${RES##*x}"
|
|
|
|
eval "media-ctl -d /dev/media1 --set-v4l2 '\"$NODE\":0[fmt:$FMTBUS/$RES@1/$SPEED]'"
|
|
|
|
v4l2-ctl --device /dev/video1 --set-fmt-video="width=$WIDTH,height=$HEIGHT,pixelformat=$FMTPIX" ||
|
|
|
|
err "Couldnt set up camera\n Is killswitch in right position?"
|
|
|
|
}
|
|
|
|
startmpv() {
|
|
|
|
MODE="$1"
|
|
|
|
TRANSPOSE="$2"
|
|
|
|
RES="${MODE%%@*}"
|
|
|
|
SPEED="${MODE##*@}"
|
|
|
|
HEIGHT="${RES##*x}"
|
|
|
|
WIDTH="${RES%%x*}"
|
|
|
|
|
|
|
|
# FFMpeg here is just converting V4L2 into rawvideo data to pipe to mpv which
|
|
|
|
# has better compatabilty with mpv's rawvideo demuxer (then v4l2 data). There
|
|
|
|
# (may) be a way to directly invoke the rawvideo demuxer with a v4l2 device
|
|
|
|
# in mpv; but this is simpler and more reliable for now.
|
|
|
|
ffmpeg -re -fflags nobuffer -f v4l2 -video_size $RES -i /dev/video1 -f rawvideo - |
|
|
|
|
mpv \
|
|
|
|
--cache-secs=0 --demuxer-readahead-secs=0 \
|
|
|
|
--demuxer-rawvideo-w=$WIDTH --demuxer-rawvideo-h=$HEIGHT \
|
|
|
|
--untimed --vo=xv --cache-pause=no --no-demuxer-thread \
|
|
|
|
--profile=low-latency --demuxer=rawvideo -vf transpose=$TRANSPOSE \
|
|
|
|
-
|
|
|
|
}
|
|
|
|
|
|
|
|
camerarear() {
|
|
|
|
setupmediactllinks "$REAR_LINK[0]" "$FRONT_LINK[1]"
|
|
|
|
setupv4l2 "$REAR_MODE" "$REAR_NODE"
|
|
|
|
startmpv "$REAR_MODE" 1
|
|
|
|
}
|
|
|
|
camerafront() {
|
|
|
|
setupmediactllinks "$FRONT_LINK[0]" "$REAR_LINK[1]"
|
|
|
|
setupv4l2 "$FRONT_MODE" "$FRONT_NODE"
|
|
|
|
startmpv "$FRONT_MODE" 3
|
|
|
|
}
|
|
|
|
|
|
|
|
cameramenu() {
|
|
|
|
CHOICE="$(
|
|
|
|
printf %b "Rear Camera\nFront Camera\nClose Menu" |
|
|
|
|
dmenu -fn Terminus-30 -c -p "Camera" -l 20
|
|
|
|
)"
|
|
|
|
if [ "$CHOICE" = "Close Menu" ]; then
|
|
|
|
exit 0
|
|
|
|
elif [ "$CHOICE" = "Rear Camera" ]; then
|
|
|
|
st -e $0 camerarear
|
|
|
|
elif [ "$CHOICE" = "Front Camera" ]; then
|
|
|
|
st -e $0 camerafront
|
|
|
|
fi
|
|
|
|
}
|
|
|
|
|
|
|
|
if [ $# -gt 0 ]; then
|
|
|
|
"$@"
|
|
|
|
else
|
|
|
|
cameramenu
|
|
|
|
fi
|