Add an entry to the sensor properties for OnSemi AR0521. The chip manual list one additional test pattern "PN9 Link integrity test pattern" not supported by the mainline Linux driver. Signed-off-by: Jacopo Mondi <jacopo@jmondi.org> Reviewed-by: Kieran Bingham <kieran.bingham@ideasonboard.com> Reviewed-by: Laurent Pinchart <laurent.pinchart@ideasonboard.com>
206 lines
5.9 KiB
C++
206 lines
5.9 KiB
C++
/* 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/base/log.h>
|
|
|
|
#include <libcamera/control_ids.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.
|
|
*
|
|
* \var CameraSensorProperties::testPatternModes
|
|
* \brief Map that associates the TestPattern control value with the indexes of
|
|
* the corresponding sensor test pattern modes as returned by
|
|
* V4L2_CID_TEST_PATTERN.
|
|
*/
|
|
|
|
/**
|
|
* \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 = {
|
|
{ "ar0521", {
|
|
.unitCellSize = { 2200, 2200 },
|
|
.testPatternModes = {
|
|
{ controls::draft::TestPatternModeOff, 0 },
|
|
{ controls::draft::TestPatternModeSolidColor, 1 },
|
|
{ controls::draft::TestPatternModeColorBars, 2 },
|
|
{ controls::draft::TestPatternModeColorBarsFadeToGray, 3 },
|
|
},
|
|
} },
|
|
{ "hi846", {
|
|
.unitCellSize = { 1120, 1120 },
|
|
.testPatternModes = {
|
|
{ controls::draft::TestPatternModeOff, 0 },
|
|
{ controls::draft::TestPatternModeSolidColor, 1 },
|
|
{ controls::draft::TestPatternModeColorBars, 2 },
|
|
{ controls::draft::TestPatternModeColorBarsFadeToGray, 3 },
|
|
{ controls::draft::TestPatternModePn9, 4 },
|
|
/*
|
|
* No corresponding test pattern mode for:
|
|
* 5: "Gradient Horizontal"
|
|
* 6: "Gradient Vertical"
|
|
* 7: "Check Board"
|
|
* 8: "Slant Pattern"
|
|
* 9: "Resolution Pattern"
|
|
*/
|
|
},
|
|
} },
|
|
{ "imx219", {
|
|
.unitCellSize = { 1120, 1120 },
|
|
.testPatternModes = {
|
|
{ controls::draft::TestPatternModeOff, 0 },
|
|
{ controls::draft::TestPatternModeColorBars, 1 },
|
|
{ controls::draft::TestPatternModeSolidColor, 2 },
|
|
{ controls::draft::TestPatternModeColorBarsFadeToGray, 3 },
|
|
{ controls::draft::TestPatternModePn9, 4 },
|
|
},
|
|
} },
|
|
{ "imx258", {
|
|
.unitCellSize = { 1120, 1120 },
|
|
.testPatternModes = {
|
|
{ controls::draft::TestPatternModeOff, 0 },
|
|
{ controls::draft::TestPatternModeSolidColor, 1 },
|
|
{ controls::draft::TestPatternModeColorBars, 2 },
|
|
{ controls::draft::TestPatternModeColorBarsFadeToGray, 3 },
|
|
{ controls::draft::TestPatternModePn9, 4 },
|
|
},
|
|
} },
|
|
{ "imx290", {
|
|
.unitCellSize = { 2900, 2900 },
|
|
.testPatternModes = {},
|
|
} },
|
|
{ "imx296", {
|
|
.unitCellSize = { 3450, 3450 },
|
|
.testPatternModes = {},
|
|
} },
|
|
{ "imx477", {
|
|
.unitCellSize = { 1550, 1550 },
|
|
.testPatternModes = {},
|
|
} },
|
|
{ "imx519", {
|
|
.unitCellSize = { 1220, 1220 },
|
|
.testPatternModes = {
|
|
{ controls::draft::TestPatternModeOff, 0 },
|
|
{ controls::draft::TestPatternModeSolidColor, 2 },
|
|
{ controls::draft::TestPatternModePn9, 4 },
|
|
/*
|
|
* The driver reports ColorBars and ColorBarsFadeToGray as well but
|
|
* these two patterns do not comply with MIPI CCS v1.1 (Section 10.1).
|
|
*/
|
|
},
|
|
} },
|
|
{ "ov2740", {
|
|
.unitCellSize = { 1400, 1400 },
|
|
.testPatternModes = {
|
|
{ controls::draft::TestPatternModeOff, 0 },
|
|
{ controls::draft::TestPatternModeColorBars, 1},
|
|
},
|
|
} },
|
|
{ "ov5640", {
|
|
.unitCellSize = { 1400, 1400 },
|
|
.testPatternModes = {
|
|
{ controls::draft::TestPatternModeOff, 0 },
|
|
{ controls::draft::TestPatternModeColorBars, 1 },
|
|
},
|
|
} },
|
|
{ "ov5647", {
|
|
.unitCellSize = { 1400, 1400 },
|
|
.testPatternModes = {},
|
|
} },
|
|
{ "ov5670", {
|
|
.unitCellSize = { 1120, 1120 },
|
|
.testPatternModes = {
|
|
{ controls::draft::TestPatternModeOff, 0 },
|
|
{ controls::draft::TestPatternModeColorBars, 1 },
|
|
},
|
|
} },
|
|
{ "ov5675", {
|
|
.unitCellSize = { 1120, 1120 },
|
|
.testPatternModes = {
|
|
{ controls::draft::TestPatternModeOff, 0 },
|
|
{ controls::draft::TestPatternModeColorBars, 1 },
|
|
},
|
|
} },
|
|
{ "ov5693", {
|
|
.unitCellSize = { 1400, 1400 },
|
|
.testPatternModes = {
|
|
{ controls::draft::TestPatternModeOff, 0 },
|
|
{ controls::draft::TestPatternModeColorBars, 2 },
|
|
/*
|
|
* No corresponding test pattern mode for
|
|
* 1: "Random data" and 3: "Colour Bars with
|
|
* Rolling Bar".
|
|
*/
|
|
},
|
|
} },
|
|
{ "ov8865", {
|
|
.unitCellSize = { 1400, 1400 },
|
|
.testPatternModes = {
|
|
{ controls::draft::TestPatternModeOff, 0 },
|
|
{ controls::draft::TestPatternModeColorBars, 2 },
|
|
/*
|
|
* No corresponding test pattern mode for:
|
|
* 1: "Random data"
|
|
* 3: "Color bars with rolling bar"
|
|
* 4: "Color squares"
|
|
* 5: "Color squares with rolling bar"
|
|
*/
|
|
},
|
|
} },
|
|
{ "ov13858", {
|
|
.unitCellSize = { 1120, 1120 },
|
|
.testPatternModes = {
|
|
{ controls::draft::TestPatternModeOff, 0 },
|
|
{ controls::draft::TestPatternModeColorBars, 1 },
|
|
},
|
|
} },
|
|
};
|
|
|
|
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 */
|