| Message ID | 20260722-mira220-v1-1-1006a4cbd2a8@ideasonboard.com |
|---|---|
| State | New |
| Headers | show |
| Series |
|
| Related | show |
Quoting Jacopo Mondi (2026-07-22 12:57:11) > AMS-OSRAM Mira220 is a global shutter sensor with a maximum > resolution of 1600x1400. > > This patch upports the Mira220 support available at > https://github.com/ams-OSRAM/libcamera.git at revision d7d5e17ec961 > ("update json files so they are truly mono") > > Signed-off-by: Jacopo Mondi <jacopo.mondi@ideasonboard.com> > --- > src/ipa/rpi/cam_helper/cam_helper_mira220.cpp | 61 +++++++++++++++++++++++++++ > src/ipa/rpi/cam_helper/meson.build | 1 + > 2 files changed, 62 insertions(+) > > diff --git a/src/ipa/rpi/cam_helper/cam_helper_mira220.cpp b/src/ipa/rpi/cam_helper/cam_helper_mira220.cpp > new file mode 100644 > index 000000000000..235546ccf7c5 > --- /dev/null > +++ b/src/ipa/rpi/cam_helper/cam_helper_mira220.cpp > @@ -0,0 +1,61 @@ > +/* SPDX-License-Identifier: BSD-2-Clause */ > +/* > + * Copyright (C) 2024, Raspberry Pi Ltd I expect that should be ams-osram ... I don't think RPi made this helper. Aside from that, I think this series should add the libipa camera sensor helper and the camera sensor properties ? -- Kieran > + * > + * cam_helper_Mira220.cpp - camera information for Mira220 sensor > + */ > + > +#include <assert.h> > + > +#include "cam_helper.h" > + > +using namespace RPiController; > + > +class CamHelperMira220 : public CamHelper > +{ > +public: > + CamHelperMira220(); > + uint32_t gainCode(double gain) const override; > + double gain(uint32_t gainCode) const override; > + unsigned int hideFramesModeSwitch() const override; > + > +private: > + /* > + * Smallest difference between the frame length and integration time, > + * in units of lines. > + */ > + static constexpr int frameIntegrationDiff = 4; > +}; > + > +/* > + * Mira220 doesn't output metadata, so we have to use the delayed controls which > + * works by counting frames. > + */ > + > +CamHelperMira220::CamHelperMira220() > + : CamHelper({}, frameIntegrationDiff) > +{ > +} > + > +uint32_t CamHelperMira220::gainCode(double gain) const > +{ > + return static_cast<uint32_t>(2048.0 - 2048.0 / gain); > +} > + > +double CamHelperMira220::gain(uint32_t gainCode) const > +{ > + return static_cast<double>(2048.0 / (2048 - gainCode)); > +} > + > +unsigned int CamHelperMira220::hideFramesModeSwitch() const > +{ > + /* After a mode switch, we seem to get 1 bad frame. */ > + return 1; > +} > + > +static CamHelper *create() > +{ > + return new CamHelperMira220(); > +} > + > +static RegisterCamHelper reg("mira220", &create); > diff --git a/src/ipa/rpi/cam_helper/meson.build b/src/ipa/rpi/cam_helper/meson.build > index eabd55dce5a1..a8756a1a0226 100644 > --- a/src/ipa/rpi/cam_helper/meson.build > +++ b/src/ipa/rpi/cam_helper/meson.build > @@ -12,6 +12,7 @@ rpi_ipa_cam_helper_sources = files([ > 'cam_helper_imx519.cpp', > 'cam_helper_imx678.cpp', > 'cam_helper_imx708.cpp', > + 'cam_helper_mira220.cpp', > 'cam_helper_ov64a40.cpp', > 'cam_helper_ov7251.cpp', > 'cam_helper_ov9281.cpp', > > -- > 2.54.0 >
diff --git a/src/ipa/rpi/cam_helper/cam_helper_mira220.cpp b/src/ipa/rpi/cam_helper/cam_helper_mira220.cpp new file mode 100644 index 000000000000..235546ccf7c5 --- /dev/null +++ b/src/ipa/rpi/cam_helper/cam_helper_mira220.cpp @@ -0,0 +1,61 @@ +/* SPDX-License-Identifier: BSD-2-Clause */ +/* + * Copyright (C) 2024, Raspberry Pi Ltd + * + * cam_helper_Mira220.cpp - camera information for Mira220 sensor + */ + +#include <assert.h> + +#include "cam_helper.h" + +using namespace RPiController; + +class CamHelperMira220 : public CamHelper +{ +public: + CamHelperMira220(); + uint32_t gainCode(double gain) const override; + double gain(uint32_t gainCode) const override; + unsigned int hideFramesModeSwitch() const override; + +private: + /* + * Smallest difference between the frame length and integration time, + * in units of lines. + */ + static constexpr int frameIntegrationDiff = 4; +}; + +/* + * Mira220 doesn't output metadata, so we have to use the delayed controls which + * works by counting frames. + */ + +CamHelperMira220::CamHelperMira220() + : CamHelper({}, frameIntegrationDiff) +{ +} + +uint32_t CamHelperMira220::gainCode(double gain) const +{ + return static_cast<uint32_t>(2048.0 - 2048.0 / gain); +} + +double CamHelperMira220::gain(uint32_t gainCode) const +{ + return static_cast<double>(2048.0 / (2048 - gainCode)); +} + +unsigned int CamHelperMira220::hideFramesModeSwitch() const +{ + /* After a mode switch, we seem to get 1 bad frame. */ + return 1; +} + +static CamHelper *create() +{ + return new CamHelperMira220(); +} + +static RegisterCamHelper reg("mira220", &create); diff --git a/src/ipa/rpi/cam_helper/meson.build b/src/ipa/rpi/cam_helper/meson.build index eabd55dce5a1..a8756a1a0226 100644 --- a/src/ipa/rpi/cam_helper/meson.build +++ b/src/ipa/rpi/cam_helper/meson.build @@ -12,6 +12,7 @@ rpi_ipa_cam_helper_sources = files([ 'cam_helper_imx519.cpp', 'cam_helper_imx678.cpp', 'cam_helper_imx708.cpp', + 'cam_helper_mira220.cpp', 'cam_helper_ov64a40.cpp', 'cam_helper_ov7251.cpp', 'cam_helper_ov9281.cpp',
AMS-OSRAM Mira220 is a global shutter sensor with a maximum resolution of 1600x1400. This patch upports the Mira220 support available at https://github.com/ams-OSRAM/libcamera.git at revision d7d5e17ec961 ("update json files so they are truly mono") Signed-off-by: Jacopo Mondi <jacopo.mondi@ideasonboard.com> --- src/ipa/rpi/cam_helper/cam_helper_mira220.cpp | 61 +++++++++++++++++++++++++++ src/ipa/rpi/cam_helper/meson.build | 1 + 2 files changed, 62 insertions(+)