[{"id":39849,"web_url":"https://patchwork.libcamera.org/comment/39849/","msgid":"<178490895232.1671930.12580706895516921836@ping.linuxembedded.co.uk>","date":"2026-07-24T16:02:32","subject":"Re: [PATCH v2 1/5] ipa: rpi: cam_helper: Add Mira220 cam helper","submitter":{"id":4,"url":"https://patchwork.libcamera.org/api/people/4/","name":"Kieran Bingham","email":"kieran.bingham@ideasonboard.com"},"content":"Quoting Jacopo Mondi (2026-07-24 16:47:40)\n> From: Philippe Baetens <philippebaetens@gmail.com>\n> \n> AMS-OSRAM Mira220 is a global shutter sensor with a maximum\n> resolution of 1600x1400.\n> \n> This patch upports the Mira220 support available at\n> https://github.com/ams-OSRAM/libcamera.git at revision d7d5e17ec961\n> (\"update json files so they are truly mono\")\n\nI'd put that after the '---' I don't think it's needed in the commit\nmessage.\n\nAnyway,\n\nReviewed-by: Kieran Bingham <kieran.bingham@ideasonboard.com>\n\n> Signed-off-by: Philippe Baetens <philippebaetens@gmail.com>\n> Signed-off-by: Jacopo Mondi <jacopo.mondi@ideasonboard.com>\n> Acked-by: Naushir Patuck <naush@raspberrypi.com>\n> ---\n>  src/ipa/rpi/cam_helper/cam_helper_mira220.cpp | 55 +++++++++++++++++++++++++++\n>  src/ipa/rpi/cam_helper/meson.build            |  1 +\n>  2 files changed, 56 insertions(+)\n> \n> diff --git a/src/ipa/rpi/cam_helper/cam_helper_mira220.cpp b/src/ipa/rpi/cam_helper/cam_helper_mira220.cpp\n> new file mode 100644\n> index 000000000000..f0bd1ecbfff6\n> --- /dev/null\n> +++ b/src/ipa/rpi/cam_helper/cam_helper_mira220.cpp\n> @@ -0,0 +1,55 @@\n> +/* SPDX-License-Identifier: BSD-2-Clause */\n> +/*\n> + * Copyright (C) 2026, ams-OSRAM\n> + *\n> + * cam_helper_Mira220.cpp - camera information for Mira220 sensor\n> + */\n> +\n> +#include <assert.h>\n> +\n> +#include \"cam_helper.h\"\n> +\n> +using namespace RPiController;\n> +\n> +class CamHelperMira220 : public CamHelper\n> +{\n> +public:\n> +       CamHelperMira220();\n> +       uint32_t gainCode(double gain) const override;\n> +       double gain(uint32_t gainCode) const override;\n> +       unsigned int hideFramesModeSwitch() const override;\n> +\n> +private:\n> +       /*\n> +        * Smallest difference between the frame length and integration time,\n> +        * in units of lines.\n> +        */\n> +       static constexpr int frameIntegrationDiff = 4;\n> +};\n> +\n> +/*\n> + * Mira220 doesn't output metadata, so we have to use the delayed controls which\n> + * works by counting frames.\n> + */\n> +\n> +CamHelperMira220::CamHelperMira220()\n> +       : CamHelper({}, frameIntegrationDiff)\n> +{\n> +}\n> +\n> +uint32_t CamHelperMira220::gainCode(double gain) const\n> +{\n> +       return static_cast<uint32_t>(2048.0 - 2048.0 / gain);\n> +}\n> +\n> +double CamHelperMira220::gain(uint32_t gainCode) const\n> +{\n> +       return static_cast<double>(2048.0 / (2048 - gainCode));\n> +}\n> +\n> +static CamHelper *create()\n> +{\n> +       return new CamHelperMira220();\n> +}\n> +\n> +static RegisterCamHelper reg(\"mira220\", &create);\n> diff --git a/src/ipa/rpi/cam_helper/meson.build b/src/ipa/rpi/cam_helper/meson.build\n> index eabd55dce5a1..a8756a1a0226 100644\n> --- a/src/ipa/rpi/cam_helper/meson.build\n> +++ b/src/ipa/rpi/cam_helper/meson.build\n> @@ -12,6 +12,7 @@ rpi_ipa_cam_helper_sources = files([\n>      'cam_helper_imx519.cpp',\n>      'cam_helper_imx678.cpp',\n>      'cam_helper_imx708.cpp',\n> +    'cam_helper_mira220.cpp',\n>      'cam_helper_ov64a40.cpp',\n>      'cam_helper_ov7251.cpp',\n>      'cam_helper_ov9281.cpp',\n> \n> -- \n> 2.54.0\n>","headers":{"Return-Path":"<libcamera-devel-bounces@lists.libcamera.org>","X-Original-To":"parsemail@patchwork.libcamera.org","Delivered-To":"parsemail@patchwork.libcamera.org","Received":["from lancelot.ideasonboard.com (lancelot.ideasonboard.com\n\t[92.243.16.209])\n\tby patchwork.libcamera.org (Postfix) with ESMTPS id 8DBB5BDE17\n\tfor <parsemail@patchwork.libcamera.org>;\n\tFri, 24 Jul 2026 16:02:37 +0000 (UTC)","from lancelot.ideasonboard.com (localhost [IPv6:::1])\n\tby lancelot.ideasonboard.com (Postfix) with ESMTP id C711067F3E;\n\tFri, 24 Jul 2026 18:02:36 +0200 (CEST)","from perceval.ideasonboard.com (perceval.ideasonboard.com\n\t[213.167.242.64])\n\tby lancelot.ideasonboard.com (Postfix) with ESMTPS id 31FCC67F22\n\tfor <libcamera-devel@lists.libcamera.org>;\n\tFri, 24 Jul 2026 18:02:35 +0200 (CEST)","from monstersaurus.ideasonboard.com\n\t(cpc89244-aztw30-2-0-cust6594.18-1.cable.virginm.net [86.31.185.195])\n\tby perceval.ideasonboard.com (Postfix) with ESMTPSA id 6212973B;\n\tFri, 24 Jul 2026 18:01:33 +0200 (CEST)"],"Authentication-Results":"lancelot.ideasonboard.com; dkim=pass (1024-bit key;\n\tunprotected) header.d=ideasonboard.com header.i=@ideasonboard.com\n\theader.b=\"jvDZ1wdE\"; dkim-atps=neutral","DKIM-Signature":"v=1; a=rsa-sha256; c=relaxed/simple; d=ideasonboard.com;\n\ts=mail; t=1784908893;\n\tbh=rf4R7PvKrs4cqIUj9vRWaVTHMpgiO3pVekQ1e7UfCwE=;\n\th=In-Reply-To:References:Subject:From:Cc:To:Date:From;\n\tb=jvDZ1wdEHq/csZTaF/YEh/lsYz8N7Kk1Lcm4T3MerXeeJ/1PO+QhICQF+d2oY9NXd\n\te7KHMA/kQk/K+mOwu8H5YogPvvNBtdmC+tKeubYjaHT9xBf5vqqHUPJFdtGts7wEda\n\tJYs3FoP05B221rKhVsjqvUsXB8iSNg5WRF4AaOtE=","Content-Type":"text/plain; charset=\"utf-8\"","MIME-Version":"1.0","Content-Transfer-Encoding":"quoted-printable","In-Reply-To":"<20260724-mira220-v2-1-240003749dd0@ideasonboard.com>","References":"<20260724-mira220-v2-0-240003749dd0@ideasonboard.com>\n\t<20260724-mira220-v2-1-240003749dd0@ideasonboard.com>","Subject":"Re: [PATCH v2 1/5] ipa: rpi: cam_helper: Add Mira220 cam helper","From":"Kieran Bingham <kieran.bingham@ideasonboard.com>","Cc":"Philippe Baetens <philippebaetens@gmail.com>,\n\tJacopo Mondi <jacopo.mondi@ideasonboard.com>,\n\tNaushir Patuck <naush@raspberrypi.com>","To":"Jacopo Mondi <jacopo.mondi@ideasonboard.com>,\n\tlibcamera-devel@lists.libcamera.org","Date":"Fri, 24 Jul 2026 17:02:32 +0100","Message-ID":"<178490895232.1671930.12580706895516921836@ping.linuxembedded.co.uk>","User-Agent":"alot/0.9.1","X-BeenThere":"libcamera-devel@lists.libcamera.org","X-Mailman-Version":"2.1.29","Precedence":"list","List-Id":"<libcamera-devel.lists.libcamera.org>","List-Unsubscribe":"<https://lists.libcamera.org/options/libcamera-devel>,\n\t<mailto:libcamera-devel-request@lists.libcamera.org?subject=unsubscribe>","List-Archive":"<https://lists.libcamera.org/pipermail/libcamera-devel/>","List-Post":"<mailto:libcamera-devel@lists.libcamera.org>","List-Help":"<mailto:libcamera-devel-request@lists.libcamera.org?subject=help>","List-Subscribe":"<https://lists.libcamera.org/listinfo/libcamera-devel>,\n\t<mailto:libcamera-devel-request@lists.libcamera.org?subject=subscribe>","Errors-To":"libcamera-devel-bounces@lists.libcamera.org","Sender":"\"libcamera-devel\" <libcamera-devel-bounces@lists.libcamera.org>"}}]