From 8c65cdcb6e1872470f66a97a1c70418a688d4490 Mon Sep 17 00:00:00 2001 From: Pierre Ossman Date: Wed, 8 Mar 2006 12:16:51 +0000 Subject: Properly terminate stream in polypaudio plugin Some applications like to call prepare over and over again, recreating the stream each time. Previously we just cleaned up the local end each time, but this makes sure the server also releases its resources. Signed-off-by: Pierre Ossman --- polyp/polyp.c | 26 ++++++++++++++++++++++++++ 1 file changed, 26 insertions(+) (limited to 'polyp/polyp.c') 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; -- cgit