summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
-rw-r--r--src/cam/camera_session.cpp2
-rw-r--r--src/cam/camera_session.h4
-rw-r--r--src/cam/main.cpp7
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_);
}