[libcamera-devel] [PATCH v2 2/3] cam: capture: Cache the EventLoop handler

Niklas Söderlund niklas.soderlund at ragnatech.se
Fri Jul 24 19:48:26 CEST 2020


Prepare for the ability to exit the event loop based on conditions in
the request complete handler by caching the pointer instead of passing
it as an argument.

Signed-off-by: Niklas Söderlund <niklas.soderlund at ragnatech.se>
Reviewed-by: Kieran Bingham <kieran.bingham at ideasonboard.com>
---
 src/cam/capture.cpp | 10 ++++++----
 src/cam/capture.h   |  5 +++--
 2 files changed, 9 insertions(+), 6 deletions(-)

diff --git a/src/cam/capture.cpp b/src/cam/capture.cpp
index 55fa2dabcee97f21..aa53c407d7b71b44 100644
--- a/src/cam/capture.cpp
+++ b/src/cam/capture.cpp
@@ -17,7 +17,7 @@
 using namespace libcamera;
 
 Capture::Capture(std::shared_ptr<Camera> camera, CameraConfiguration *config)
-	: camera_(camera), config_(config), writer_(nullptr)
+	: camera_(camera), config_(config), writer_(nullptr), loop_(nullptr)
 {
 }
 
@@ -25,6 +25,8 @@ int Capture::run(EventLoop *loop, const OptionsParser::Options &options)
 {
 	int ret;
 
+	loop_ = loop;
+
 	if (!camera_) {
 		std::cout << "Can't capture without a camera" << std::endl;
 		return -ENODEV;
@@ -54,7 +56,7 @@ int Capture::run(EventLoop *loop, const OptionsParser::Options &options)
 
 	FrameBufferAllocator *allocator = new FrameBufferAllocator(camera_);
 
-	ret = capture(loop, allocator);
+	ret = capture(allocator);
 
 	if (options.isSet(OptFile)) {
 		delete writer_;
@@ -66,7 +68,7 @@ int Capture::run(EventLoop *loop, const OptionsParser::Options &options)
 	return ret;
 }
 
-int Capture::capture(EventLoop *loop, FrameBufferAllocator *allocator)
+int Capture::capture(FrameBufferAllocator *allocator)
 {
 	int ret;
 
@@ -132,7 +134,7 @@ int Capture::capture(EventLoop *loop, FrameBufferAllocator *allocator)
 	}
 
 	std::cout << "Capture until user interrupts by SIGINT" << std::endl;
-	ret = loop->exec();
+	ret = loop_->exec();
 	if (ret)
 		std::cout << "Failed to run capture loop" << std::endl;
 
diff --git a/src/cam/capture.h b/src/cam/capture.h
index 9bca5661070efcf5..67c6260bfe24aefc 100644
--- a/src/cam/capture.h
+++ b/src/cam/capture.h
@@ -28,8 +28,7 @@ public:
 
 	int run(EventLoop *loop, const OptionsParser::Options &options);
 private:
-	int capture(EventLoop *loop,
-		    libcamera::FrameBufferAllocator *allocator);
+	int capture(libcamera::FrameBufferAllocator *allocator);
 
 	void requestComplete(libcamera::Request *request);
 
@@ -39,6 +38,8 @@ private:
 	std::map<libcamera::Stream *, std::string> streamName_;
 	BufferWriter *writer_;
 	std::chrono::steady_clock::time_point last_;
+
+	EventLoop *loop_;
 };
 
 #endif /* __CAM_CAPTURE_H__ */
-- 
2.27.0



More information about the libcamera-devel mailing list