[PATCH] ipa: rpi: Add tuning files for OV7251
Naushir Patuck
naush at raspberrypi.com
Mon Oct 21 12:45:11 CEST 2024
On Sat, 19 Oct 2024 at 22:44, Kieran Bingham
<kieran.bingham at ideasonboard.com> wrote:
>
> Quoting Kieran Bingham (2024-10-10 14:41:48)
> > From: Dave Stevenson <dave.stevenson at raspberrypi.com>
> >
> > 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 at raspberrypi.com>
> > Signed-off-by: Kieran Bingham <kieran.bingham at ideasonboard.com>
>
> Naush / David, Are you happy for this to be merged ?
Yup
Reviewed-by: Naushir Patuck <naush at raspberrypi.com>
>
> --
> Kieran
>
>
> > ---
> > src/ipa/rpi/cam_helper/cam_helper_ov7251.cpp | 66 +++++++++
> > src/ipa/rpi/cam_helper/meson.build | 1 +
> > src/ipa/rpi/vc4/data/meson.build | 1 +
> > src/ipa/rpi/vc4/data/ov7251_mono.json | 136 +++++++++++++++++++
> > 4 files changed, 204 insertions(+)
> > create mode 100644 src/ipa/rpi/cam_helper/cam_helper_ov7251.cpp
> > create mode 100644 src/ipa/rpi/vc4/data/ov7251_mono.json
> >
> > diff --git a/src/ipa/rpi/cam_helper/cam_helper_ov7251.cpp b/src/ipa/rpi/cam_helper/cam_helper_ov7251.cpp
> > new file mode 100644
> > index 000000000000..7b12c44508a4
> > --- /dev/null
> > +++ b/src/ipa/rpi/cam_helper/cam_helper_ov7251.cpp
> > @@ -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);
> > diff --git a/src/ipa/rpi/cam_helper/meson.build b/src/ipa/rpi/cam_helper/meson.build
> > index 1e43f1da29cd..03e88fe082e2 100644
> > --- a/src/ipa/rpi/cam_helper/meson.build
> > +++ b/src/ipa/rpi/cam_helper/meson.build
> > @@ -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',
> > ])
> > diff --git a/src/ipa/rpi/vc4/data/meson.build b/src/ipa/rpi/vc4/data/meson.build
> > index 60477c112196..8c34a1a5faa2 100644
> > --- a/src/ipa/rpi/vc4/data/meson.build
> > +++ b/src/ipa/rpi/vc4/data/meson.build
> > @@ -19,6 +19,7 @@ conf_files = files([
> > 'ov5647.json',
> > 'ov5647_noir.json',
> > 'ov64a40.json',
> > + 'ov7251_mono.json',
> > 'ov9281_mono.json',
> > 'se327m12.json',
> > 'uncalibrated.json',
> > diff --git a/src/ipa/rpi/vc4/data/ov7251_mono.json b/src/ipa/rpi/vc4/data/ov7251_mono.json
> > new file mode 100644
> > index 000000000000..a9d05a01b53f
> > --- /dev/null
> > +++ b/src/ipa/rpi/vc4/data/ov7251_mono.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
> > + ]
> > + }
> > + }
> > + ]
> > +}
> > \ No newline at end of file
> > --
> > 2.34.1
> >
More information about the libcamera-devel
mailing list