diff options
-rw-r--r-- | include/libcamera/internal/camera_sensor_properties.h | 24 | ||||
-rw-r--r-- | include/libcamera/internal/meson.build | 1 | ||||
-rw-r--r-- | src/libcamera/camera_sensor_properties.cpp | 71 | ||||
-rw-r--r-- | src/libcamera/meson.build | 1 |
4 files changed, 97 insertions, 0 deletions
diff --git a/include/libcamera/internal/camera_sensor_properties.h b/include/libcamera/internal/camera_sensor_properties.h new file mode 100644 index 00000000..f5e242cb --- /dev/null +++ b/include/libcamera/internal/camera_sensor_properties.h @@ -0,0 +1,24 @@ +/* SPDX-License-Identifier: LGPL-2.1-or-later */ +/* + * Copyright (C) 2021, Google Inc. + * + * camera_sensor_properties.h - Database of camera sensor properties + */ +#ifndef __LIBCAMERA_SENSOR_CAMERA_SENSOR_PROPERTIES_H__ +#define __LIBCAMERA_SENSOR_CAMERA_SENSOR_PROPERTIES_H__ + +#include <string> + +#include <libcamera/geometry.h> + +namespace libcamera { + +struct CameraSensorProperties { + static const CameraSensorProperties *get(const std::string &sensor); + + Size unitCellSize; +}; + +} /* namespace libcamera */ + +#endif /* __LIBCAMERA_SENSOR_CAMERA_SENSOR_PROPERTIES_H__ */ diff --git a/include/libcamera/internal/meson.build b/include/libcamera/internal/meson.build index 1fe3918c..6cff1b90 100644 --- a/include/libcamera/internal/meson.build +++ b/include/libcamera/internal/meson.build @@ -15,6 +15,7 @@ libcamera_internal_headers = files([ 'byte_stream_buffer.h', 'camera_controls.h', 'camera_sensor.h', + 'camera_sensor_properties.h', 'control_serializer.h', 'control_validator.h', 'delayed_controls.h', diff --git a/src/libcamera/camera_sensor_properties.cpp b/src/libcamera/camera_sensor_properties.cpp new file mode 100644 index 00000000..6ded31dc --- /dev/null +++ b/src/libcamera/camera_sensor_properties.cpp @@ -0,0 +1,71 @@ +/* SPDX-License-Identifier: LGPL-2.1-or-later */ +/* + * Copyright (C) 2021, Google Inc. + * + * camera_sensor_properties.cpp - Database of camera sensor properties + */ + +#include "libcamera/internal/camera_sensor_properties.h" + +#include <map> + +#include "libcamera/internal/log.h" + +/** + * \file camera_sensor_properties.h + * \brief Database of camera sensor properties + * + * The database of camera sensor properties collects static information about + * camera sensors that is not possible or desirable to retrieve from the device + * at run time. + * + * The database is indexed using the camera sensor model, as reported by the + * properties::Model property, and for each supported sensor it contains a + * list of properties. + */ + +namespace libcamera { + +LOG_DEFINE_CATEGORY(CameraSensorProperties) + +/** + * \struct CameraSensorProperties + * \brief Database of camera sensor properties + * + * \var CameraSensorProperties::unitCellSize + * \brief The physical size of a pixel, including pixel edges, in nanometers. + */ + +/** + * \brief Retrieve the properties associated with a sensor + * \param sensor The sensor model name as reported by properties::Model + * \return A pointer to the CameraSensorProperties instance associated with a sensor + * or nullptr if the sensor is not supported + */ +const CameraSensorProperties *CameraSensorProperties::get(const std::string &sensor) +{ + static const std::map<std::string, const CameraSensorProperties> sensorProps = { + { "imx219", { + .unitCellSize = { 1120, 1120 }, + } }, + { "ov5670", { + .unitCellSize = { 1120, 1120 }, + } }, + { "ov13858", { + .unitCellSize = { 1120, 1120 }, + } }, + }; + + const auto it = sensorProps.find(sensor); + if (it == sensorProps.end()) { + LOG(CameraSensorProperties, Warning) + << "No static properties available for '" << sensor << "'"; + LOG(CameraSensorProperties, Warning) + << "Please consider updating the camera sensor properties database"; + return nullptr; + } + + return &it->second; +} + +} /* namespace libcamera */ diff --git a/src/libcamera/meson.build b/src/libcamera/meson.build index e0a48aa2..675053d4 100644 --- a/src/libcamera/meson.build +++ b/src/libcamera/meson.build @@ -9,6 +9,7 @@ libcamera_sources = files([ 'camera_controls.cpp', 'camera_manager.cpp', 'camera_sensor.cpp', + 'camera_sensor_properties.cpp', 'class.cpp', 'controls.cpp', 'control_serializer.cpp', |