summaryrefslogtreecommitdiff
path: root/src/libcamera/pipeline/ipu3/ipu3.cpp
diff options
context:
space:
mode:
Diffstat (limited to 'src/libcamera/pipeline/ipu3/ipu3.cpp')
-rw-r--r--src/libcamera/pipeline/ipu3/ipu3.cpp32
1 files changed, 32 insertions, 0 deletions
diff --git a/src/libcamera/pipeline/ipu3/ipu3.cpp b/src/libcamera/pipeline/ipu3/ipu3.cpp
index 7c4539d4..b73f0f07 100644
--- a/src/libcamera/pipeline/ipu3/ipu3.cpp
+++ b/src/libcamera/pipeline/ipu3/ipu3.cpp
@@ -210,6 +210,11 @@ public:
const StreamRoles &roles) override;
int configure(Camera *camera, CameraConfiguration *config) override;
+ int exportFrameBuffers(Camera *camera, Stream *stream,
+ std::vector<std::unique_ptr<FrameBuffer>> *buffers) override;
+ int importFrameBuffers(Camera *camera, Stream *stream) override;
+ void freeFrameBuffers(Camera *camera, Stream *stream) override;
+
int allocateBuffers(Camera *camera,
const std::set<Stream *> &streams) override;
int freeBuffers(Camera *camera,
@@ -616,6 +621,33 @@ int PipelineHandlerIPU3::configure(Camera *camera, CameraConfiguration *c)
return 0;
}
+int PipelineHandlerIPU3::exportFrameBuffers(Camera *camera, Stream *stream,
+ std::vector<std::unique_ptr<FrameBuffer>> *buffers)
+{
+ IPU3Stream *ipu3stream = static_cast<IPU3Stream *>(stream);
+ V4L2VideoDevice *video = ipu3stream->device_->dev;
+ unsigned int count = stream->configuration().bufferCount;
+
+ return video->exportBuffers(count, buffers);
+}
+
+int PipelineHandlerIPU3::importFrameBuffers(Camera *camera, Stream *stream)
+{
+ IPU3Stream *ipu3stream = static_cast<IPU3Stream *>(stream);
+ V4L2VideoDevice *video = ipu3stream->device_->dev;
+ unsigned int count = stream->configuration().bufferCount;
+
+ return video->importBuffers(count);
+}
+
+void PipelineHandlerIPU3::freeFrameBuffers(Camera *camera, Stream *stream)
+{
+ IPU3Stream *ipu3stream = static_cast<IPU3Stream *>(stream);
+ V4L2VideoDevice *video = ipu3stream->device_->dev;
+
+ video->releaseBuffers();
+}
+
/**
* \todo Clarify if 'viewfinder' and 'stat' nodes have to be set up and
* started even if not in use. As of now, if not properly configured and