wrappercamerabinsrc: use the drain query instead of flush
authorThiago Santos <thiagoss@osg.samsung.com>
Fri, 26 Dec 2014 13:17:19 +0000 (10:17 -0300)
committerThiago Santos <thiagoss@osg.samsung.com>
Sat, 27 Dec 2014 02:07:39 +0000 (23:07 -0300)
The flush might clear any pending captures that are still in
queues being processed while the drain query will wait for those
to be properly done

gst/camerabin2/gstwrappercamerabinsrc.c

index 24f44f39aa51b57d028c15e22b89e64c2f81d58e..5c08d0eb9b815a4e52cbc94a35b6901ac48fafe5 100644 (file)
@@ -833,18 +833,16 @@ start_image_capture (GstWrapperCameraBinSrc * self)
 
   GST_DEBUG_OBJECT (self, "Starting image capture");
 
-  /* FIXME - V4L2 source will not close the device until all buffers have came
-   * back. Flushing the pipeline, will ensure it's properly closed, and that
-   * setting it back to PLAYING will work. This is more a workaround then a
-   * solution to buffer reclaiming. */
+  /* V4L2 source will not close the device until all buffers have came
+   * back. Draining the pipeline, will ensure it's properly closed, and that
+   * setting it back to PLAYING will work. */
   pad = gst_element_get_static_pad (self->src_vid_src, "src");
   if (self->image_renegotiate) {
 
     peer = gst_pad_get_peer (pad);
     gst_object_unref (pad);
-    gst_pad_send_event (peer, gst_event_new_flush_start ());
+    gst_pad_query (peer, gst_query_new_drain ());
     gst_element_set_state (self->src_vid_src, GST_STATE_READY);
-    gst_pad_send_event (peer, gst_event_new_flush_stop (TRUE));
     gst_object_unref (peer);
 
     /* clean capsfilter caps so they don't interfere here */