libcamera: ipa: raspberrypi: Add support for ov9281 sensor
The necessary tuning file and CamHelper is added for the ov9281 sensor. The ov9281 is a 1280x800 monochrome global shutter sensor. To enable it, please add dtoverlay=ov9281 to the /boot/config.txt file and reboot the Pi. Signed-off-by: David Plowman <david.plowman@raspberrypi.com> Reviewed-by: Naushir Patuck <naush@raspberrypi.com> Reviewed-by: Kieran Bingham <kieran.bingham@ideasonboard.com> Reviewed-by: Laurent Pinchart <laurent.pinchart@ideasonboard.com> Signed-off-by: Laurent Pinchart <laurent.pinchart@ideasonboard.com>
This commit is contained in:
committed by
Laurent Pinchart
parent
87998e064d
commit
ec5d3142a9
@@ -0,0 +1,65 @@
|
||||
/* SPDX-License-Identifier: BSD-2-Clause */
|
||||
/*
|
||||
* Copyright (C) 2021, Raspberry Pi (Trading) Limited
|
||||
*
|
||||
* cam_helper_ov9281.cpp - camera information for ov9281 sensor
|
||||
*/
|
||||
|
||||
#include <assert.h>
|
||||
|
||||
#include "cam_helper.hpp"
|
||||
|
||||
using namespace RPiController;
|
||||
|
||||
class CamHelperOv9281 : public CamHelper
|
||||
{
|
||||
public:
|
||||
CamHelperOv9281();
|
||||
uint32_t GainCode(double gain) const override;
|
||||
double Gain(uint32_t gain_code) const override;
|
||||
void GetDelays(int &exposure_delay, int &gain_delay,
|
||||
int &vblank_delay) const override;
|
||||
|
||||
private:
|
||||
/*
|
||||
* Smallest difference between the frame length and integration time,
|
||||
* in units of lines.
|
||||
*/
|
||||
static constexpr int frameIntegrationDiff = 4;
|
||||
};
|
||||
|
||||
/*
|
||||
* OV9281 doesn't output metadata, so we have to use the "unicam parser" which
|
||||
* works by counting frames.
|
||||
*/
|
||||
|
||||
CamHelperOv9281::CamHelperOv9281()
|
||||
: CamHelper(nullptr, frameIntegrationDiff)
|
||||
{
|
||||
}
|
||||
|
||||
uint32_t CamHelperOv9281::GainCode(double gain) const
|
||||
{
|
||||
return static_cast<uint32_t>(gain * 16.0);
|
||||
}
|
||||
|
||||
double CamHelperOv9281::Gain(uint32_t gain_code) const
|
||||
{
|
||||
return static_cast<double>(gain_code) / 16.0;
|
||||
}
|
||||
|
||||
void CamHelperOv9281::GetDelays(int &exposure_delay, int &gain_delay,
|
||||
int &vblank_delay) const
|
||||
{
|
||||
/* The driver appears to behave as follows: */
|
||||
exposure_delay = 2;
|
||||
gain_delay = 2;
|
||||
vblank_delay = 2;
|
||||
}
|
||||
|
||||
static CamHelper *Create()
|
||||
{
|
||||
return new CamHelperOv9281();
|
||||
}
|
||||
|
||||
static RegisterCamHelper reg("ov9281", &Create);
|
||||
@@ -5,6 +5,7 @@ conf_files = files([
|
||||
'imx290.json',
|
||||
'imx477.json',
|
||||
'ov5647.json',
|
||||
'ov9281.json',
|
||||
'se327m12.json',
|
||||
'uncalibrated.json',
|
||||
])
|
||||
|
||||
@@ -0,0 +1,92 @@
|
||||
{
|
||||
"rpi.black_level":
|
||||
{
|
||||
"black_level": 4096
|
||||
},
|
||||
"rpi.lux":
|
||||
{
|
||||
"reference_shutter_speed": 2000,
|
||||
"reference_gain": 1.0,
|
||||
"reference_aperture": 1.0,
|
||||
"reference_lux": 800,
|
||||
"reference_Y": 20000
|
||||
},
|
||||
"rpi.noise":
|
||||
{
|
||||
"reference_constant": 0,
|
||||
"reference_slope": 2.5
|
||||
},
|
||||
"rpi.sdn":
|
||||
{
|
||||
},
|
||||
"rpi.agc":
|
||||
{
|
||||
"metering_modes":
|
||||
{
|
||||
"centre-weighted": {
|
||||
"weights": [4, 4, 4, 2, 2, 2, 2, 1, 1, 1, 1, 0, 0, 0, 0]
|
||||
}
|
||||
},
|
||||
"exposure_modes":
|
||||
{
|
||||
"normal":
|
||||
{
|
||||
"shutter": [ 100, 15000, 30000, 60000, 120000 ],
|
||||
"gain": [ 1.0, 2.0, 3.0, 4.0, 6.0 ]
|
||||
}
|
||||
},
|
||||
"constraint_modes":
|
||||
{
|
||||
"normal":
|
||||
[
|
||||
{ "bound": "LOWER", "q_lo": 0.98, "q_hi": 1.0, "y_target": [ 0, 0.4, 1000, 0.4 ] }
|
||||
]
|
||||
},
|
||||
"y_target": [ 0, 0.16, 1000, 0.165, 10000, 0.17 ]
|
||||
},
|
||||
"rpi.alsc":
|
||||
{
|
||||
"n_iter": 0,
|
||||
"luminance_strength": 1.0,
|
||||
"corner_strength": 1.5
|
||||
},
|
||||
"rpi.contrast":
|
||||
{
|
||||
"ce_enable": 0,
|
||||
"gamma_curve": [
|
||||
0, 0,
|
||||
1024, 5040,
|
||||
2048, 9338,
|
||||
3072, 12356,
|
||||
4096, 15312,
|
||||
5120, 18051,
|
||||
6144, 20790,
|
||||
7168, 23193,
|
||||
8192, 25744,
|
||||
9216, 27942,
|
||||
10240, 30035,
|
||||
11264, 32005,
|
||||
12288, 33975,
|
||||
13312, 35815,
|
||||
14336, 37600,
|
||||
15360, 39168,
|
||||
16384, 40642,
|
||||
18432, 43379,
|
||||
20480, 45749,
|
||||
22528, 47753,
|
||||
24576, 49621,
|
||||
26624, 51253,
|
||||
28672, 52698,
|
||||
30720, 53796,
|
||||
32768, 54876,
|
||||
36864, 57012,
|
||||
40960, 58656,
|
||||
45056, 59954,
|
||||
49152, 61183,
|
||||
53248, 62355,
|
||||
57344, 63419,
|
||||
61440, 64476,
|
||||
65535, 65535
|
||||
]
|
||||
}
|
||||
}
|
||||
@@ -22,6 +22,7 @@ rpi_ipa_sources = files([
|
||||
'cam_helper_imx219.cpp',
|
||||
'cam_helper_imx290.cpp',
|
||||
'cam_helper_imx477.cpp',
|
||||
'cam_helper_ov9281.cpp',
|
||||
'controller/controller.cpp',
|
||||
'controller/histogram.cpp',
|
||||
'controller/algorithm.cpp',
|
||||
|
||||
Reference in New Issue
Block a user