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:
@@ -232,7 +232,7 @@ void CameraSession::processRequest(Request *request)
|
||||
|
||||
captureCount_++;
|
||||
if (captureLimit_ && captureCount_ >= captureLimit_) {
|
||||
EventLoop::instance()->exit(0);
|
||||
captureDone.emit();
|
||||
return;
|
||||
}
|
||||
|
||||
|
||||
@@ -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);
|
||||
|
||||
|
||||
@@ -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_);
|
||||
}
|
||||
|
||||
|
||||
Reference in New Issue
Block a user