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>
This commit is contained in:
Laurent Pinchart 2021-07-05 07:04:28 +03:00
parent 453583e189
commit 011b3ff288
3 changed files with 12 additions and 1 deletions

View file

@ -232,7 +232,7 @@ void CameraSession::processRequest(Request *request)
captureCount_++;
if (captureLimit_ && captureCount_ >= captureLimit_) {
EventLoop::instance()->exit(0);
captureDone.emit();
return;
}

View file

@ -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);

View file

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