[libcamera-devel] [PATCH v2 01/12] gstreamer: Use gst_task_resume() when available

Laurent Pinchart laurent.pinchart at ideasonboard.com
Thu Jun 30 02:02:40 CEST 2022


The gst_libcamera_resume_task() helper is an implementation of the
gst_task_resume() function that predates its addition to GStreamer. Use
gst_task_resume() when available, and rename gst_libcamera_resume_task()
to gst_task_resume() to support older GStreamer versions.

Signed-off-by: Laurent Pinchart <laurent.pinchart at ideasonboard.com>
Reviewed-by: Nicolas Dufresne <nicolas.dufresne at collabora.com>
Reviewed-by: Umang Jain <umang.jain at ideasonboard.com>
---
 src/gstreamer/gstlibcamera-utils.cpp | 16 ++++++++++------
 src/gstreamer/gstlibcamera-utils.h   |  4 +++-
 src/gstreamer/gstlibcamerasrc.cpp    |  4 ++--
 3 files changed, 15 insertions(+), 9 deletions(-)

diff --git a/src/gstreamer/gstlibcamera-utils.cpp b/src/gstreamer/gstlibcamera-utils.cpp
index 3f2422863c03..c97c0d438de2 100644
--- a/src/gstreamer/gstlibcamera-utils.cpp
+++ b/src/gstreamer/gstlibcamera-utils.cpp
@@ -224,16 +224,20 @@ gst_libcamera_configure_stream_from_caps(StreamConfiguration &stream_cfg,
 	stream_cfg.size.height = height;
 }
 
-void
-gst_libcamera_resume_task(GstTask *task)
+#if !GST_CHECK_VERSION(1, 17, 1)
+gboolean
+gst_task_resume(GstTask *task)
 {
 	/* We only want to resume the task if it's paused. */
 	GLibLocker lock(GST_OBJECT(task));
-	if (GST_TASK_STATE(task) == GST_TASK_PAUSED) {
-		GST_TASK_STATE(task) = GST_TASK_STARTED;
-		GST_TASK_SIGNAL(task);
-	}
+	if (GST_TASK_STATE(task) != GST_TASK_PAUSED)
+		return FALSE;
+
+	GST_TASK_STATE(task) = GST_TASK_STARTED;
+	GST_TASK_SIGNAL(task);
+	return TRUE;
 }
+#endif
 
 G_LOCK_DEFINE_STATIC(cm_singleton_lock);
 static std::weak_ptr<CameraManager> cm_singleton_ptr;
diff --git a/src/gstreamer/gstlibcamera-utils.h b/src/gstreamer/gstlibcamera-utils.h
index d54f15885d0c..164189a28965 100644
--- a/src/gstreamer/gstlibcamera-utils.h
+++ b/src/gstreamer/gstlibcamera-utils.h
@@ -18,7 +18,9 @@ GstCaps *gst_libcamera_stream_formats_to_caps(const libcamera::StreamFormats &fo
 GstCaps *gst_libcamera_stream_configuration_to_caps(const libcamera::StreamConfiguration &stream_cfg);
 void gst_libcamera_configure_stream_from_caps(libcamera::StreamConfiguration &stream_cfg,
 					      GstCaps *caps);
-void gst_libcamera_resume_task(GstTask *task);
+#if !GST_CHECK_VERSION(1, 17, 1)
+gboolean gst_task_resume(GstTask *task);
+#endif
 std::shared_ptr<libcamera::CameraManager> gst_libcamera_get_camera_manager(int &ret);
 
 /**
diff --git a/src/gstreamer/gstlibcamerasrc.cpp b/src/gstreamer/gstlibcamerasrc.cpp
index 46fd02d207be..9d6be075a474 100644
--- a/src/gstreamer/gstlibcamerasrc.cpp
+++ b/src/gstreamer/gstlibcamerasrc.cpp
@@ -192,7 +192,7 @@ GstLibcameraSrcState::requestCompleted(Request *request)
 		gst_libcamera_pad_queue_buffer(srcpad, buffer);
 	}
 
-	gst_libcamera_resume_task(this->src_->task);
+	gst_task_resume(src_->task);
 }
 
 static bool
@@ -453,7 +453,7 @@ gst_libcamera_src_task_enter(GstTask *task, [[maybe_unused]] GThread *thread,
 		GstLibcameraPool *pool = gst_libcamera_pool_new(self->allocator,
 								stream_cfg.stream());
 		g_signal_connect_swapped(pool, "buffer-notify",
-					 G_CALLBACK(gst_libcamera_resume_task), task);
+					 G_CALLBACK(gst_task_resume), task);
 
 		gst_libcamera_pad_set_pool(srcpad, pool);
 		gst_flow_combiner_add_pad(self->flow_combiner, srcpad);
-- 
Regards,

Laurent Pinchart



More information about the libcamera-devel mailing list