[libcamera-devel] [PATCH 6/7] libcamera: pipeline: vimc: Queue the buffers
Kaaira Gupta
kgupta at es.iitr.ac.in
Wed Jul 22 15:30:08 CEST 2020
Queue the buffers correctly according to the streams requested.
Signed-off-by: Kaaira Gupta <kgupta at es.iitr.ac.in>
---
src/libcamera/pipeline/vimc/vimc.cpp | 31 +++++++++++++++++++---------
1 file changed, 21 insertions(+), 10 deletions(-)
diff --git a/src/libcamera/pipeline/vimc/vimc.cpp b/src/libcamera/pipeline/vimc/vimc.cpp
index 6010e1e..7e8d355 100644
--- a/src/libcamera/pipeline/vimc/vimc.cpp
+++ b/src/libcamera/pipeline/vimc/vimc.cpp
@@ -536,19 +536,30 @@ int PipelineHandlerVimc::processControls(VimcCameraData *data, Request *request)
int PipelineHandlerVimc::queueRequestDevice(Camera *camera, Request *request)
{
VimcCameraData *data = cameraData(camera);
- FrameBuffer *buffer = request->findBuffer(&data->rgbStream_);
- if (!buffer) {
- LOG(VIMC, Error)
- << "Attempt to queue request with invalid stream";
+ for (auto it : request->buffers()) {
+ Stream *stream = static_cast<Stream *>(it.first);
+ FrameBuffer *buffer = it.second;
+ if (!buffer) {
+ LOG(VIMC, Error)
+ << "Attempt to queue request with invalid stream";
+
+ return -ENOENT;
+ }
- return -ENOENT;
- }
+ int ret;
- int ret = processControls(data, request);
- if (ret < 0)
- return ret;
+ if (stream == &data->rgbStream_)
+ ret = data->video_->queueBuffer(buffer);
+ if (stream == &data->rawStream_)
+ ret = data->raw_->queueBuffer(buffer);
+ else
+ continue;
- ret = data->video_->queueBuffer(buffer);
+ if (ret < 0)
+ return ret;
+ return ret;
+ }
+ int ret = processControls(data, request);
if (ret < 0)
return ret;
--
2.17.1
More information about the libcamera-devel
mailing list