summaryrefslogtreecommitdiff
path: root/src/libcamera
diff options
context:
space:
mode:
authorNiklas Söderlund <niklas.soderlund@ragnatech.se>2019-11-25 22:14:40 +0100
committerNiklas Söderlund <niklas.soderlund@ragnatech.se>2020-01-12 16:10:37 +0100
commit007517618c8440d09cfd39db5dbf451e87ef703a (patch)
treec946dbcd940f14988881c48ac03b37c50796db18 /src/libcamera
parentde9243bdc1986c57bee4dae3a5ba4fc8fc4293fe (diff)
ipa: Switch to FrameBuffer interface
Switch the IPA interfaces and implementations to use the Framebuffer interface. - The IPA interface is switched to use the simpler FrameBuffer::Plane container when carrying dmabuf descriptions (fd and length) over the pipeline/IPA boundary. - The RkISP1 IPA implementation takes advantage of the new simpler and safer (better control over file descriptors) FrameBuffer interface. Signed-off-by: Niklas Söderlund <niklas.soderlund@ragnatech.se> Reviewed-by: Laurent Pinchart <laurent.pinchart@ideasonboard.com>
Diffstat (limited to 'src/libcamera')
-rw-r--r--src/libcamera/ipa_context_wrapper.cpp8
-rw-r--r--src/libcamera/ipa_interface.cpp7
-rw-r--r--src/libcamera/pipeline/rkisp1/rkisp1.cpp12
3 files changed, 17 insertions, 10 deletions
diff --git a/src/libcamera/ipa_context_wrapper.cpp b/src/libcamera/ipa_context_wrapper.cpp
index 9603fdac..946a2fd8 100644
--- a/src/libcamera/ipa_context_wrapper.cpp
+++ b/src/libcamera/ipa_context_wrapper.cpp
@@ -149,15 +149,15 @@ void IPAContextWrapper::mapBuffers(const std::vector<IPABuffer> &buffers)
for (unsigned int i = 0; i < buffers.size(); ++i) {
struct ipa_buffer &c_buffer = c_buffers[i];
const IPABuffer &buffer = buffers[i];
- const std::vector<Plane> &planes = buffer.memory.planes();
+ const std::vector<FrameBuffer::Plane> &planes = buffer.planes;
c_buffer.id = buffer.id;
c_buffer.num_planes = planes.size();
for (unsigned int j = 0; j < planes.size(); ++j) {
- const Plane &plane = planes[j];
- c_buffer.planes[j].dmabuf = plane.dmabuf();
- c_buffer.planes[j].length = plane.length();
+ const FrameBuffer::Plane &plane = planes[j];
+ c_buffer.planes[j].dmabuf = plane.fd.fd();
+ c_buffer.planes[j].length = plane.length;
}
}
diff --git a/src/libcamera/ipa_interface.cpp b/src/libcamera/ipa_interface.cpp
index ee3e3622..2f86087e 100644
--- a/src/libcamera/ipa_interface.cpp
+++ b/src/libcamera/ipa_interface.cpp
@@ -334,11 +334,10 @@ namespace libcamera {
*/
/**
- * \var IPABuffer::memory
- * \brief The buffer memory description
+ * \var IPABuffer::planes
+ * \brief The buffer planes description
*
- * The memory field stores the dmabuf handle and size for each plane of the
- * buffer.
+ * Stores the dmabuf handle and length for each plane of the buffer.
*/
/**
diff --git a/src/libcamera/pipeline/rkisp1/rkisp1.cpp b/src/libcamera/pipeline/rkisp1/rkisp1.cpp
index 7e41222e..d7ee95de 100644
--- a/src/libcamera/pipeline/rkisp1/rkisp1.cpp
+++ b/src/libcamera/pipeline/rkisp1/rkisp1.cpp
@@ -687,14 +687,22 @@ int PipelineHandlerRkISP1::allocateBuffers(Camera *camera,
}
for (unsigned int i = 0; i < stream->configuration().bufferCount + 1; i++) {
+ FrameBuffer::Plane plane;
+ plane.fd = FileDescriptor(paramPool_.buffers()[i].planes()[0].dmabuf());
+ plane.length = paramPool_.buffers()[i].planes()[0].length();
+
data->ipaBuffers_.push_back({ .id = RKISP1_PARAM_BASE | i,
- .memory = paramPool_.buffers()[i] });
+ .planes = { plane } });
paramBuffers_.push(new Buffer(i));
}
for (unsigned int i = 0; i < stream->configuration().bufferCount + 1; i++) {
+ FrameBuffer::Plane plane;
+ plane.fd = FileDescriptor(statPool_.buffers()[i].planes()[0].dmabuf());
+ plane.length = statPool_.buffers()[i].planes()[0].length();
+
data->ipaBuffers_.push_back({ .id = RKISP1_STAT_BASE | i,
- .memory = statPool_.buffers()[i] });
+ .planes = { plane } });
statBuffers_.push(new Buffer(i));
}