aboutsummaryrefslogtreecommitdiff
path: root/sound/squeezelite/files/squeezelite.init
blob: e5dc8068d4503e4e822efe7aac73aff467bb31fa (plain)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
#!/bin/sh /etc/rc.common
# Copyright (C) 2015 OpenWrt.org

START=99
STOP=1

USE_PROCD=1
PROG=/usr/bin/squeezelite

# Check if a codec is disabled in the configuration (ie "decode_<codec> 0")
checkcodec() {
	local codec
	config_get_bool codec options "$1" 1

	if [ "$codec" -eq 0 ] ; then
		if [ -z "$3" ] ; then
			echo "-e $2"
		else
			echo "$3,$2"
	        fi
	else
		echo "$3"
	fi
}

make_cmdline() {
	cmdline=""

	local name
	config_get name options name "SqueezeWrt"
	cmdline="$cmdline -n $name"

	local model_name
	config_get model_name options model_name "SqueezeLite"
	cmdline="$cmdline -M $model_name"

	local interface
	config_get interface options interface ""
	[ -n "$interface" ] && cmdline="$cmdline -I $interface"

	local device
	config_get device options device ""
	[ -n "$device" ] && cmdline="$cmdline -o $device"

	local alsa_buffer
	config_get alsa_buffer options alsa_buffer 200
	[ "$alsa_buffer" -eq 0 ] && alsa_buffer="200"

	local alsa_period
	config_get alsa_period options alsa_period 4
	[ "$alsa_period" -eq 0 ] && alsa_period="4"

	local alsa_format
	config_get alsa_format options alsa_format 16
	[ "$alsa_format" = "0" ] && alsa_format="16"

	local alsa_mmap
	config_get alsa_mmap options alsa_mmap 0
	cmdline="$cmdline -a $alsa_buffer:$alsa_period:$alsa_format:$alsa_mmap"

	local stream_bufsiz
	local out_bufsiz
	config_get stream_bufsiz options stream_bufsiz 2048
	config_get out_bufsiz options out_bufsiz 3763
	cmdline="$cmdline -b $stream_bufsiz:$out_bufsiz"

	local max_sr
	config_get max_sr options max_sr 0
	[ "$max_sr" -ne 0 ] && {
		max_sr="-r $max_sr"

		local sr_delay
		config_get sr_delay options sr_delay 0
		[ "$sr_delay" -ne 0 ] && max_sr="$max_sr:$sr_delay"
		cmdline="$cmdline $max_sr"
	}

	local close_delay
	config_get close_delay options close_delay 0
	[ "$close_delay" -ne 0 ] && cmdline="$cmdline -C $close_delay"

	local server_addr
	config_get server_addr options server_addr ""
	[ -n "$server_addr" ] && {
		local server_port
		config_get server_port options server_port 3483
		cmdline="$cmdline -s $server_addr:$server_port"
	}

	local priority
	config_get priority options priority 0
	[ "$priority" -ne 0 ] && cmdline="$cmdline -p $priority"

	local excl_codecs=""
	excl_codecs=$(checkcodec decode_flac flac "$excl_codecs")
	excl_codecs=$(checkcodec decode_mp3 mp3 "$excl_codecs")
	excl_codecs=$(checkcodec decode_aac aac "$excl_codecs")
	excl_codecs=$(checkcodec decode_ogg ogg "$excl_codecs")
	excl_codecs=$(checkcodec decode_wma_alac wma,alac "$excl_codecs")
	cmdline="$cmdline $excl_codecs"

	local dop
	config_get dop options dsd_over_pcm 0
	[ "$dop" -eq 1 ] && cmdline="$cmdline -D"
}

start_service() {
	config_load squeezelite

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

	# Build command params
	make_cmdline

	procd_open_instance
	logger -t 'squeezelite' "$cmdline"
	procd_set_param command "$PROG" $cmdline
	procd_close_instance
}

# Wait for service to exit and release sockets
reload_service() {
	stop
	sleep 2
	start
}

restart() {
	reload_service
}