libcamera v0.1.0+99-4a23664b
Supporting cameras in Linux since 2019
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 * camera_sensor.h - A camera sensor
6 */
7
8#pragma once
9
10#include <memory>
11#include <string>
12#include <vector>
13
15#include <libcamera/base/log.h>
16
18#include <libcamera/controls.h>
19#include <libcamera/geometry.h>
20#include <libcamera/transform.h>
21
23
26
27namespace libcamera {
28
29class BayerFormat;
30class CameraLens;
31class MediaEntity;
32class SensorConfiguration;
33
34struct CameraSensorProperties;
35
36class CameraSensor : protected Loggable
37{
38public:
39 explicit CameraSensor(const MediaEntity *entity);
41
42 int init();
43
44 const std::string &model() const { return model_; }
45 const std::string &id() const { return id_; }
46 const MediaEntity *entity() const { return entity_; }
47 const std::vector<unsigned int> &mbusCodes() const { return mbusCodes_; }
48 std::vector<Size> sizes(unsigned int mbusCode) const;
49 Size resolution() const;
50 const std::vector<controls::draft::TestPatternModeEnum> &testPatternModes() const
51 {
52 return testPatternModes_;
53 }
55
56 V4L2SubdeviceFormat getFormat(const std::vector<unsigned int> &mbusCodes,
57 const Size &size) const;
59 Transform transform = Transform::Identity);
60 int tryFormat(V4L2SubdeviceFormat *format) const;
61
64 V4L2SubdeviceFormat *sensorFormat = nullptr);
65
66 const ControlInfoMap &controls() const;
67 ControlList getControls(const std::vector<uint32_t> &ids);
68 int setControls(ControlList *ctrls);
69
70 V4L2Subdevice *device() { return subdev_.get(); }
71
72 const ControlList &properties() const { return properties_; }
73 int sensorInfo(IPACameraSensorInfo *info) const;
74
75 void updateControlInfo();
76
77 CameraLens *focusLens() { return focusLens_.get(); }
78
79 Transform validateTransform(Transform *transform) const;
80
81protected:
82 std::string logPrefix() const override;
83
84private:
86
87 int generateId();
88 int validateSensorDriver();
89 void initVimcDefaultProperties();
90 void initStaticProperties();
91 void initTestPatternModes();
92 int initProperties();
93 int applyTestPatternMode(controls::draft::TestPatternModeEnum mode);
94 int discoverAncillaryDevices();
95
96 const MediaEntity *entity_;
97 std::unique_ptr<V4L2Subdevice> subdev_;
98 unsigned int pad_;
99
100 const CameraSensorProperties *staticProps_;
101
102 std::string model_;
103 std::string id_;
104
105 V4L2Subdevice::Formats formats_;
106 std::vector<unsigned int> mbusCodes_;
107 std::vector<Size> sizes_;
108 std::vector<controls::draft::TestPatternModeEnum> testPatternModes_;
110
111 Size pixelArraySize_;
112 Rectangle activeArea_;
113 const BayerFormat *bayerFormat_;
114 bool supportFlips_;
115
116 ControlList properties_;
117
118 std::unique_ptr<CameraLens> focusLens_;
119};
120
121} /* namespace libcamera */
Utilities to help constructing class interfaces.
#define LIBCAMERA_DISABLE_COPY(klass)
Disable copy construction and assignment of the klass.
Class to represent a raw image Bayer format.
Definition: bayer_format.h:23
A camera lens based on V4L2 subdevices.
Definition: camera_lens.h:23
A camera sensor based on V4L2 subdevices.
Definition: camera_sensor.h:37
const ControlList & properties() const
Retrieve the camera sensor properties.
Definition: camera_sensor.h:72
const MediaEntity * entity() const
Retrieve the sensor media entity.
Definition: camera_sensor.h:46
int setControls(ControlList *ctrls)
Write V4L2 controls to the sensor.
Definition: camera_sensor.cpp:974
int setTestPatternMode(controls::draft::TestPatternModeEnum mode)
Set the test pattern mode for the camera sensor.
Definition: camera_sensor.cpp:639
int setFormat(V4L2SubdeviceFormat *format, Transform transform=Transform::Identity)
Set the sensor output format.
Definition: camera_sensor.cpp:784
CameraSensor(const MediaEntity *entity)
Construct a CameraSensor.
Definition: camera_sensor.cpp:57
void updateControlInfo()
Update the sensor's ControlInfoMap in case they have changed.
Definition: camera_sensor.cpp:1089
std::vector< Size > sizes(unsigned int mbusCode) const
Retrieve the supported frame sizes for a media bus code.
Definition: camera_sensor.cpp:588
const ControlInfoMap & controls() const
Retrieve the supported V4L2 controls and their information.
Definition: camera_sensor.cpp:921
Size resolution() const
Retrieve the camera sensor resolution.
Definition: camera_sensor.cpp:618
std::string logPrefix() const override
Retrieve a string to be prefixed to the log message.
Definition: camera_sensor.cpp:1178
~CameraSensor()
Destroy a CameraSensor.
Definition: camera_sensor.cpp:67
int sensorInfo(IPACameraSensorInfo *info) const
Assemble and return the camera sensor info.
Definition: camera_sensor.cpp:1010
const std::string & model() const
Retrieve the sensor model name.
Definition: camera_sensor.h:44
int init()
Initialize the camera sensor instance.
Definition: camera_sensor.cpp:79
int applyConfiguration(const SensorConfiguration &config, Transform transform=Transform::Identity, V4L2SubdeviceFormat *sensorFormat=nullptr)
Apply a sensor configuration to the camera sensor.
Definition: camera_sensor.cpp:841
const std::vector< controls::draft::TestPatternModeEnum > & testPatternModes() const
Retrieve all the supported test pattern modes of the camera sensor The test pattern mode values corre...
Definition: camera_sensor.h:50
V4L2Subdevice * device()
Retrieve the camera sensor device.
Definition: camera_sensor.h:70
Transform validateTransform(Transform *transform) const
Validate a transform request against the sensor capabilities.
Definition: camera_sensor.cpp:1124
V4L2SubdeviceFormat getFormat(const std::vector< unsigned int > &mbusCodes, const Size &size) const
Retrieve the best sensor format for a desired output.
Definition: camera_sensor.cpp:717
int tryFormat(V4L2SubdeviceFormat *format) const
Try the sensor output format.
Definition: camera_sensor.cpp:820
const std::vector< unsigned int > & mbusCodes() const
Retrieve the media bus codes supported by the camera sensor.
Definition: camera_sensor.h:47
CameraLens * focusLens()
Retrieve the focus lens controller.
Definition: camera_sensor.h:77
const std::string & id() const
Retrieve the sensor ID.
Definition: camera_sensor.h:45
ControlList getControls(const std::vector< uint32_t > &ids)
Read V4L2 controls from the sensor.
Definition: camera_sensor.cpp:944
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 support log message extensions.
Definition: log.h:91
The MediaEntity represents an entity in the media graph.
Definition: media_object.h:89
Describe a rectangle's position and dimensions.
Definition: geometry.h:243
Camera sensor configuration.
Definition: camera.h:36
Describe a two-dimensional size.
Definition: geometry.h:53
A V4L2 subdevice as exposed by the Linux kernel.
Definition: v4l2_subdevice.h:55
std::map< unsigned int, std::vector< SizeRange > > Formats
A map of supported media bus formats to frame sizes.
Definition: v4l2_subdevice.h:57
Camera control identifiers.
Framework to manage controls related to an object.
libcamera structs for IPAs
Data structures related to geometric objects.
Types and helper functions to handle libcamera image formats.
Logging infrastructure.
TestPatternModeEnum
Supported TestPatternMode values.
Definition: control_ids.h:272
Top-level libcamera namespace.
Definition: backtrace.h:17
Transform
Enum to represent a 2D plane transform.
Definition: transform.h:14
Database of camera sensor properties.
Definition: camera_sensor_properties.h:18
Report the image sensor characteristics.
Definition: core_ipa_interface.h:24
The V4L2 sub-device image format and sizes.
Definition: v4l2_subdevice.h:43
Enum to represent and manipulate 2D plane transforms.
V4L2 Subdevice API.