libcamera v0.1.0+52-a858d20b
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
8#pragma once
9
10#include <initializer_list>
11#include <memory>
12#include <set>
13#include <stdint.h>
14#include <string>
15
20
21#include <libcamera/controls.h>
22#include <libcamera/geometry.h>
23#include <libcamera/request.h>
24#include <libcamera/stream.h>
25#include <libcamera/transform.h>
26
27namespace libcamera {
28
29class FrameBuffer;
30class FrameBufferAllocator;
31class PipelineHandler;
32class Request;
33
35{
36public:
37 unsigned int bitDepth = 0;
38
40
41 struct {
42 unsigned int binX = 1;
43 unsigned int binY = 1;
45
46 struct {
47 unsigned int xOddInc = 1;
48 unsigned int xEvenInc = 1;
49 unsigned int yOddInc = 1;
50 unsigned int yEvenInc = 1;
52
54
55 bool valid() const
56 {
57 return validate() != Invalid;
58 }
59
60 explicit operator bool() const
61 {
62 return validate() == Populated;
63 }
64
65private:
66 enum Status {
67 Unpopulated,
68 Populated,
69 Invalid,
70 };
71
72 Status validate() const;
73};
74
76{
77public:
78 enum Status {
82 };
83
84 using iterator = std::vector<StreamConfiguration>::iterator;
85 using const_iterator = std::vector<StreamConfiguration>::const_iterator;
86
87 virtual ~CameraConfiguration();
88
90 virtual Status validate() = 0;
91
92 StreamConfiguration &at(unsigned int index);
93 const StreamConfiguration &at(unsigned int index) const;
94 StreamConfiguration &operator[](unsigned int index)
95 {
96 return at(index);
97 }
98 const StreamConfiguration &operator[](unsigned int index) const
99 {
100 return at(index);
101 }
102
103 iterator begin();
104 const_iterator begin() const;
105 iterator end();
106 const_iterator end() const;
107
108 bool empty() const;
109 std::size_t size() const;
110
113
114protected:
116
117 enum class ColorSpaceFlag {
118 None,
119 StreamsShareColorSpace,
120 };
121
123
125
126 std::vector<StreamConfiguration> config_;
127};
128
129class Camera final : public Object, public std::enable_shared_from_this<Camera>,
130 public Extensible
131{
133
134public:
135 static std::shared_ptr<Camera> create(std::unique_ptr<Private> d,
136 const std::string &id,
137 const std::set<Stream *> &streams);
138
139 const std::string &id() const;
140
144
145 int acquire();
146 int release();
147
148 const ControlInfoMap &controls() const;
149 const ControlList &properties() const;
150
151 const std::set<Stream *> &streams() const;
152
153 std::unique_ptr<CameraConfiguration>
154 generateConfiguration(Span<const StreamRole> roles = {});
155
156 std::unique_ptr<CameraConfiguration>
157 generateConfiguration(std::initializer_list<StreamRole> roles)
158 {
159 return generateConfiguration(Span(roles.begin(), roles.end()));
160 }
161
162 int configure(CameraConfiguration *config);
163
164 std::unique_ptr<Request> createRequest(uint64_t cookie = 0);
165 int queueRequest(Request *request);
166
167 int start(const ControlList *controls = nullptr);
168 int stop();
169
170private:
172
173 Camera(std::unique_ptr<Private> d, const std::string &id,
174 const std::set<Stream *> &streams);
175 ~Camera();
176
177 friend class PipelineHandler;
178 void disconnect();
179 void requestComplete(Request *request);
180
181 friend class FrameBufferAllocator;
182 int exportFrameBuffers(Stream *stream,
183 std::vector<std::unique_ptr<FrameBuffer>> *buffers);
184};
185
186} /* namespace libcamera */
Utilities to help constructing class interfaces.
#define LIBCAMERA_DECLARE_PRIVATE()
Declare private data for a public class.
#define LIBCAMERA_DISABLE_COPY(klass)
Disable copy construction and assignment of the klass.
Hold configuration for streams of the camera.
Definition: camera.h:76
std::vector< StreamConfiguration >::iterator iterator
Iterator for the stream configurations in the camera configuration.
Definition: camera.h:84
std::vector< StreamConfiguration > config_
The vector of stream configurations.
Definition: camera.h:126
Status validateColorSpaces(ColorSpaceFlags flags=ColorSpaceFlag::None)
Check the color spaces requested for each stream.
Definition: camera.cpp:525
SensorConfiguration sensorConfig
The camera sensor configuration.
Definition: camera.h:111
virtual Status validate()=0
Validate and possibly adjust the camera configuration.
ColorSpaceFlag
Specify the behaviour of validateColorSpaces.
Definition: camera.h:117
@ None
No extra validation of color spaces is required.
StreamConfiguration & at(unsigned int index)
Retrieve a reference to a stream configuration.
Definition: camera.cpp:387
Status
Validity of a camera configuration.
Definition: camera.h:78
@ Valid
Definition: camera.h:79
@ Adjusted
Definition: camera.h:80
@ Invalid
Definition: camera.h:81
const StreamConfiguration & operator[](unsigned int index) const
Retrieve a const reference to a stream configuration.
Definition: camera.h:98
bool empty() const
Check if the camera configuration is empty.
Definition: camera.cpp:476
CameraConfiguration()
Create an empty camera configuration.
Definition: camera.cpp:332
std::size_t size() const
Retrieve the number of stream configurations.
Definition: camera.cpp:485
void addConfiguration(const StreamConfiguration &cfg)
Add a stream configuration to the camera configuration.
Definition: camera.cpp:345
iterator begin()
Retrieve an iterator to the first stream configuration in the sequence.
Definition: camera.cpp:436
iterator end()
Retrieve an iterator pointing to the past-the-end stream configuration in the sequence.
Definition: camera.cpp:456
std::vector< StreamConfiguration >::const_iterator const_iterator
Const iterator for the stream configuration in the camera configuration.
Definition: camera.h:85
StreamConfiguration & operator[](unsigned int index)
Retrieve a reference to a stream configuration.
Definition: camera.h:94
Transform transform
User-specified transform to be applied to the image.
Definition: camera.h:112
Camera device.
Definition: camera.h:131
const std::set< Stream * > & streams() const
Retrieve all the camera's stream information.
Definition: camera.cpp:1100
const ControlInfoMap & controls() const
Retrieve the list of controls supported by the camera.
Definition: camera.cpp:1071
const std::string & id() const
Retrieve the ID of the camera.
Definition: camera.cpp:902
std::unique_ptr< CameraConfiguration > generateConfiguration(Span< const StreamRole > roles={})
Generate a default camera configuration according to stream roles.
Definition: camera.cpp:1120
static std::shared_ptr< Camera > create(std::unique_ptr< Private > d, const std::string &id, const std::set< Stream * > &streams)
Create a camera instance.
Definition: camera.cpp:861
int configure(CameraConfiguration *config)
Configure the camera prior to capture.
Definition: camera.cpp:1188
int stop()
Stop capture from camera.
Definition: camera.cpp:1400
int acquire()
Acquire the camera device for exclusive access.
Definition: camera.cpp:1007
int release()
Release exclusive access to the camera device.
Definition: camera.cpp:1044
int start(const ControlList *controls=nullptr)
Start capture from camera.
Definition: camera.cpp:1363
std::unique_ptr< Request > createRequest(uint64_t cookie=0)
Create a request object for the camera.
Definition: camera.cpp:1260
Signal< Request * > requestCompleted
Signal emitted when a request queued to the camera has completed.
Definition: camera.h:142
std::unique_ptr< CameraConfiguration > generateConfiguration(std::initializer_list< StreamRole > roles)
Definition: camera.h:157
int queueRequest(Request *request)
Queue a request to the camera.
Definition: camera.cpp:1300
const ControlList & properties() const
Retrieve the list of properties of the camera.
Definition: camera.cpp:1084
Signal disconnected
Signal emitted when the camera is disconnected from the system.
Definition: camera.h:143
Signal< Request *, FrameBuffer * > bufferCompleted
Signal emitted when a buffer for a request queued to the camera has completed.
Definition: camera.h:141
A map of ControlId to ControlInfo.
Definition: controls.h:306
Associate a list of ControlId with their values for an object.
Definition: controls.h:350
Base class to manage private data through a d-pointer.
Definition: class.h:62
Type-safe container for enum-based bitfields.
Definition: flags.h:16
FrameBuffer allocator for applications.
Definition: framebuffer_allocator.h:23
Base object to support automatic signal disconnection.
Definition: object.h:25
Create and manage cameras based on a set of media devices.
Definition: pipeline_handler.h:39
Describe a rectangle's position and dimensions.
Definition: geometry.h:243
A frame capture request.
Definition: request.h:31
Camera sensor configuration.
Definition: camera.h:35
unsigned int bitDepth
The sensor image format bit depth.
Definition: camera.h:37
unsigned int binX
Horizontal binning factor.
Definition: camera.h:42
unsigned int binY
Vertical binning factor.
Definition: camera.h:43
Size outputSize
The frame output (visible) size.
Definition: camera.h:53
unsigned int xEvenInc
Horizontal increment for even rows. Default to 1.
Definition: camera.h:48
unsigned int yOddInc
Vertical increment for odd columns. Default to 1.
Definition: camera.h:49
bool valid() const
Validate the SensorConfiguration.
Definition: camera.h:55
struct libcamera::SensorConfiguration::@0 binning
Sensor binning configuration.
unsigned int yEvenInc
Vertical increment for even columns. Default to 1.
Definition: camera.h:50
struct libcamera::SensorConfiguration::@1 skipping
The sensor skipping configuration.
unsigned int xOddInc
Horizontal increment for odd rows. Default to 1.
Definition: camera.h:47
Rectangle analogCrop
The analog crop rectangle.
Definition: camera.h:39
Generic signal and slot communication mechanism.
Definition: signal.h:39
Describe a two-dimensional size.
Definition: geometry.h:53
Video stream for a camera.
Definition: stream.h:75
Framework to manage controls related to an object.
Enum-based bit fields.
Data structures related to geometric objects.
Top-level libcamera namespace.
Definition: backtrace.h:17
Transform
Enum to represent a 2D plane transform.
Definition: transform.h:14
Base object to support automatic signal disconnection.
Describes a frame capture request to be processed by a camera.
Signal & slot implementation.
Video stream for a Camera.
Configuration parameters for a stream.
Definition: stream.h:41
Enum to represent and manipulate 2D plane transforms.