[libcamera-devel] [PATCH v2 10/14] libcamera: ipu3: Queue requests to the pipeline
Jacopo Mondi
jacopo at jmondi.org
Tue Mar 12 13:12:38 CET 2019
Implement queueRequest for the IPU3 pipeline manager. When a request is
queued, a new buffer is queued to the ImgU output.
Also queue buffers for the viewfinder and stat video nodes, even if
they're not used at the moment.
Signed-off-by: Jacopo Mondi <jacopo at jmondi.org>
---
src/libcamera/pipeline/ipu3/ipu3.cpp | 25 +++++++++++++++++++++++--
1 file changed, 23 insertions(+), 2 deletions(-)
diff --git a/src/libcamera/pipeline/ipu3/ipu3.cpp b/src/libcamera/pipeline/ipu3/ipu3.cpp
index badde4839f99..1a7b96d9ada7 100644
--- a/src/libcamera/pipeline/ipu3/ipu3.cpp
+++ b/src/libcamera/pipeline/ipu3/ipu3.cpp
@@ -160,11 +160,15 @@ private:
std::shared_ptr<MediaDevice> cio2MediaDev_;
std::shared_ptr<MediaDevice> imguMediaDev_;
+
+ unsigned int tmpBufferCount;
};
PipelineHandlerIPU3::PipelineHandlerIPU3(CameraManager *manager)
: PipelineHandler(manager), cio2MediaDev_(nullptr), imguMediaDev_(nullptr)
{
+ /* FIXME: this is an hack. */
+ tmpBufferCount = 0;
}
PipelineHandlerIPU3::~PipelineHandlerIPU3()
@@ -464,9 +468,26 @@ void PipelineHandlerIPU3::stop(Camera *camera)
int PipelineHandlerIPU3::queueRequest(Camera *camera, Request *request)
{
IPU3CameraData *data = cameraData(camera);
- V4L2Device *cio2 = data->cio2.output;
+ V4L2Device *viewfinder = data->imgu->viewfinder;
+ V4L2Device *output = data->imgu->output;
+ V4L2Device *stat = data->imgu->stat;
Stream *stream = &data->stream_;
+ Buffer *tmpBuffer;
+
+ /*
+ * Queue buffer on VF and stat.
+ * FIXME: this is an hack!
+ */
+ tmpBuffer = &data->imgu->vfPool.buffers()[tmpBufferCount];
+ viewfinder->queueBuffer(tmpBuffer);
+
+ tmpBuffer = &data->imgu->statPool.buffers()[tmpBufferCount];
+ stat->queueBuffer(tmpBuffer);
+
+ tmpBufferCount++;
+ tmpBufferCount %= IPU3_IMGU_BUFFER_COUNT;
+ /* Queue a buffer to the ImgU output for capture. */
Buffer *buffer = request->findBuffer(stream);
if (!buffer) {
LOG(IPU3, Error)
@@ -474,7 +495,7 @@ int PipelineHandlerIPU3::queueRequest(Camera *camera, Request *request)
return -ENOENT;
}
- int ret = cio2->queueBuffer(buffer);
+ int ret = output->queueBuffer(buffer);
if (ret < 0)
return ret;
--
2.20.1
More information about the libcamera-devel
mailing list