[PATCH v1] libcamera: rpi: Add support for IMX258
Naushir Patuck
naush at raspberrypi.com
Wed Dec 4 12:19:34 CET 2024
Hi Isaac,
On Wed, 4 Dec 2024 at 10:52, Isaac Scott <isaac.scott at ideasonboard.com> wrote:
>
> Add support for the IMX258 camera. This patch adds a minimal cam_helper
> implementation that allows the IMX258 sensor to be listed by cam, and
> subsequently be used remotely in tools such as Camshark.
I'm not sure the cam helper alone would be enough to enumerate the
camera. I would have thought you also need a camera tuning file so
that the IPA can correctly initialise as well.
Regards,
Naush
>
> Based on the implementation of the IMX290's camera helper, adjusted to
> use the equation listed in the IMX258 datasheet used to calculate
> analogue gain.
>
> Signed-off-by: Isaac Scott <isaac.scott at ideasonboard.com>
> ---
> src/ipa/rpi/cam_helper/cam_helper_imx258.cpp | 60 ++++++++++++++++++++
> src/ipa/rpi/cam_helper/meson.build | 1 +
> 2 files changed, 61 insertions(+)
> create mode 100644 src/ipa/rpi/cam_helper/cam_helper_imx258.cpp
>
> diff --git a/src/ipa/rpi/cam_helper/cam_helper_imx258.cpp b/src/ipa/rpi/cam_helper/cam_helper_imx258.cpp
> new file mode 100644
> index 00000000..12c0332a
> --- /dev/null
> +++ b/src/ipa/rpi/cam_helper/cam_helper_imx258.cpp
> @@ -0,0 +1,60 @@
> +/* SPDX-License-Identifier: BSD-2-Clause */
> +/*
> + * Copyright (C) 2024 Ideas On Board Oy
> + *
> + * camera helper for imx258 sensor
> + * based on Raspberry Pi's imx290 helper
> + */
> +
> +#include <cmath>
> +
> +#include "cam_helper.h"
> +
> +using namespace RPiController;
> +
> +class CamHelperImx258 : public CamHelper
> +{
> +public:
> + CamHelperImx258();
> + 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 = 2;
> +};
> +
> +CamHelperImx258::CamHelperImx258()
> + : CamHelper({}, frameIntegrationDiff)
> +{
> +}
> +
> +uint32_t CamHelperImx258::gainCode(double gain) const
> +{
> + return static_cast<uint32_t>(512 - 512 / gain);
> +}
> +
> +double CamHelperImx258::gain(uint32_t gainCode) const
> +{
> + return 512.0 / (512.0 - gainCode);
> +}
> +
> +void CamHelperImx258::getDelays(int &exposureDelay, int &gainDelay,
> + int &vblankDelay, int &hblankDelay) const
> +{
> + exposureDelay = 2;
> + gainDelay = 2;
> + vblankDelay = 2;
> + hblankDelay = 2;
> +}
> +
> +static CamHelper *create()
> +{
> + return new CamHelperImx258();
> +}
> +
> +static RegisterCamHelper reg("imx258", &create);
> diff --git a/src/ipa/rpi/cam_helper/meson.build b/src/ipa/rpi/cam_helper/meson.build
> index 03e88fe0..a8245e42 100644
> --- a/src/ipa/rpi/cam_helper/meson.build
> +++ b/src/ipa/rpi/cam_helper/meson.build
> @@ -4,6 +4,7 @@ rpi_ipa_cam_helper_sources = files([
> 'cam_helper.cpp',
> 'cam_helper_ov5647.cpp',
> 'cam_helper_imx219.cpp',
> + 'cam_helper_imx258.cpp',
> 'cam_helper_imx283.cpp',
> 'cam_helper_imx290.cpp',
> 'cam_helper_imx296.cpp',
> --
> 2.43.0
>
More information about the libcamera-devel
mailing list