chiark / gitweb /
Don't look up before/after code points more than once in word boundary
[disorder] / lib / uaudio-command.c
index 096888d064a3f12df6429776fce4b1b109637c1b..2c610ff08225e4d7fa478bfdc0eeccb08f61a8b8 100644 (file)
@@ -44,6 +44,7 @@ static pid_t command_pid;
 
 static const char *const command_options[] = {
   "command",
+  "pause-mode",
   NULL
 };
 
@@ -115,6 +116,15 @@ 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,
@@ -122,7 +132,7 @@ static void command_start(uaudio_callback *callback,
                       command_play,
                       uaudio_channels,
                      4096 / uaudio_sample_size,
-                      UAUDIO_THREAD_FAKE_PAUSE);
+                      flags);
 }
 
 static void command_stop(void) {
@@ -141,6 +151,7 @@ static void command_deactivate(void) {
 
 static void command_configure(void) {
   uaudio_set("command", config->speaker_command);
+  uaudio_set("pause-mode", config->pause_mode);
 }
 
 const struct uaudio uaudio_command = {