libcamera v0.5.0+59-d83ff0a4
Supporting cameras in Linux since 2019
Loading...
Searching...
No Matches
camera_sensor.h
Go to the documentation of this file.
1/* SPDX-License-Identifier: LGPL-2.1-or-later */
2/*
3 * Copyright (C) 2019, Google Inc.
4 *
5 * A camera sensor
6 */
7
8#pragma once
9
10#include <memory>
11#include <stdint.h>
12#include <string>
13#include <variant>
14#include <vector>
15
17
19#include <libcamera/controls.h>
20#include <libcamera/geometry.h>
22#include <libcamera/transform.h>
23
27
28namespace libcamera {
29
30class CameraLens;
31class MediaEntity;
32class SensorConfiguration;
33
34enum class Orientation;
35
36struct IPACameraSensorInfo;
37
39{
40public:
41 virtual ~CameraSensor();
42
43 virtual const std::string &model() const = 0;
44 virtual const std::string &id() const = 0;
45
46 virtual const MediaEntity *entity() const = 0;
47 virtual V4L2Subdevice *device() = 0;
48
49 virtual CameraLens *focusLens() = 0;
50
51 virtual const std::vector<unsigned int> &mbusCodes() const = 0;
52 virtual std::vector<Size> sizes(unsigned int mbusCode) const = 0;
53 virtual Size resolution() const = 0;
54
56 getFormat(const std::vector<unsigned int> &mbusCodes,
57 const Size &size, const Size maxSize = Size()) const = 0;
58 virtual int setFormat(V4L2SubdeviceFormat *format,
59 Transform transform = Transform::Identity) = 0;
60 virtual int tryFormat(V4L2SubdeviceFormat *format) const = 0;
61
62 virtual int applyConfiguration(const SensorConfiguration &config,
64 V4L2SubdeviceFormat *sensorFormat = nullptr) = 0;
65
66 virtual V4L2Subdevice::Stream imageStream() const;
67 virtual std::optional<V4L2Subdevice::Stream> embeddedDataStream() const;
69 virtual int setEmbeddedDataEnabled(bool enable);
70
71 virtual const ControlList &properties() const = 0;
72 virtual int sensorInfo(IPACameraSensorInfo *info) const = 0;
73 virtual Transform computeTransform(Orientation *orientation) const = 0;
75
76 virtual const ControlInfoMap &controls() const = 0;
77 virtual ControlList getControls(const std::vector<uint32_t> &ids) = 0;
78 virtual int setControls(ControlList *ctrls) = 0;
79
80 virtual const std::vector<controls::draft::TestPatternModeEnum> &
81 testPatternModes() const = 0;
84};
85
87{
88public:
89 CameraSensorFactoryBase(const char *name, int priority);
90 virtual ~CameraSensorFactoryBase() = default;
91
92 static std::unique_ptr<CameraSensor> create(MediaEntity *entity);
93
94 const std::string &name() const { return name_; }
95 int priority() const { return priority_; }
96
97private:
99
100 static std::vector<CameraSensorFactoryBase *> &factories();
101
102 static void registerFactory(CameraSensorFactoryBase *factory);
103
104 virtual std::variant<std::unique_ptr<CameraSensor>, int>
105 match(MediaEntity *entity) const = 0;
106
107 std::string name_;
108 int priority_;
109};
110
111template<typename _CameraSensor>
113{
114public:
119
120private:
121 std::variant<std::unique_ptr<CameraSensor>, int>
122 match(MediaEntity *entity) const override
123 {
124 return _CameraSensor::match(entity);
125 }
126};
127
128#define REGISTER_CAMERA_SENSOR(sensor, priority) \
129static CameraSensorFactory<sensor> global_##sensor##Factory{ #sensor, priority };
130
131} /* namespace libcamera */
Class to represent Bayer formats and manipulate them.
Database of camera sensor properties.
Utilities to help constructing class interfaces.
#define LIBCAMERA_DISABLE_COPY_AND_MOVE(klass)
Disable copy and move construction and assignment of the klass.
Definition class.h:29
Order
The order of the colour channels in the Bayer pattern.
Definition bayer_format.h:25
A camera lens based on V4L2 subdevices.
Definition camera_lens.h:24
Base class for camera sensor factories.
Definition camera_sensor.h:87
const std::string & name() const
Retrieve the camera sensor factory name.
Definition camera_sensor.h:94
static std::unique_ptr< CameraSensor > create(MediaEntity *entity)
Create an instance of the CameraSensor corresponding to a media entity.
Definition camera_sensor.cpp:458
int priority() const
Retrieve the priority value for the factory.
Definition camera_sensor.h:95
Registration of CameraSensorFactory classes and creation of instances.
Definition camera_sensor.h:113
CameraSensorFactory(const char *name, int priority)
Construct a camera sensor factory.
Definition camera_sensor.h:115
A abstract camera sensor.
Definition camera_sensor.h:39
virtual V4L2Subdevice::Stream imageStream() const
Retrieve the image source stream.
Definition camera_sensor.cpp:212
virtual std::vector< Size > sizes(unsigned int mbusCode) const =0
Retrieve the supported frame sizes for a media bus code.
virtual int tryFormat(V4L2SubdeviceFormat *format) const =0
Try the sensor output format.
virtual const ControlInfoMap & controls() const =0
Retrieve the supported V4L2 controls and their information.
virtual V4L2SubdeviceFormat getFormat(const std::vector< unsigned int > &mbusCodes, const Size &size, const Size maxSize=Size()) const =0
Retrieve the best sensor format for a desired output.
virtual int applyConfiguration(const SensorConfiguration &config, Transform transform=Transform::Identity, V4L2SubdeviceFormat *sensorFormat=nullptr)=0
Apply a sensor configuration to the camera sensor.
virtual const std::vector< unsigned int > & mbusCodes() const =0
Retrieve the media bus codes supported by the camera sensor.
virtual const ControlList & properties() const =0
Retrieve the camera sensor properties.
virtual ~CameraSensor()
Destroy a CameraSensor.
virtual const MediaEntity * entity() const =0
Retrieve the sensor media entity.
virtual BayerFormat::Order bayerOrder(Transform t) const =0
Compute the Bayer order that results from the given Transform.
virtual CameraLens * focusLens()=0
Retrieve the focus lens controller.
virtual int setTestPatternMode(controls::draft::TestPatternModeEnum mode)=0
Set the test pattern mode for the camera sensor.
virtual std::optional< V4L2Subdevice::Stream > embeddedDataStream() const
Retrieve the embedded data source stream.
Definition camera_sensor.cpp:227
virtual Transform computeTransform(Orientation *orientation) const =0
Compute the Transform that gives the requested orientation.
virtual V4L2Subdevice * device()=0
Retrieve the camera sensor device.
virtual int setEmbeddedDataEnabled(bool enable)
Enable or disable the embedded data stream.
Definition camera_sensor.cpp:264
virtual Size resolution() const =0
Retrieve the camera sensor resolution.
virtual ControlList getControls(const std::vector< uint32_t > &ids)=0
Read V4L2 controls from the sensor.
virtual int setControls(ControlList *ctrls)=0
Write V4L2 controls to the sensor.
virtual int setFormat(V4L2SubdeviceFormat *format, Transform transform=Transform::Identity)=0
Set the sensor output format.
virtual const std::string & id() const =0
Retrieve the sensor ID.
virtual int sensorInfo(IPACameraSensorInfo *info) const =0
Assemble and return the camera sensor info.
virtual const std::string & model() const =0
Retrieve the sensor model name.
virtual const CameraSensorProperties::SensorDelays & sensorDelays()=0
Fetch the sensor delay values.
virtual const std::vector< controls::draft::TestPatternModeEnum > & testPatternModes() const =0
Retrieve all the supported test pattern modes of the camera sensor The test pattern mode values corre...
virtual V4L2SubdeviceFormat embeddedDataFormat() const
Retrieve the format on the embedded data stream.
Definition camera_sensor.cpp:245
A map of ControlId to ControlInfo.
Definition controls.h:367
Associate a list of ControlId with their values for an object.
Definition controls.h:411
The MediaEntity represents an entity in the media graph.
Definition media_object.h:97
Camera sensor configuration.
Definition camera.h:36
Describe a two-dimensional size.
Definition geometry.h:51
A V4L2 subdevice as exposed by the Linux kernel.
Definition v4l2_subdevice.h:75
Camera controls identifiers.
Framework to manage controls related to an object.
Data structures related to geometric objects.
TestPatternModeEnum
Supported TestPatternMode values.
Definition control_ids.h:326
Top-level libcamera namespace.
Definition backtrace.h:17
Transform
Enum to represent a 2D plane transform.
Definition transform.h:14
Orientation
The image orientation in a memory buffer.
Definition orientation.h:14
Image orientation definition.
Sensor control application delay values.
Definition camera_sensor_properties.h:20
Report the image sensor characteristics.
Definition core_ipa_interface.h:29
The V4L2 sub-device image format and sizes.
Definition v4l2_subdevice.h:64
V4L2 subdevice stream.
Definition v4l2_subdevice.h:84
Enum to represent and manipulate 2D plane transforms.
V4L2 Subdevice API.