[{"id":23729,"web_url":"https://patchwork.libcamera.org/comment/23729/","msgid":"<YsN51fVNbSUqkrqc@pendragon.ideasonboard.com>","date":"2022-07-04T23:37:57","subject":"Re: [libcamera-devel] [PATCH v8 2/4] libcamera: controls: Define\n\tsize of array controls as a shape vector","submitter":{"id":2,"url":"https://patchwork.libcamera.org/api/people/2/","name":"Laurent Pinchart","email":"laurent.pinchart@ideasonboard.com"},"content":"Hi Christian,\n\nThank you for the patch.\n\nOn Fri, Jun 10, 2022 at 01:03:36PM +0100, Christian Rauch via libcamera-devel wrote:\n> This follows the convention in other Tensor APIs. Since all tensors are\n> represented as a Span with a single dimension, values provided in 'size'\n> are interpreted as fixed-size Spans, while an empty array (\"[]\") will be\n> interpreted as variable-sized Span.\n\nI like the new syntax, even if it doesn't make it clear how we'll handle\nmulti-dimensional arrays with variable numbers of elements in one or\nmultiple dimensions, but we can worry about that later when/if needed.\n\nThis patch by itself introduces compilation errors, for instance, with\nclang-14,\n\nIn file included from ../../src/libcamera/camera_sensor.cpp:8:\nIn file included from ../../include/libcamera/internal/camera_sensor.h:17:\nIn file included from include/libcamera/control_ids.h:15:\n../../include/libcamera/controls.h:403:8: error: no matching member function for call to 'set'\n                val->set<T>(Span<const typename std::remove_cv_t<V>>{ value.begin(), value.size() });\n                ~~~~~^~~~~~\n../../src/libcamera/camera_sensor.cpp:421:14: note: in instantiation of function template specialization 'libcamera::ControlList::set<libcamera::Rectangle, libcamera::Rectangle>' requested here\n        properties_.set(properties::PixelArrayActiveAreas, { activeArea_ });\n                    ^\n../../include/libcamera/controls.h:178:7: note: candidate function template not viable: no known conversion from 'Span<const typename std::remove_cv_t<Rectangle>>' (aka 'Span<const libcamera::Rectangle>') to 'const libcamera::Rectangle' for 1st argument\n        void set(const T &value)\n             ^\n../../include/libcamera/controls.h:190:7: note: candidate template ignored: requirement 'details::is_span<libcamera::Rectangle>::value || std::is_same<std::string, libcamera::Rectangle>::value' was not satisfied [with T = libcamera::Rectangle]\n        void set(const T &value)\n             ^\n1 error generated.\n\nI'll update the Python generator script here to fix this, it will be\npart of v9.\n\n> Signed-off-by: Christian Rauch <Rauch.Christian@gmx.de>\n> Reviewed-by: Jacopo Mondi <jacopo@jmondi.org>\n> ---\n>  src/libcamera/control_ids.yaml  | 4 ++--\n>  src/libcamera/property_ids.yaml | 4 ++--\n>  2 files changed, 4 insertions(+), 4 deletions(-)\n> \n> diff --git a/src/libcamera/control_ids.yaml b/src/libcamera/control_ids.yaml\n> index cd1d4512..f707c1f5 100644\n> --- a/src/libcamera/control_ids.yaml\n> +++ b/src/libcamera/control_ids.yaml\n> @@ -291,7 +291,7 @@ controls:\n>          transformation. The 3x3 matrix is stored in conventional reading\n>          order in an array of 9 floating point values.\n> \n> -      size: [3x3]\n> +      size: [3,3]\n> \n>    - ScalerCrop:\n>        type: Rectangle\n> @@ -515,7 +515,7 @@ controls:\n>          the window where the focal distance for the objects shown in that part\n>          of the image are closest to the camera.\n> \n> -      size: [n]\n> +      size: []\n> \n>    - AfTrigger:\n>        type: int32_t\n> diff --git a/src/libcamera/property_ids.yaml b/src/libcamera/property_ids.yaml\n> index 11b7ebdc..a87485d7 100644\n> --- a/src/libcamera/property_ids.yaml\n> +++ b/src/libcamera/property_ids.yaml\n> @@ -497,7 +497,7 @@ controls:\n> \n>    - PixelArrayOpticalBlackRectangles:\n>        type: Rectangle\n> -      size: [n]\n> +      size: []\n>        description: |\n>          The pixel array region(s) which contain optical black pixels\n>          considered valid for calibration purposes.\n> @@ -592,7 +592,7 @@ controls:\n> \n>    - PixelArrayActiveAreas:\n>        type: Rectangle\n> -      size: [n]\n> +      size: []\n>        description: |\n>          The PixelArrayActiveAreas property defines the (possibly multiple and\n>          overlapping) portions of the camera sensor readable pixel matrix","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 DD1ECBD808\n\tfor <parsemail@patchwork.libcamera.org>;\n\tMon,  4 Jul 2022 23:38:23 +0000 (UTC)","from lancelot.ideasonboard.com (localhost [IPv6:::1])\n\tby lancelot.ideasonboard.com (Postfix) with ESMTP id 3B0896330E;\n\tTue,  5 Jul 2022 01:38:23 +0200 (CEST)","from perceval.ideasonboard.com (perceval.ideasonboard.com\n\t[213.167.242.64])\n\tby lancelot.ideasonboard.com (Postfix) with ESMTPS id A7F446042E\n\tfor <libcamera-devel@lists.libcamera.org>;\n\tTue,  5 Jul 2022 01:38:21 +0200 (CEST)","from pendragon.ideasonboard.com (62-78-145-57.bb.dnainternet.fi\n\t[62.78.145.57])\n\tby perceval.ideasonboard.com (Postfix) with ESMTPSA id 13D226D7;\n\tTue,  5 Jul 2022 01:38:21 +0200 (CEST)"],"DKIM-Signature":["v=1; a=rsa-sha256; c=relaxed/simple; d=libcamera.org;\n\ts=mail; t=1656977903;\n\tbh=NkcF3lDul+f/l4F7gBp0/EC2O2fLDe628bHlyHBEFNA=;\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=kNDEHU+4tVr8KoGTOkM+ma51PoUOd9VKc8HjnHkqOwz2s4hYkZL7oe1GUy8RO1/FQ\n\tTT4pLRF13DE8xnhKOrWvSFZJ75KAuxrZfz8kQN+HMKmAKgixvSQNPzGC5sTmoxF+xA\n\tGPsk711ccFH1GzfZ3GW2Z/fyWeW6LUX+FghReK1VflYDfqLw0S2fntDJAJV2yQPO+Q\n\tN8lA+KCyjRakFN+lGI3PaTBmDOccOC+Z25iv+bWLPcQ7s0IxNkTBT0KFlCJY6a4d31\n\t+q/GoiQ1YAufjRUTIvci2U8XO2N3JQVnZXQj8UnRH5CIDBp2qb2ME03pNhE2pxB/Mh\n\tM7PzxSh8nq1OQ==","v=1; a=rsa-sha256; c=relaxed/simple; d=ideasonboard.com;\n\ts=mail; t=1656977901;\n\tbh=NkcF3lDul+f/l4F7gBp0/EC2O2fLDe628bHlyHBEFNA=;\n\th=Date:From:To:Cc:Subject:References:In-Reply-To:From;\n\tb=FjoInjMLC+aGOPi4/omxjG4nqq3yRhYdZoDclP/PisYduJMlMcJH4wsDvQ8SDOF1j\n\tvjX54EjftyuuNkmM/KNghR74ewo4sEkCdzRsvU8srL768u/bhTH/W36WZK0MtP6JMa\n\tRbOSqo1cESoXxNldLFvczL54q1JvC3/G3X4egISM="],"Authentication-Results":"lancelot.ideasonboard.com; dkim=pass (1024-bit key; \n\tunprotected) header.d=ideasonboard.com\n\theader.i=@ideasonboard.com\n\theader.b=\"FjoInjML\"; dkim-atps=neutral","Date":"Tue, 5 Jul 2022 02:37:57 +0300","To":"Christian Rauch <Rauch.Christian@gmx.de>","Message-ID":"<YsN51fVNbSUqkrqc@pendragon.ideasonboard.com>","References":"<20220610120338.96883-1-Rauch.Christian@gmx.de>\n\t<20220610120338.96883-3-Rauch.Christian@gmx.de>","MIME-Version":"1.0","Content-Type":"text/plain; charset=utf-8","Content-Disposition":"inline","In-Reply-To":"<20220610120338.96883-3-Rauch.Christian@gmx.de>","Subject":"Re: [libcamera-devel] [PATCH v8 2/4] libcamera: controls: Define\n\tsize of array controls as a shape vector","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":"Laurent Pinchart via libcamera-devel\n\t<libcamera-devel@lists.libcamera.org>","Reply-To":"Laurent Pinchart <laurent.pinchart@ideasonboard.com>","Cc":"libcamera-devel@lists.libcamera.org","Errors-To":"libcamera-devel-bounces@lists.libcamera.org","Sender":"\"libcamera-devel\" <libcamera-devel-bounces@lists.libcamera.org>"}},{"id":23730,"web_url":"https://patchwork.libcamera.org/comment/23730/","msgid":"<YsN8tvx8/zakO4Cu@pendragon.ideasonboard.com>","date":"2022-07-04T23:50:14","subject":"Re: [libcamera-devel] [PATCH v8 2/4] libcamera: controls: Define\n\tsize of array controls as a shape vector","submitter":{"id":2,"url":"https://patchwork.libcamera.org/api/people/2/","name":"Laurent Pinchart","email":"laurent.pinchart@ideasonboard.com"},"content":"On Tue, Jul 05, 2022 at 02:37:57AM +0300, Laurent Pinchart via libcamera-devel wrote:\n> Hi Christian,\n> \n> Thank you for the patch.\n> \n> On Fri, Jun 10, 2022 at 01:03:36PM +0100, Christian Rauch via libcamera-devel wrote:\n> > This follows the convention in other Tensor APIs. Since all tensors are\n> > represented as a Span with a single dimension, values provided in 'size'\n> > are interpreted as fixed-size Spans, while an empty array (\"[]\") will be\n> > interpreted as variable-sized Span.\n> \n> I like the new syntax, even if it doesn't make it clear how we'll handle\n> multi-dimensional arrays with variable numbers of elements in one or\n> multiple dimensions, but we can worry about that later when/if needed.\n\nJust a quick note on this. In the review of previous versions, a syntax\nsuch as [,] was proposed for a 2D NxN array, and [,3] for a Nx3 array.\nThis won't work correctly, as neither are valid YAML syntax.\n\nOne workaround for this would be to turn the size element into a string,\ne.g.\n\n\tsize: '[,]'\n\nI don't like this much. Another option would be to reuse 'n', e.g. [n,n]\nand [n,3]. If we go that way, we should keep [n] already to denote a\ndynamic 1D array.\n\nAny other option ?\n\n> This patch by itself introduces compilation errors, for instance, with\n> clang-14,\n> \n> In file included from ../../src/libcamera/camera_sensor.cpp:8:\n> In file included from ../../include/libcamera/internal/camera_sensor.h:17:\n> In file included from include/libcamera/control_ids.h:15:\n> ../../include/libcamera/controls.h:403:8: error: no matching member function for call to 'set'\n>                 val->set<T>(Span<const typename std::remove_cv_t<V>>{ value.begin(), value.size() });\n>                 ~~~~~^~~~~~\n> ../../src/libcamera/camera_sensor.cpp:421:14: note: in instantiation of function template specialization 'libcamera::ControlList::set<libcamera::Rectangle, libcamera::Rectangle>' requested here\n>         properties_.set(properties::PixelArrayActiveAreas, { activeArea_ });\n>                     ^\n> ../../include/libcamera/controls.h:178:7: note: candidate function template not viable: no known conversion from 'Span<const typename std::remove_cv_t<Rectangle>>' (aka 'Span<const libcamera::Rectangle>') to 'const libcamera::Rectangle' for 1st argument\n>         void set(const T &value)\n>              ^\n> ../../include/libcamera/controls.h:190:7: note: candidate template ignored: requirement 'details::is_span<libcamera::Rectangle>::value || std::is_same<std::string, libcamera::Rectangle>::value' was not satisfied [with T = libcamera::Rectangle]\n>         void set(const T &value)\n>              ^\n> 1 error generated.\n> \n> I'll update the Python generator script here to fix this, it will be\n> part of v9.\n> \n> > Signed-off-by: Christian Rauch <Rauch.Christian@gmx.de>\n> > Reviewed-by: Jacopo Mondi <jacopo@jmondi.org>\n> > ---\n> >  src/libcamera/control_ids.yaml  | 4 ++--\n> >  src/libcamera/property_ids.yaml | 4 ++--\n> >  2 files changed, 4 insertions(+), 4 deletions(-)\n> > \n> > diff --git a/src/libcamera/control_ids.yaml b/src/libcamera/control_ids.yaml\n> > index cd1d4512..f707c1f5 100644\n> > --- a/src/libcamera/control_ids.yaml\n> > +++ b/src/libcamera/control_ids.yaml\n> > @@ -291,7 +291,7 @@ controls:\n> >          transformation. The 3x3 matrix is stored in conventional reading\n> >          order in an array of 9 floating point values.\n> > \n> > -      size: [3x3]\n> > +      size: [3,3]\n> > \n> >    - ScalerCrop:\n> >        type: Rectangle\n> > @@ -515,7 +515,7 @@ controls:\n> >          the window where the focal distance for the objects shown in that part\n> >          of the image are closest to the camera.\n> > \n> > -      size: [n]\n> > +      size: []\n> > \n> >    - AfTrigger:\n> >        type: int32_t\n> > diff --git a/src/libcamera/property_ids.yaml b/src/libcamera/property_ids.yaml\n> > index 11b7ebdc..a87485d7 100644\n> > --- a/src/libcamera/property_ids.yaml\n> > +++ b/src/libcamera/property_ids.yaml\n> > @@ -497,7 +497,7 @@ controls:\n> > \n> >    - PixelArrayOpticalBlackRectangles:\n> >        type: Rectangle\n> > -      size: [n]\n> > +      size: []\n> >        description: |\n> >          The pixel array region(s) which contain optical black pixels\n> >          considered valid for calibration purposes.\n> > @@ -592,7 +592,7 @@ controls:\n> > \n> >    - PixelArrayActiveAreas:\n> >        type: Rectangle\n> > -      size: [n]\n> > +      size: []\n> >        description: |\n> >          The PixelArrayActiveAreas property defines the (possibly multiple and\n> >          overlapping) portions of the camera sensor readable pixel matrix","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 3AE25BE173\n\tfor <parsemail@patchwork.libcamera.org>;\n\tMon,  4 Jul 2022 23:50:40 +0000 (UTC)","from lancelot.ideasonboard.com (localhost [IPv6:::1])\n\tby lancelot.ideasonboard.com (Postfix) with ESMTP id 911666330E;\n\tTue,  5 Jul 2022 01:50:39 +0200 (CEST)","from perceval.ideasonboard.com (perceval.ideasonboard.com\n\t[213.167.242.64])\n\tby lancelot.ideasonboard.com (Postfix) with ESMTPS id 0EEB46042E\n\tfor <libcamera-devel@lists.libcamera.org>;\n\tTue,  5 Jul 2022 01:50:38 +0200 (CEST)","from pendragon.ideasonboard.com (62-78-145-57.bb.dnainternet.fi\n\t[62.78.145.57])\n\tby perceval.ideasonboard.com (Postfix) with ESMTPSA id 775B96D7;\n\tTue,  5 Jul 2022 01:50:37 +0200 (CEST)"],"DKIM-Signature":["v=1; a=rsa-sha256; c=relaxed/simple; d=libcamera.org;\n\ts=mail; t=1656978639;\n\tbh=07h8NRmRex+Cu3AeaQrhJVtIToVRbXICio84uI5nhdc=;\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:\n\tFrom;\n\tb=BtFgzJq8rUOg/EHEsjRrd6Zo3tWjcyi7nox9IwUBjHpyvLpAi9hIE6cU4CQOYPG5z\n\t/Ov2Q73qppdjU9kRL6DBX3Gl6AoGMWJLNFKkxWb5yhjPv8pObovh00N5PnhwZVXszI\n\tXPUNZqG4FHQsH3xsvuHZBeO4xTHJt4cmTeY6jQULZVb1geGxRQ82jHy0tu/NfZnRjT\n\tuBMcXVJ2EsKMxvGD0jyp+b6j2fJ3KYkqzrtF4XClgA5P17BfysfC4DB6Frmrg7kgsB\n\tW585uRDB2cRWxY6a7efmsylZbckSgmX+dfYvqGae2k2k0n/XialbNRmkzKoZxbCept\n\tTLFtxnT1NRkgg==","v=1; a=rsa-sha256; c=relaxed/simple; d=ideasonboard.com;\n\ts=mail; t=1656978637;\n\tbh=07h8NRmRex+Cu3AeaQrhJVtIToVRbXICio84uI5nhdc=;\n\th=Date:From:To:Subject:References:In-Reply-To:From;\n\tb=vcrAAED76aEEUTZLfotTF3kfufr16pA70Tkl4ziOSLofWi3CXd5a8m55V5piZ7+w9\n\tzMq0fO6DaaTrhrdlb7doVlDnJmwnxQClRxroCtn4SyWBzLk1EyMsRbhqSyeHX01BYw\n\tCJ4LclRivBmGkFwAX/dIwbhNZb4rXDRlNrpsaFsk="],"Authentication-Results":"lancelot.ideasonboard.com; dkim=pass (1024-bit key; \n\tunprotected) header.d=ideasonboard.com\n\theader.i=@ideasonboard.com\n\theader.b=\"vcrAAED7\"; dkim-atps=neutral","Date":"Tue, 5 Jul 2022 02:50:14 +0300","To":"Christian Rauch <Rauch.Christian@gmx.de>,\n\tlibcamera-devel@lists.libcamera.org","Message-ID":"<YsN8tvx8/zakO4Cu@pendragon.ideasonboard.com>","References":"<20220610120338.96883-1-Rauch.Christian@gmx.de>\n\t<20220610120338.96883-3-Rauch.Christian@gmx.de>\n\t<YsN51fVNbSUqkrqc@pendragon.ideasonboard.com>","MIME-Version":"1.0","Content-Type":"text/plain; charset=utf-8","Content-Disposition":"inline","In-Reply-To":"<YsN51fVNbSUqkrqc@pendragon.ideasonboard.com>","Subject":"Re: [libcamera-devel] [PATCH v8 2/4] libcamera: controls: Define\n\tsize of array controls as a shape vector","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":"Laurent Pinchart via libcamera-devel\n\t<libcamera-devel@lists.libcamera.org>","Reply-To":"Laurent Pinchart <laurent.pinchart@ideasonboard.com>","Errors-To":"libcamera-devel-bounces@lists.libcamera.org","Sender":"\"libcamera-devel\" <libcamera-devel-bounces@lists.libcamera.org>"}},{"id":23732,"web_url":"https://patchwork.libcamera.org/comment/23732/","msgid":"<301ece41-7011-e6cb-e898-a26ffe5aa4f8@gmx.de>","date":"2022-07-05T00:14:10","subject":"Re: [libcamera-devel] [PATCH v8 2/4] libcamera: controls: Define\n\tsize of array controls as a shape vector","submitter":{"id":111,"url":"https://patchwork.libcamera.org/api/people/111/","name":"Christian Rauch","email":"Rauch.Christian@gmx.de"},"content":"Am 05.07.22 um 00:50 schrieb Laurent Pinchart:\n> On Tue, Jul 05, 2022 at 02:37:57AM +0300, Laurent Pinchart via libcamera-devel wrote:\n>> Hi Christian,\n>>\n>> Thank you for the patch.\n>>\n>> On Fri, Jun 10, 2022 at 01:03:36PM +0100, Christian Rauch via libcamera-devel wrote:\n>>> This follows the convention in other Tensor APIs. Since all tensors are\n>>> represented as a Span with a single dimension, values provided in 'size'\n>>> are interpreted as fixed-size Spans, while an empty array (\"[]\") will be\n>>> interpreted as variable-sized Span.\n>>\n>> I like the new syntax, even if it doesn't make it clear how we'll handle\n>> multi-dimensional arrays with variable numbers of elements in one or\n>> multiple dimensions, but we can worry about that later when/if needed.\n>\n> Just a quick note on this. In the review of previous versions, a syntax\n> such as [,] was proposed for a 2D NxN array, and [,3] for a Nx3 array.\n> This won't work correctly, as neither are valid YAML syntax.\n>\n> One workaround for this would be to turn the size element into a string,\n> e.g.\n>\n> \tsize: '[,]'\n>\n> I don't like this much. Another option would be to reuse 'n', e.g. [n,n]\n> and [n,3]. If we go that way, we should keep [n] already to denote a\n> dynamic 1D array.\n>\n> Any other option ?\n\nIn such a case, I would use \"0\" as the magic value to indicate a\nvariable size dimension, since a 0-size will never be used in practice.\nWith this syntax, \"[0,3]\" would translate into a \"N x 3\" sized array and\n\"[0,2,0]\" into \"N x 2 x M\". We would need to parse this and replace all\noccurrences of 0 with a dynamic-sized length, but the sum will then\nstill mean the \"minimum total size\".\n\nI am not a fan of using a character (e.g. 'n') to indicate this, as this\nis a bit arbitrary and \"[n,3,n]\" could mean that the first and last\ndimension have to have the same length \"n\".\n\n>\n>> This patch by itself introduces compilation errors, for instance, with\n>> clang-14,\n>>\n>> In file included from ../../src/libcamera/camera_sensor.cpp:8:\n>> In file included from ../../include/libcamera/internal/camera_sensor.h:17:\n>> In file included from include/libcamera/control_ids.h:15:\n>> ../../include/libcamera/controls.h:403:8: error: no matching member function for call to 'set'\n>>                 val->set<T>(Span<const typename std::remove_cv_t<V>>{ value.begin(), value.size() });\n>>                 ~~~~~^~~~~~\n>> ../../src/libcamera/camera_sensor.cpp:421:14: note: in instantiation of function template specialization 'libcamera::ControlList::set<libcamera::Rectangle, libcamera::Rectangle>' requested here\n>>         properties_.set(properties::PixelArrayActiveAreas, { activeArea_ });\n>>                     ^\n>> ../../include/libcamera/controls.h:178:7: note: candidate function template not viable: no known conversion from 'Span<const typename std::remove_cv_t<Rectangle>>' (aka 'Span<const libcamera::Rectangle>') to 'const libcamera::Rectangle' for 1st argument\n>>         void set(const T &value)\n>>              ^\n>> ../../include/libcamera/controls.h:190:7: note: candidate template ignored: requirement 'details::is_span<libcamera::Rectangle>::value || std::is_same<std::string, libcamera::Rectangle>::value' was not satisfied [with T = libcamera::Rectangle]\n>>         void set(const T &value)\n>>              ^\n>> 1 error generated.\n>>\n>> I'll update the Python generator script here to fix this, it will be\n>> part of v9.\n>>\n>>> Signed-off-by: Christian Rauch <Rauch.Christian@gmx.de>\n>>> Reviewed-by: Jacopo Mondi <jacopo@jmondi.org>\n>>> ---\n>>>  src/libcamera/control_ids.yaml  | 4 ++--\n>>>  src/libcamera/property_ids.yaml | 4 ++--\n>>>  2 files changed, 4 insertions(+), 4 deletions(-)\n>>>\n>>> diff --git a/src/libcamera/control_ids.yaml b/src/libcamera/control_ids.yaml\n>>> index cd1d4512..f707c1f5 100644\n>>> --- a/src/libcamera/control_ids.yaml\n>>> +++ b/src/libcamera/control_ids.yaml\n>>> @@ -291,7 +291,7 @@ controls:\n>>>          transformation. The 3x3 matrix is stored in conventional reading\n>>>          order in an array of 9 floating point values.\n>>>\n>>> -      size: [3x3]\n>>> +      size: [3,3]\n>>>\n>>>    - ScalerCrop:\n>>>        type: Rectangle\n>>> @@ -515,7 +515,7 @@ controls:\n>>>          the window where the focal distance for the objects shown in that part\n>>>          of the image are closest to the camera.\n>>>\n>>> -      size: [n]\n>>> +      size: []\n>>>\n>>>    - AfTrigger:\n>>>        type: int32_t\n>>> diff --git a/src/libcamera/property_ids.yaml b/src/libcamera/property_ids.yaml\n>>> index 11b7ebdc..a87485d7 100644\n>>> --- a/src/libcamera/property_ids.yaml\n>>> +++ b/src/libcamera/property_ids.yaml\n>>> @@ -497,7 +497,7 @@ controls:\n>>>\n>>>    - PixelArrayOpticalBlackRectangles:\n>>>        type: Rectangle\n>>> -      size: [n]\n>>> +      size: []\n>>>        description: |\n>>>          The pixel array region(s) which contain optical black pixels\n>>>          considered valid for calibration purposes.\n>>> @@ -592,7 +592,7 @@ controls:\n>>>\n>>>    - PixelArrayActiveAreas:\n>>>        type: Rectangle\n>>> -      size: [n]\n>>> +      size: []\n>>>        description: |\n>>>          The PixelArrayActiveAreas property defines the (possibly multiple and\n>>>          overlapping) portions of the camera sensor readable pixel matrix\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 1E5D7BE173\n\tfor <parsemail@patchwork.libcamera.org>;\n\tTue,  5 Jul 2022 00:14:14 +0000 (UTC)","from lancelot.ideasonboard.com (localhost [IPv6:::1])\n\tby lancelot.ideasonboard.com (Postfix) with ESMTP id 5CA9D6330E;\n\tTue,  5 Jul 2022 02:14:13 +0200 (CEST)","from mout.gmx.net (mout.gmx.net [212.227.17.21])\n\tby lancelot.ideasonboard.com (Postfix) with ESMTPS id D92846042E\n\tfor <libcamera-devel@lists.libcamera.org>;\n\tTue,  5 Jul 2022 02:14:11 +0200 (CEST)","from [192.168.1.209] ([92.18.80.244]) by mail.gmx.net (mrgmx104\n\t[212.227.17.168]) with ESMTPSA (Nemesis) id 1Mzyuc-1nMcdx0sb8-00x1Px\n\tfor\n\t<libcamera-devel@lists.libcamera.org>; Tue, 05 Jul 2022 02:14:11 +0200"],"DKIM-Signature":["v=1; a=rsa-sha256; c=relaxed/simple; d=libcamera.org;\n\ts=mail; t=1656980053;\n\tbh=hhtP3DMcyyX4DSlydBYTOZSYBA3nfgxI8g7H6ddf/lw=;\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:\n\tFrom;\n\tb=rdy1gl6mFHfoAOjTxHtUQClM1EqAzRqY9E46Qqj4zvR4xHdsk5x4mjFhFWuRCZZj8\n\tOJUaya4L38ElTwOu9jXZgG4aqrmIGdEEDcO9rUwleOTSpECEXDcAy8EcYtMiiSEuW1\n\t1Qj2KYLKnACSHvt/0iKFoKBhgueLZTpJgHrtErEvPHqC3m9LEMsFje8oCDEjhUJ/lX\n\tPg2xL9AG08g4OLA6G/xk72+yhsM8Vx84b7wRt6RKEXXUYWVy6tobWeo5XAXBIAlTFi\n\tROJ/oGTKWbBiUjiAUyKZWaxSPOFm7MOCv4dsspRHBvz7Nf1YHiZgChxa0GlLtvPpdr\n\tAyPW0Q0UOOZgQ==","v=1; a=rsa-sha256; c=relaxed/simple; d=gmx.net;\n\ts=badeba3b8450; t=1656980051;\n\tbh=hhtP3DMcyyX4DSlydBYTOZSYBA3nfgxI8g7H6ddf/lw=;\n\th=X-UI-Sender-Class:Date:Subject:To:References:From:In-Reply-To;\n\tb=VHW6+uHXOr6TDFm8U92f1AqU+5H9HxPq+Usa8x1Meltd1QjVzefZ/LIRk+WYE2gcV\n\t0Sn06tM+4s9TCrDStl+vpRilZFYYJB7q+U502lFfkbxj45GXHY5/t1PUYHhQt5jHw8\n\tsM7J5nWwCxbjdfAzu7nE3Rjfne0y5mPRY7cZax8Q="],"Authentication-Results":"lancelot.ideasonboard.com; dkim=pass (1024-bit key; \n\tunprotected) header.d=gmx.net header.i=@gmx.net\n\theader.b=\"VHW6+uHX\"; dkim-atps=neutral","X-UI-Sender-Class":"01bb95c1-4bf8-414a-932a-4f6e2808ef9c","Message-ID":"<301ece41-7011-e6cb-e898-a26ffe5aa4f8@gmx.de>","Date":"Tue, 5 Jul 2022 01:14:10 +0100","MIME-Version":"1.0","User-Agent":"Mozilla/5.0 (X11; Linux x86_64; rv:91.0) Gecko/20100101\n\tThunderbird/91.9.1","Content-Language":"en-GB","To":"libcamera-devel@lists.libcamera.org","References":"<20220610120338.96883-1-Rauch.Christian@gmx.de>\n\t<20220610120338.96883-3-Rauch.Christian@gmx.de>\n\t<YsN51fVNbSUqkrqc@pendragon.ideasonboard.com>\n\t<YsN8tvx8/zakO4Cu@pendragon.ideasonboard.com>","In-Reply-To":"<YsN8tvx8/zakO4Cu@pendragon.ideasonboard.com>","Content-Type":"text/plain; charset=UTF-8","Content-Transfer-Encoding":"quoted-printable","X-Provags-ID":"V03:K1:laAM7Gm7oubh9W40bdA6+KjuQaTbsBLdGa0OZlmJmoNaRAQTweH\n\tbNFYM/Ml79B5ksQHicT/GOc6IaD0FXw1CDQg0HN1Rh8RrpIoFOszQn/o/vUqz2njXrDorsd\n\tsABFjWaVt6+y7Q3fQzMF1XmHpFdV/Wjwd8Nq4v7U5wsKt0SLeMGHj1whpDxfnpdOMFjW0pc\n\te2nXtxZuca6BG76VqLVFQ==","X-Spam-Flag":"NO","X-UI-Out-Filterresults":"notjunk:1; V03:K0:2QpW6maystU=:4Xor+GyqHapeEHdW0ykj2W\n\t4qutRrOCljbRVdmpzzPZgYnyjmVw+95i5aHzGcuqjZglbFCjhHhL/DGMIMFahItRmvec9TCj3\n\tbXjCw5FNds3WSsqOFm63rRTLkXi2HOfnvOLI2N7/Ppxu2fQauJMaj9GbKewHRSTp9oKT/syxU\n\tY22Tbx7qOiU6vy7RTsad6DztFUt2aRzbv/t/II6Qfkei6ngWNtEth8k/2LaNXXXI0a8IoxzjC\n\t/Nmdups1Zf7nDpKWQ5VinNg5O6tEKYUlav+jBjNybPVxBAZJCSvo2cDC9kfYKCGeMohUGaPNb\n\tY9FI9MpvJO1wkuj0K4336NMr9kVeJ9e0yxMKh9ZUFlQpDXVmeK6TpZJ5BPUDUgSQlHLgdeICW\n\tELmwtIjGGE42bIbUWFlhC3+4tYBEkTEg1owM76yaBzQUI24urxaDEYeT9RT4nt8KIZZPBlHZO\n\trWd3tC+edNweBS9r+iPk/n60z8LKEkQEckxLWJZx3PoaowQmHJp25v3/FeGdBCsEi84AHU7bj\n\tay42FThGmmDqlXLP59qxaVhLMJfaZK1lKjte1KcG6NI0rRunLZz9GMT7kiABdIIb9ae7L/T1C\n\tjenjUzhWWIQo2Q22AirB8vkEmxx04sZVBiELorEQeAioa6csqaNXXfkzRHz83Qeb2Nm26b3cB\n\tOGtDPiNoNNeu5SY8B0JNyjRl3ntY02FWxafSiGlfZinG//Ioe97h/8UOMM9Nl5vEvuSsVdogo\n\trtxXlQETp3F3++hUMzrGEW5CNqgMva9fmY9iyFXcnK/ykoUlNcfD5XxYheTj/Q8xqLhKuxyKv\n\tulDbMqkMMl6gp0QCA86Ur7XppAz0N3TQvESN5xtRd7l4vcW8Ue5CeOfbTH9jgPf9Mxa/hKApa\n\tLYdywebHBKPylwXH/jyEgSDgKXya9J6sIKdkMsP5Lo6vHOslbLy19k3ag6KbFintQZnCOm6G5\n\tZWSW/I8l8F8zENB9NKRUOWx9nm8GF6HqsZQ30Ocn8nQOd6PkXJsXnpN7OfNEtfRMKb+lgUxTw\n\tAaBZfNp4SmWZoeEgxPfkIuLOyXp9PLmLbMDrjN5j5N00XYqr43iPI/aK6/tzVjZKOipXhAGA2\n\tWw62XZTopNCP+vB7UqQcDKnOtsr4u2U9MvBziaYCCrzbXXxpaIx6u12Gg==","Subject":"Re: [libcamera-devel] [PATCH v8 2/4] libcamera: controls: Define\n\tsize of array controls as a shape vector","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":"Christian Rauch via libcamera-devel\n\t<libcamera-devel@lists.libcamera.org>","Reply-To":"Christian Rauch <Rauch.Christian@gmx.de>","Errors-To":"libcamera-devel-bounces@lists.libcamera.org","Sender":"\"libcamera-devel\" <libcamera-devel-bounces@lists.libcamera.org>"}},{"id":23738,"web_url":"https://patchwork.libcamera.org/comment/23738/","msgid":"<165701271606.2021905.5142206891214573198@Monstersaurus>","date":"2022-07-05T09:18:36","subject":"Re: [libcamera-devel] [PATCH v8 2/4] libcamera: controls: Define\n\tsize of array controls as a shape vector","submitter":{"id":4,"url":"https://patchwork.libcamera.org/api/people/4/","name":"Kieran Bingham","email":"kieran.bingham@ideasonboard.com"},"content":"Quoting Christian Rauch via libcamera-devel (2022-07-05 01:14:10)\n> \n> \n> Am 05.07.22 um 00:50 schrieb Laurent Pinchart:\n> > On Tue, Jul 05, 2022 at 02:37:57AM +0300, Laurent Pinchart via libcamera-devel wrote:\n> >> Hi Christian,\n> >>\n> >> Thank you for the patch.\n> >>\n> >> On Fri, Jun 10, 2022 at 01:03:36PM +0100, Christian Rauch via libcamera-devel wrote:\n> >>> This follows the convention in other Tensor APIs. Since all tensors are\n> >>> represented as a Span with a single dimension, values provided in 'size'\n> >>> are interpreted as fixed-size Spans, while an empty array (\"[]\") will be\n> >>> interpreted as variable-sized Span.\n> >>\n> >> I like the new syntax, even if it doesn't make it clear how we'll handle\n> >> multi-dimensional arrays with variable numbers of elements in one or\n> >> multiple dimensions, but we can worry about that later when/if needed.\n> >\n> > Just a quick note on this. In the review of previous versions, a syntax\n> > such as [,] was proposed for a 2D NxN array, and [,3] for a Nx3 array.\n> > This won't work correctly, as neither are valid YAML syntax.\n> >\n> > One workaround for this would be to turn the size element into a string,\n> > e.g.\n> >\n> >       size: '[,]'\n> >\n> > I don't like this much. Another option would be to reuse 'n', e.g. [n,n]\n> > and [n,3]. If we go that way, we should keep [n] already to denote a\n> > dynamic 1D array.\n> >\n> > Any other option ?\n> \n> In such a case, I would use \"0\" as the magic value to indicate a\n> variable size dimension, since a 0-size will never be used in practice.\n> With this syntax, \"[0,3]\" would translate into a \"N x 3\" sized array and\n> \"[0,2,0]\" into \"N x 2 x M\". We would need to parse this and replace all\n> occurrences of 0 with a dynamic-sized length, but the sum will then\n> still mean the \"minimum total size\".\n> \n> I am not a fan of using a character (e.g. 'n') to indicate this, as this\n> is a bit arbitrary and \"[n,3,n]\" could mean that the first and last\n> dimension have to have the same length \"n\".\n\n\nThrowing another option in, can we use '*' or '?'?\n\nI dislike '0' as that has a 'real' value, so to me an array of [0,3]\nwhile not 'useful' ... is conceptually valid, and therefore doesn't\nconfer that it could be variable.\n\n\nOr otherwise, can we convey that any 'letter' is a variable, so that we\n'can' support both \n\t[n,n,n], (To state that it must be 3,3,3 or 4,4,4)\nor\n\t[n,m,5], (to convey that there are two distinct variables ?)\n\nOr even\n\n\t[w,h] if it's appropriate?\n\n--\nKieran\n\n\n> \n> >\n> >> This patch by itself introduces compilation errors, for instance, with\n> >> clang-14,\n> >>\n> >> In file included from ../../src/libcamera/camera_sensor.cpp:8:\n> >> In file included from ../../include/libcamera/internal/camera_sensor.h:17:\n> >> In file included from include/libcamera/control_ids.h:15:\n> >> ../../include/libcamera/controls.h:403:8: error: no matching member function for call to 'set'\n> >>                 val->set<T>(Span<const typename std::remove_cv_t<V>>{ value.begin(), value.size() });\n> >>                 ~~~~~^~~~~~\n> >> ../../src/libcamera/camera_sensor.cpp:421:14: note: in instantiation of function template specialization 'libcamera::ControlList::set<libcamera::Rectangle, libcamera::Rectangle>' requested here\n> >>         properties_.set(properties::PixelArrayActiveAreas, { activeArea_ });\n> >>                     ^\n> >> ../../include/libcamera/controls.h:178:7: note: candidate function template not viable: no known conversion from 'Span<const typename std::remove_cv_t<Rectangle>>' (aka 'Span<const libcamera::Rectangle>') to 'const libcamera::Rectangle' for 1st argument\n> >>         void set(const T &value)\n> >>              ^\n> >> ../../include/libcamera/controls.h:190:7: note: candidate template ignored: requirement 'details::is_span<libcamera::Rectangle>::value || std::is_same<std::string, libcamera::Rectangle>::value' was not satisfied [with T = libcamera::Rectangle]\n> >>         void set(const T &value)\n> >>              ^\n> >> 1 error generated.\n> >>\n> >> I'll update the Python generator script here to fix this, it will be\n> >> part of v9.\n> >>\n> >>> Signed-off-by: Christian Rauch <Rauch.Christian@gmx.de>\n> >>> Reviewed-by: Jacopo Mondi <jacopo@jmondi.org>\n> >>> ---\n> >>>  src/libcamera/control_ids.yaml  | 4 ++--\n> >>>  src/libcamera/property_ids.yaml | 4 ++--\n> >>>  2 files changed, 4 insertions(+), 4 deletions(-)\n> >>>\n> >>> diff --git a/src/libcamera/control_ids.yaml b/src/libcamera/control_ids.yaml\n> >>> index cd1d4512..f707c1f5 100644\n> >>> --- a/src/libcamera/control_ids.yaml\n> >>> +++ b/src/libcamera/control_ids.yaml\n> >>> @@ -291,7 +291,7 @@ controls:\n> >>>          transformation. The 3x3 matrix is stored in conventional reading\n> >>>          order in an array of 9 floating point values.\n> >>>\n> >>> -      size: [3x3]\n> >>> +      size: [3,3]\n> >>>\n> >>>    - ScalerCrop:\n> >>>        type: Rectangle\n> >>> @@ -515,7 +515,7 @@ controls:\n> >>>          the window where the focal distance for the objects shown in that part\n> >>>          of the image are closest to the camera.\n> >>>\n> >>> -      size: [n]\n> >>> +      size: []\n> >>>\n> >>>    - AfTrigger:\n> >>>        type: int32_t\n> >>> diff --git a/src/libcamera/property_ids.yaml b/src/libcamera/property_ids.yaml\n> >>> index 11b7ebdc..a87485d7 100644\n> >>> --- a/src/libcamera/property_ids.yaml\n> >>> +++ b/src/libcamera/property_ids.yaml\n> >>> @@ -497,7 +497,7 @@ controls:\n> >>>\n> >>>    - PixelArrayOpticalBlackRectangles:\n> >>>        type: Rectangle\n> >>> -      size: [n]\n> >>> +      size: []\n> >>>        description: |\n> >>>          The pixel array region(s) which contain optical black pixels\n> >>>          considered valid for calibration purposes.\n> >>> @@ -592,7 +592,7 @@ controls:\n> >>>\n> >>>    - PixelArrayActiveAreas:\n> >>>        type: Rectangle\n> >>> -      size: [n]\n> >>> +      size: []\n> >>>        description: |\n> >>>          The PixelArrayActiveAreas property defines the (possibly multiple and\n> >>>          overlapping) portions of the camera sensor readable pixel matrix\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 0BCA9BD1F1\n\tfor <parsemail@patchwork.libcamera.org>;\n\tTue,  5 Jul 2022 09:18:41 +0000 (UTC)","from lancelot.ideasonboard.com (localhost [IPv6:::1])\n\tby lancelot.ideasonboard.com (Postfix) with ESMTP id BD4B66330E;\n\tTue,  5 Jul 2022 11:18:40 +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 86C0760401\n\tfor <libcamera-devel@lists.libcamera.org>;\n\tTue,  5 Jul 2022 11:18:38 +0200 (CEST)","from pendragon.ideasonboard.com\n\t(cpc89244-aztw30-2-0-cust3082.18-1.cable.virginm.net [86.31.172.11])\n\tby perceval.ideasonboard.com (Postfix) with ESMTPSA id 26ADF332;\n\tTue,  5 Jul 2022 11:18:38 +0200 (CEST)"],"DKIM-Signature":["v=1; a=rsa-sha256; c=relaxed/simple; d=libcamera.org;\n\ts=mail; t=1657012720;\n\tbh=3Ao+FNJJf0MEDlpCRrSZIOUrxykK24yxuh8XrWyDuB0=;\n\th=In-Reply-To:References:To:Date:Subject:List-Id:List-Unsubscribe:\n\tList-Archive:List-Post:List-Help:List-Subscribe:From:Reply-To:\n\tFrom;\n\tb=l9qPFb/4wRzAYzOwbYBoJkUN8WvbGD9vWZOHlvJGWf5n3LP+doR1n10oRYLwqYrYz\n\tg5BkSAS1K9HQ31dMPw5YF7TE1nefe2yezuxK/ldzXVvgGWW39US35qXbakK+GhH0j9\n\tFPg+keTqDbzpMQ6i0Wr1DCJJnPRZCoiLa3LL0/X289BNY3AfVc7Vvej5h4kmtD8suS\n\tfABr4BIFj7cn84boFyDi9+zkwOg7orjJwJ5aaWTrxjCOSWFUvv9PD5Wk9GXxOYcJdC\n\twN8gymSfSodCuDdPjQvj75ke7MoILylyqPO+KWKLzY+oYe+YtN6gUrobc3oeNS+yDf\n\tc0666mspA7PmA==","v=1; a=rsa-sha256; c=relaxed/simple; d=ideasonboard.com;\n\ts=mail; t=1657012718;\n\tbh=3Ao+FNJJf0MEDlpCRrSZIOUrxykK24yxuh8XrWyDuB0=;\n\th=In-Reply-To:References:Subject:From:To:Date:From;\n\tb=MuSH6DNco0QZ4jxC4TgnT3P5sPgt+fWIkhvRyi4dWwnZ62dhqvtOut0igqxVfSFAw\n\tEKA1xzq3EKRxIXQUoWRaJooVb2wYLomyOyVoDk5WOUQUKtDuNWO2BRI9Dh1WzPOdpC\n\tuetQ73j63ysoKPD7oDVm22iekDWg0EVyHVJHT/5I="],"Authentication-Results":"lancelot.ideasonboard.com; dkim=pass (1024-bit key; \n\tunprotected) header.d=ideasonboard.com\n\theader.i=@ideasonboard.com\n\theader.b=\"MuSH6DNc\"; dkim-atps=neutral","Content-Type":"text/plain; charset=\"utf-8\"","MIME-Version":"1.0","Content-Transfer-Encoding":"quoted-printable","In-Reply-To":"<301ece41-7011-e6cb-e898-a26ffe5aa4f8@gmx.de>","References":"<20220610120338.96883-1-Rauch.Christian@gmx.de>\n\t<20220610120338.96883-3-Rauch.Christian@gmx.de>\n\t<YsN51fVNbSUqkrqc@pendragon.ideasonboard.com>\n\t<YsN8tvx8/zakO4Cu@pendragon.ideasonboard.com>\n\t<301ece41-7011-e6cb-e898-a26ffe5aa4f8@gmx.de>","To":"Christian Rauch <Rauch.Christian@gmx.de>,\n\tlibcamera-devel@lists.libcamera.org","Date":"Tue, 05 Jul 2022 10:18:36 +0100","Message-ID":"<165701271606.2021905.5142206891214573198@Monstersaurus>","User-Agent":"alot/0.10","Subject":"Re: [libcamera-devel] [PATCH v8 2/4] libcamera: controls: Define\n\tsize of array controls as a shape vector","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":"Kieran Bingham via libcamera-devel\n\t<libcamera-devel@lists.libcamera.org>","Reply-To":"Kieran Bingham <kieran.bingham@ideasonboard.com>","Errors-To":"libcamera-devel-bounces@lists.libcamera.org","Sender":"\"libcamera-devel\" <libcamera-devel-bounces@lists.libcamera.org>"}}]