Fresh pull from upstream (stable) package feed
[librecmc/package-feed.git] / sound / squeezelite / files / squeezelite.init
1 #!/bin/sh /etc/rc.common
2 # Copyright (C) 2015 OpenWrt.org
3
4 START=99
5 STOP=1
6
7 USE_PROCD=1
8 PROG=/usr/bin/squeezelite
9
10 #
11 # Auto config checks for existing codec installations if not specified in config
12 # Explicit disable (override) by setting appropriate "decode_xxx" in config
13 #
14 checkcodec() {
15         config_get_bool auto_conf options "decoder_auto_conf" 1
16         config_get_bool codec options "$1" $auto_conf
17         
18         if [ $codec -ne 0 ] ; then 
19                 if [ $auto_conf -eq 0 ] ; then
20                         #force use requested
21                         echo "$4"
22                 else
23                         if [ -e "/usr/lib/${2}" ] ; then
24                                 # Use codec (it exists)
25                                 echo "$4"
26                         else
27                                 #exclude non-existant
28                                 if [ -z "$4" ] ; then
29                                         echo "-e $3"
30                                 else
31                                         echo "$4,$3"
32                                 fi
33                         fi
34                 fi
35         else
36                 # explicitly excluded
37                 if [ -z "$4" ] ; then
38                         echo "-e $3"
39                 else
40                         echo "$4,$3"
41                 fi
42         fi
43 }
44
45 make_cmdline() {
46         cmdline=""
47
48         config_get name options name "SqueezeWrt"
49         cmdline="$cmdline -n $name"
50
51         config_get model_name options model_name "SqueezeLite"
52         cmdline="$cmdline -M $model_name"
53
54         config_get interface options interface ""
55         [ -n "$interface" ] && cmdline="$cmdline -I $interface"
56
57         config_get device options device ""
58         [ -n "$device" ] && cmdline="$cmdline -o $device"
59
60         config_get alsa_buffer options alsa_buffer 200
61         [ $alsa_buffer -eq 0 ] && alsa_buffer="200"
62     
63         config_get alsa_period options alsa_period 4
64         [ $alsa_period -eq 0 ] && alsa_period="4"
65     
66         config_get alsa_format options alsa_format 16
67         [ $alsa_format = "0" ] && alsa_format="16"
68
69         config_get alsa_mmap options alsa_mmap 0
70         cmdline="$cmdline -a $alsa_buffer:$alsa_period:$alsa_format:$alsa_mmap"
71
72         config_get stream_bufsiz options stream_bufsiz 2048
73         config_get out_bufsiz options out_bufsiz 3763
74         cmdline="$cmdline -b $stream_bufsiz:$out_bufsiz"
75
76         config_get max_sr options max_sr 0
77         if [ $max_sr -ne 0 ] ; then
78                 max_sr="-r $max_sr"
79
80                 config_get sr_delay options sr_delay 0
81                 [ $sr_delay -ne 0 ] &&  max_sr="$max_sr:$sr_delay"
82                 cmdline="$cmdline $max_sr"
83         fi
84
85
86         config_get close_delay options close_delay 0
87         [ $close_delay -ne 0 ] && cmdline="$cmdline -C $close_delay"
88
89         config_get server_addr options server_addr ""
90         if [ -n "$server_addr" ] ; then
91                 config_get server_port options server_port 3483
92                 cmdline="$cmdline -s $server_addr:$server_port"
93         fi
94
95         config_get priority options priority 0
96         [ $priority -ne 0 ] && cmdline="$cmdline -p $priority"
97
98         #
99         # ***NOTE: codec lib names are in squeezelite.h (set decode_auto_conf to 0 to ignore)
100         #
101         local excl_codecs=""
102         local vorbis_lib="libvorbisidec.so.1"
103
104         excl_codecs=`checkcodec decode_flac "libFLAC.so.8" flac "$excl_codecs"`
105         excl_codecs=`checkcodec decode_mp3 "libmad.so.0" mp3 "$excl_codecs"`
106         excl_codecs=`checkcodec decode_aac "libfaad.so.2" aac "$excl_codecs"`
107
108         [ -e "/usr/lib/$vorbis_lib" ] || vorbis_lib="libvorbisfile.so.3"
109
110         excl_codecs=`checkcodec decode_ogg "$vorbis_lib" ogg "$excl_codecs"`
111         excl_codecs=`checkcodec decode_wma_alac "libavcodec.so.56" wma,alac "$excl_codecs"`
112         cmdline="$cmdline $excl_codecs"
113
114         config_get dop options dsd_over_pcm 0
115         [ $dop -eq 1 ] && cmdline="$cmdline -D"
116 }
117
118 start_service() {
119         config_load squeezelite
120
121         config_get_bool enabled options 'enabled' 0
122         [ $enabled -eq 0 ] && return
123
124         # Build command params
125         make_cmdline
126
127         procd_open_instance
128         logger -t 'squeezelite' "$cmdline"
129         procd_set_param command "$PROG" $cmdline
130         procd_close_instance
131 }
132
133 # Wait for service to exit and release sockets
134 reload_service() {
135         stop
136         sleep 2
137         start
138 }
139
140 restart() {
141         reload_service
142 }