summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorLaurent Pinchart <laurent.pinchart@ideasonboard.com>2021-07-05 07:04:28 +0300
committerLaurent Pinchart <laurent.pinchart@ideasonboard.com>2021-07-22 17:13:42 +0300
commit011b3ff288826460b76c59a5899c92ecd8226643 (patch)
tree7d78978d1642f3f6e52b5fdb2c4d79e44074c053
parent453583e189e01bbef321b9a50c0c435cc05fef63 (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>
-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_);
}