diff --git a/.bin/cam b/.bin/cam index b73b3c5..5c6fb40 100755 --- a/.bin/cam +++ b/.bin/cam @@ -1,27 +1,40 @@ #!/bin/sh +# defaults +_format="-input_format mjpeg" + +# loop through arguments for arg in $@ do + # set values based of arguments found case $arg in - start) shift; _start=1 ;; - stop) shift; _stop=1 ;; - list) shift; _list=1 ;; - mjpeg) shift; _format="-input_format mjpeg" ;; + s|start) shift; _start=1 ;; + k|kill|stop) shift; _stop=1 ;; + l|list) shift; _list=1 ;; raw) shift; _format="-input_format yuyv422" ;; fullhd) shift; _res="-video_size 1920x1080" ;; hd) shift; _res="-video_size 1280x720" ;; sd) shift; _res="-video_size 640x360" ;; - max) shift; _res=max ;; + 30) shift; _fps="-framerate 30" ;; + 60) shift; _fps="-framerate 60" ;; + max) shift; _res="max" ;; [0-9]*x[0-9]*) shift; _res="-video_size $arg" ;; - *) _dev="$arg" ;; + [0-9]) shift; _dev="$arg" ;; + *) shift; _unknown="$_unknown $arg" ;; esac done +if [ ! -z "$_unknown" ] +then + echo "unknown parameter(s): $_unknown" +fi # set device if [ -z "$_dev" ] then _dev="/dev/video0" +else + _dev="/dev/video$_dev" fi # set resolution @@ -29,9 +42,9 @@ if [ x"$_res" == x"max" ] then _res="-video_size $(ffplay -f v4l2 -list_formats all -i $_dev 2>&1 \ | grep mjpeg \ + | xargs \ | cut -d":" -f4 \ | cut -d " " -f2 \ - | tr-d " " \ )" _format="-input_format mjpeg" fi @@ -39,40 +52,50 @@ fi # list supported formats + resolutions if [ ! -z "$_list" ] then - ffplay -f v4l2 -list_formats all -i $_dev 2>&1 \ + command="$(echo "ffplay -f v4l2 -list_formats all -i $_dev")" + echo "starting: $command" + $command 2>&1 \ | grep '^\[video4linux2' \ - | cut -d: -f3,4 + | cut -d: -f3,4 \ + | sed -e 's/^[ \t]*//;s/ : /: /' exit 0 fi -command="$(echo "ffplay -loglevel quiet -f v4l2 $_format $_res -i $_dev" | xargs)" - if [ ! -z "$_start" ] then - echo "starting: $command" - $command > /dev/null 2>&1 & + command="ffplay -loglevel quiet -f v4l2 $_fps $_format $_res -i $_dev" + echo "starting: $command" | xargs + _SWM_WS=-1 $command > /dev/null 2>&1 & + [ $? -ne 0 ] \ + && echo "ffplay couldn't start" exit 0 fi + if [ ! -z "$_stop" ] then - echo "stopping: $command" - pkill -qf "$command" + echo "stopping: ffplay -loglevel quiet -f v4l2" + pkill -qf "ffplay -loglevel quiet -f v4l2" exit 0 fi if [ $(( _start + _stop + _list )) -eq 0 ] then - echo "usage: cam command [format] [resolution] [device]" + echo "usage: cam command [framerate] [format] [resolution] [device]" echo " commands:" echo " start - start camera" echo " stop - stop camera" echo " list - list supported formats and resolutions" echo " formats:" + echo " raw - reads the yuyv422 stream (default is mjpeg)" + echo " resolutions:" echo " sd - set video size to 640x360" echo " hd - set video size to 1280x720" echo " fullhd - set video size to 1920x1080" echo " max - set maximum video size (implies mjpeg format)" echo " x - manually set resolution (see list command)" - echo " - set video device (defaults to /dev/video0)" + echo " framerates:" + echo " 30 - set framerate to 30 fps" + echo " 60 - set framerate to 60 fps" + echo " - set video device number (defaults is 0)" exit 2 fi