summaryrefslogtreecommitdiff
path: root/src
diff options
context:
space:
mode:
authorNiklas Söderlund <niklas.soderlund@ragnatech.se>2020-07-24 15:16:57 +0200
committerNiklas Söderlund <niklas.soderlund@ragnatech.se>2020-07-27 17:31:13 +0200
commited734693350220f38aab768aee5e106b92dc9eb9 (patch)
tree85ae837edd9d0433fc3902a61c5acf7703d663db /src
parent01ea694003094b51bd96883055b11e52a011bef9 (diff)
cam: capture: Cache the EventLoop handler
Prepare for the ability to exit the event loop based on conditions in the request complete handler by caching the pointer instead of passing it as an argument. Signed-off-by: Niklas Söderlund <niklas.soderlund@ragnatech.se> Reviewed-by: Kieran Bingham <kieran.bingham@ideasonboard.com> Reviewed-by: Laurent Pinchart <laurent.pinchart@ideasonboard.com>
Diffstat (limited to 'src')
-rw-r--r--src/cam/capture.cpp13
-rw-r--r--src/cam/capture.h10
-rw-r--r--src/cam/main.cpp4
3 files changed, 15 insertions, 12 deletions
diff --git a/src/cam/capture.cpp b/src/cam/capture.cpp
index 55fa2dab..f811a18c 100644
--- a/src/cam/capture.cpp
+++ b/src/cam/capture.cpp
@@ -16,12 +16,13 @@
using namespace libcamera;
-Capture::Capture(std::shared_ptr<Camera> camera, CameraConfiguration *config)
- : camera_(camera), config_(config), writer_(nullptr)
+Capture::Capture(std::shared_ptr<Camera> camera, CameraConfiguration *config,
+ EventLoop *loop)
+ : camera_(camera), config_(config), writer_(nullptr), loop_(loop)
{
}
-int Capture::run(EventLoop *loop, const OptionsParser::Options &options)
+int Capture::run(const OptionsParser::Options &options)
{
int ret;
@@ -54,7 +55,7 @@ int Capture::run(EventLoop *loop, const OptionsParser::Options &options)
FrameBufferAllocator *allocator = new FrameBufferAllocator(camera_);
- ret = capture(loop, allocator);
+ ret = capture(allocator);
if (options.isSet(OptFile)) {
delete writer_;
@@ -66,7 +67,7 @@ int Capture::run(EventLoop *loop, const OptionsParser::Options &options)
return ret;
}
-int Capture::capture(EventLoop *loop, FrameBufferAllocator *allocator)
+int Capture::capture(FrameBufferAllocator *allocator)
{
int ret;
@@ -132,7 +133,7 @@ int Capture::capture(EventLoop *loop, FrameBufferAllocator *allocator)
}
std::cout << "Capture until user interrupts by SIGINT" << std::endl;
- ret = loop->exec();
+ ret = loop_->exec();
if (ret)
std::cout << "Failed to run capture loop" << std::endl;
diff --git a/src/cam/capture.h b/src/cam/capture.h
index 9bca5661..acdefc47 100644
--- a/src/cam/capture.h
+++ b/src/cam/capture.h
@@ -24,12 +24,12 @@ class Capture
{
public:
Capture(std::shared_ptr<libcamera::Camera> camera,
- libcamera::CameraConfiguration *config);
+ libcamera::CameraConfiguration *config,
+ EventLoop *loop);
- int run(EventLoop *loop, const OptionsParser::Options &options);
+ int run(const OptionsParser::Options &options);
private:
- int capture(EventLoop *loop,
- libcamera::FrameBufferAllocator *allocator);
+ int capture(libcamera::FrameBufferAllocator *allocator);
void requestComplete(libcamera::Request *request);
@@ -39,6 +39,8 @@ private:
std::map<libcamera::Stream *, std::string> streamName_;
BufferWriter *writer_;
std::chrono::steady_clock::time_point last_;
+
+ EventLoop *loop_;
};
#endif /* __CAM_CAPTURE_H__ */
diff --git a/src/cam/main.cpp b/src/cam/main.cpp
index ead0abe3..3e83feab 100644
--- a/src/cam/main.cpp
+++ b/src/cam/main.cpp
@@ -341,8 +341,8 @@ int CamApp::run()
}
if (options_.isSet(OptCapture)) {
- Capture capture(camera_, config_.get());
- return capture.run(loop_, options_);
+ Capture capture(camera_, config_.get(), loop_);
+ return capture.run(options_);
}
return 0;