diff options
Diffstat (limited to 'polyp/polyp.c')
-rw-r--r-- | polyp/polyp.c | 26 |
1 files changed, 26 insertions, 0 deletions
diff --git a/polyp/polyp.c b/polyp/polyp.c index 0b25ae5..c6bc5e1 100644 --- a/polyp/polyp.c +++ b/polyp/polyp.c @@ -182,6 +182,32 @@ int polyp_wait_operation(snd_polyp_t *p, pa_operation *o) return 0; } +int polyp_wait_stream_state(snd_polyp_t *p, pa_stream *stream, pa_stream_state_t target) +{ + int err; + pa_stream_state_t state; + + assert(p && stream && (p->state == POLYP_STATE_READY)); + + while (1) { + state = pa_stream_get_state(stream); + + if (state == PA_STREAM_FAILED) + return -EIO; + + if (state == target) + break; + + p->state = POLYP_STATE_POLLING; + err = pa_mainloop_iterate(p->mainloop, 1, NULL); + p->state = POLYP_STATE_READY; + if (err < 0) + return -EIO; + } + + return 0; +} + snd_polyp_t *polyp_new() { snd_polyp_t *p; |