@@ -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)
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(-)