[{"id":28239,"web_url":"https://patchwork.libcamera.org/comment/28239/","msgid":"<CAPY8ntAOaU5sgg+KHaYVvboByQBXzP0OuhTDTS06F+SDHgkhDw@mail.gmail.com>","date":"2023-12-04T15:44:21","subject":"Re: [libcamera-devel] [PATCH v2 2/4] ipa: rpi: Provide a Camera\n\tHelper for the OV64A40","submitter":{"id":27,"url":"https://patchwork.libcamera.org/api/people/27/","name":"Dave Stevenson","email":"dave.stevenson@raspberrypi.com"},"content":"Hi Jacopo\n\nOn Mon, 4 Dec 2023 at 09:11, Jacopo Mondi via libcamera-devel\n<libcamera-devel@lists.libcamera.org> wrote:\n>\n> Support the OV64A40 sensor with a camera helper to manage the gain\n> model, light sensitivity, and control delays.\n>\n> Signed-off-by: Lee Jackson <lee.jackson@arducam.com>\n> Signed-off-by: Jacopo Mondi <jacopo.mondi@ideasonboard.com>\n> Reviewed-by: Naushir Patuck <naush@raspberrypi.com>\n> ---\n>  src/ipa/rpi/cam_helper/cam_helper_ov64a40.cpp | 73 +++++++++++++++++++\n>  src/ipa/rpi/cam_helper/meson.build            |  1 +\n>  2 files changed, 74 insertions(+)\n>  create mode 100644 src/ipa/rpi/cam_helper/cam_helper_ov64a40.cpp\n>\n> diff --git a/src/ipa/rpi/cam_helper/cam_helper_ov64a40.cpp b/src/ipa/rpi/cam_helper/cam_helper_ov64a40.cpp\n> new file mode 100644\n> index 000000000000..041c32dd9222\n> --- /dev/null\n> +++ b/src/ipa/rpi/cam_helper/cam_helper_ov64a40.cpp\n> @@ -0,0 +1,73 @@\n> +/* SPDX-License-Identifier: BSD-2-Clause */\n> +/*\n> + * Copyright (C) 2021, Raspberry Pi Ltd\n> + *\n> + * cam_helper_ov64a40.cpp - camera information for ov64a40 sensor\n> + */\n> +\n> +#include <assert.h>\n> +\n> +#include \"cam_helper.h\"\n> +\n> +using namespace RPiController;\n> +\n> +class CamHelperOv64a40 : public CamHelper\n> +{\n> +public:\n> +       CamHelperOv64a40();\n> +       uint32_t gainCode(double gain) const override;\n> +       double gain(uint32_t gainCode) const override;\n> +       void getDelays(int &exposureDelay, int &gainDelay,\n> +                      int &vblankDelay, int &hblankDelay) const override;\n> +       double getModeSensitivity(const CameraMode &mode) 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\nJust noticing this in passing. Your driver PR has\n#define OV64A40_EXPOSURE_MARGIN 32\nyet this defines the difference to be 4. AIUI they are the same\nparameter, so presumably one of them is wrong.\n\n  Dave\n\n> +};\n> +\n> +CamHelperOv64a40::CamHelperOv64a40()\n> +       : CamHelper({}, frameIntegrationDiff)\n> +{\n> +}\n> +\n> +uint32_t CamHelperOv64a40::gainCode(double gain) const\n> +{\n> +       return static_cast<uint32_t>(gain * 128.0);\n> +}\n> +\n> +double CamHelperOv64a40::gain(uint32_t gainCode) const\n> +{\n> +       return static_cast<double>(gainCode) / 128.0;\n> +}\n> +\n> +void CamHelperOv64a40::getDelays(int &exposureDelay, int &gainDelay,\n> +                                int &vblankDelay, int &hblankDelay) const\n> +{\n> +       /* The driver appears to behave as follows: */\n> +       exposureDelay = 2;\n> +       gainDelay = 2;\n> +       vblankDelay = 2;\n> +       hblankDelay = 2;\n> +}\n> +\n> +double CamHelperOv64a40::getModeSensitivity(const CameraMode &mode) const\n> +{\n> +       if (mode.binX >= 2 && mode.scaleX >= 4) {\n> +               return 4.0;\n> +       } else if (mode.binX >= 2 && mode.scaleX >= 2) {\n> +               return 2.0;\n> +       } else {\n> +               return 1.0;\n> +       }\n> +}\n> +\n> +static CamHelper *create()\n> +{\n> +       return new CamHelperOv64a40();\n> +}\n> +\n> +static RegisterCamHelper reg(\"ov64a40\", &create);\n> diff --git a/src/ipa/rpi/cam_helper/meson.build b/src/ipa/rpi/cam_helper/meson.build\n> index bdf2db8eb742..7262505742f3 100644\n> --- a/src/ipa/rpi/cam_helper/meson.build\n> +++ b/src/ipa/rpi/cam_helper/meson.build\n> @@ -9,6 +9,7 @@ rpi_ipa_cam_helper_sources = files([\n>      'cam_helper_imx477.cpp',\n>      'cam_helper_imx519.cpp',\n>      'cam_helper_imx708.cpp',\n> +    'cam_helper_ov64a40.cpp',\n>      'cam_helper_ov9281.cpp',\n>      'md_parser_smia.cpp',\n>  ])\n> --\n> 2.41.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 6ECB7C31E9\n\tfor <parsemail@patchwork.libcamera.org>;\n\tMon,  4 Dec 2023 15:44:40 +0000 (UTC)","from lancelot.ideasonboard.com (localhost [IPv6:::1])\n\tby lancelot.ideasonboard.com (Postfix) with ESMTP id D2DA1629C2;\n\tMon,  4 Dec 2023 16:44:39 +0100 (CET)","from mail-yb1-xb29.google.com (mail-yb1-xb29.google.com\n\t[IPv6:2607:f8b0:4864:20::b29])\n\tby lancelot.ideasonboard.com (Postfix) with ESMTPS id 3373E61D9F\n\tfor <libcamera-devel@lists.libcamera.org>;\n\tMon,  4 Dec 2023 16:44:38 +0100 (CET)","by mail-yb1-xb29.google.com with SMTP id\n\t3f1490d57ef6-d9b9adaf291so2106570276.1\n\tfor <libcamera-devel@lists.libcamera.org>;\n\tMon, 04 Dec 2023 07:44:38 -0800 (PST)"],"DKIM-Signature":["v=1; a=rsa-sha256; c=relaxed/simple; d=libcamera.org;\n\ts=mail; t=1701704679;\n\tbh=XaGoqSDOnDb20lfHxDx5SZaCS78rmtsmBKwUicny9sE=;\n\th=References:In-Reply-To:Date:To:Subject:List-Id:List-Unsubscribe:\n\tList-Archive:List-Post:List-Help:List-Subscribe:From:Reply-To:Cc:\n\tFrom;\n\tb=SCJEn+QRhIgtvTpRJjfKsa2eZiNK9+qVvQAxsq85XTlVKisfmX8Ydl9Pf3mLRUm90\n\tQV0grGWqv+xQf+mekEKRQuFBDLU5y6JYe0JvNYTQQ1OfHop+0TyorJDptwAeDTaXKp\n\tW0sBFq9o0kDHQpk5SuwT/9NApBz57Z39CQg7zRtpH5QW5zi/9xfpdiZTV61dY9cVFu\n\ti7ifJRtLsI2S00qCUfO6BvlfQpp7yWcMffrcG+QACEYYb+jVRmLywx+MA74wqGsdrJ\n\tHp23/rKhYwntRY93lYv85O8PA3XU/JI7Zokd91x0x+BIjiOsdIb3FcZRoQdGwFSzHZ\n\tbKRdVO2Eg6iYQ==","v=1; a=rsa-sha256; c=relaxed/relaxed;\n\td=raspberrypi.com; s=google; t=1701704677; x=1702309477;\n\tdarn=lists.libcamera.org; \n\th=cc:to:subject:message-id:date:from:in-reply-to:references\n\t:mime-version:from:to:cc:subject:date:message-id:reply-to;\n\tbh=9+64aCG+IUqr3m8h3KT1I16KtVaKS1hqwuvdBweU4xE=;\n\tb=b06s5XkY4GnsqOqbJXPb12cDMVQ6YOCE5pZUZ8LgYeVid/jFea9y+Ok9wESICCWMxI\n\t9nC79wmIw2zbHjWjThN6bTSyUtWHGLMC6nB95kGOLKdO3kRUI6fBNYKujTpjRAghOTej\n\taJjdoHBR19P6ujlUlNpueKe1WbD9MlvydrJF3kj9e3HvmQe5AMHUXFYr5ZS4V7vaiHYD\n\tzZjm7DUPWfNNaA+CBenvQgb+rpeCN0/9cExVcNmPX1YprMK+Cb2A5NjQWHXiUPC4DEb2\n\t8/ewB6WdoNXVP936yeoOhLJ2Z8s1vlMZFGvOrQzAdidz6NG8DU0ZvQ6eJJOK37uxlgql\n\tJCgg=="],"Authentication-Results":"lancelot.ideasonboard.com; dkim=pass (2048-bit key; \n\tunprotected) header.d=raspberrypi.com\n\theader.i=@raspberrypi.com\n\theader.b=\"b06s5XkY\"; dkim-atps=neutral","X-Google-DKIM-Signature":"v=1; a=rsa-sha256; c=relaxed/relaxed;\n\td=1e100.net; s=20230601; t=1701704677; x=1702309477;\n\th=cc:to:subject:message-id:date:from:in-reply-to:references\n\t:mime-version:x-gm-message-state:from:to:cc:subject:date:message-id\n\t:reply-to;\n\tbh=9+64aCG+IUqr3m8h3KT1I16KtVaKS1hqwuvdBweU4xE=;\n\tb=fBtheMB+TupHOSgOtgH5gLjOfmdXQtEYB6LRCyx+GFzI7ONakUfCOqxHRcW3+67V3I\n\tAAxLZ+lSDr7LuUuGyHpg2Ar3aBUG0x7xuKMwEpBii8b3E5OWRdbJjxsC7hQ2mq2NatWq\n\tp+OtP0c6ZhZa1T848TKCFGRvBbsHwYkPpyYFgC+9O2dnHudM7TpT0mrzvPJm6wS2QKj+\n\tjYs81rq9AyjS7Yvo88FmTaA8+iM8HfYilJKQ20YtzREMG5wV7I7oIji6zWtrYi8aHtvL\n\tSklso0o7sn4FW+ctx0eW5jliCV3SHxjfkPXKZ1Fqk0FwbQesIYXOV//Dx0qdf2Z5Zqnl\n\tw+Jw==","X-Gm-Message-State":"AOJu0YzgVBdzMXR6TI+IDHSTsg7ROi08U5XDEV5Hi1FeRs6EtQhFKYBi\n\tMmaNm3K63thIJb/CsNt7pV18dpqQQiCRytferhoK9xUxthNE2YySOJ8=","X-Google-Smtp-Source":"AGHT+IGkdkv/tp6t5IToEiiSWawyNCZ09nt9TCBi7mbgC4Yfm+wkaxKl3PZoU0wiZ5AIvyo3wYenqhddyH32YaiIsWc=","X-Received":"by 2002:a05:690c:830:b0:5d7:1940:8de7 with SMTP id\n\tby16-20020a05690c083000b005d719408de7mr1565170ywb.78.1701704676727;\n\tMon, 04 Dec 2023 07:44:36 -0800 (PST)","MIME-Version":"1.0","References":"<20231204091053.22807-1-jacopo.mondi@ideasonboard.com>\n\t<20231204091053.22807-3-jacopo.mondi@ideasonboard.com>","In-Reply-To":"<20231204091053.22807-3-jacopo.mondi@ideasonboard.com>","Date":"Mon, 4 Dec 2023 15:44:21 +0000","Message-ID":"<CAPY8ntAOaU5sgg+KHaYVvboByQBXzP0OuhTDTS06F+SDHgkhDw@mail.gmail.com>","To":"Jacopo Mondi <jacopo.mondi@ideasonboard.com>","Content-Type":"text/plain; charset=\"UTF-8\"","Subject":"Re: [libcamera-devel] [PATCH v2 2/4] ipa: rpi: Provide a Camera\n\tHelper for the OV64A40","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>","From":"Dave Stevenson via libcamera-devel\n\t<libcamera-devel@lists.libcamera.org>","Reply-To":"Dave Stevenson <dave.stevenson@raspberrypi.com>","Cc":"libcamera-devel@lists.libcamera.org, lee.jackson@arducam.com","Errors-To":"libcamera-devel-bounces@lists.libcamera.org","Sender":"\"libcamera-devel\" <libcamera-devel-bounces@lists.libcamera.org>"}},{"id":28253,"web_url":"https://patchwork.libcamera.org/comment/28253/","msgid":"<oeguzovw7jxqx6irhq6vg76zevrxklbgjzjr5jopml7qvkjhud@5htx7ipieh63>","date":"2023-12-06T10:17:47","subject":"Re: [libcamera-devel] [PATCH v2 2/4] ipa: rpi: Provide a Camera\n\tHelper for the OV64A40","submitter":{"id":143,"url":"https://patchwork.libcamera.org/api/people/143/","name":"Jacopo Mondi","email":"jacopo.mondi@ideasonboard.com"},"content":"Hi Dave,\n\nOn Mon, Dec 04, 2023 at 03:44:21PM +0000, Dave Stevenson via libcamera-devel wrote:\n> Hi Jacopo\n>\n> On Mon, 4 Dec 2023 at 09:11, Jacopo Mondi via libcamera-devel\n> <libcamera-devel@lists.libcamera.org> wrote:\n> >\n> > Support the OV64A40 sensor with a camera helper to manage the gain\n> > model, light sensitivity, and control delays.\n> >\n> > Signed-off-by: Lee Jackson <lee.jackson@arducam.com>\n> > Signed-off-by: Jacopo Mondi <jacopo.mondi@ideasonboard.com>\n> > Reviewed-by: Naushir Patuck <naush@raspberrypi.com>\n> > ---\n> >  src/ipa/rpi/cam_helper/cam_helper_ov64a40.cpp | 73 +++++++++++++++++++\n> >  src/ipa/rpi/cam_helper/meson.build            |  1 +\n> >  2 files changed, 74 insertions(+)\n> >  create mode 100644 src/ipa/rpi/cam_helper/cam_helper_ov64a40.cpp\n> >\n> > diff --git a/src/ipa/rpi/cam_helper/cam_helper_ov64a40.cpp b/src/ipa/rpi/cam_helper/cam_helper_ov64a40.cpp\n> > new file mode 100644\n> > index 000000000000..041c32dd9222\n> > --- /dev/null\n> > +++ b/src/ipa/rpi/cam_helper/cam_helper_ov64a40.cpp\n> > @@ -0,0 +1,73 @@\n> > +/* SPDX-License-Identifier: BSD-2-Clause */\n> > +/*\n> > + * Copyright (C) 2021, Raspberry Pi Ltd\n> > + *\n> > + * cam_helper_ov64a40.cpp - camera information for ov64a40 sensor\n> > + */\n> > +\n> > +#include <assert.h>\n> > +\n> > +#include \"cam_helper.h\"\n> > +\n> > +using namespace RPiController;\n> > +\n> > +class CamHelperOv64a40 : public CamHelper\n> > +{\n> > +public:\n> > +       CamHelperOv64a40();\n> > +       uint32_t gainCode(double gain) const override;\n> > +       double gain(uint32_t gainCode) const override;\n> > +       void getDelays(int &exposureDelay, int &gainDelay,\n> > +                      int &vblankDelay, int &hblankDelay) const override;\n> > +       double getModeSensitivity(const CameraMode &mode) 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> Just noticing this in passing. Your driver PR has\n> #define OV64A40_EXPOSURE_MARGIN 32\n> yet this defines the difference to be 4. AIUI they are the same\n> parameter, so presumably one of them is wrong.\n\nYou're right! thanks for spotting. The correct value to use is 32,\nI'll update this one!\n\n>\n>   Dave\n>\n> > +};\n> > +\n> > +CamHelperOv64a40::CamHelperOv64a40()\n> > +       : CamHelper({}, frameIntegrationDiff)\n> > +{\n> > +}\n> > +\n> > +uint32_t CamHelperOv64a40::gainCode(double gain) const\n> > +{\n> > +       return static_cast<uint32_t>(gain * 128.0);\n> > +}\n> > +\n> > +double CamHelperOv64a40::gain(uint32_t gainCode) const\n> > +{\n> > +       return static_cast<double>(gainCode) / 128.0;\n> > +}\n> > +\n> > +void CamHelperOv64a40::getDelays(int &exposureDelay, int &gainDelay,\n> > +                                int &vblankDelay, int &hblankDelay) const\n> > +{\n> > +       /* The driver appears to behave as follows: */\n> > +       exposureDelay = 2;\n> > +       gainDelay = 2;\n> > +       vblankDelay = 2;\n> > +       hblankDelay = 2;\n> > +}\n> > +\n> > +double CamHelperOv64a40::getModeSensitivity(const CameraMode &mode) const\n> > +{\n> > +       if (mode.binX >= 2 && mode.scaleX >= 4) {\n> > +               return 4.0;\n> > +       } else if (mode.binX >= 2 && mode.scaleX >= 2) {\n> > +               return 2.0;\n> > +       } else {\n> > +               return 1.0;\n> > +       }\n> > +}\n> > +\n> > +static CamHelper *create()\n> > +{\n> > +       return new CamHelperOv64a40();\n> > +}\n> > +\n> > +static RegisterCamHelper reg(\"ov64a40\", &create);\n> > diff --git a/src/ipa/rpi/cam_helper/meson.build b/src/ipa/rpi/cam_helper/meson.build\n> > index bdf2db8eb742..7262505742f3 100644\n> > --- a/src/ipa/rpi/cam_helper/meson.build\n> > +++ b/src/ipa/rpi/cam_helper/meson.build\n> > @@ -9,6 +9,7 @@ rpi_ipa_cam_helper_sources = files([\n> >      'cam_helper_imx477.cpp',\n> >      'cam_helper_imx519.cpp',\n> >      'cam_helper_imx708.cpp',\n> > +    'cam_helper_ov64a40.cpp',\n> >      'cam_helper_ov9281.cpp',\n> >      'md_parser_smia.cpp',\n> >  ])\n> > --\n> > 2.41.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 645BAC31E9\n\tfor <parsemail@patchwork.libcamera.org>;\n\tWed,  6 Dec 2023 10:17:53 +0000 (UTC)","from lancelot.ideasonboard.com (localhost [IPv6:::1])\n\tby lancelot.ideasonboard.com (Postfix) with ESMTP id C2573629CD;\n\tWed,  6 Dec 2023 11:17:52 +0100 (CET)","from perceval.ideasonboard.com (perceval.ideasonboard.com\n\t[IPv6:2001:4b98:dc2:55:216:3eff:fef7:d647])\n\tby lancelot.ideasonboard.com (Postfix) with ESMTPS id EB65861D9D\n\tfor <libcamera-devel@lists.libcamera.org>;\n\tWed,  6 Dec 2023 11:17:50 +0100 (CET)","from ideasonboard.com (93-61-96-190.ip145.fastwebnet.it\n\t[93.61.96.190])\n\tby perceval.ideasonboard.com (Postfix) with ESMTPSA id 0717BE45;\n\tWed,  6 Dec 2023 11:17:09 +0100 (CET)"],"DKIM-Signature":["v=1; a=rsa-sha256; c=relaxed/simple; d=libcamera.org;\n\ts=mail; t=1701857872;\n\tbh=k7KhfRb0Yiy+xvoyRJQWT9wbiiU3PLldh3mRCMLsrZc=;\n\th=Date:To:References:In-Reply-To:Subject:List-Id:List-Unsubscribe:\n\tList-Archive:List-Post:List-Help:List-Subscribe:From:Reply-To:Cc:\n\tFrom;\n\tb=utopwxtlP/qP1zT6rerm5LqjJDC/olNLxFHQohCH2oIWNCt9n1u2g7aAQjlpMRg5Q\n\tiE/gzTPsdrCQiOQIu+2yeDYpL9t1dboopJ+x4oz1iVEj7tjFZQTLVQ7zpAxK1uRqnc\n\t1KrHv70L0sgGhxBL7ZlomPs7vF8NgDE6zAjHzJebQ2Fr+RYKNsxdKt+TOWz1WsSDq/\n\tM7T6NhXHF7f5Nr2qkFbXBCvt515FzWSoD46Wqd7BYMXIxmgoBzvO5fjKc78tmxakg7\n\t9NZ0sjZ13TofGExM4KWKAki7EuuZIdxY+BRd1ah59FNBhTHbOkDw11Iqxe/wrhvs8o\n\t6gDulsjG4d6gg==","v=1; a=rsa-sha256; c=relaxed/simple; d=ideasonboard.com;\n\ts=mail; t=1701857830;\n\tbh=k7KhfRb0Yiy+xvoyRJQWT9wbiiU3PLldh3mRCMLsrZc=;\n\th=Date:From:To:Cc:Subject:References:In-Reply-To:From;\n\tb=i9LNDyouPvnKrd3akvBl6k0xE40e+kChAox/a2eBZ2773xULXx6Q/8DMovvp83Lvd\n\teo9YD6n8UQ8NlMS2ZMdKv1XSQeNzTvWFJFCLFg3JBeFSy+dWT6zEZoIkVVspzhD5F0\n\tslfe9DoG8M4ZN4cevZsv4VQ+sprG/MpI6fVjMhNc="],"Authentication-Results":"lancelot.ideasonboard.com; dkim=pass (1024-bit key; \n\tunprotected) header.d=ideasonboard.com\n\theader.i=@ideasonboard.com\n\theader.b=\"i9LNDyou\"; dkim-atps=neutral","Date":"Wed, 6 Dec 2023 11:17:47 +0100","To":"Dave Stevenson <dave.stevenson@raspberrypi.com>","Message-ID":"<oeguzovw7jxqx6irhq6vg76zevrxklbgjzjr5jopml7qvkjhud@5htx7ipieh63>","References":"<20231204091053.22807-1-jacopo.mondi@ideasonboard.com>\n\t<20231204091053.22807-3-jacopo.mondi@ideasonboard.com>\n\t<CAPY8ntAOaU5sgg+KHaYVvboByQBXzP0OuhTDTS06F+SDHgkhDw@mail.gmail.com>","MIME-Version":"1.0","Content-Type":"text/plain; charset=utf-8","Content-Disposition":"inline","In-Reply-To":"<CAPY8ntAOaU5sgg+KHaYVvboByQBXzP0OuhTDTS06F+SDHgkhDw@mail.gmail.com>","Subject":"Re: [libcamera-devel] [PATCH v2 2/4] ipa: rpi: Provide a Camera\n\tHelper for the OV64A40","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>","From":"Jacopo Mondi via libcamera-devel <libcamera-devel@lists.libcamera.org>","Reply-To":"Jacopo Mondi <jacopo.mondi@ideasonboard.com>","Cc":"Jacopo Mondi <jacopo.mondi@ideasonboard.com>,\n\tlibcamera-devel@lists.libcamera.org, lee.jackson@arducam.com","Errors-To":"libcamera-devel-bounces@lists.libcamera.org","Sender":"\"libcamera-devel\" <libcamera-devel-bounces@lists.libcamera.org>"}}]