diff --git a/ext/alsa/gstalsasink.c b/ext/alsa/gstalsasink.c index e2eca1948..26cd1fca8 100644 --- a/ext/alsa/gstalsasink.c +++ b/ext/alsa/gstalsasink.c @@ -1089,6 +1089,10 @@ gst_alsasink_write (GstAudioSink * asink, gpointer data, guint length) goto write_error; } continue; + } else if (err == 0 && alsa->hw_support_pause) { + /* We might be already paused, if so, just bail */ + if (snd_pcm_state (alsa->handle) == SND_PCM_STATE_PAUSED) + break; } ptr += snd_pcm_frames_to_bytes (alsa->handle, err); diff --git a/gst-libs/gst/audio/gstaudiosink.c b/gst-libs/gst/audio/gstaudiosink.c index bda51fe08..d7b26f1d9 100644 --- a/gst-libs/gst/audio/gstaudiosink.c +++ b/gst-libs/gst/audio/gstaudiosink.c @@ -254,6 +254,9 @@ audioringbuffer_thread_func (GstAudioRingBuffer * buf) GST_DEBUG_FUNCPTR_NAME (writefunc), (errno > 1 ? g_strerror (errno) : "unknown"), left, written); break; + } else if (written == 0 && G_UNLIKELY (g_atomic_int_get (&buf->state) != + GST_AUDIO_RING_BUFFER_STATE_STARTED)) { + break; } left -= written; readptr += written;