X-Git-Url: https://www.chiark.greenend.org.uk/ucgi/~mdw/git/disorder/blobdiff_plain/af21fb6be8e226ce86b47ed923ee124e739ca48c..c5fbc6c7535ef526dcdc64b43ec5d8ff6c161b2c:/clients/playrtp.c diff --git a/clients/playrtp.c b/clients/playrtp.c index 1313a5e..eda7ce9 100644 --- a/clients/playrtp.c +++ b/clients/playrtp.c @@ -500,7 +500,7 @@ struct packet *playrtp_next_packet(void) { } /* display usage message and terminate */ -static void help(void) { +static void attribute((noreturn)) help(void) { xprintf("Usage:\n" " disorder-playrtp [OPTIONS] [[ADDRESS] PORT]\n" "Options:\n" @@ -704,7 +704,7 @@ int main(int argc, char **argv) { int monitor = 0; static const int one = 1; - static const struct addrinfo prefs = { + struct addrinfo prefs = { .ai_flags = AI_PASSIVE, .ai_family = PF_INET, .ai_socktype = SOCK_DGRAM, @@ -754,6 +754,7 @@ int main(int argc, char **argv) { } } if(config_read(0, NULL)) disorder_fatal(0, "cannot read configuration"); + /* Choose a sensible default audio backend */ if(!backend) { backend = uaudio_default(uaudio_apis, UAUDIO_API_CLIENT); if(!backend) @@ -795,6 +796,12 @@ int main(int argc, char **argv) { struct sockaddr *addr; socklen_t addr_len; if(!strcmp(sl.s[0], "-")) { + /* We'll need a connection to request the incoming stream, so open one if + * we don't have one already */ + if(!c) { + if(!(c = disorder_new(1))) exit(EXIT_FAILURE); + if(disorder_connect(c)) exit(EXIT_FAILURE); + } /* Pick address family to match known-working connectivity to the server */ int family = disorder_client_af(c); /* Get a list of interfaces */ @@ -803,6 +810,7 @@ int main(int argc, char **argv) { disorder_fatal(errno, "error calling getifaddrs"); /* Try to pick a good one */ for(; ifa; ifa = ifa->ifa_next) { + if(!ifa->ifa_addr) continue; if(bestifa == NULL || compare_interfaces(ifa, bestifa, family) > 0) bestifa = ifa; @@ -966,6 +974,7 @@ 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 */