[{"id":38539,"web_url":"https://patchwork.libcamera.org/comment/38539/","msgid":"<85tstla58l.fsf@mzamazal-thinkpadp1gen7.tpbc.csb>","date":"2026-04-08T14:36:42","subject":"Re: [PATCH 09/13] libcamera: vector: Convertor Constructor","submitter":{"id":177,"url":"https://patchwork.libcamera.org/api/people/177/","name":"Milan Zamazal","email":"mzamazal@redhat.com"},"content":"Hi Kieran,\n\nKieran Bingham <kieran.bingham@ideasonboard.com> writes:\n\n> Extend the Vector class with a constructor to support casting to the\n> storage type when the given parameters are compatible.\n>\n> Signed-off-by: Kieran Bingham <kieran.bingham@ideasonboard.com>\n> ---\n>  include/libcamera/internal/vector.h | 8 ++++++++\n>  src/libcamera/vector.cpp            | 7 +++++++\n>  2 files changed, 15 insertions(+)\n>\n> diff --git a/include/libcamera/internal/vector.h b/include/libcamera/internal/vector.h\n> index 16b6aef0b38f4b094d83449b5cdb1ba48b17c2bf..d29547f170e37c15f85e46abca82f89c8995115d 100644\n> --- a/include/libcamera/internal/vector.h\n> +++ b/include/libcamera/internal/vector.h\n> @@ -51,6 +51,14 @@ public:\n>  \t\tstd::copy(data.begin(), data.end(), data_.begin());\n>  \t}\n>  \n> +\ttemplate<typename U, std::enable_if_t<std::is_arithmetic_v<U> &&\n> +\t\t\t\t\t      !std::is_same_v<T, U>> * = nullptr>\n> +\tconstexpr Vector(const Vector<U, Rows> &other)\n> +\t{\n> +\t\tfor (unsigned int i = 0; i < Rows; i++)\n> +\t\t\tdata_[i] = static_cast<T>(other[i]);\n> +\t}\n> +\n>  \tconst T &operator[](size_t i) const\n>  \t{\n>  \t\tASSERT(i < data_.size());\n> diff --git a/src/libcamera/vector.cpp b/src/libcamera/vector.cpp\n> index 4dad1b9001c5df97f71031724729563cae0962c3..397e370fd023caef069095dc5abebe2d6d76848a 100644\n> --- a/src/libcamera/vector.cpp\n> +++ b/src/libcamera/vector.cpp\n> @@ -52,6 +52,13 @@ LOG_DEFINE_CATEGORY(Vector)\n>   * The size of \\a data must be equal to the dimension size Rows of the vector.\n>   */\n>  \n> +/**\n> + * \\fn Vector::Vector(const Vector<U, Rows> &other)\n> + * \\brief Construct a vector by converting another vector's element type\n> + * \\tparam U The source vector element type\n> + * \\param[in] other The vector to convert from\n> + */\n\nThis smells, it might be error prone (I don't have good experience with\nC++ implicit numeric conversions).  How about changing the type of gains\nto double everywhere, this diff against the whole series compiles for\nme:\n> +\n>  /**\n>   * \\fn T Vector::operator[](size_t i) const\n>   * \\brief Index to an element in the vector","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 47C5CBDCBD\n\tfor <parsemail@patchwork.libcamera.org>;\n\tWed,  8 Apr 2026 14:36:53 +0000 (UTC)","from lancelot.ideasonboard.com (localhost [IPv6:::1])\n\tby lancelot.ideasonboard.com (Postfix) with ESMTP id 5225F62DEF;\n\tWed,  8 Apr 2026 16:36:52 +0200 (CEST)","from us-smtp-delivery-124.mimecast.com\n\t(us-smtp-delivery-124.mimecast.com [170.10.129.124])\n\tby lancelot.ideasonboard.com (Postfix) with ESMTPS id 8F29B62CE6\n\tfor <libcamera-devel@lists.libcamera.org>;\n\tWed,  8 Apr 2026 16:36:50 +0200 (CEST)","from mail-wr1-f70.google.com (mail-wr1-f70.google.com\n\t[209.85.221.70]) by relay.mimecast.com with ESMTP with STARTTLS\n\t(version=TLSv1.3, cipher=TLS_AES_256_GCM_SHA384) id\n\tus-mta-247-YcZEZHWzOymCvwkDXte7uw-1; Wed, 08 Apr 2026 10:36:46 -0400","by mail-wr1-f70.google.com with SMTP id\n\tffacd0b85a97d-43d103e46c3so4457236f8f.3\n\tfor <libcamera-devel@lists.libcamera.org>;\n\tWed, 08 Apr 2026 07:36:46 -0700 (PDT)","from mzamazal-thinkpadp1gen7.tpbc.csb\n\t(ip-77-48-47-2.net.vodafone.cz. [77.48.47.2])\n\tby smtp.gmail.com with ESMTPSA id\n\tffacd0b85a97d-43d1e4e1c27sm56554007f8f.26.2026.04.08.07.36.43\n\t(version=TLS1_3 cipher=TLS_AES_256_GCM_SHA384 bits=256/256);\n\tWed, 08 Apr 2026 07:36:43 -0700 (PDT)"],"Authentication-Results":"lancelot.ideasonboard.com; dkim=pass (1024-bit key;\n\tunprotected) header.d=redhat.com header.i=@redhat.com\n\theader.b=\"NS2YvPTI\"; dkim-atps=neutral","DKIM-Signature":"v=1; a=rsa-sha256; c=relaxed/relaxed; d=redhat.com;\n\ts=mimecast20190719; t=1775659009;\n\th=from:from:reply-to:subject:subject:date:date:message-id:message-id:\n\tto:to:cc:cc:mime-version:mime-version:content-type:content-type:\n\tin-reply-to:in-reply-to:references:references;\n\tbh=2zmqxotu6yDiln3g0F+NsGLELFX9XU9b6Ppm5PgN26g=;\n\tb=NS2YvPTIBRnCPpIyku23ge2QZI9xej29MWJpW5mLna+1Pc4kyJT/iTbjb8RPNI5YeT5zbH\n\tCwveZBUD9/Ciqvuf+EEsc2sO+iRoWtiyqDuEk/LjlwDu1L5dlqEFwfuRXzKwgFmTexBOh5\n\tWzGr7UIDbDDV8bx7wmK4txiaIe+qlUY=","X-MC-Unique":"YcZEZHWzOymCvwkDXte7uw-1","X-Mimecast-MFC-AGG-ID":"YcZEZHWzOymCvwkDXte7uw_1775659005","X-Google-DKIM-Signature":"v=1; a=rsa-sha256; c=relaxed/relaxed;\n\td=1e100.net; s=20251104; t=1775659005; x=1776263805;\n\th=mime-version:user-agent:message-id:date:references:in-reply-to\n\t:subject:cc:to:from:x-gm-gg:x-gm-message-state:from:to:cc:subject\n\t:date:message-id:reply-to;\n\tbh=2zmqxotu6yDiln3g0F+NsGLELFX9XU9b6Ppm5PgN26g=;\n\tb=VmZ1OGUgpYwum/mGGeh6z3f+mYJC1ArWxLE7DHZtQx/Z23TMKWvP7+DRxU3KV7B5HW\n\tsc+UQtgSdby42oTWFJysiczOCYHs0U3KImkpYsiaUa0hcjW3yOQ+mfvco/6W8hzszo43\n\tEg5jG5EyNX8NvTdo8tLrc2Pi4xnsizc51bo3igXlm6hGAszfUdDSzl0wIQlYgDdueN0Q\n\tVQpmWNNo0RozXwUOsxJYG1Iw9QE5WaOvjIcyHTZB6T7dE7LcPCfcrdLdnNSIC15Rc2tb\n\taYAlgvU5vcp+bWKMk1UxTCaKUvTNdjXXlta6XL24GS6E7lxV2OehD+wnXkANkMXckymv\n\tlIoA==","X-Gm-Message-State":"AOJu0Yya3baWVUsysEz+LW9WCGGxK8Wx04inuVatriUgP0avTJisBNlS\n\teO/itn4jSQM20WAZk40UTxZfrvgkt3ltWjMuvo3b4u5rvodmg7G2PwWxnZBd8f58c0r3x5j380d\n\tpz+FCZXwXbfCvCWmsVWc4qfqv+uoV+ULScmBYk7KDWUlhLUlNC67IV7IEvuhXgophagTexqphw0\n\tPbypYUKB/ZBZtysCfwTl4GE2tJY+u48jx0sjPzBV1sr0nWuaD+HJdzXLKt7hI=","X-Gm-Gg":"AeBDiet0Ip103xDdycvW5X8xEHi1ZEFDWAoR5zur66zIsm4RqXhZ1r+mg/pO1Ftm0p0\n\t2Zfp4JJ2JcAuSH333ls4L2/P+nx+X7OoneW+Yaxeq3jDg4SUL8oHwoIH1mGfbnvZlv32Ok0991I\n\tfo9Nz+P9nCJP+RzNE4HdwCL+qChZvyYBgxhvxCgz4ENWHtKschw9ul3u+RMu8g6NRsd/StXCXcq\n\tVBgGz/rQftL3Ab37FfYFXLq/dCPnSIpoYjSUHwpKx7xI5okJbzXThKY3zyFSMT9dSROo+9RfY4a\n\tyrPd5Duo3HyM+skgMirVGTGfkLVMKZMqLCi63VBs1V9QWZ3sGaXDUZ8j5ycWll/IEj9XXLaF+A8\n\tT0qPa4TzvylLgEc7nXGrsTBaKohckSi/iuIn8D/1o5H2BXkVSyVwLtC2Swiehhz/YTz9kTEpLnh\n\tE=","X-Received":["by 2002:a05:6000:1842:b0:43c:f3c9:3815 with SMTP id\n\tffacd0b85a97d-43d29277055mr30734307f8f.3.1775659004901; \n\tWed, 08 Apr 2026 07:36:44 -0700 (PDT)","by 2002:a05:6000:1842:b0:43c:f3c9:3815 with SMTP id\n\tffacd0b85a97d-43d29277055mr30734256f8f.3.1775659004313; \n\tWed, 08 Apr 2026 07:36:44 -0700 (PDT)"],"From":"Milan Zamazal <mzamazal@redhat.com>","To":"Kieran Bingham <kieran.bingham@ideasonboard.com>","Cc":"libcamera-devel@lists.libcamera.org","Subject":"Re: [PATCH 09/13] libcamera: vector: Convertor Constructor","In-Reply-To":"<20260407-kbingham-awb-split-v1-9-a39af3f4dc20@ideasonboard.com>\n\t(Kieran Bingham's message of \"Tue, 07 Apr 2026 23:01:12 +0100\")","References":"<20260407-kbingham-awb-split-v1-0-a39af3f4dc20@ideasonboard.com>\n\t<20260407-kbingham-awb-split-v1-9-a39af3f4dc20@ideasonboard.com>","Date":"Wed, 08 Apr 2026 16:36:42 +0200","Message-ID":"<85tstla58l.fsf@mzamazal-thinkpadp1gen7.tpbc.csb>","User-Agent":"Gnus/5.13 (Gnus v5.13)","MIME-Version":"1.0","X-Mimecast-Spam-Score":"0","X-Mimecast-MFC-PROC-ID":"704oigRIvr6lLuG7nmACvD7DjW1CjNKUf6ZO6EcwrLU_1775659005","X-Mimecast-Originator":"redhat.com","Content-Type":"multipart/mixed; boundary=\"=-=-=\"","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>"}},{"id":38545,"web_url":"https://patchwork.libcamera.org/comment/38545/","msgid":"<177566960305.575056.17803817350490259687@ping.linuxembedded.co.uk>","date":"2026-04-08T17:33:23","subject":"Re: [PATCH 09/13] libcamera: vector: Convertor Constructor","submitter":{"id":4,"url":"https://patchwork.libcamera.org/api/people/4/","name":"Kieran Bingham","email":"kieran.bingham@ideasonboard.com"},"content":"Quoting Milan Zamazal (2026-04-08 15:36:42)\n> Hi Kieran,\n> \n> Kieran Bingham <kieran.bingham@ideasonboard.com> writes:\n> \n> > Extend the Vector class with a constructor to support casting to the\n> > storage type when the given parameters are compatible.\n> >\n> > Signed-off-by: Kieran Bingham <kieran.bingham@ideasonboard.com>\n> > ---\n> >  include/libcamera/internal/vector.h | 8 ++++++++\n> >  src/libcamera/vector.cpp            | 7 +++++++\n> >  2 files changed, 15 insertions(+)\n> >\n> > diff --git a/include/libcamera/internal/vector.h b/include/libcamera/internal/vector.h\n> > index 16b6aef0b38f4b094d83449b5cdb1ba48b17c2bf..d29547f170e37c15f85e46abca82f89c8995115d 100644\n> > --- a/include/libcamera/internal/vector.h\n> > +++ b/include/libcamera/internal/vector.h\n> > @@ -51,6 +51,14 @@ public:\n> >               std::copy(data.begin(), data.end(), data_.begin());\n> >       }\n> >  \n> > +     template<typename U, std::enable_if_t<std::is_arithmetic_v<U> &&\n> > +                                           !std::is_same_v<T, U>> * = nullptr>\n> > +     constexpr Vector(const Vector<U, Rows> &other)\n> > +     {\n> > +             for (unsigned int i = 0; i < Rows; i++)\n> > +                     data_[i] = static_cast<T>(other[i]);\n> > +     }\n> > +\n> >       const T &operator[](size_t i) const\n> >       {\n> >               ASSERT(i < data_.size());\n> > diff --git a/src/libcamera/vector.cpp b/src/libcamera/vector.cpp\n> > index 4dad1b9001c5df97f71031724729563cae0962c3..397e370fd023caef069095dc5abebe2d6d76848a 100644\n> > --- a/src/libcamera/vector.cpp\n> > +++ b/src/libcamera/vector.cpp\n> > @@ -52,6 +52,13 @@ LOG_DEFINE_CATEGORY(Vector)\n> >   * The size of \\a data must be equal to the dimension size Rows of the vector.\n> >   */\n> >  \n> > +/**\n> > + * \\fn Vector::Vector(const Vector<U, Rows> &other)\n> > + * \\brief Construct a vector by converting another vector's element type\n> > + * \\tparam U The source vector element type\n> > + * \\param[in] other The vector to convert from\n> > + */\n> \n> This smells, it might be error prone (I don't have good experience with\n\n:-) Maybe indeed, that's why I wanted to get this series out already to\nask for opinions.\n\n> C++ implicit numeric conversions).  How about changing the type of gains\n> to double everywhere, this diff against the whole series compiles for\n> me:\n\nWell - all our controls are floats. So should we instead change to\nfloats everywhere? What really is the right precision!\n\nBut yeah - this patch is here to try to unblock what I thought were lots\nof horrible explicit casts on double vectors to float vectors...\n\n--\nKieran","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 9AB7CBDCBD\n\tfor <parsemail@patchwork.libcamera.org>;\n\tWed,  8 Apr 2026 17:33:28 +0000 (UTC)","from lancelot.ideasonboard.com (localhost [IPv6:::1])\n\tby lancelot.ideasonboard.com (Postfix) with ESMTP id B74D262DFE;\n\tWed,  8 Apr 2026 19:33:27 +0200 (CEST)","from perceval.ideasonboard.com (perceval.ideasonboard.com\n\t[213.167.242.64])\n\tby lancelot.ideasonboard.com (Postfix) with ESMTPS id 2EB2762CE6\n\tfor <libcamera-devel@lists.libcamera.org>;\n\tWed,  8 Apr 2026 19:33:26 +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 C856B2D5;\n\tWed,  8 Apr 2026 19:31:57 +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=\"V3/z66tY\"; dkim-atps=neutral","DKIM-Signature":"v=1; a=rsa-sha256; c=relaxed/simple; d=ideasonboard.com;\n\ts=mail; t=1775669517;\n\tbh=p7iGSxn7eZs9ZiMasYlCzlK1yOkroPJNDUTbhxNPwHU=;\n\th=In-Reply-To:References:Subject:From:Cc:To:Date:From;\n\tb=V3/z66tYtqelbsws2/uGQef0ryQ5ujPOcKXWVu18EAxkPF7YF3lnPR8nD6uvlpxVQ\n\t0ntEHoO8aroVZWmc2jXNiGE3sP77YNa/rwbBDml1wov0BHUZvbPSMMacOphOgS6Ifw\n\t+ntM8Y6JETVwVQwgsV0kxgMp/IBDjy1sWxabDNO4=","Content-Type":"text/plain; charset=\"utf-8\"","MIME-Version":"1.0","Content-Transfer-Encoding":"quoted-printable","In-Reply-To":"<85tstla58l.fsf@mzamazal-thinkpadp1gen7.tpbc.csb>","References":"<20260407-kbingham-awb-split-v1-0-a39af3f4dc20@ideasonboard.com>\n\t<20260407-kbingham-awb-split-v1-9-a39af3f4dc20@ideasonboard.com>\n\t<85tstla58l.fsf@mzamazal-thinkpadp1gen7.tpbc.csb>","Subject":"Re: [PATCH 09/13] libcamera: vector: Convertor Constructor","From":"Kieran Bingham <kieran.bingham@ideasonboard.com>","Cc":"libcamera-devel@lists.libcamera.org","To":"Milan Zamazal <mzamazal@redhat.com>","Date":"Wed, 08 Apr 2026 18:33:23 +0100","Message-ID":"<177566960305.575056.17803817350490259687@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>"}},{"id":38556,"web_url":"https://patchwork.libcamera.org/comment/38556/","msgid":"<20260408212125.GJ1965119@killaraus.ideasonboard.com>","date":"2026-04-08T21:21:25","subject":"Re: [PATCH 09/13] libcamera: vector: Convertor Constructor","submitter":{"id":2,"url":"https://patchwork.libcamera.org/api/people/2/","name":"Laurent Pinchart","email":"laurent.pinchart@ideasonboard.com"},"content":"On Wed, Apr 08, 2026 at 06:33:23PM +0100, Kieran Bingham wrote:\n> Quoting Milan Zamazal (2026-04-08 15:36:42)\n> > Kieran Bingham <kieran.bingham@ideasonboard.com> writes:\n> > \n> > > Extend the Vector class with a constructor to support casting to the\n> > > storage type when the given parameters are compatible.\n> > >\n> > > Signed-off-by: Kieran Bingham <kieran.bingham@ideasonboard.com>\n> > > ---\n> > >  include/libcamera/internal/vector.h | 8 ++++++++\n> > >  src/libcamera/vector.cpp            | 7 +++++++\n> > >  2 files changed, 15 insertions(+)\n> > >\n> > > diff --git a/include/libcamera/internal/vector.h b/include/libcamera/internal/vector.h\n> > > index 16b6aef0b38f4b094d83449b5cdb1ba48b17c2bf..d29547f170e37c15f85e46abca82f89c8995115d 100644\n> > > --- a/include/libcamera/internal/vector.h\n> > > +++ b/include/libcamera/internal/vector.h\n> > > @@ -51,6 +51,14 @@ public:\n> > >               std::copy(data.begin(), data.end(), data_.begin());\n> > >       }\n> > >  \n> > > +     template<typename U, std::enable_if_t<std::is_arithmetic_v<U> &&\n> > > +                                           !std::is_same_v<T, U>> * = nullptr>\n> > > +     constexpr Vector(const Vector<U, Rows> &other)\n> > > +     {\n> > > +             for (unsigned int i = 0; i < Rows; i++)\n> > > +                     data_[i] = static_cast<T>(other[i]);\n> > > +     }\n> > > +\n> > >       const T &operator[](size_t i) const\n> > >       {\n> > >               ASSERT(i < data_.size());\n> > > diff --git a/src/libcamera/vector.cpp b/src/libcamera/vector.cpp\n> > > index 4dad1b9001c5df97f71031724729563cae0962c3..397e370fd023caef069095dc5abebe2d6d76848a 100644\n> > > --- a/src/libcamera/vector.cpp\n> > > +++ b/src/libcamera/vector.cpp\n> > > @@ -52,6 +52,13 @@ LOG_DEFINE_CATEGORY(Vector)\n> > >   * The size of \\a data must be equal to the dimension size Rows of the vector.\n> > >   */\n> > >  \n> > > +/**\n> > > + * \\fn Vector::Vector(const Vector<U, Rows> &other)\n> > > + * \\brief Construct a vector by converting another vector's element type\n> > > + * \\tparam U The source vector element type\n> > > + * \\param[in] other The vector to convert from\n> > > + */\n> > \n> > This smells, it might be error prone (I don't have good experience with\n> \n> :-) Maybe indeed, that's why I wanted to get this series out already to\n> ask for opinions.\n> \n> > C++ implicit numeric conversions).  How about changing the type of gains\n> > to double everywhere, this diff against the whole series compiles for\n> > me:\n> \n> Well - all our controls are floats. So should we instead change to\n> floats everywhere? What really is the right precision!\n\nIf there's an actual need to mix float and double, then we shouldn't\nenable implicit conversion as every conversion would need to be\ncarefully considered. If there's no need to mix them, then let's pick\none.\n\nI'd like Barnabás' opinion here too.\n\n> But yeah - this patch is here to try to unblock what I thought were lots\n> of horrible explicit casts on double vectors to float vectors...","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 D3F48BDCBD\n\tfor <parsemail@patchwork.libcamera.org>;\n\tWed,  8 Apr 2026 21:21:29 +0000 (UTC)","from lancelot.ideasonboard.com (localhost [IPv6:::1])\n\tby lancelot.ideasonboard.com (Postfix) with ESMTP id 29D9A62E3F;\n\tWed,  8 Apr 2026 23:21:29 +0200 (CEST)","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 738A362E2C\n\tfor <libcamera-devel@lists.libcamera.org>;\n\tWed,  8 Apr 2026 23:21:27 +0200 (CEST)","from killaraus.ideasonboard.com\n\t(2001-14ba-703d-e500--2a1.rev.dnainternet.fi\n\t[IPv6:2001:14ba:703d:e500::2a1])\n\tby perceval.ideasonboard.com (Postfix) with UTF8SMTPSA id B5D62241;\n\tWed,  8 Apr 2026 23:19:58 +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=\"fZQu8NZ6\"; dkim-atps=neutral","DKIM-Signature":"v=1; a=rsa-sha256; c=relaxed/simple; d=ideasonboard.com;\n\ts=mail; t=1775683198;\n\tbh=/jy4Vkh40F9hR2p7LAQU+BEs+JB5L1uUBAVdN+KKGDg=;\n\th=Date:From:To:Cc:Subject:References:In-Reply-To:From;\n\tb=fZQu8NZ6sJ9JQxApEoQ2o+NSqF4A7tf6cQrQRPXFWGFAcZd8Rl/8ApJ7a2Oqmve89\n\t4KNDpyzfWX/jVjAV6OPsLnwncDQWm2xQzO6Y5Bxp0hUMGbP0L9RQ+pR3R2brw5ONuT\n\tjixj73X1bfGOhVatqd3N9rZqWlAbRkKQsFsZf0xE=","Date":"Thu, 9 Apr 2026 00:21:25 +0300","From":"Laurent Pinchart <laurent.pinchart@ideasonboard.com>","To":"Kieran Bingham <kieran.bingham@ideasonboard.com>","Cc":"Milan Zamazal <mzamazal@redhat.com>, libcamera-devel@lists.libcamera.org,\n\t=?utf-8?q?Barnab=C3=A1s_P=C5=91cze?= <barnabas.pocze@ideasonboard.com>","Subject":"Re: [PATCH 09/13] libcamera: vector: Convertor Constructor","Message-ID":"<20260408212125.GJ1965119@killaraus.ideasonboard.com>","References":"<20260407-kbingham-awb-split-v1-0-a39af3f4dc20@ideasonboard.com>\n\t<20260407-kbingham-awb-split-v1-9-a39af3f4dc20@ideasonboard.com>\n\t<85tstla58l.fsf@mzamazal-thinkpadp1gen7.tpbc.csb>\n\t<177566960305.575056.17803817350490259687@ping.linuxembedded.co.uk>","MIME-Version":"1.0","Content-Type":"text/plain; charset=utf-8","Content-Disposition":"inline","Content-Transfer-Encoding":"8bit","In-Reply-To":"<177566960305.575056.17803817350490259687@ping.linuxembedded.co.uk>","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>"}},{"id":38559,"web_url":"https://patchwork.libcamera.org/comment/38559/","msgid":"<8534159rpa.fsf@mzamazal-thinkpadp1gen7.tpbc.csb>","date":"2026-04-08T19:29:05","subject":"Re: [PATCH 09/13] libcamera: vector: Convertor Constructor","submitter":{"id":177,"url":"https://patchwork.libcamera.org/api/people/177/","name":"Milan Zamazal","email":"mzamazal@redhat.com"},"content":"Kieran Bingham <kieran.bingham@ideasonboard.com> writes:\n\n> Quoting Milan Zamazal (2026-04-08 15:36:42)\n>> Hi Kieran,\n>> \n>\n>> Kieran Bingham <kieran.bingham@ideasonboard.com> writes:\n>> \n>> > Extend the Vector class with a constructor to support casting to the\n>> > storage type when the given parameters are compatible.\n>> >\n>> > Signed-off-by: Kieran Bingham <kieran.bingham@ideasonboard.com>\n>> > ---\n>> >  include/libcamera/internal/vector.h | 8 ++++++++\n>> >  src/libcamera/vector.cpp            | 7 +++++++\n>> >  2 files changed, 15 insertions(+)\n>> >\n>> > diff --git a/include/libcamera/internal/vector.h b/include/libcamera/internal/vector.h\n>> > index 16b6aef0b38f4b094d83449b5cdb1ba48b17c2bf..d29547f170e37c15f85e46abca82f89c8995115d 100644\n>> > --- a/include/libcamera/internal/vector.h\n>> > +++ b/include/libcamera/internal/vector.h\n>> > @@ -51,6 +51,14 @@ public:\n>> >               std::copy(data.begin(), data.end(), data_.begin());\n>> >       }\n>> >  \n>> > +     template<typename U, std::enable_if_t<std::is_arithmetic_v<U> &&\n>> > +                                           !std::is_same_v<T, U>> * = nullptr>\n>> > +     constexpr Vector(const Vector<U, Rows> &other)\n>> > +     {\n>> > +             for (unsigned int i = 0; i < Rows; i++)\n>> > +                     data_[i] = static_cast<T>(other[i]);\n>> > +     }\n>> > +\n>> >       const T &operator[](size_t i) const\n>> >       {\n>> >               ASSERT(i < data_.size());\n>> > diff --git a/src/libcamera/vector.cpp b/src/libcamera/vector.cpp\n>> > index 4dad1b9001c5df97f71031724729563cae0962c3..397e370fd023caef069095dc5abebe2d6d76848a 100644\n>> > --- a/src/libcamera/vector.cpp\n>> > +++ b/src/libcamera/vector.cpp\n>> > @@ -52,6 +52,13 @@ LOG_DEFINE_CATEGORY(Vector)\n>> >   * The size of \\a data must be equal to the dimension size Rows of the vector.\n>> >   */\n>> >  \n>> > +/**\n>> > + * \\fn Vector::Vector(const Vector<U, Rows> &other)\n>> > + * \\brief Construct a vector by converting another vector's element type\n>> > + * \\tparam U The source vector element type\n>> > + * \\param[in] other The vector to convert from\n>> > + */\n>> \n>> This smells, it might be error prone (I don't have good experience with\n>\n> :-) Maybe indeed, that's why I wanted to get this series out already to\n> ask for opinions.\n>\n>> C++ implicit numeric conversions).  How about changing the type of gains\n>> to double everywhere, this diff against the whole series compiles for\n>> me:\n>\n> Well - all our controls are floats. So should we instead change to\n> floats everywhere? What really is the right precision!\n\nThis is a question I've been asking myself all the time :-).  For the\nsoftware ISP part, I don't think it matters -- float is enough and\ndouble doesn't harm.  In the end, GPU ISP uses its own precision and CPU\nISP uses precomputed tables.  No idea about the other pipelines.\n\nBut it doesn't make much sense to use different types for AWB in libipa\nand in the pipelines.  I don't know whichever one is \"right\" but I think\nit should be the same in all the places.\n\n> But yeah - this patch is here to try to unblock what I thought were lots\n> of horrible explicit casts on double vectors to float vectors...\n>\n> --\n> Kieran","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 96B44BDCBD\n\tfor <parsemail@patchwork.libcamera.org>;\n\tThu,  9 Apr 2026 00:56:07 +0000 (UTC)","from lancelot.ideasonboard.com (localhost [IPv6:::1])\n\tby lancelot.ideasonboard.com (Postfix) with ESMTP id AB17462E3E;\n\tThu,  9 Apr 2026 02:56:06 +0200 (CEST)","from us-smtp-delivery-124.mimecast.com\n\t(us-smtp-delivery-124.mimecast.com [170.10.129.124])\n\tby lancelot.ideasonboard.com (Postfix) with ESMTPS id 9C1A762846\n\tfor <libcamera-devel@lists.libcamera.org>;\n\tThu,  9 Apr 2026 02:56:05 +0200 (CEST)","from mail-wr1-f70.google.com (mail-wr1-f70.google.com\n\t[209.85.221.70]) by relay.mimecast.com with ESMTP with STARTTLS\n\t(version=TLSv1.3, cipher=TLS_AES_256_GCM_SHA384) id\n\tus-mta-101-WN4_dfm1MFqDZjKoYK7ZKw-1; Wed, 08 Apr 2026 15:29:09 -0400","by mail-wr1-f70.google.com with SMTP id\n\tffacd0b85a97d-43d1dea12aaso52544f8f.1\n\tfor <libcamera-devel@lists.libcamera.org>;\n\tWed, 08 Apr 2026 12:29:09 -0700 (PDT)","from mzamazal-thinkpadp1gen7.tpbc.csb\n\t(ip-77-48-47-2.net.vodafone.cz. [77.48.47.2])\n\tby smtp.gmail.com with ESMTPSA id\n\tffacd0b85a97d-43d1e2c5419sm71344688f8f.11.2026.04.08.12.29.06\n\t(version=TLS1_3 cipher=TLS_AES_256_GCM_SHA384 bits=256/256);\n\tWed, 08 Apr 2026 12:29:06 -0700 (PDT)"],"Authentication-Results":"lancelot.ideasonboard.com; dkim=pass (1024-bit key;\n\tunprotected) header.d=redhat.com header.i=@redhat.com\n\theader.b=\"hcfBU4B5\"; dkim-atps=neutral","DKIM-Signature":"v=1; a=rsa-sha256; c=relaxed/relaxed; d=redhat.com;\n\ts=mimecast20190719; t=1775696164;\n\th=from:from:reply-to:subject:subject:date:date:message-id:message-id:\n\tto:to:cc:cc:mime-version:mime-version:content-type:content-type:\n\tin-reply-to:in-reply-to:references:references;\n\tbh=MdAKOSXpzQO0GOAiJliyRISsQAwH4F70tc1fIFVQo0M=;\n\tb=hcfBU4B5Hw+nZg4R7rUZYq+gBE6Y7puiF10laAFblsz9Y8mkAJyUB3LczehL87/3g9urKy\n\tILJyOJ68674CYAmqnGzqBd3se/mkb0XGeTnB+MyjHMjUzzsnGchrQjYuGaGuPXlsjJbr1G\n\tJeWatjvLzfcVe0M9OMeGXPh5Xrz7xNE=","X-MC-Unique":"WN4_dfm1MFqDZjKoYK7ZKw-1","X-Mimecast-MFC-AGG-ID":"WN4_dfm1MFqDZjKoYK7ZKw_1775676548","X-Google-DKIM-Signature":"v=1; a=rsa-sha256; c=relaxed/relaxed;\n\td=1e100.net; s=20251104; t=1775676547; x=1776281347;\n\th=mime-version:user-agent:message-id:date:references:in-reply-to\n\t:subject:cc:to:from:x-gm-gg:x-gm-message-state:from:to:cc:subject\n\t:date:message-id:reply-to;\n\tbh=MdAKOSXpzQO0GOAiJliyRISsQAwH4F70tc1fIFVQo0M=;\n\tb=stghD4YgMwDXI7E7ZYuYvvRIwJFhfZ/VmH7fVP+SXeoFmncSap/Y5O8UY6G/C5vLqG\n\tb/e2f2CixECiQTe3/yB9CueG7q/9GBIv+vqCgEjEuRKdIOgSqNdlkuOUo3Hpg/OAfmn2\n\tzLPYaQUT0tKGWHDQWAXleJFiAIzooSsRkyz/a6w+5A/nXeadB0+spDnxCYnjuulK1Bnu\n\t0+/W7gZu9dKRQCXRUsJABxQ6qKz7kOqpYc1nsW8oEFzrskVgvqKWlQ4uK0UbUezHNXEK\n\tMX9aKawERFlAqeUVgtuR1cjIS9lQUyHBa4b3IIX1GQHHFDNLlC6TytoKkXvLWTdgAtfc\n\tOkiQ==","X-Gm-Message-State":"AOJu0Yx4cIJChcCi6AU0LzuT+WsQ9RO+SpmhralCk5IiCjlKXVIg7Zl3\n\tsCgdF+tHnJrzS7wY7Ki2I8IJu2YtjW3fGiTRB+Ejge0c6naooUU5Prh+K0BA3EKRcwBjjOW5NgI\n\tJDYqrurHzAEifqsvm/l9hg6Ekkb/zAfzh8XHegrzll4Qs5VX+OQLY0BKeaiAF4LLrv1G0aGPsLI\n\tNuj5tBCV7HrbFKzAkMpK+8FLmyTSplTqcsUcOPAWu558YcvNSAEawHN79+NCk=","X-Gm-Gg":"AeBDieuD3Gtw7mtZCtFuaIk75RcZjDtkx5/1iADR6qdbGWBuIKuM5AYUcS4VDAcrJwu\n\tgMCFCa3HcoYag/HVrdSrUVuSSd4Y3QajvCGAddLN6SUiLyJRV174roWfhCjZZHPOgIAowouRwKy\n\tiafLM1VCA732fpqPd0G22lK+OVXZIKB/kCf/2fP5WtrnwPhU7Du5tNY7Cm9+MhDUCI5xz1ABIVI\n\tnK+H/TqpP2Hem4NBSoEIekq5pENeAQZZ7GEzpRGg6D+tb3UqYjrLNyWb3MApBfIGf/gd9g+A3RO\n\t6Z86h07xMShMcKjslqrEW++VcapwX/Y4UeGn+sKTt2ilIx3yIBvskSIobl3sa+oE+qSQ68oxTli\n\tYvXMryg0YNYGDSx/fQj/FbSm9Ql2lDhZ9H0yzoj/F/tm4a+qEKWt6zuhXSQc1PeUyrtfeYHYXbc\n\tQ=","X-Received":["by 2002:a5d:5f85:0:b0:43b:3b80:6776 with SMTP id\n\tffacd0b85a97d-43d292dac9cmr33196324f8f.30.1775676547581; \n\tWed, 08 Apr 2026 12:29:07 -0700 (PDT)","by 2002:a5d:5f85:0:b0:43b:3b80:6776 with SMTP id\n\tffacd0b85a97d-43d292dac9cmr33196299f8f.30.1775676547124; \n\tWed, 08 Apr 2026 12:29:07 -0700 (PDT)"],"From":"Milan Zamazal <mzamazal@redhat.com>","To":"Kieran Bingham <kieran.bingham@ideasonboard.com>","Cc":"libcamera-devel@lists.libcamera.org","Subject":"Re: [PATCH 09/13] libcamera: vector: Convertor Constructor","In-Reply-To":"<177566960305.575056.17803817350490259687@ping.linuxembedded.co.uk>\n\t(Kieran Bingham's message of \"Wed, 08 Apr 2026 18:33:23 +0100\")","References":"<20260407-kbingham-awb-split-v1-0-a39af3f4dc20@ideasonboard.com>\n\t<20260407-kbingham-awb-split-v1-9-a39af3f4dc20@ideasonboard.com>\n\t<85tstla58l.fsf@mzamazal-thinkpadp1gen7.tpbc.csb>\n\t<177566960305.575056.17803817350490259687@ping.linuxembedded.co.uk>","Date":"Wed, 08 Apr 2026 21:29:05 +0200","Message-ID":"<8534159rpa.fsf@mzamazal-thinkpadp1gen7.tpbc.csb>","User-Agent":"Gnus/5.13 (Gnus v5.13)","MIME-Version":"1.0","X-Mimecast-Spam-Score":"0","X-Mimecast-MFC-PROC-ID":"fa_GjzCF93rZ8CfaDOa-KyB7ao4UZQAiuMhBNBpFYW8_1775676548","X-Mimecast-Originator":"redhat.com","Content-Type":"text/plain","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>"}},{"id":38604,"web_url":"https://patchwork.libcamera.org/comment/38604/","msgid":"<070a4251-9395-4f03-8101-e00daecf1c81@ideasonboard.com>","date":"2026-04-13T13:41:53","subject":"Re: [PATCH 09/13] libcamera: vector: Convertor Constructor","submitter":{"id":216,"url":"https://patchwork.libcamera.org/api/people/216/","name":"Barnabás Pőcze","email":"barnabas.pocze@ideasonboard.com"},"content":"2026. 04. 08. 23:21 keltezéssel, Laurent Pinchart írta:\n> On Wed, Apr 08, 2026 at 06:33:23PM +0100, Kieran Bingham wrote:\n>> Quoting Milan Zamazal (2026-04-08 15:36:42)\n>>> Kieran Bingham <kieran.bingham@ideasonboard.com> writes:\n>>>\n>>>> Extend the Vector class with a constructor to support casting to the\n>>>> storage type when the given parameters are compatible.\n>>>>\n>>>> Signed-off-by: Kieran Bingham <kieran.bingham@ideasonboard.com>\n>>>> ---\n>>>>   include/libcamera/internal/vector.h | 8 ++++++++\n>>>>   src/libcamera/vector.cpp            | 7 +++++++\n>>>>   2 files changed, 15 insertions(+)\n>>>>\n>>>> diff --git a/include/libcamera/internal/vector.h b/include/libcamera/internal/vector.h\n>>>> index 16b6aef0b38f4b094d83449b5cdb1ba48b17c2bf..d29547f170e37c15f85e46abca82f89c8995115d 100644\n>>>> --- a/include/libcamera/internal/vector.h\n>>>> +++ b/include/libcamera/internal/vector.h\n>>>> @@ -51,6 +51,14 @@ public:\n>>>>                std::copy(data.begin(), data.end(), data_.begin());\n>>>>        }\n>>>>   \n>>>> +     template<typename U, std::enable_if_t<std::is_arithmetic_v<U> &&\n>>>> +                                           !std::is_same_v<T, U>> * = nullptr>\n\nI think `std::is_constructible_v<...>` would be sufficient here.\n\n\n>>>> +     constexpr Vector(const Vector<U, Rows> &other)\n>>>> +     {\n>>>> +             for (unsigned int i = 0; i < Rows; i++)\n>>>> +                     data_[i] = static_cast<T>(other[i]);\n>>>> +     }\n>>>> +\n>>>>        const T &operator[](size_t i) const\n>>>>        {\n>>>>                ASSERT(i < data_.size());\n>>>> diff --git a/src/libcamera/vector.cpp b/src/libcamera/vector.cpp\n>>>> index 4dad1b9001c5df97f71031724729563cae0962c3..397e370fd023caef069095dc5abebe2d6d76848a 100644\n>>>> --- a/src/libcamera/vector.cpp\n>>>> +++ b/src/libcamera/vector.cpp\n>>>> @@ -52,6 +52,13 @@ LOG_DEFINE_CATEGORY(Vector)\n>>>>    * The size of \\a data must be equal to the dimension size Rows of the vector.\n>>>>    */\n>>>>   \n>>>> +/**\n>>>> + * \\fn Vector::Vector(const Vector<U, Rows> &other)\n>>>> + * \\brief Construct a vector by converting another vector's element type\n>>>> + * \\tparam U The source vector element type\n>>>> + * \\param[in] other The vector to convert from\n>>>> + */\n>>>\n>>> This smells, it might be error prone (I don't have good experience with\n>>\n>> :-) Maybe indeed, that's why I wanted to get this series out already to\n>> ask for opinions.\n>>\n>>> C++ implicit numeric conversions).  How about changing the type of gains\n>>> to double everywhere, this diff against the whole series compiles for\n>>> me:\n>>\n>> Well - all our controls are floats. So should we instead change to\n>> floats everywhere? What really is the right precision!\n> \n> If there's an actual need to mix float and double, then we shouldn't\n> enable implicit conversion as every conversion would need to be\n> carefully considered. If there's no need to mix them, then let's pick\n> one.\n> \n> I'd like Barnabás' opinion here too.\n\nI think it's unfortunately too easy to mix floats and doubles in C and C++.\nSo in my opinion it is probably better to be wary of that and either use\nthe same type where possible, or pay careful attention to the where and how\nthe conversions happen. There is e.g. `-Wfloat-conversion`, but maybe that\nwould be too much.\n\nRegarding precision, I feel like `float` is most likely sufficient for everything\nin libcamera, at least in the [-1,1] range, but probably even in [-8192,8192].\n\nNonetheless, the ability to convert one vector to another vector of a different\ntype like this could be useful, regarding that I think the main question is whether\nto make it implicit (like here), or explicit via an explicit constructor or even\npossibly a separate function.\n\n\n> \n>> But yeah - this patch is here to try to unblock what I thought were lots\n>> of horrible explicit casts on double vectors to float vectors...\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 DA9D3C32BB\n\tfor <parsemail@patchwork.libcamera.org>;\n\tMon, 13 Apr 2026 13:41:58 +0000 (UTC)","from lancelot.ideasonboard.com (localhost [IPv6:::1])\n\tby lancelot.ideasonboard.com (Postfix) with ESMTP id 066D962E96;\n\tMon, 13 Apr 2026 15:41:58 +0200 (CEST)","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 9329F6271A\n\tfor <libcamera-devel@lists.libcamera.org>;\n\tMon, 13 Apr 2026 15:41:56 +0200 (CEST)","from [192.168.33.49] (185.182.214.8.nat.pool.zt.hu [185.182.214.8])\n\tby perceval.ideasonboard.com (Postfix) with ESMTPSA id 701707FE;\n\tMon, 13 Apr 2026 15:40:24 +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=\"mYapWaMQ\"; dkim-atps=neutral","DKIM-Signature":"v=1; a=rsa-sha256; c=relaxed/simple; d=ideasonboard.com;\n\ts=mail; t=1776087624;\n\tbh=ZDrM/hLwM3mvbyNI7OBgon3WHhCINetO0XWn4G693+c=;\n\th=Date:Subject:To:Cc:References:From:In-Reply-To:From;\n\tb=mYapWaMQduO1sKXIxLNcwHlaGThg/JBzWOgMP3OBvbGaNwFSqoIqFNQeM7kklH1Av\n\tNbBZOmoDUhYSmJa5nKNItg48W4ndLQ35/jwIUR4Ygndj9/zp7ts7AOX1Tt93hifueq\n\tzPYhtL+kg8/peRwrLqJKWS7ecQZRRBmj3tmsn790=","Message-ID":"<070a4251-9395-4f03-8101-e00daecf1c81@ideasonboard.com>","Date":"Mon, 13 Apr 2026 15:41:53 +0200","MIME-Version":"1.0","User-Agent":"Mozilla Thunderbird","Subject":"Re: [PATCH 09/13] libcamera: vector: Convertor Constructor","To":"Laurent Pinchart <laurent.pinchart@ideasonboard.com>,\n\tKieran Bingham <kieran.bingham@ideasonboard.com>","Cc":"Milan Zamazal <mzamazal@redhat.com>, libcamera-devel@lists.libcamera.org","References":"<20260407-kbingham-awb-split-v1-0-a39af3f4dc20@ideasonboard.com>\n\t<20260407-kbingham-awb-split-v1-9-a39af3f4dc20@ideasonboard.com>\n\t<85tstla58l.fsf@mzamazal-thinkpadp1gen7.tpbc.csb>\n\t<177566960305.575056.17803817350490259687@ping.linuxembedded.co.uk>\n\t<20260408212125.GJ1965119@killaraus.ideasonboard.com>","From":"=?utf-8?q?Barnab=C3=A1s_P=C5=91cze?= <barnabas.pocze@ideasonboard.com>","Content-Language":"en-US, hu-HU","In-Reply-To":"<20260408212125.GJ1965119@killaraus.ideasonboard.com>","Content-Type":"text/plain; charset=UTF-8; format=flowed","Content-Transfer-Encoding":"8bit","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>"}}]