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:
committed by
Kieran Bingham
parent
79893cc00f
commit
994588fb75
@@ -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);
|
||||
@@ -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',
|
||||
])
|
||||
|
||||
@@ -19,6 +19,7 @@ conf_files = files([
|
||||
'ov5647.json',
|
||||
'ov5647_noir.json',
|
||||
'ov64a40.json',
|
||||
'ov7251_mono.json',
|
||||
'ov9281_mono.json',
|
||||
'se327m12.json',
|
||||
'uncalibrated.json',
|
||||
|
||||
@@ -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
|
||||
]
|
||||
}
|
||||
}
|
||||
]
|
||||
}
|
||||
Reference in New Issue
Block a user