From 011b3ff288826460b76c59a5899c92ecd8226643 Mon Sep 17 00:00:00 2001 From: Laurent Pinchart Date: Mon, 5 Jul 2021 07:04:28 +0300 Subject: cam: Move event loop exit from CameraSession to CamApp Make exiting the event loop the responsibility of the application, not the camera session, to prepare for support of multiple camera sessions. Signed-off-by: Laurent Pinchart Reviewed-by: Kieran Bingham --- src/cam/camera_session.cpp | 2 +- src/cam/camera_session.h | 4 ++++ src/cam/main.cpp | 7 +++++++ 3 files changed, 12 insertions(+), 1 deletion(-) diff --git a/src/cam/camera_session.cpp b/src/cam/camera_session.cpp index b26c7974..16c1c66a 100644 --- a/src/cam/camera_session.cpp +++ b/src/cam/camera_session.cpp @@ -232,7 +232,7 @@ void CameraSession::processRequest(Request *request) captureCount_++; if (captureLimit_ && captureCount_ >= captureLimit_) { - EventLoop::instance()->exit(0); + captureDone.emit(); return; } diff --git a/src/cam/camera_session.h b/src/cam/camera_session.h index 270ba3e9..2728d760 100644 --- a/src/cam/camera_session.h +++ b/src/cam/camera_session.h @@ -11,6 +11,8 @@ #include #include +#include + #include #include #include @@ -28,6 +30,8 @@ public: int run(const OptionsParser::Options &options); + libcamera::Signal<> captureDone; + private: int capture(libcamera::FrameBufferAllocator *allocator); diff --git a/src/cam/main.cpp b/src/cam/main.cpp index 90435206..a567a7cc 100644 --- a/src/cam/main.cpp +++ b/src/cam/main.cpp @@ -38,6 +38,7 @@ public: private: void cameraAdded(std::shared_ptr cam); void cameraRemoved(std::shared_ptr cam); + void captureDone(); int parseOptions(int argc, char *argv[]); int prepareConfig(); int listControls(); @@ -330,6 +331,11 @@ void CamApp::cameraRemoved(std::shared_ptr cam) std::cout << "Camera Removed: " << cam->id() << std::endl; } +void CamApp::captureDone() +{ + EventLoop::instance()->exit(0); +} + int CamApp::run() { int ret; @@ -364,6 +370,7 @@ int CamApp::run() if (options_.isSet(OptCapture)) { CameraSession session(camera_, config_.get()); + session.captureDone.connect(this, &CamApp::captureDone); return session.run(options_); } -- cgit v1.2.1