/* SPDX-License-Identifier: LGPL-2.1-or-later */ /* * Copyright (C) 2021, Google Inc. * * camera.h - Camera private data */ #pragma once #include #include #include #include #include #include #include namespace libcamera { class CameraControlValidator; class PipelineHandler; class Stream; class Camera::Private : public Extensible::Private { LIBCAMERA_DECLARE_PUBLIC(Camera) public: Private(PipelineHandler *pipe); ~Private(); PipelineHandler *pipe() { return pipe_.get(); } std::list queuedRequests_; ControlInfoMap controlInfo_; ControlList properties_; uint32_t requestSequence_; const CameraControlValidator *validator() const { return validator_.get(); } private: enum State { CameraAvailable, CameraAcquired, CameraConfigured, CameraStopping, CameraRunning, }; bool isRunning() const; int isAccessAllowed(State state, bool allowDisconnected = false, const char *from = __builtin_FUNCTION()) const; int isAccessAllowed(State low, State high, bool allowDisconnected = false, const char *from = __builtin_FUNCTION()) const; void disconnect(); void setState(State state); std::shared_ptr pipe_; std::string id_; std::set streams_; std::set activeStreams_; bool disconnected_; std::atomic state_; std::unique_ptr validator_; }; } /* namespace libcamera */