[libcamera-devel,v5,11/14] libcamera: ipu3: Queue requests for multiple streams

Message ID 20190418104715.22622-12-jacopo@jmondi.org
State Superseded
Headers show
Series
  • libcamera: ipu3: Multiple streams support
Related show

Commit Message

Jacopo Mondi April 18, 2019, 10:47 a.m. UTC
Add support for queueing requests for multiple streams in the IPU3
pipeline handler class. The output video node should be queued with
buffers even if not part of the requested streams.

Signed-off-by: Jacopo Mondi <jacopo@jmondi.org>
---
 src/libcamera/pipeline/ipu3/ipu3.cpp | 23 +++++++++--------------
 1 file changed, 9 insertions(+), 14 deletions(-)

Patch

diff --git a/src/libcamera/pipeline/ipu3/ipu3.cpp b/src/libcamera/pipeline/ipu3/ipu3.cpp
index 9837637b800b..ee490a488cf7 100644
--- a/src/libcamera/pipeline/ipu3/ipu3.cpp
+++ b/src/libcamera/pipeline/ipu3/ipu3.cpp
@@ -521,25 +521,20 @@  void PipelineHandlerIPU3::stop(Camera *camera)
 
 int PipelineHandlerIPU3::queueRequest(Camera *camera, Request *request)
 {
-	IPU3CameraData *data = cameraData(camera);
-	V4L2Device *output = data->imgu_->output_.dev;
-	IPU3Stream *stream = &data->outStream_;
+	int ret = 0;
 
-	/* Queue a buffer to the ImgU output for capture. */
-	Buffer *buffer = request->findBuffer(stream);
-	if (!buffer) {
-		LOG(IPU3, Error)
-			<< "Attempt to queue request with invalid stream";
-		return -ENOENT;
-	}
+	for (auto it : request->buffers()) {
+		IPU3Stream *stream = static_cast<IPU3Stream *>(it.first);
+		Buffer *buffer = it.second;
 
-	int ret = output->queueBuffer(buffer);
-	if (ret < 0)
-		return ret;
+		int status = stream->device_->dev->queueBuffer(buffer);
+		if (status < 0)
+			ret = status;
+	}
 
 	PipelineHandler::queueRequest(camera, request);
 
-	return 0;
+	return ret;
 }
 
 bool PipelineHandlerIPU3::match(DeviceEnumerator *enumerator)