[RFC,v1,40/54] apps: cam: Use camera buffer pool
diff mbox series

Message ID 20260629163017.863145-41-barnabas.pocze@ideasonboard.com
State New
Headers show
Series
  • libcamera: Split requests and buffers
Related show

Commit Message

Barnabás Pőcze June 29, 2026, 4:30 p.m. UTC
Convert the `cam` application to use the new buffer pool interface
of cameras.

Signed-off-by: Barnabás Pőcze <barnabas.pocze@ideasonboard.com>
---
 src/apps/cam/camera_session.cpp | 25 ++++++++++++++++++-------
 1 file changed, 18 insertions(+), 7 deletions(-)

Patch
diff mbox series

diff --git a/src/apps/cam/camera_session.cpp b/src/apps/cam/camera_session.cpp
index f90800caf8..fc91bb312a 100644
--- a/src/apps/cam/camera_session.cpp
+++ b/src/apps/cam/camera_session.cpp
@@ -388,12 +388,7 @@  int CameraSession::startCapture()
 				allocator_->buffers(stream);
 			const std::unique_ptr<FrameBuffer> &buffer = buffers[i];
 
-			ret = request->addBuffer(stream, buffer.get());
-			if (ret < 0) {
-				std::cerr << "Can't set buffer for request"
-					  << std::endl;
-				return ret;
-			}
+			request->enableStream(stream, true);
 
 			if (sink_)
 				sink_->mapBuffer(buffer.get());
@@ -418,6 +413,15 @@  int CameraSession::startCapture()
 		return ret;
 	}
 
+	for (const StreamConfiguration &cfg : *config_) {
+		Stream *stream = cfg.stream();
+		const std::vector<std::unique_ptr<FrameBuffer>> &buffers =
+			allocator_->buffers(stream);
+
+		for (const auto &buffer : buffers)
+			camera_->addBuffer(stream, buffer.get());
+	}
+
 	for (std::unique_ptr<Request> &request : requests_) {
 		ret = queueRequest(request.get());
 		if (ret < 0) {
@@ -548,6 +552,13 @@  void CameraSession::processRequest(Request *request)
 
 void CameraSession::requeueRequest(Request *request)
 {
-	request->reuse(Request::ReuseBuffers);
+	for (const auto &[stream, buffer] : request->buffers())
+		camera_->addBuffer(stream, buffer);
+
+	request->reuse();
+
+	for (const auto &cfg : *config_)
+		request->enableStream(cfg.stream(), true);
+
 	queueRequest(request);
 }