/* SPDX-License-Identifier: LGPL-2.1-or-later */ /* * Copyright (C) 2019, Google Inc. * * request.h - Request class private data */ #pragma once #include #include #include #include #include #include using namespace std::chrono_literals; namespace libcamera { class Camera; class FrameBuffer; class Request::Private : public Extensible::Private { LIBCAMERA_DECLARE_PUBLIC(Request) public: Private(Camera *camera); ~Private(); Camera *camera() const { return camera_; } bool hasPendingBuffers() const; bool completeBuffer(FrameBuffer *buffer); void complete(); void cancel(); void reset(); void prepare(std::chrono::milliseconds timeout = 0ms); Signal<> prepared; private: friend class PipelineHandler; friend std::ostream &operator<<(std::ostream &out, const Request &r); void doCancelRequest(); void emitPrepareCompleted(); void notifierActivated(FrameBuffer *buffer); void timeout(); Camera *camera_; bool cancelled_; uint32_t sequence_ = 0; bool prepared_ = false; std::unordered_set pending_; std::map> notifiers_; std::unique_ptr timer_; }; } /* namespace libcamera */