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:
Thiago Santos 2014-12-26 23:05:43 -03:00
parent 6fa077f465
commit 882018e6dd

View file

@ -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) {