diff options
-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_); } |