[libcamera-devel] [PATCH v2 03/12] gstreamer: Pass Stream to RequestWrap::addBuffer()

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


For symmetry with RequestWrap::removeBuffer(), pass the Stream pointer
to addBuffer(). This handles streams at the GstPad level instead of the
GstBuffer level, which allows making the GstLibcameraPool API a bit
cleaner by removing the gst_libcamera_buffer_get_stream() helper
function.

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/gstlibcamerapool.cpp | 7 -------
 src/gstreamer/gstlibcamerapool.h   | 2 --
 src/gstreamer/gstlibcamerasrc.cpp  | 8 ++++----
 3 files changed, 4 insertions(+), 13 deletions(-)

diff --git a/src/gstreamer/gstlibcamerapool.cpp b/src/gstreamer/gstlibcamerapool.cpp
index 1fde42135119..0c2be43ceeea 100644
--- a/src/gstreamer/gstlibcamerapool.cpp
+++ b/src/gstreamer/gstlibcamerapool.cpp
@@ -134,13 +134,6 @@ gst_libcamera_pool_get_stream(GstLibcameraPool *self)
 	return self->stream;
 }
 
-Stream *
-gst_libcamera_buffer_get_stream(GstBuffer *buffer)
-{
-	auto *self = (GstLibcameraPool *)buffer->pool;
-	return self->stream;
-}
-
 FrameBuffer *
 gst_libcamera_buffer_get_frame_buffer(GstBuffer *buffer)
 {
diff --git a/src/gstreamer/gstlibcamerapool.h b/src/gstreamer/gstlibcamerapool.h
index 05795d21223e..ce3bf60b1426 100644
--- a/src/gstreamer/gstlibcamerapool.h
+++ b/src/gstreamer/gstlibcamerapool.h
@@ -25,6 +25,4 @@ GstLibcameraPool *gst_libcamera_pool_new(GstLibcameraAllocator *allocator,
 
 libcamera::Stream *gst_libcamera_pool_get_stream(GstLibcameraPool *self);
 
-libcamera::Stream *gst_libcamera_buffer_get_stream(GstBuffer *buffer);
-
 libcamera::FrameBuffer *gst_libcamera_buffer_get_frame_buffer(GstBuffer *buffer);
diff --git a/src/gstreamer/gstlibcamerasrc.cpp b/src/gstreamer/gstlibcamerasrc.cpp
index dea143961d69..700bee2bf877 100644
--- a/src/gstreamer/gstlibcamerasrc.cpp
+++ b/src/gstreamer/gstlibcamerasrc.cpp
@@ -51,7 +51,7 @@ struct RequestWrap {
 	RequestWrap(std::unique_ptr<Request> request);
 	~RequestWrap();
 
-	void attachBuffer(GstBuffer *buffer);
+	void attachBuffer(Stream *stream, GstBuffer *buffer);
 	GstBuffer *detachBuffer(Stream *stream);
 
 	std::unique_ptr<Request> request_;
@@ -71,10 +71,9 @@ RequestWrap::~RequestWrap()
 	}
 }
 
-void RequestWrap::attachBuffer(GstBuffer *buffer)
+void RequestWrap::attachBuffer(Stream *stream, GstBuffer *buffer)
 {
 	FrameBuffer *fb = gst_libcamera_buffer_get_frame_buffer(buffer);
-	Stream *stream = gst_libcamera_buffer_get_stream(buffer);
 
 	request_->addBuffer(stream, fb);
 
@@ -275,6 +274,7 @@ gst_libcamera_src_task_run(gpointer user_data)
 		std::make_unique<RequestWrap>(std::move(request));
 
 	for (GstPad *srcpad : state->srcpads_) {
+		Stream *stream = gst_libcamera_pad_get_stream(srcpad);
 		GstLibcameraPool *pool = gst_libcamera_pad_get_pool(srcpad);
 		GstBuffer *buffer;
 		GstFlowReturn ret;
@@ -290,7 +290,7 @@ gst_libcamera_src_task_run(gpointer user_data)
 			break;
 		}
 
-		wrap->attachBuffer(buffer);
+		wrap->attachBuffer(stream, buffer);
 	}
 
 	if (wrap) {
-- 
Regards,

Laurent Pinchart



More information about the libcamera-devel mailing list