[libcamera-devel] [PATCH] gstreamer: Cleanup inner scope in gst_libcamera_src_task_run()

Laurent Pinchart laurent.pinchart at ideasonboard.com
Sun Mar 27 15:52:58 CEST 2022


The code block that checks for flow errors in
gst_libcamera_src_task_run() is located in an inner scope whose purpose
it to handling locking. The flow error handling however occurs before
the lock is taken, so there's no need to place it in the inner scope.
Move it one level up.

Signed-off-by: Laurent Pinchart <laurent.pinchart at ideasonboard.com>
---
 src/gstreamer/gstlibcamerasrc.cpp | 26 +++++++++++++-------------
 1 file changed, 13 insertions(+), 13 deletions(-)

diff --git a/src/gstreamer/gstlibcamerasrc.cpp b/src/gstreamer/gstlibcamerasrc.cpp
index 46fd02d207be..8016a98d6a4d 100644
--- a/src/gstreamer/gstlibcamerasrc.cpp
+++ b/src/gstreamer/gstlibcamerasrc.cpp
@@ -311,21 +311,21 @@ gst_libcamera_src_task_run(gpointer user_data)
 							srcpad, ret);
 	}
 
-	{
-		if (ret != GST_FLOW_OK) {
-			if (ret == GST_FLOW_EOS) {
-				g_autoptr(GstEvent) eos = gst_event_new_eos();
-				guint32 seqnum = gst_util_seqnum_next();
-				gst_event_set_seqnum(eos, seqnum);
-				for (GstPad *srcpad : state->srcpads_)
-					gst_pad_push_event(srcpad, gst_event_ref(eos));
-			} else if (ret != GST_FLOW_FLUSHING) {
-				GST_ELEMENT_FLOW_ERROR(self, ret);
-			}
-			gst_task_stop(self->task);
-			return;
+	if (ret != GST_FLOW_OK) {
+		if (ret == GST_FLOW_EOS) {
+			g_autoptr(GstEvent) eos = gst_event_new_eos();
+			guint32 seqnum = gst_util_seqnum_next();
+			gst_event_set_seqnum(eos, seqnum);
+			for (GstPad *srcpad : state->srcpads_)
+				gst_pad_push_event(srcpad, gst_event_ref(eos));
+		} else if (ret != GST_FLOW_FLUSHING) {
+			GST_ELEMENT_FLOW_ERROR(self, ret);
 		}
+		gst_task_stop(self->task);
+		return;
+	}
 
+	{
 		/*
 		 * Here we need to decide if we want to pause. This needs to
 		 * happen in lock step with the callback thread which may want
-- 
Regards,

Laurent Pinchart



More information about the libcamera-devel mailing list