chiark / gitweb /
clients/playrtp.c: Configure the backend audio device before use.
[disorder] / clients / playrtp.c
index 89e458e48504c471f327b0171b81bfe1099b91c9..f6e89d24391a95617bc056445c3ed1ce383a705b 100644 (file)
@@ -243,6 +243,7 @@ static void *control_thread(void attribute((unused)) *arg) {
   char *line;
   socklen_t salen;
   FILE *fp;
+  int vl, vr;
 
   assert(control_socket);
   unlink(control_socket);
@@ -276,9 +277,21 @@ static void *control_thread(void attribute((unused)) *arg) {
       if(!strcmp(line, "stop")) {
         disorder_info("stopped via %s", control_socket);
         exit(0);                          /* terminate immediately */
-      }
-      if(!strcmp(line, "query"))
+      } else if(!strcmp(line, "query"))
         fprintf(fp, "running");
+      else if(!strcmp(line, "getvol")) {
+        if(backend->get_volume) backend->get_volume(&vl, &vr);
+        else vl = vr = 0;
+        fprintf(fp, "%d %d\n", vl, vr);
+      } else if(!strncmp(line, "setvol ", 7)) {
+        if(!backend->set_volume)
+          vl = vr = 0;
+        else if(sscanf(line + 7, "%d %d", &vl, &vr) == 2)
+          backend->set_volume(&vl, &vr);
+        else
+          backend->get_volume(&vl, &vr);
+        fprintf(fp, "%d %d\n", vl, vr);
+      }
       xfree(line);
     }
     if(fclose(fp) < 0)
@@ -647,10 +660,12 @@ static int compare_flags(const struct ifaddrs *a,
   unsigned aup = aflags & IFF_UP, bup = bflags & IFF_UP;
   if(aup != bup)
     return aup > bup ? 1 : -1;
+#if IFF_DYNAMIC
   /* Static addresses are better than dynamic */
   unsigned adynamic = aflags & IFF_DYNAMIC, bdynamic = bflags & IFF_DYNAMIC;
   if(adynamic != bdynamic)
     return adynamic < bdynamic ? 1 : -1;
+#endif
   unsigned aloopback = aflags & IFF_LOOPBACK, bloopback = bflags & IFF_LOOPBACK;
   /* Static addresses are better than dynamic */
   if(aloopback != bloopback)
@@ -951,7 +966,9 @@ int main(int argc, char **argv) {
   uaudio_set_format(44100/*Hz*/, 2/*channels*/,
                     16/*bits/channel*/, 1/*signed*/);
   uaudio_set("application", "disorder-playrtp");
+  backend->configure();
   backend->start(playrtp_callback, NULL);
+  if(backend->open_mixer) backend->open_mixer();
   /* We receive and convert audio data in a background thread */
   if((err = pthread_create(&ltid, 0, listen_thread, 0)))
     disorder_fatal(err, "pthread_create listen_thread");