From 6446cc4ae941775475d794928ebe5fe2b4c52600 Mon Sep 17 00:00:00 2001 From: Robert Swain Date: Thu, 29 Sep 2011 16:22:00 +0200 Subject: [PATCH] camerabin2: Fix potential loss of EOS event Setting the audio source to NULL just after pushing the EOS event on it could potentially cause loss of said EOS event. Instead, we can set the audio source to NULL when ready-for-capture is signalled and the boolean value is true as this indicates we are not currently capturing video. --- gst/camerabin2/gstcamerabin2.c | 19 ++++++++++--------- 1 file changed, 10 insertions(+), 9 deletions(-) diff --git a/gst/camerabin2/gstcamerabin2.c b/gst/camerabin2/gstcamerabin2.c index 5a22713..e990a95 100644 --- a/gst/camerabin2/gstcamerabin2.c +++ b/gst/camerabin2/gstcamerabin2.c @@ -447,14 +447,6 @@ gst_camera_bin_stop_capture (GstCameraBin2 * camerabin) if (camerabin->mode == MODE_VIDEO && camerabin->audio_src) { camerabin->audio_drop_eos = FALSE; gst_element_send_event (camerabin->audio_src, gst_event_new_eos ()); - - /* FIXME We need to set audiosrc to null to make it resync the ringbuffer - * while bug https://bugzilla.gnome.org/show_bug.cgi?id=648359 isn't - * fixed. - * - * Also, we set to NULL here to stop capturing audio through to the next - * video mode start capture. */ - gst_element_set_state (camerabin->audio_src, GST_STATE_NULL); } } @@ -503,7 +495,16 @@ gst_camera_bin_src_notify_readyforcapture (GObject * obj, GParamSpec * pspec, gst_element_set_state (camera->video_encodebin, GST_STATE_PLAYING); gst_element_set_state (camera->videobin_capsfilter, GST_STATE_PLAYING); } - + } else { + if (camera->mode == MODE_VIDEO && camera->audio_src) { + /* FIXME We need to set audiosrc to null to make it resync the ringbuffer + * while bug https://bugzilla.gnome.org/show_bug.cgi?id=648359 isn't + * fixed. + * + * Also, we set to NULL here to stop capturing audio through to the next + * video mode start capture and to clear EOS. */ + gst_element_set_state (camera->audio_src, GST_STATE_NULL); + } } } -- 2.7.4