[libcamera-devel] [PATCH v2 04/14] libcamera: pipeline: Add method to prepare internal buffers

Niklas Söderlund niklas.soderlund at ragnatech.se
Fri Aug 30 01:26:43 CEST 2019


Buffers internal to a pipeline handler (buffers cycled between a CSI-2
pipeline to a ISP pipeline, parameters and statistics buffers) needs to
be prepared before they can be properly used inside a pipeline handler.

At this point the preparation consists of mapping the Buffer objects
memory and associating it with a request. Instead of adding this helper
on the Buffer object itself add it to the pipeline handler base class to
prevent it from being exposed to applications.

Signed-off-by: Niklas Söderlund <niklas.soderlund at ragnatech.se>
---
 src/libcamera/include/pipeline_handler.h |  2 ++
 src/libcamera/pipeline_handler.cpp       | 18 ++++++++++++++++++
 2 files changed, 20 insertions(+)

diff --git a/src/libcamera/include/pipeline_handler.h b/src/libcamera/include/pipeline_handler.h
index ffc7adb802215313..91d40ef40a465c4e 100644
--- a/src/libcamera/include/pipeline_handler.h
+++ b/src/libcamera/include/pipeline_handler.h
@@ -98,6 +98,8 @@ protected:
 
 	CameraData *cameraData(const Camera *camera);
 
+	void prepareInternalBuffer(Buffer *buffer, Request *request,
+				   BufferMemory *mem);
 	CameraManager *manager_;
 
 private:
diff --git a/src/libcamera/pipeline_handler.cpp b/src/libcamera/pipeline_handler.cpp
index 558b4b254d111e31..846272485c7d2fc0 100644
--- a/src/libcamera/pipeline_handler.cpp
+++ b/src/libcamera/pipeline_handler.cpp
@@ -485,6 +485,24 @@ void PipelineHandler::hotplugMediaDevice(MediaDevice *media)
 	media->disconnected.connect(this, &PipelineHandler::mediaDeviceDisconnected);
 }
 
+/**
+ * \brief Prepare buffer for internal usage by a pipeline handler
+ * \param[in,out] buffer The buffer to prepare
+ * \param[in] request The request to associate the \a buffer with
+ * \param[in] mem The memory to associate the \a buffer with
+ *
+ * Pipeline handlers creating internal buffers to facilitate data flow in the
+ * pipeline need to prepare the buffers by setting up the buffer object state.
+ * This function help pipeline handler implementations to perform this
+ * preparation.
+ */
+void PipelineHandler::prepareInternalBuffer(Buffer *buffer, Request *request,
+					    BufferMemory *mem)
+{
+	buffer->request_ = request;
+	buffer->mem_ = mem;
+}
+
 /**
  * \brief Slot for the MediaDevice disconnected signal
  */
-- 
2.22.1



More information about the libcamera-devel mailing list