X-Git-Url: https://git.distorted.org.uk/~mdw/disorder/blobdiff_plain/ec57f6c97b41d54ade912f7e3b9f727b40e38e16..d0b4f0acd54eeebcde98a1b4476b232dbece6048:/lib/uaudio-command.c diff --git a/lib/uaudio-command.c b/lib/uaudio-command.c index b9a1abb..2c610ff 100644 --- a/lib/uaudio-command.c +++ b/lib/uaudio-command.c @@ -34,6 +34,7 @@ #include "mem.h" #include "wstat.h" #include "uaudio.h" +#include "configuration.h" /** @brief Pipe to subprocess */ static int command_fd; @@ -43,6 +44,7 @@ static pid_t command_pid; static const char *const command_options[] = { "command", + "pause-mode", NULL }; @@ -69,7 +71,7 @@ static void command_open(void) { int pfd[2]; const char *command; - if(!(command = uaudio_get("command"))) + if(!(command = uaudio_get("command", NULL))) fatal(0, "'command' not set"); xpipe(pfd); command_pid = xfork(); @@ -114,13 +116,23 @@ static size_t command_play(void *buffer, size_t nsamples) { static void command_start(uaudio_callback *callback, void *userdata) { + const char *pausemode = uaudio_get("pause-mode", "silence"); + unsigned flags = 0; + + if(!strcmp(pausemode, "silence")) + flags |= UAUDIO_THREAD_FAKE_PAUSE; + else if(!strcmp(pausemode, "suspend")) + ; + else + fatal(0, "unknown pause mode '%s'", pausemode); command_open(); uaudio_schedule_init(); uaudio_thread_start(callback, userdata, command_play, uaudio_channels, - 4096 / uaudio_sample_size); + 4096 / uaudio_sample_size, + flags); } static void command_stop(void) { @@ -137,13 +149,19 @@ static void command_deactivate(void) { uaudio_thread_deactivate(); } +static void command_configure(void) { + uaudio_set("command", config->speaker_command); + uaudio_set("pause-mode", config->pause_mode); +} + const struct uaudio uaudio_command = { .name = "command", .options = command_options, .start = command_start, .stop = command_stop, .activate = command_activate, - .deactivate = command_deactivate + .deactivate = command_deactivate, + .configure = command_configure, }; /*