ipa: rpi: Add tuning files for OV7251

OV7251 is a mono VGA global shutter sensor that has a mainline
driver and works with libcamera.
Add the supporting files for it. The tuning is copied from OV9281.

Signed-off-by: Dave Stevenson <dave.stevenson@raspberrypi.com>
Signed-off-by: Kieran Bingham <kieran.bingham@ideasonboard.com>
Reviewed-by: Naushir Patuck <naush@raspberrypi.com>
Signed-off-by: Kieran Bingham <kieran.bingham@ideasonboard.com>
This commit is contained in:
Dave Stevenson
2024-10-10 14:41:48 +01:00
committed by Kieran Bingham
parent 79893cc00f
commit 994588fb75
4 changed files with 204 additions and 0 deletions
@@ -0,0 +1,66 @@
/* SPDX-License-Identifier: BSD-2-Clause */
/*
* Copyright (C) 2021, Raspberry Pi Ltd
*
* camera information for ov7251 sensor
*/
#include <assert.h>
#include "cam_helper.h"
using namespace RPiController;
class CamHelperOv7251 : public CamHelper
{
public:
CamHelperOv7251();
uint32_t gainCode(double gain) const override;
double gain(uint32_t gainCode) const override;
void getDelays(int &exposureDelay, int &gainDelay,
int &vblankDelay, int &hblankDelay) const override;
private:
/*
* Smallest difference between the frame length and integration time,
* in units of lines.
*/
static constexpr int frameIntegrationDiff = 4;
};
/*
* OV7251 doesn't output metadata, so we have to use the "unicam parser" which
* works by counting frames.
*/
CamHelperOv7251::CamHelperOv7251()
: CamHelper({}, frameIntegrationDiff)
{
}
uint32_t CamHelperOv7251::gainCode(double gain) const
{
return static_cast<uint32_t>(gain * 16.0);
}
double CamHelperOv7251::gain(uint32_t gainCode) const
{
return static_cast<double>(gainCode) / 16.0;
}
void CamHelperOv7251::getDelays(int &exposureDelay, int &gainDelay,
int &vblankDelay, int &hblankDelay) const
{
/* The driver appears to behave as follows: */
exposureDelay = 2;
gainDelay = 2;
vblankDelay = 2;
hblankDelay = 2;
}
static CamHelper *create()
{
return new CamHelperOv7251();
}
static RegisterCamHelper reg("ov7251", &create);
+1
View File
@@ -11,6 +11,7 @@ rpi_ipa_cam_helper_sources = files([
'cam_helper_imx519.cpp',
'cam_helper_imx708.cpp',
'cam_helper_ov64a40.cpp',
'cam_helper_ov7251.cpp',
'cam_helper_ov9281.cpp',
'md_parser_smia.cpp',
])
+1
View File
@@ -19,6 +19,7 @@ conf_files = files([
'ov5647.json',
'ov5647_noir.json',
'ov64a40.json',
'ov7251_mono.json',
'ov9281_mono.json',
'se327m12.json',
'uncalibrated.json',
+136
View File
@@ -0,0 +1,136 @@
{
"version": 2.0,
"target": "bcm2835",
"algorithms": [
{
"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, 8.0 ]
},
"short":
{
"shutter": [ 100, 5000, 10000, 20000, 30000 ],
"gain": [ 1.0, 2.0, 4.0, 6.0, 8.0 ]
},
"long":
{
"shutter": [ 1000, 30000, 60000, 90000, 120000 ],
"gain": [ 1.0, 2.0, 4.0, 6.0, 12.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
]
}
}
]
}