[libcamera-devel,v3,2/3] cam: capture: Cache the EventLoop handler

Message ID 20200724191851.803350-3-niklas.soderlund@ragnatech.se
State Accepted
Commit ed734693350220f38aab768aee5e106b92dc9eb9
Headers show
Series
  • cam: Add options to make batch testing with cam easier
Related show

Commit Message

Niklas Söderlund July 24, 2020, 7:18 p.m. UTC
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@ragnatech.se>
Reviewed-by: Kieran Bingham <kieran.bingham@ideasonboard.com>
Reviewed-by: Laurent Pinchart <laurent.pinchart@ideasonboard.com>
---
* Changes since v2
- Pass EventLoop to constructor instead of run()
---
 src/cam/capture.cpp | 13 +++++++------
 src/cam/capture.h   | 10 ++++++----
 src/cam/main.cpp    |  4 ++--
 3 files changed, 15 insertions(+), 12 deletions(-)

Patch

diff --git a/src/cam/capture.cpp b/src/cam/capture.cpp
index 55fa2dabcee97f21..f811a18c579508a1 100644
--- a/src/cam/capture.cpp
+++ b/src/cam/capture.cpp
@@ -16,12 +16,13 @@ 
 
 using namespace libcamera;
 
-Capture::Capture(std::shared_ptr<Camera> camera, CameraConfiguration *config)
-	: camera_(camera), config_(config), writer_(nullptr)
+Capture::Capture(std::shared_ptr<Camera> camera, CameraConfiguration *config,
+		 EventLoop *loop)
+	: camera_(camera), config_(config), writer_(nullptr), loop_(loop)
 {
 }
 
-int Capture::run(EventLoop *loop, const OptionsParser::Options &options)
+int Capture::run(const OptionsParser::Options &options)
 {
 	int ret;
 
@@ -54,7 +55,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 +67,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 +133,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..acdefc47b24314d2 100644
--- a/src/cam/capture.h
+++ b/src/cam/capture.h
@@ -24,12 +24,12 @@  class Capture
 {
 public:
 	Capture(std::shared_ptr<libcamera::Camera> camera,
-		libcamera::CameraConfiguration *config);
+		libcamera::CameraConfiguration *config,
+		EventLoop *loop);
 
-	int run(EventLoop *loop, const OptionsParser::Options &options);
+	int run(const OptionsParser::Options &options);
 private:
-	int capture(EventLoop *loop,
-		    libcamera::FrameBufferAllocator *allocator);
+	int capture(libcamera::FrameBufferAllocator *allocator);
 
 	void requestComplete(libcamera::Request *request);
 
@@ -39,6 +39,8 @@  private:
 	std::map<libcamera::Stream *, std::string> streamName_;
 	BufferWriter *writer_;
 	std::chrono::steady_clock::time_point last_;
+
+	EventLoop *loop_;
 };
 
 #endif /* __CAM_CAPTURE_H__ */
diff --git a/src/cam/main.cpp b/src/cam/main.cpp
index ead0abe3e2abf42d..3e83feabe64e036c 100644
--- a/src/cam/main.cpp
+++ b/src/cam/main.cpp
@@ -341,8 +341,8 @@  int CamApp::run()
 	}
 
 	if (options_.isSet(OptCapture)) {
-		Capture capture(camera_, config_.get());
-		return capture.run(loop_, options_);
+		Capture capture(camera_, config_.get(), loop_);
+		return capture.run(options_);
 	}
 
 	return 0;