From: Nicolas Beland Date: Mon, 15 May 2023 19:57:15 +0000 (-0400) Subject: alsasink: Fix stall for transition of alsasink from PAUSED to READY with USB speakerphone X-Git-Tag: 1.22.7~259 X-Git-Url: http://review.tizen.org/git/?a=commitdiff_plain;h=da11ea77c86476abc92a71a25c1abd68b5c8162b;p=platform%2Fupstream%2Fgstreamer.git alsasink: Fix stall for transition of alsasink from PAUSED to READY with USB speakerphone Part-of: --- diff --git a/subprojects/gst-plugins-base/ext/alsa/gstalsasink.c b/subprojects/gst-plugins-base/ext/alsa/gstalsasink.c index 6165b4f..7ed5b30 100644 --- a/subprojects/gst-plugins-base/ext/alsa/gstalsasink.c +++ b/subprojects/gst-plugins-base/ext/alsa/gstalsasink.c @@ -259,7 +259,6 @@ gst_alsasink_init (GstAlsaSink * alsasink) alsasink->is_paused = FALSE; alsasink->after_paused = FALSE; alsasink->hw_support_pause = FALSE; - alsasink->stop_streaming_threads = TRUE; g_mutex_init (&alsasink->alsa_lock); g_mutex_init (&alsasink->delay_lock); @@ -943,7 +942,6 @@ gst_alsasink_prepare (GstAudioSink * asink, GstAudioRingBufferSpec * spec) alsa->channels, GST_AUDIO_BASE_SINK (alsa)->ringbuffer); #endif /* SND_CHMAP_API_VERSION */ - alsa->stop_streaming_threads = FALSE; return TRUE; /* ERRORS */ @@ -1063,8 +1061,6 @@ gst_alsasink_write (GstAudioSink * asink, gpointer data, guint length) GST_ALSA_SINK_LOCK (asink); while (cptr > 0) { - if (alsa->stop_streaming_threads) - goto write_error; /* start by doing a blocking wait for free space. Set the timeout * to 4 times the period time */ err = snd_pcm_wait (alsa->handle, (4 * alsa->period_time / 1000)); @@ -1173,7 +1169,6 @@ gst_alsasink_pause (GstAudioSink * asink) CHECK (snd_pcm_pause (alsa->handle, 1), pause_error); GST_DEBUG_OBJECT (alsa, "pause done"); alsa->is_paused = TRUE; - alsa->stop_streaming_threads = TRUE; GST_ALSA_SINK_UNLOCK (asink); } else { gst_alsasink_stop (asink); @@ -1186,6 +1181,7 @@ pause_error: GST_ERROR_OBJECT (alsa, "alsa-pause: pcm pause error: %s", snd_strerror (err)); GST_ALSA_SINK_UNLOCK (asink); + gst_alsasink_stop (asink); return; } } @@ -1205,7 +1201,6 @@ gst_alsasink_resume (GstAudioSink * asink) GST_ALSA_SINK_UNLOCK (asink); } - alsa->stop_streaming_threads = FALSE; return; resume_error: @@ -1231,7 +1226,6 @@ gst_alsasink_stop (GstAudioSink * asink) GST_DEBUG_OBJECT (alsa, "prepare"); CHECK (snd_pcm_prepare (alsa->handle), prepare_error); GST_DEBUG_OBJECT (alsa, "stop done"); - alsa->stop_streaming_threads = TRUE; GST_ALSA_SINK_UNLOCK (asink); return; diff --git a/subprojects/gst-plugins-base/ext/alsa/gstalsasink.h b/subprojects/gst-plugins-base/ext/alsa/gstalsasink.h index e444311..35efa88 100644 --- a/subprojects/gst-plugins-base/ext/alsa/gstalsasink.h +++ b/subprojects/gst-plugins-base/ext/alsa/gstalsasink.h @@ -77,7 +77,6 @@ struct _GstAlsaSink { gboolean is_paused; gboolean after_paused; gboolean hw_support_pause; - gboolean stop_streaming_threads; snd_pcm_sframes_t pos_in_buffer; GMutex alsa_lock;