/* SPDX-License-Identifier: GPL-2.0-or-later */ /* * Copyright (C) 2020-2021, Google Inc. * * simple_capture.h - Simple capture helper */ #pragma once #include #include #include "../common/event_loop.h" class Capture { public: void configure(libcamera::StreamRole role); protected: Capture(std::shared_ptr camera); virtual ~Capture(); void start(); void stop(); virtual void requestComplete(libcamera::Request *request) = 0; EventLoop *loop_; std::shared_ptr camera_; std::unique_ptr allocator_; std::unique_ptr config_; std::vector> requests_; }; class CaptureBalanced : public Capture { public: CaptureBalanced(std::shared_ptr camera); void capture(unsigned int numRequests); private: int queueRequest(libcamera::Request *request); void requestComplete(libcamera::Request *request) override; unsigned int queueCount_; unsigned int captureCount_; unsigned int captureLimit_; }; class CaptureUnbalanced : public Capture { public: CaptureUnbalanced(std::shared_ptr camera); void capture(unsigned int numRequests); private: void requestComplete(libcamera::Request *request) override; unsigned int captureCount_; unsigned int captureLimit_; };