static int outstream_sample_rate_callback(jack_nframes_t nframes, void *arg) { SoundIoOutStreamPrivate *os = (SoundIoOutStreamPrivate *)arg; SoundIoOutStream *outstream = &os->pub; if (nframes == (jack_nframes_t)outstream->sample_rate) { return 0; } else { outstream->error_callback(outstream, SoundIoErrorStreaming); return -1; } }
static int outstream_buffer_size_callback(jack_nframes_t nframes, void *arg) { SoundIoOutStreamPrivate *os = (SoundIoOutStreamPrivate *)arg; SoundIoOutStreamJack *osj = &os->backend_data.jack; SoundIoOutStream *outstream = &os->pub; if ((jack_nframes_t)osj->period_size == nframes) { return 0; } else { outstream->error_callback(outstream, SoundIoErrorStreaming); return -1; } }
static void playback_stream_state_callback(pa_stream *stream, void *userdata) { SoundIoOutStreamPrivate *os = (SoundIoOutStreamPrivate*) userdata; SoundIoOutStream *outstream = &os->pub; SoundIo *soundio = outstream->device->soundio; SoundIoPrivate *si = (SoundIoPrivate *)soundio; SoundIoPulseAudio *sipa = &si->backend_data.pulseaudio; SoundIoOutStreamPulseAudio *ospa = &os->backend_data.pulseaudio; switch (pa_stream_get_state(stream)) { case PA_STREAM_UNCONNECTED: case PA_STREAM_CREATING: case PA_STREAM_TERMINATED: break; case PA_STREAM_READY: ospa->stream_ready = true; pa_threaded_mainloop_signal(sipa->main_loop, 0); break; case PA_STREAM_FAILED: outstream->error_callback(outstream, SoundIoErrorStreaming); break; } }
static void outstream_shutdown_callback(void *arg) { SoundIoOutStreamPrivate *os = (SoundIoOutStreamPrivate *)arg; SoundIoOutStream *outstream = &os->pub; outstream->error_callback(outstream, SoundIoErrorStreaming); }