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>
This commit is contained in:
Niklas Söderlund 2020-07-24 15:16:57 +02:00
parent 01ea694003
commit ed73469335
3 changed files with 15 additions and 12 deletions

View file

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

View file

@ -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__ */

View file

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