diff options
author | Laurent Pinchart <laurent.pinchart@ideasonboard.com> | 2021-07-05 07:04:28 +0300 |
---|---|---|
committer | Laurent Pinchart <laurent.pinchart@ideasonboard.com> | 2021-07-22 17:13:42 +0300 |
commit | 011b3ff288826460b76c59a5899c92ecd8226643 (patch) | |
tree | 7d78978d1642f3f6e52b5fdb2c4d79e44074c053 /src | |
parent | 453583e189e01bbef321b9a50c0c435cc05fef63 (diff) |
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 <laurent.pinchart@ideasonboard.com>
Reviewed-by: Kieran Bingham <kieran.bingham@ideasonboard.com>
Diffstat (limited to 'src')
-rw-r--r-- | src/cam/camera_session.cpp | 2 | ||||
-rw-r--r-- | src/cam/camera_session.h | 4 | ||||
-rw-r--r-- | src/cam/main.cpp | 7 |
3 files changed, 12 insertions, 1 deletions
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 <stdint.h> #include <vector> +#include <libcamera/base/signal.h> + #include <libcamera/camera.h> #include <libcamera/framebuffer.h> #include <libcamera/framebuffer_allocator.h> @@ -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<Camera> cam); void cameraRemoved(std::shared_ptr<Camera> cam); + void captureDone(); int parseOptions(int argc, char *argv[]); int prepareConfig(); int listControls(); @@ -330,6 +331,11 @@ void CamApp::cameraRemoved(std::shared_ptr<Camera> 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_); } |