summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
-rw-r--r--include/libcamera/internal/camera_sensor_properties.h24
-rw-r--r--include/libcamera/internal/meson.build1
-rw-r--r--src/libcamera/camera_sensor_properties.cpp71
-rw-r--r--src/libcamera/meson.build1
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',