[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