summaryrefslogtreecommitdiff
path: root/gst/camerabin2/gstwrappercamerabinsrc.c
diff options
context:
space:
mode:
Diffstat (limited to 'gst/camerabin2/gstwrappercamerabinsrc.c')
-rw-r--r--gst/camerabin2/gstwrappercamerabinsrc.c12
1 files changed, 12 insertions, 0 deletions
diff --git a/gst/camerabin2/gstwrappercamerabinsrc.c b/gst/camerabin2/gstwrappercamerabinsrc.c
index c2111a0b7..48ec28f23 100644
--- a/gst/camerabin2/gstwrappercamerabinsrc.c
+++ b/gst/camerabin2/gstwrappercamerabinsrc.c
@@ -826,10 +826,22 @@ start_image_capture (GstWrapperCameraBinSrc * self)
GST_TYPE_PHOTOGRAPHY);
gboolean ret = FALSE;
GstCaps *caps;
+ GstPad *pad, *peer;
GST_DEBUG_OBJECT (self, "Starting image capture");
gst_element_set_state (self->src_vid_src, GST_STATE_READY);
+ /* 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. */
+ pad = gst_element_get_static_pad (self->src_vid_src, "src");
+ peer = gst_pad_get_peer (pad);
+ gst_object_unref (pad);
+ gst_pad_send_event (peer, gst_event_new_flush_start ());
+ gst_pad_send_event (peer, gst_event_new_flush_stop (TRUE));
+ gst_object_unref (peer);
+
if (self->image_renegotiate) {
/* clean capsfilter caps so they don't interfere here */
g_object_set (self->src_filter, "caps", NULL, NULL);