#!/bin/sh /etc/rc.common
# Copyright (C) 2017 OpenWrt.org

# TODO: 
# * support start multiple streams with one server
# * support multiple usernames
# * support HLS, etc.

START=90
STOP=10

USE_PROCD=1

SERVICE=v4l2rtspserver
PROG=/usr/bin/$SERVICE

error() {
        logger -t "$SERVICE" "$@"
}

start_instance() {
	local s="$1"

	config_get_bool enabled "$1" 'enabled' 0
	[ $enabled -eq 0 ] && return

	# validate device
	config_get device "$s" 'device'
	if [ ! -c "$device" ]; then
		error "device '$device' does not exist"
		return 1
	fi

	# get options
	config_get port "$s" 'port'
	config_get resolution "$s" 'resolution'
	config_get fps "$s" 'fps'
	config_get username "$s" 'username'
	config_get password "$s" 'password'
	config_get path "$s" 'path'
	config_get format "$s" 'format'

	# pull out resolution width and height from string
	local w="$(echo $resolution | cut -d'x' -f1)"
	local h="$(echo $resolution | cut -d'x' -f2)"
	
	# make sure format is uppercase
	format="$(echo $format | tr a-z A-Z)"

	# build args
	local args="-s"
	args="$args -P $port"
	args="$args -u ${path}"
	args="$args -F $fps"
	args="$args -W $w"
	args="$args -H $h"
	args="$args -f$format"
	args="$args -c" # fixes issue with corrupt frames with H264
		
	if [ -n "$username" ]; then
		args="$args -U ${username}:${password}"
	fi

	cmd="$PROG $args $device"

	# procd stuff
	procd_open_instance
	procd_set_param file /etc/config/$SERVICE
	procd_set_param command $cmd
	procd_set_param stdout 1
	procd_set_param stderr 1
	procd_add_mdns "rtsp" "tcp" "$port" "daemon=$SERVICE" "path=/$path"
	procd_close_instance
}

start_service() {
	config_load "$SERVICE"
	config_foreach start_instance "$SERVICE"
}

service_triggers() {
	procd_add_reload_trigger "$SERVICE"
}