libcamera v0.0.0+1-ab0bf965
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
18
19#include <libcamera/controls.h>
20#include <libcamera/request.h>
21#include <libcamera/stream.h>
22#include <libcamera/transform.h>
23
24namespace libcamera {
25
26class FrameBuffer;
27class FrameBufferAllocator;
28class PipelineHandler;
29class Request;
30
32{
33public:
34 enum Status {
38 };
39
40 using iterator = std::vector<StreamConfiguration>::iterator;
41 using const_iterator = std::vector<StreamConfiguration>::const_iterator;
42
43 virtual ~CameraConfiguration();
44
46 virtual Status validate() = 0;
47
48 StreamConfiguration &at(unsigned int index);
49 const StreamConfiguration &at(unsigned int index) const;
50 StreamConfiguration &operator[](unsigned int index)
51 {
52 return at(index);
53 }
54 const StreamConfiguration &operator[](unsigned int index) const
55 {
56 return at(index);
57 }
58
60 const_iterator begin() const;
61 iterator end();
62 const_iterator end() const;
63
64 bool empty() const;
65 std::size_t size() const;
66
68
69protected:
71
72 std::vector<StreamConfiguration> config_;
73};
74
75class Camera final : public Object, public std::enable_shared_from_this<Camera>,
76 public Extensible
77{
79
80public:
81 static std::shared_ptr<Camera> create(std::unique_ptr<Private> d,
82 const std::string &id,
83 const std::set<Stream *> &streams);
84
85 const std::string &id() const;
86
90
91 int acquire();
92 int release();
93
94 const ControlInfoMap &controls() const;
95 const ControlList &properties() const;
96
97 const std::set<Stream *> &streams() const;
98 std::unique_ptr<CameraConfiguration> generateConfiguration(const StreamRoles &roles = {});
99 int configure(CameraConfiguration *config);
100
101 std::unique_ptr<Request> createRequest(uint64_t cookie = 0);
102 int queueRequest(Request *request);
103
104 int start(const ControlList *controls = nullptr);
105 int stop();
106
107private:
109
110 Camera(std::unique_ptr<Private> d, const std::string &id,
111 const std::set<Stream *> &streams);
112 ~Camera();
113
114 friend class PipelineHandler;
115 void disconnect();
116 void requestComplete(Request *request);
117
118 friend class FrameBufferAllocator;
119 int exportFrameBuffers(Stream *stream,
120 std::vector<std::unique_ptr<FrameBuffer>> *buffers);
121};
122
123} /* namespace libcamera */
124
125#endif /* __LIBCAMERA_CAMERA_H__ */
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:32
std::vector< StreamConfiguration >::iterator iterator
Iterator for the stream configurations in the camera configuration.
Definition: camera.h:40
std::vector< StreamConfiguration > config_
The vector of stream configurations.
Definition: camera.h:72
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:213
Status
Validity of a camera configuration.
Definition: camera.h:34
@ Valid
Definition: camera.h:35
@ Adjusted
Definition: camera.h:36
@ Invalid
Definition: camera.h:37
const StreamConfiguration & operator[](unsigned int index) const
Retrieve a const reference to a stream configuration.
Definition: camera.h:54
bool empty() const
Check if the camera configuration is empty.
Definition: camera.cpp:302
CameraConfiguration()
Create an empty camera configuration.
Definition: camera.cpp:158
std::size_t size() const
Retrieve the number of stream configurations.
Definition: camera.cpp:311
void addConfiguration(const StreamConfiguration &cfg)
Add a stream configuration to the camera configuration.
Definition: camera.cpp:171
iterator begin()
Retrieve an iterator to the first stream configuration in the sequence.
Definition: camera.cpp:262
iterator end()
Retrieve an iterator pointing to the past-the-end stream configuration in the sequence.
Definition: camera.cpp:282
std::vector< StreamConfiguration >::const_iterator const_iterator
Const iterator for the stream configuration in the camera configuration.
Definition: camera.h:41
StreamConfiguration & operator[](unsigned int index)
Retrieve a reference to a stream configuration.
Definition: camera.h:50
Transform transform
User-specified transform to be applied to the image.
Definition: camera.h:67
Camera device.
Definition: camera.h:77
const std::set< Stream * > & streams() const
Retrieve all the camera's stream information.
Definition: camera.cpp:830
const ControlInfoMap & controls() const
Retrieve the list of controls supported by the camera.
Definition: camera.cpp:801
const std::string & id() const
Retrieve the ID of the camera.
Definition: camera.cpp:634
std::unique_ptr< CameraConfiguration > generateConfiguration(const StreamRoles &roles={})
Generate a default camera configuration according to stream roles.
Definition: camera.cpp:851
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:593
int configure(CameraConfiguration *config)
Configure the camera prior to capture.
Definition: camera.cpp:912
int stop()
Stop capture from camera.
Definition: camera.cpp:1103
int acquire()
Acquire the camera device for exclusive access.
Definition: camera.cpp:738
int release()
Release exclusive access to the camera device.
Definition: camera.cpp:775
int start(const ControlList *controls=nullptr)
Start capture from camera.
Definition: camera.cpp:1068
std::unique_ptr< Request > createRequest(uint64_t cookie=0)
Create a request object for the camera.
Definition: camera.cpp:984
Signal< Request * > requestCompleted
Signal emitted when a request queued to the camera has completed.
Definition: camera.h:88
int queueRequest(Request *request)
Queue a request to the camera.
Definition: camera.cpp:1016
const ControlList & properties() const
Retrieve the list of properties of the camera.
Definition: camera.cpp:814
Signal disconnected
Signal emitted when the camera is disconnected from the system.
Definition: camera.h:89
Signal< Request *, FrameBuffer * > bufferCompleted
Signal emitted when a buffer for a request queued to the camera has completed.
Definition: camera.h:87
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
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:37
A frame capture request.
Definition: request.h:29
Generic signal and slot communication mechanism.
Definition: signal.h:39
Video stream for a camera.
Definition: stream.h:71
Framework to manage controls related to an object.
Top-level libcamera namespace.
Definition: bound_method.h:15
Transform
Enum to represent a 2D plane transform.
Definition: transform.h:15
std::vector< StreamRole > StreamRoles
A vector of StreamRole.
Definition: stream.h:68
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:39
Enum to represent and manipulate 2D plane transforms.