X-Git-Url: https://git.distorted.org.uk/~mdw/disorder/blobdiff_plain/e8c185c3c5870f21f8352c9684e6feb9c1ef37a5..ec57f6c97b41d54ade912f7e3b9f727b40e38e16:/lib/uaudio-command.c diff --git a/lib/uaudio-command.c b/lib/uaudio-command.c index 12a47dc..b9a1abb 100644 --- a/lib/uaudio-command.c +++ b/lib/uaudio-command.c @@ -17,7 +17,13 @@ * along with this program. If not, see . */ /** @file lib/uaudio-command.c - * @brief Support for commmand backend */ + * @brief Support for commmand backend + * + * We use the code in @ref lib/uaudio-schedule.c to ensure that we write at + * approximately the 'real' rate. For disorder-playrtp this isn't very useful + * (thought it might reduce the size of various buffers downstream of us) but + * when run from the speaker it means that pausing stands a chance of working. + */ #include "common.h" #include @@ -80,11 +86,12 @@ static void command_open(void) { fatal(errno, "error executing /bin/sh"); } close(pfd[0]); - command_pid = pfd[1]; + command_fd = pfd[1]; } /** @brief Send audio data to subprocess */ static size_t command_play(void *buffer, size_t nsamples) { + uaudio_schedule_synchronize(); const size_t bytes = nsamples * uaudio_sample_size; int written = write(command_fd, buffer, bytes); if(written < 0) { @@ -100,12 +107,15 @@ static size_t command_play(void *buffer, size_t nsamples) { fatal(errno, "error writing to audio command subprocess"); } } - return written / uaudio_sample_size; + const size_t written_samples = written / uaudio_sample_size; + uaudio_schedule_update(written_samples); + return written_samples; } static void command_start(uaudio_callback *callback, void *userdata) { command_open(); + uaudio_schedule_init(); uaudio_thread_start(callback, userdata, command_play, @@ -119,6 +129,7 @@ static void command_stop(void) { } static void command_activate(void) { + uaudio_schedule_reactivated = 1; uaudio_thread_activate(); }