libcamera  v0.0.0+100-debian/0_git20200629+e7aa92a-8-9-g77f5237c-dirty (2021-05-05T16:20:29+01:00)
Supporting cameras in Linux since 2019
camera.h
Go to the documentation of this file.
1 /* SPDX-License-Identifier: LGPL-2.1-or-later */
2 /*
3  * Copyright (C) 2018, Google Inc.
4  *
5  * camera.h - Camera object interface
6  */
7 #ifndef __LIBCAMERA_CAMERA_H__
8 #define __LIBCAMERA_CAMERA_H__
9 
10 #include <memory>
11 #include <set>
12 #include <stdint.h>
13 #include <string>
14 
15 #include <libcamera/class.h>
16 #include <libcamera/controls.h>
17 #include <libcamera/object.h>
18 #include <libcamera/request.h>
19 #include <libcamera/signal.h>
20 #include <libcamera/stream.h>
21 #include <libcamera/transform.h>
22 
23 namespace libcamera {
24 
25 class FrameBuffer;
26 class FrameBufferAllocator;
27 class PipelineHandler;
28 class Request;
29 
31 {
32 public:
33  enum Status {
37  };
38 
39  using iterator = std::vector<StreamConfiguration>::iterator;
40  using const_iterator = std::vector<StreamConfiguration>::const_iterator;
41 
42  virtual ~CameraConfiguration();
43 
44  void addConfiguration(const StreamConfiguration &cfg);
45  virtual Status validate() = 0;
46 
47  StreamConfiguration &at(unsigned int index);
48  const StreamConfiguration &at(unsigned int index) const;
49  StreamConfiguration &operator[](unsigned int index)
50  {
51  return at(index);
52  }
53  const StreamConfiguration &operator[](unsigned int index) const
54  {
55  return at(index);
56  }
57 
58  iterator begin();
59  const_iterator begin() const;
60  iterator end();
61  const_iterator end() const;
62 
63  bool empty() const;
64  std::size_t size() const;
65 
67 
68 protected:
70 
71  std::vector<StreamConfiguration> config_;
72 };
73 
74 class Camera final : public Object, public std::enable_shared_from_this<Camera>,
75  public Extensible
76 {
78 
79 public:
80  static std::shared_ptr<Camera> create(PipelineHandler *pipe,
81  const std::string &id,
82  const std::set<Stream *> &streams);
83 
84  const std::string &id() const;
85 
89 
90  int acquire();
91  int release();
92 
93  const ControlInfoMap &controls() const;
94  const ControlList &properties() const;
95 
96  const std::set<Stream *> &streams() const;
97  std::unique_ptr<CameraConfiguration> generateConfiguration(const StreamRoles &roles = {});
98  int configure(CameraConfiguration *config);
99 
100  std::unique_ptr<Request> createRequest(uint64_t cookie = 0);
101  int queueRequest(Request *request);
102 
103  int start(const ControlList *controls = nullptr);
104  int stop();
105 
106 private:
108 
109  Camera(PipelineHandler *pipe, const std::string &id,
110  const std::set<Stream *> &streams);
111  ~Camera();
112 
113  friend class PipelineHandler;
114  void disconnect();
115  void requestComplete(Request *request);
116 
117  friend class FrameBufferAllocator;
118  int exportFrameBuffers(Stream *stream,
119  std::vector<std::unique_ptr<FrameBuffer>> *buffers);
120 };
121 
122 } /* namespace libcamera */
123 
124 #endif /* __LIBCAMERA_CAMERA_H__ */
Utilities to help constructing class interfaces.
std::vector< StreamRole > StreamRoles
A vector of StreamRole.
Definition: stream.h:68
FrameBuffer allocator for applications.
Definition: framebuffer_allocator.h:22
std::size_t size() const
Retrieve the number of stream configurations.
Definition: camera.cpp:309
Transform transform
User-specified transform to be applied to the image.
Definition: camera.h:66
Video stream for a camera.
Definition: stream.h:70
Top-level libcamera namespace.
Definition: bound_method.h:15
void addConfiguration(const StreamConfiguration &cfg)
Add a stream configuration to the camera configuration.
Definition: camera.cpp:169
bool empty() const
Check if the camera configuration is empty.
Definition: camera.cpp:300
std::vector< StreamConfiguration >::iterator iterator
Iterator for the stream configurations in the camera configuration.
Definition: camera.h:39
Status
Validity of a camera configuration.
Definition: camera.h:33
Transform
Enum to represent a 2D plane transform.
Definition: transform.h:15
Video stream for a Camera.
Hold configuration for streams of the camera.
Definition: camera.h:30
const StreamConfiguration & operator[](unsigned int index) const
Retrieve a const reference to a stream configuration.
Definition: camera.h:53
StreamConfiguration & at(unsigned int index)
Retrieve a reference to a stream configuration.
Definition: camera.cpp:211
A map of ControlId to ControlInfo.
Definition: controls.h:301
#define LIBCAMERA_DECLARE_PRIVATE()
Declare private data for a public class.
virtual Status validate()=0
Validate and possibly adjust the camera configuration.
A frame capture request.
Definition: request.h:27
#define LIBCAMERA_DISABLE_COPY(klass)
Disable copy construction and assignment of the klass.
Signal & slot implementation.
Create and manage cameras based on a set of media devices.
Definition: pipeline_handler.h:57
Camera device.
Definition: camera.h:74
Base class to manage private data through a d-pointer.
Definition: class.h:55
Enum to represent and manipulate 2D plane transforms.
const ControlIdMap properties
List of all supported libcamera properties.
Definition: property_ids.cpp:784
iterator begin()
Retrieve an iterator to the first stream configuration in the sequence.
Definition: camera.cpp:260
Signal< Request *, FrameBuffer * > bufferCompleted
Signal emitted when a buffer for a request queued to the camera has completed.
Definition: camera.h:86
Base object to support automatic signal disconnection.
Generic signal and slot communication mechanism.
Definition: object.h:20
CameraConfiguration()
Create an empty camera configuration.
Definition: camera.cpp:156
const ControlIdMap controls
List of all supported libcamera controls.
Definition: control_ids.cpp:893
Describes a frame capture request to be processed by a camera.
Signal< Camera * > disconnected
Signal emitted when the camera is disconnected from the system.
Definition: camera.h:88
Associate a list of ControlId with their values for an object.
Definition: controls.h:346
Framework to manage controls related to an object.
Signal< Request * > requestCompleted
Signal emitted when a request queued to the camera has completed.
Definition: camera.h:87
iterator end()
Retrieve an iterator pointing to the past-the-end stream configuration in the sequence.
Definition: camera.cpp:280
Base object to support automatic signal disconnection.
Definition: object.h:24
StreamConfiguration & operator[](unsigned int index)
Retrieve a reference to a stream configuration.
Definition: camera.h:49
std::vector< StreamConfiguration > config_
The vector of stream configurations.
Definition: camera.h:71
Configuration parameters for a stream.
Definition: stream.h:39
std::vector< StreamConfiguration >::const_iterator const_iterator
Const iterator for the stream configuration in the camera configuration.
Definition: camera.h:40