#!/bin/sh

# defaults
_format="-input_format mjpeg"

# loop through arguments
for arg in $@
do
    # set values based of arguments found
    case $arg in
          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" ;;
               30) shift; _fps="-framerate 30" ;;
               60) shift; _fps="-framerate 60" ;;
              max) shift; _res="max" ;;
    [0-9]*x[0-9]*) shift; _res="-video_size $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
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 \
                       )"
    _format="-input_format mjpeg"
fi

# list supported formats + resolutions
if [ ! -z "$_list" ]
then
    command="$(echo "ffplay -f v4l2 -list_formats all -i $_dev")"
    echo "starting: $command"
    $command 2>&1 \
        | grep '^\[video4linux2' \
        | cut -d: -f3,4 \
        | sed -e 's/^[ \t]*//;s/ : /: /'
    exit 0
fi

if [ ! -z "$_start" ]
then
    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: 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 [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 "    <width>x<height>  - manually set resolution (see list command)"
    echo "  framerates:"
    echo "    30                - set framerate to 30 fps"
    echo "    60                - set framerate to 60 fps"
    echo "  <device>            - set video device number (defaults is 0)"
    exit 2
fi