From b6db70a16026bfc226a200a4382d04e2d15d84a1 Mon Sep 17 00:00:00 2001 From: John Grossman Date: Tue, 3 Apr 2012 16:37:38 -0700 Subject: pcm: Add PCM_NORESTART flag Add a flag which can be passed to pcm_open (called PCM_NORESTART). When set on a playback stream, calls to pcm_write will not automatically attempt to restart an ALSA device in the case of an underflow. Instead, it will propagate the first EPIPE error up to the application to allow it to handle the underflow situation. Subsequent calls to pcm_write will attempt to start the pipeline. --- pcm.c | 6 +++++- 1 file changed, 5 insertions(+), 1 deletion(-) (limited to 'pcm.c') diff --git a/pcm.c b/pcm.c index d253433..2dca157 100644 --- a/pcm.c +++ b/pcm.c @@ -378,8 +378,12 @@ int pcm_write(struct pcm *pcm, const void *data, unsigned int count) if (ioctl(pcm->fd, SNDRV_PCM_IOCTL_WRITEI_FRAMES, &x)) { pcm->running = 0; if (errno == EPIPE) { - /* we failed to make our window -- try to restart */ + /* we failed to make our window -- try to restart if we are + * allowed to do so. Otherwise, simply allow the EPIPE error to + * propagate up to the app level */ pcm->underruns++; + if (pcm->flags & PCM_NORESTART) + return -EPIPE; continue; } return oops(pcm, errno, "cannot write stream data"); -- cgit v1.2.3