libcamera  v0.0.0
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/controls.h>
16 #include <libcamera/request.h>
17 #include <libcamera/signal.h>
18 #include <libcamera/stream.h>
19 
20 namespace libcamera {
21 
22 class FrameBuffer;
23 class FrameBufferAllocator;
24 class PipelineHandler;
25 class Request;
26 
28 {
29 public:
30  enum Status {
34  };
35 
36  using iterator = std::vector<StreamConfiguration>::iterator;
37  using const_iterator = std::vector<StreamConfiguration>::const_iterator;
38 
39  virtual ~CameraConfiguration();
40 
41  void addConfiguration(const StreamConfiguration &cfg);
42  virtual Status validate() = 0;
43 
44  StreamConfiguration &at(unsigned int index);
45  const StreamConfiguration &at(unsigned int index) const;
46  StreamConfiguration &operator[](unsigned int index)
47  {
48  return at(index);
49  }
50  const StreamConfiguration &operator[](unsigned int index) const
51  {
52  return at(index);
53  }
54 
55  iterator begin();
56  const_iterator begin() const;
57  iterator end();
58  const_iterator end() const;
59 
60  bool empty() const;
61  std::size_t size() const;
62 
63 protected:
65 
66  std::vector<StreamConfiguration> config_;
67 };
68 
69 class Camera final : public std::enable_shared_from_this<Camera>
70 {
71 public:
72  static std::shared_ptr<Camera> create(PipelineHandler *pipe,
73  const std::string &name,
74  const std::set<Stream *> &streams);
75 
76  Camera(const Camera &) = delete;
77  Camera &operator=(const Camera &) = delete;
78 
79  const std::string &name() const;
80 
84 
85  int acquire();
86  int release();
87 
88  const ControlInfoMap &controls();
89  const ControlList &properties();
90 
91  const std::set<Stream *> &streams() const;
92  std::unique_ptr<CameraConfiguration> generateConfiguration(const StreamRoles &roles);
93  int configure(CameraConfiguration *config);
94 
95  Request *createRequest(uint64_t cookie = 0);
96  int queueRequest(Request *request);
97 
98  int start();
99  int stop();
100 
101 private:
102  Camera(PipelineHandler *pipe, const std::string &name,
103  const std::set<Stream *> &streams);
104  ~Camera();
105 
106  class Private;
107  std::unique_ptr<Private> p_;
108 
109  friend class PipelineHandler;
110  void disconnect();
111  void requestComplete(Request *request);
112 
113  friend class FrameBufferAllocator;
114  int exportFrameBuffers(Stream *stream,
115  std::vector<std::unique_ptr<FrameBuffer>> *buffers);
116 };
117 
118 } /* namespace libcamera */
119 
120 #endif /* __LIBCAMERA_CAMERA_H__ */
Hold configuration for streams of the camera.
Definition: camera.h:28
std::vector< StreamConfiguration >::iterator iterator
Iterator for the stream configurations in the camera configuration.
Definition: camera.h:36
std::vector< StreamConfiguration > config_
The vector of stream configurations.
Definition: camera.h:66
virtual Status validate()=0
Validate and possibly adjust the camera configuration.
StreamConfiguration & at(unsigned int index)
Retrieve a reference to a stream configuration.
Definition: camera.cpp:150
Status
Validity of a camera configuration.
Definition: camera.h:30
@ Valid
Definition: camera.h:31
@ Adjusted
Definition: camera.h:32
@ Invalid
Definition: camera.h:33
const StreamConfiguration & operator[](unsigned int index) const
Retrieve a const reference to a stream configuration.
Definition: camera.h:50
bool empty() const
Check if the camera configuration is empty.
Definition: camera.cpp:239
CameraConfiguration()
Create an empty camera configuration.
Definition: camera.cpp:95
std::size_t size() const
Retrieve the number of stream configurations.
Definition: camera.cpp:248
void addConfiguration(const StreamConfiguration &cfg)
Add a stream configuration to the camera configuration.
Definition: camera.cpp:108
iterator begin()
Retrieve an iterator to the first stream configuration in the sequence.
Definition: camera.cpp:199
iterator end()
Retrieve an iterator pointing to the past-the-end stream configuration in the sequence.
Definition: camera.cpp:219
std::vector< StreamConfiguration >::const_iterator const_iterator
Const iterator for the stream configuration in the camera configuration.
Definition: camera.h:37
StreamConfiguration & operator[](unsigned int index)
Retrieve a reference to a stream configuration.
Definition: camera.h:46
Camera device.
Definition: camera.h:70
const std::set< Stream * > & streams() const
Retrieve all the camera's stream information.
Definition: camera.cpp:669
static std::shared_ptr< Camera > create(PipelineHandler *pipe, const std::string &name, const std::set< Stream * > &streams)
Create a camera instance.
Definition: camera.cpp:460
int configure(CameraConfiguration *config)
Configure the camera prior to capture.
Definition: camera.cpp:749
const ControlInfoMap & controls()
Retrieve the list of controls supported by the camera.
Definition: camera.cpp:640
int stop()
Stop capture from camera.
Definition: camera.cpp:929
int acquire()
Acquire the camera device for exclusive access.
Definition: camera.cpp:581
const ControlList & properties()
Retrieve the list of properties of the camera.
Definition: camera.cpp:653
int release()
Release exclusive access to the camera device.
Definition: camera.cpp:616
Signal< Request * > requestCompleted
Signal emitted when a request queued to the camera has completed.
Definition: camera.h:82
int start()
Start capture from camera.
Definition: camera.cpp:897
int queueRequest(Request *request)
Queue a request to the camera.
Definition: camera.cpp:851
Request * createRequest(uint64_t cookie=0)
Create a request object for the camera.
Definition: camera.cpp:816
Signal< Camera * > disconnected
Signal emitted when the camera is disconnected from the system.
Definition: camera.h:83
std::unique_ptr< CameraConfiguration > generateConfiguration(const StreamRoles &roles)
Generate a default camera configuration according to stream roles.
Definition: camera.cpp:690
const std::string & name() const
Retrieve the name of the camera.
Definition: camera.cpp:481
Signal< Request *, FrameBuffer * > bufferCompleted
Signal emitted when a buffer for a request queued to the camera has completed.
Definition: camera.h:81
A map of ControlId to ControlInfo.
Definition: controls.h:297
Associate a list of ControlId with their values for an object.
Definition: controls.h:342
FrameBuffer allocator for applications.
Definition: framebuffer_allocator.h:21
Create and manage cameras based on a set of media devices.
Definition: pipeline_handler.h:59
A frame capture request.
Definition: request.h:26
Generic signal and slot communication mechanism.
Definition: signal.h:39
Video stream for a camera.
Definition: stream.h:70
Framework to manage controls related to an object.
Describes a frame capture request to be processed by a camera.
Signal & slot implementation.
Video stream for a Camera.
std::vector< StreamRole > StreamRoles
A vector of StreamRole.
Definition: stream.h:67
Configuration parameters for a stream.
Definition: stream.h:39