mirror of
https://gitlab.freedesktop.org/gstreamer/gstreamer.git
synced 2025-04-24 01:24:20 +00:00
gst-libs/gst/audio/gstbaseaudiosink.c: Avoid holding the OBJECT_LOCK when calling ringbuffer functions that take the ...
Original commit message from CVS: * gst-libs/gst/audio/gstbaseaudiosink.c: (gst_base_audio_sink_change_state): Avoid holding the OBJECT_LOCK when calling ringbuffer functions that take the ringbuffer lock because rinbuffer lock > OBJECT_LOCK. We can do this because the async_play method is deprecated and usually not called anymore.
This commit is contained in:
parent
8632fc5545
commit
0a4c1bc64c
2 changed files with 21 additions and 16 deletions
|
@ -1,3 +1,12 @@
|
||||||
|
2009-01-05 Wim Taymans <wim.taymans@collabora.co.uk>
|
||||||
|
|
||||||
|
* gst-libs/gst/audio/gstbaseaudiosink.c:
|
||||||
|
(gst_base_audio_sink_change_state):
|
||||||
|
Avoid holding the OBJECT_LOCK when calling ringbuffer functions that
|
||||||
|
take the ringbuffer lock because rinbuffer lock > OBJECT_LOCK. We can do
|
||||||
|
this because the async_play method is deprecated and usually not called
|
||||||
|
anymore.
|
||||||
|
|
||||||
2009-01-05 Wim Taymans <wim.taymans@collabora.co.uk>
|
2009-01-05 Wim Taymans <wim.taymans@collabora.co.uk>
|
||||||
|
|
||||||
* gst/playback/gstplaybin2.c: (notify_source_cb), (activate_group):
|
* gst/playback/gstplaybin2.c: (notify_source_cb), (activate_group):
|
||||||
|
|
|
@ -1709,18 +1709,6 @@ gst_base_audio_sink_async_play (GstBaseSink * basesink)
|
||||||
return GST_STATE_CHANGE_SUCCESS;
|
return GST_STATE_CHANGE_SUCCESS;
|
||||||
}
|
}
|
||||||
|
|
||||||
static GstStateChangeReturn
|
|
||||||
gst_base_audio_sink_do_play (GstBaseAudioSink * sink)
|
|
||||||
{
|
|
||||||
GstStateChangeReturn ret;
|
|
||||||
|
|
||||||
GST_OBJECT_LOCK (sink);
|
|
||||||
ret = gst_base_audio_sink_async_play (GST_BASE_SINK_CAST (sink));
|
|
||||||
GST_OBJECT_UNLOCK (sink);
|
|
||||||
|
|
||||||
return ret;
|
|
||||||
}
|
|
||||||
|
|
||||||
static GstStateChangeReturn
|
static GstStateChangeReturn
|
||||||
gst_base_audio_sink_change_state (GstElement * element,
|
gst_base_audio_sink_change_state (GstElement * element,
|
||||||
GstStateChange transition)
|
GstStateChange transition)
|
||||||
|
@ -1745,15 +1733,23 @@ gst_base_audio_sink_change_state (GstElement * element,
|
||||||
gst_ring_buffer_may_start (sink->ringbuffer, FALSE);
|
gst_ring_buffer_may_start (sink->ringbuffer, FALSE);
|
||||||
break;
|
break;
|
||||||
case GST_STATE_CHANGE_PAUSED_TO_PLAYING:
|
case GST_STATE_CHANGE_PAUSED_TO_PLAYING:
|
||||||
gst_base_audio_sink_do_play (sink);
|
GST_OBJECT_LOCK (sink);
|
||||||
|
GST_DEBUG_OBJECT (sink, "ringbuffer may start now");
|
||||||
|
sink->priv->sync_latency = TRUE;
|
||||||
|
GST_OBJECT_UNLOCK (sink);
|
||||||
|
|
||||||
|
gst_ring_buffer_may_start (sink->ringbuffer, TRUE);
|
||||||
|
if (GST_BASE_SINK_CAST (sink)->pad_mode == GST_ACTIVATE_PULL) {
|
||||||
|
/* we always start the ringbuffer in pull mode immediatly */
|
||||||
|
gst_ring_buffer_start (sink->ringbuffer);
|
||||||
|
}
|
||||||
break;
|
break;
|
||||||
case GST_STATE_CHANGE_PLAYING_TO_PAUSED:
|
case GST_STATE_CHANGE_PLAYING_TO_PAUSED:
|
||||||
/* need to take the lock so we don't interfere with an
|
|
||||||
* async play */
|
|
||||||
GST_OBJECT_LOCK (sink);
|
|
||||||
/* ringbuffer cannot start anymore */
|
/* ringbuffer cannot start anymore */
|
||||||
gst_ring_buffer_may_start (sink->ringbuffer, FALSE);
|
gst_ring_buffer_may_start (sink->ringbuffer, FALSE);
|
||||||
gst_ring_buffer_pause (sink->ringbuffer);
|
gst_ring_buffer_pause (sink->ringbuffer);
|
||||||
|
|
||||||
|
GST_OBJECT_LOCK (sink);
|
||||||
sink->priv->sync_latency = FALSE;
|
sink->priv->sync_latency = FALSE;
|
||||||
GST_OBJECT_UNLOCK (sink);
|
GST_OBJECT_UNLOCK (sink);
|
||||||
break;
|
break;
|
||||||
|
|
Loading…
Reference in a new issue