summaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorTroy Moure <twmoure@szypr.net>2009-06-18 14:55:21 +0100
committerTakashi Iwai <tiwai@suse.de>2009-06-18 18:14:37 +0200
commitd9a839d51255c939f394f770b249c8a4a9600122 (patch)
treec679ff0a63258abbf0844350b4d85d38620d5f3f
parent95d463cb38ad7b0ad6e1d1550b9e8195528cbc46 (diff)
alsa-plugins/pulse: Implement 'pause'.
Just cork or uncork the stream to pause or unpause it. Signed-off-by: Troy Moure <twmoure@szypr.net> Signed-off-by: Takashi Iwai <tiwai@suse.de>
-rw-r--r--pulse/pcm_pulse.c25
1 files changed, 25 insertions, 0 deletions
diff --git a/pulse/pcm_pulse.c b/pulse/pcm_pulse.c
index db8d1e1..c276839 100644
--- a/pulse/pcm_pulse.c
+++ b/pulse/pcm_pulse.c
@@ -739,6 +739,30 @@ static int pulse_close(snd_pcm_ioplug_t * io)
return 0;
}
+static int pulse_pause(snd_pcm_ioplug_t * io, int enable)
+{
+ snd_pcm_pulse_t *pcm = io->private_data;
+ int err = 0;
+
+ assert (pcm);
+ assert (pcm->p);
+
+ pa_threaded_mainloop_lock(pcm->p->mainloop);
+
+ if (pcm->stream) {
+ pa_operation *o;
+ o = pa_stream_cork(pcm->stream, enable, NULL, NULL);
+ if (o)
+ pa_operation_unref(o);
+ else
+ err = -EIO;
+ }
+
+ pa_threaded_mainloop_unlock(pcm->p->mainloop);
+
+ return err;
+}
+
static const snd_pcm_ioplug_callback_t pulse_playback_callback = {
.start = pulse_start,
.stop = pulse_stop,
@@ -750,6 +774,7 @@ static const snd_pcm_ioplug_callback_t pulse_playback_callback = {
.prepare = pulse_prepare,
.hw_params = pulse_hw_params,
.close = pulse_close,
+ .pause = pulse_pause
};