libcamera: ipu3: Queue requests for multiple streams

Add support for queueing requests for multiple streams in the IPU3
pipeline handler class.

Reviewed-by: Laurent Pinchart <laurent.pinchart@ideasonboard.com>
Signed-off-by: Jacopo Mondi <jacopo@jmondi.org>
This commit is contained in:
Jacopo Mondi
2019-03-19 16:27:14 +01:00
parent 57c84b4f3f
commit 9f2bf7ba1e

View File

@@ -577,25 +577,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 error = 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 = stream->device_->dev->queueBuffer(buffer);
if (ret < 0)
error = ret;
}
int ret = output->queueBuffer(buffer);
if (ret < 0)
return ret;
PipelineHandler::queueRequest(camera, request);
return 0;
return error;
}
bool PipelineHandlerIPU3::match(DeviceEnumerator *enumerator)