mirror of
https://gitlab.freedesktop.org/gstreamer/gstreamer.git
synced 2024-11-27 12:11:13 +00:00
wrappercamerabinsrc: do not set source state with lock
It might be racy with the image probe thread as it uses the capture mutex just like the start-capture handler from camerabin. The start-capture would be waiting for the source's streaming thread to stop to be able to set the source state to ready while the probe would be blocked waiting to acquire the capture mutex. It causes a deadlock.
This commit is contained in:
parent
6fa077f465
commit
882018e6dd
1 changed files with 6 additions and 3 deletions
|
@ -842,9 +842,13 @@ start_image_capture (GstWrapperCameraBinSrc * self)
|
|||
peer = gst_pad_get_peer (pad);
|
||||
gst_object_unref (pad);
|
||||
gst_pad_query (peer, gst_query_new_drain ());
|
||||
gst_element_set_state (self->src_vid_src, GST_STATE_READY);
|
||||
gst_object_unref (peer);
|
||||
|
||||
self->image_renegotiate = FALSE;
|
||||
|
||||
g_mutex_unlock (&bcamsrc->capturing_mutex);
|
||||
gst_element_set_state (self->src_vid_src, GST_STATE_READY);
|
||||
|
||||
/* clean capsfilter caps so they don't interfere here */
|
||||
g_object_set (self->src_filter, "caps", NULL, NULL);
|
||||
if (self->src_zoom_filter)
|
||||
|
@ -862,8 +866,7 @@ start_image_capture (GstWrapperCameraBinSrc * self)
|
|||
/* We caught this event in the src pad event handler and now we want to
|
||||
* actually push it upstream */
|
||||
gst_pad_send_event (self->outsel_imgpad, gst_event_new_reconfigure ());
|
||||
|
||||
self->image_renegotiate = FALSE;
|
||||
g_mutex_lock (&bcamsrc->capturing_mutex);
|
||||
}
|
||||
|
||||
if (photography) {
|
||||
|
|
Loading…
Reference in a new issue