libcamera v0.7.0+1-4ceceb68
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#include <libcamera/base/span.h>
18
20#include <libcamera/controls.h>
21#include <libcamera/geometry.h>
23#include <libcamera/transform.h>
24
28
29namespace libcamera {
30
31class CameraLens;
32class MediaEntity;
33class SensorConfiguration;
34
35enum class Orientation;
36
37struct IPACameraSensorInfo;
38
40{
41public:
42 virtual ~CameraSensor();
43
44 virtual const std::string &model() const = 0;
45 virtual const std::string &id() const = 0;
46
47 virtual const MediaEntity *entity() const = 0;
48 virtual V4L2Subdevice *device() = 0;
49
50 virtual CameraLens *focusLens() = 0;
51
52 virtual const std::vector<unsigned int> &mbusCodes() const = 0;
53 virtual std::vector<Size> sizes(unsigned int mbusCode) const = 0;
54 virtual Size resolution() const = 0;
55
57 getFormat(Span<const unsigned int> mbusCodes,
58 const Size &size, const Size maxSize = Size()) const = 0;
59 virtual int setFormat(V4L2SubdeviceFormat *format,
60 Transform transform = Transform::Identity) = 0;
61 virtual int tryFormat(V4L2SubdeviceFormat *format) const = 0;
62
63 virtual int applyConfiguration(const SensorConfiguration &config,
65 V4L2SubdeviceFormat *sensorFormat = nullptr) = 0;
66
67 virtual V4L2Subdevice::Stream imageStream() const;
68 virtual std::optional<V4L2Subdevice::Stream> embeddedDataStream() const;
70 virtual int setEmbeddedDataEnabled(bool enable);
71
72 virtual const ControlList &properties() const = 0;
73 virtual int sensorInfo(IPACameraSensorInfo *info) const = 0;
74 virtual Transform computeTransform(Orientation *orientation) const = 0;
76 virtual Orientation mountingOrientation() const = 0;
77
78 virtual const ControlInfoMap &controls() const = 0;
79 virtual ControlList getControls(Span<const uint32_t> ids) = 0;
80 virtual int setControls(ControlList *ctrls) = 0;
81
82 virtual const std::vector<controls::draft::TestPatternModeEnum> &
83 testPatternModes() const = 0;
86};
87
89{
90public:
91 CameraSensorFactoryBase(const char *name, int priority);
92 virtual ~CameraSensorFactoryBase() = default;
93
94 static std::unique_ptr<CameraSensor> create(MediaEntity *entity);
95
96 const std::string &name() const { return name_; }
97 int priority() const { return priority_; }
98
99private:
101
102 static std::vector<CameraSensorFactoryBase *> &factories();
103
104 static void registerFactory(CameraSensorFactoryBase *factory);
105
106 virtual std::variant<std::unique_ptr<CameraSensor>, int>
107 match(MediaEntity *entity) const = 0;
108
109 std::string name_;
110 int priority_;
111};
112
113template<typename _CameraSensor>
115{
116public:
121
122private:
123 std::variant<std::unique_ptr<CameraSensor>, int>
124 match(MediaEntity *entity) const override
125 {
126 return _CameraSensor::match(entity);
127 }
128};
129
130#define REGISTER_CAMERA_SENSOR(sensor, priority) \
131static CameraSensorFactory<sensor> global_##sensor##Factory{ #sensor, priority };
132
133} /* 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:89
const std::string & name() const
Retrieve the camera sensor factory name.
Definition camera_sensor.h:96
static std::unique_ptr< CameraSensor > create(MediaEntity *entity)
Create an instance of the CameraSensor corresponding to a media entity.
Definition camera_sensor.cpp:466
int priority() const
Retrieve the priority value for the factory.
Definition camera_sensor.h:97
Registration of CameraSensorFactory classes and creation of instances.
Definition camera_sensor.h:115
CameraSensorFactory(const char *name, int priority)
Construct a camera sensor factory.
Definition camera_sensor.h:117
A abstract camera sensor.
Definition camera_sensor.h:40
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 ControlList getControls(Span< const uint32_t > ids)=0
Read V4L2 controls from the sensor.
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 V4L2SubdeviceFormat getFormat(Span< const unsigned int > mbusCodes, const Size &size, const Size maxSize=Size()) const =0
Retrieve the best sensor format for a desired output.
virtual CameraLens * focusLens()=0
Retrieve the focus lens controller.
virtual Orientation mountingOrientation() const =0
Fetch the mounting orientation of the sensor.
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 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:365
Associate a list of ControlId with their values for an object.
Definition controls.h:409
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:76
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:406
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:31
The V4L2 sub-device image format and sizes.
Definition v4l2_subdevice.h:65
V4L2 subdevice stream.
Definition v4l2_subdevice.h:85
Enum to represent and manipulate 2D plane transforms.
V4L2 Subdevice API.