[{"id":36947,"web_url":"https://patchwork.libcamera.org/comment/36947/","msgid":"<thso6h7mqhbxk4ndnwfz5on7peuc76dfktqb47wip6w6uwxw4i@adquogviiqbp>","date":"2025-11-20T15:45:02","subject":"Re: [PATCH v6 0/2] Fix ControlSerializer deserializing array\n\tcontrols","submitter":{"id":143,"url":"https://patchwork.libcamera.org/api/people/143/","name":"Jacopo Mondi","email":"jacopo.mondi@ideasonboard.com"},"content":"Hi Paul, Stefan\n\nI'm running with this patches applied, but probably camshark need an\nupdated as well\n\n  File \"camshark/venv/lib64/python3.13/site-packages/pyqtgraph/parametertree/Parameter.py\", line 785, in child\n    param = self.names[names[0]]\n            ~~~~~~~~~~^^^^^^^^^^\nKeyError: 'ColourGains'\n\nThe above exception was the direct cause of the following exception:\n\nTraceback (most recent call last):\n  File \"camshark/src/camshark/camshark.py\", line 585, in on_camera_info\n    param = controlsParam.child(name)\n  File \"camshark/venv/lib64/python3.13/site-packages/pyqtgraph/parametertree/Parameter.py\", line 787, in child\n    raise KeyError(f\"Parameter {self.name()} has no child named {names[0]}\") from e\nKeyError: 'Parameter Controls has no child named ColourGains'\n\nDuring handling of the above exception, another exception occurred:\n\nTraceback (most recent call last):\n  File \"camshark/src/camshark/camshark.py\", line 587, in on_camera_info\n    p = self.create_parameter_for_control(name, desc)\n  File \"camshark/src/camshark/camshark.py\", line 537, in create_parameter_for_control\n    if desc['default'] not in span:\n       ^^^^^^^^^^^^^^^^^^^^^^^^^^^\nValueError: operands could not be broadcast together with shapes (201,) (2,)\n\nlet me know if I should file a bug report\n\nOn Mon, Nov 17, 2025 at 05:08:13PM +0900, Paul Elder wrote:\n> This series fixes bug 285 [0] where running IPAs in isolation with array\n> controls would cause the control deserialization to fail, since the\n> deserializer didn't properly deserialize array controls.\n>\n> This is fixed by making the deserializer properly deserialize array\n> controls, by adding all ControlValue metadata to the serialized form of\n> ControlInfoMap.\n>\n> v6 notably moves ipa_control_value_entry into ipa_control_info_entry, as\n> opposed to serializing them in the same level like before.\n>\n> v5 contains minor cleanups.\n>\n> v4 notably cleans up unused fields in metatata structs, so it touches\n> ControlList as well.\n>\n> In v3 we reuse struct ipa_control_value_entry to store the relevant\n> information instead, and add them to the serialized form of\n> ControlInfoMap.\n>\n> In v2 the arrayness and size are stored in the serialized form of\n> ControlValue instead of using the information registered in the\n> ControlId. This allows us to support variable-length arrays (which v1\n> didn't), and allows us to support both non-array and array types min/max\n> ControlValues in the ControlInfo, depending on which type of min/max\n> value makes more sense for the specific control.\n>\n> [0] https://bugs.libcamera.org/show_bug.cgi?id=285\n>\n> Paul Elder (2):\n>   libcamera: control_serializer: Add array info to serialized\n>     ControlValue\n>   ipa: ipu3, mali-c55, rkisp1, rpi: Fix reporting non-scalar controls\n>\n>  .../libcamera/internal/control_serializer.h   |   8 +-\n>  include/libcamera/ipa/ipa_controls.h          |  16 +-\n>  src/ipa/ipu3/ipu3.cpp                         |   4 +-\n>  src/ipa/mali-c55/mali-c55.cpp                 |   4 +-\n>  src/ipa/rkisp1/algorithms/awb.cpp             |   4 +-\n>  src/ipa/rkisp1/rkisp1.cpp                     |   3 +-\n>  src/ipa/rpi/common/ipa_base.cpp               |   7 +-\n>  src/libcamera/control_serializer.cpp          | 106 +++++++----\n>  src/libcamera/ipa_controls.cpp                | 178 ++++++++++--------\n>  9 files changed, 197 insertions(+), 133 deletions(-)\n>\n> --\n> 2.47.2\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 55A36BD80A\n\tfor <parsemail@patchwork.libcamera.org>;\n\tThu, 20 Nov 2025 15:45:09 +0000 (UTC)","from lancelot.ideasonboard.com (localhost [IPv6:::1])\n\tby lancelot.ideasonboard.com (Postfix) with ESMTP id A50F8609D8;\n\tThu, 20 Nov 2025 16:45:08 +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 7F0996069A\n\tfor <libcamera-devel@lists.libcamera.org>;\n\tThu, 20 Nov 2025 16:45:06 +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 C7D159CA;\n\tThu, 20 Nov 2025 16:43:00 +0100 (CET)"],"Authentication-Results":"lancelot.ideasonboard.com; dkim=pass (1024-bit key;\n\tunprotected) header.d=ideasonboard.com header.i=@ideasonboard.com\n\theader.b=\"s30mmeHv\"; dkim-atps=neutral","DKIM-Signature":"v=1; a=rsa-sha256; c=relaxed/simple; d=ideasonboard.com;\n\ts=mail; t=1763653380;\n\tbh=NtCyL6uWXgm8+c0feLAazVPuDxhzQT8SPZgkV9K1D6E=;\n\th=Date:From:To:Cc:Subject:References:In-Reply-To:From;\n\tb=s30mmeHvgq0lA/ta1tkTcFMP0isUPQB08+xK0m4lgJTcEMTBflQEp1zuVsbsb5oV5\n\tSxs1a7aqTXwpa5f+5kSxku0OEPaEqbu+1rVIEfyryCHJmkDAAz3Xy+QKb7qoSz2Utj\n\tjQOXWHnSwhNMOqLnvOGf7+ZVbLsRT4CY2uQyvoGM=","Date":"Thu, 20 Nov 2025 16:45:02 +0100","From":"Jacopo Mondi <jacopo.mondi@ideasonboard.com>","To":"Paul Elder <paul.elder@ideasonboard.com>, \n\tStefan Klug <stefan.klug@ideasonboard.com>","Cc":"libcamera-devel@lists.libcamera.org","Subject":"Re: [PATCH v6 0/2] Fix ControlSerializer deserializing array\n\tcontrols","Message-ID":"<thso6h7mqhbxk4ndnwfz5on7peuc76dfktqb47wip6w6uwxw4i@adquogviiqbp>","References":"<20251117080818.3009835-1-paul.elder@ideasonboard.com>","MIME-Version":"1.0","Content-Type":"text/plain; charset=utf-8","Content-Disposition":"inline","In-Reply-To":"<20251117080818.3009835-1-paul.elder@ideasonboard.com>","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":37023,"web_url":"https://patchwork.libcamera.org/comment/37023/","msgid":"<2kle3u4ua6r7jh747p2x52ad6j3bcsvsclvsgxtqpg2quuqs44@woukcsw3dstb>","date":"2025-11-24T11:22:49","subject":"Re: [PATCH v6 0/2] Fix ControlSerializer deserializing array\n\tcontrols","submitter":{"id":143,"url":"https://patchwork.libcamera.org/api/people/143/","name":"Jacopo Mondi","email":"jacopo.mondi@ideasonboard.com"},"content":"Hello again\n\nwith these patches applied I can succesfully run '--list-controls'\nwhich was the original use case reported in bug\nhttps://gitlab.freedesktop.org/camera/libcamera/-/issues/285\n\nHowever, trying to -set- any control in isolation mode fails:\n\n[2:22:39.059666250] [846] FATAL Serializer control_serializer.cpp:628 A list of V4L2 controls requires a ControlInfoMap\n8559.087839 (30.08 fps) cam0-stream0 seq: 000048 bytesused: 2073600/1036800\nBacktrace:\nlibcamera::ControlList libcamera::ControlSerializer::deserialize<libcamera::ControlList>(libcamera::ByteStreamBuffer&)+0x350 (../src/libcamera/control_serializer.cpp:631)\nlibcamera::IPADataSerializer<libcamera::ControlList, void>::deserialize(__gnu_cxx::__normal_iterator<unsigned char const*, std::vector<unsigned char, std::allocator<unsigned char> > >, __gnu_cxx::__normal_iterato\nr<unsigned char const*, std::vector<unsigned char, std::allocator<unsigned char> > >, libcamera::ControlSerializer*)+0x2a8 (../src/libcamera/ipa_data_serializer.cpp:394)\nIPAProxyRkISP1Worker::readyRead()+0x1320 (src/libcamera/proxy/worker/rkisp1_ipa_proxy_worker.cpp:301)\nlibcamera::BoundMethodMember<IPAProxyRkISP1Worker, void>::activate(bool)+0x80 (../include/libcamera/base/bound_method.h:169)\nlibcamera::Signal<>::emit()+0x70 (../include/libcamera/base/signal.h:146)\nlibcamera::IPCUnixSocket::dataNotifier()+0x15c (../src/libcamera/ipc_unixsocket.cpp:348)\nlibcamera::BoundMethodMember<libcamera::IPCUnixSocket, void>::activate(bool)+0x80 (../include/libcamera/base/bound_method.h:169)\nlibcamera::Signal<>::emit()+0x70 (../include/libcamera/base/signal.h:146)\nlibcamera::EventDispatcherPoll::processNotifiers(std::vector<pollfd, std::allocator<pollfd> > const&)+0x260 (../src/libcamera/base/event_dispatcher_poll.cpp:280)\nlibcamera::EventDispatcherPoll::processEvents()+0x1f4 (../src/libcamera/base/event_dispatcher_poll.cpp:171)\nIPAProxyRkISP1Worker::run()+0x34 (src/libcamera/proxy/worker/rkisp1_ipa_proxy_worker.cpp:392)\nmain+0x3ec (src/libcamera/proxy/worker/rkisp1_ipa_proxy_worker.cpp:556)\n??? [0x0000ffffab89229c] (/usr/lib/aarch64-linux-gnu/libc.so.6 [0x0000ffffab89229c])\n__libc_start_main+0x9c (/usr/lib/aarch64-linux-gnu/libc.so.6 [0x0000ffffab89237c])\nExiting\n\nI've filled in more details in the issue.\n\nOn Thu, Nov 20, 2025 at 04:45:02PM +0100, Jacopo Mondi wrote:\n> Hi Paul, Stefan\n>\n> I'm running with this patches applied, but probably camshark need an\n> updated as well\n>\n>   File \"camshark/venv/lib64/python3.13/site-packages/pyqtgraph/parametertree/Parameter.py\", line 785, in child\n>     param = self.names[names[0]]\n>             ~~~~~~~~~~^^^^^^^^^^\n> KeyError: 'ColourGains'\n>\n> The above exception was the direct cause of the following exception:\n>\n> Traceback (most recent call last):\n>   File \"camshark/src/camshark/camshark.py\", line 585, in on_camera_info\n>     param = controlsParam.child(name)\n>   File \"camshark/venv/lib64/python3.13/site-packages/pyqtgraph/parametertree/Parameter.py\", line 787, in child\n>     raise KeyError(f\"Parameter {self.name()} has no child named {names[0]}\") from e\n> KeyError: 'Parameter Controls has no child named ColourGains'\n>\n> During handling of the above exception, another exception occurred:\n>\n> Traceback (most recent call last):\n>   File \"camshark/src/camshark/camshark.py\", line 587, in on_camera_info\n>     p = self.create_parameter_for_control(name, desc)\n>   File \"camshark/src/camshark/camshark.py\", line 537, in create_parameter_for_control\n>     if desc['default'] not in span:\n>        ^^^^^^^^^^^^^^^^^^^^^^^^^^^\n> ValueError: operands could not be broadcast together with shapes (201,) (2,)\n>\n> let me know if I should file a bug report\n>\n> On Mon, Nov 17, 2025 at 05:08:13PM +0900, Paul Elder wrote:\n> > This series fixes bug 285 [0] where running IPAs in isolation with array\n> > controls would cause the control deserialization to fail, since the\n> > deserializer didn't properly deserialize array controls.\n> >\n> > This is fixed by making the deserializer properly deserialize array\n> > controls, by adding all ControlValue metadata to the serialized form of\n> > ControlInfoMap.\n> >\n> > v6 notably moves ipa_control_value_entry into ipa_control_info_entry, as\n> > opposed to serializing them in the same level like before.\n> >\n> > v5 contains minor cleanups.\n> >\n> > v4 notably cleans up unused fields in metatata structs, so it touches\n> > ControlList as well.\n> >\n> > In v3 we reuse struct ipa_control_value_entry to store the relevant\n> > information instead, and add them to the serialized form of\n> > ControlInfoMap.\n> >\n> > In v2 the arrayness and size are stored in the serialized form of\n> > ControlValue instead of using the information registered in the\n> > ControlId. This allows us to support variable-length arrays (which v1\n> > didn't), and allows us to support both non-array and array types min/max\n> > ControlValues in the ControlInfo, depending on which type of min/max\n> > value makes more sense for the specific control.\n> >\n> > [0] https://bugs.libcamera.org/show_bug.cgi?id=285\n> >\n> > Paul Elder (2):\n> >   libcamera: control_serializer: Add array info to serialized\n> >     ControlValue\n> >   ipa: ipu3, mali-c55, rkisp1, rpi: Fix reporting non-scalar controls\n> >\n> >  .../libcamera/internal/control_serializer.h   |   8 +-\n> >  include/libcamera/ipa/ipa_controls.h          |  16 +-\n> >  src/ipa/ipu3/ipu3.cpp                         |   4 +-\n> >  src/ipa/mali-c55/mali-c55.cpp                 |   4 +-\n> >  src/ipa/rkisp1/algorithms/awb.cpp             |   4 +-\n> >  src/ipa/rkisp1/rkisp1.cpp                     |   3 +-\n> >  src/ipa/rpi/common/ipa_base.cpp               |   7 +-\n> >  src/libcamera/control_serializer.cpp          | 106 +++++++----\n> >  src/libcamera/ipa_controls.cpp                | 178 ++++++++++--------\n> >  9 files changed, 197 insertions(+), 133 deletions(-)\n> >\n> > --\n> > 2.47.2\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 B3637C32F0\n\tfor <parsemail@patchwork.libcamera.org>;\n\tMon, 24 Nov 2025 11:22:56 +0000 (UTC)","from lancelot.ideasonboard.com (localhost [IPv6:::1])\n\tby lancelot.ideasonboard.com (Postfix) with ESMTP id 00F2C60A80;\n\tMon, 24 Nov 2025 12:22:56 +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 A7A456096B\n\tfor <libcamera-devel@lists.libcamera.org>;\n\tMon, 24 Nov 2025 12:22:54 +0100 (CET)","from ideasonboard.com (mob-5-90-137-64.net.vodafone.it\n\t[5.90.137.64])\n\tby perceval.ideasonboard.com (Postfix) with ESMTPSA id E7E5629A;\n\tMon, 24 Nov 2025 12:20:45 +0100 (CET)"],"Authentication-Results":"lancelot.ideasonboard.com; dkim=pass (1024-bit key;\n\tunprotected) header.d=ideasonboard.com header.i=@ideasonboard.com\n\theader.b=\"ccKmgmyC\"; dkim-atps=neutral","DKIM-Signature":"v=1; a=rsa-sha256; c=relaxed/simple; d=ideasonboard.com;\n\ts=mail; t=1763983246;\n\tbh=gHPKLHheNvmf4rpInImWqVFJyme8r0DvCr90NAnHOU0=;\n\th=Date:From:To:Cc:Subject:References:In-Reply-To:From;\n\tb=ccKmgmyC7HgxmHyWDPaXWny9IPDnBeRhOq4r2V7Y2pyy+dSwbgaY74MsmMlNpH/kU\n\t9UEV1FtTLrs2ak1G7SikpMFSfdae7JbwFQQPppWWuNNZdzJgIbl4YCLHLcKsZe4K7W\n\twbN1kMcn/5WU2PF5LG7Yd1wyF+qHe7oOBvdSvZbQ=","Date":"Mon, 24 Nov 2025 12:22:49 +0100","From":"Jacopo Mondi <jacopo.mondi@ideasonboard.com>","To":"Jacopo Mondi <jacopo.mondi@ideasonboard.com>","Cc":"Paul Elder <paul.elder@ideasonboard.com>, \n\tStefan Klug <stefan.klug@ideasonboard.com>,\n\tlibcamera-devel@lists.libcamera.org","Subject":"Re: [PATCH v6 0/2] Fix ControlSerializer deserializing array\n\tcontrols","Message-ID":"<2kle3u4ua6r7jh747p2x52ad6j3bcsvsclvsgxtqpg2quuqs44@woukcsw3dstb>","References":"<20251117080818.3009835-1-paul.elder@ideasonboard.com>\n\t<thso6h7mqhbxk4ndnwfz5on7peuc76dfktqb47wip6w6uwxw4i@adquogviiqbp>","MIME-Version":"1.0","Content-Type":"text/plain; charset=utf-8","Content-Disposition":"inline","In-Reply-To":"<thso6h7mqhbxk4ndnwfz5on7peuc76dfktqb47wip6w6uwxw4i@adquogviiqbp>","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":37028,"web_url":"https://patchwork.libcamera.org/comment/37028/","msgid":"<zizeiegjpxuuwshkg4fuuyncaexqln435xgpdhe2ppmtjcshso@prkwz56lc7xf>","date":"2025-11-24T15:24:09","subject":"Re: [PATCH v6 0/2] Fix ControlSerializer deserializing array\n\tcontrols","submitter":{"id":143,"url":"https://patchwork.libcamera.org/api/people/143/","name":"Jacopo Mondi","email":"jacopo.mondi@ideasonboard.com"},"content":"I've updated the issue, and the error is not related to serialization\nbut it is a consequence of the cam test application assigning to a\nRequest's control list a newly created one which doesn't have a\nvalid ControlInfoMap.\n\nIn general we should disallow any pattern like\n\nRequest->controls() = new ControlList();\n\nand only allow applications to set/merge new controls in the\nControlList created by the Request class constructor.\n\nOn Mon, Nov 24, 2025 at 12:22:49PM +0100, Jacopo Mondi wrote:\n> Hello again\n>\n> with these patches applied I can succesfully run '--list-controls'\n> which was the original use case reported in bug\n> https://gitlab.freedesktop.org/camera/libcamera/-/issues/285\n>\n> However, trying to -set- any control in isolation mode fails:\n>\n> [2:22:39.059666250] [846] FATAL Serializer control_serializer.cpp:628 A list of V4L2 controls requires a ControlInfoMap\n> 8559.087839 (30.08 fps) cam0-stream0 seq: 000048 bytesused: 2073600/1036800\n> Backtrace:\n> libcamera::ControlList libcamera::ControlSerializer::deserialize<libcamera::ControlList>(libcamera::ByteStreamBuffer&)+0x350 (../src/libcamera/control_serializer.cpp:631)\n> libcamera::IPADataSerializer<libcamera::ControlList, void>::deserialize(__gnu_cxx::__normal_iterator<unsigned char const*, std::vector<unsigned char, std::allocator<unsigned char> > >, __gnu_cxx::__normal_iterato\n> r<unsigned char const*, std::vector<unsigned char, std::allocator<unsigned char> > >, libcamera::ControlSerializer*)+0x2a8 (../src/libcamera/ipa_data_serializer.cpp:394)\n> IPAProxyRkISP1Worker::readyRead()+0x1320 (src/libcamera/proxy/worker/rkisp1_ipa_proxy_worker.cpp:301)\n> libcamera::BoundMethodMember<IPAProxyRkISP1Worker, void>::activate(bool)+0x80 (../include/libcamera/base/bound_method.h:169)\n> libcamera::Signal<>::emit()+0x70 (../include/libcamera/base/signal.h:146)\n> libcamera::IPCUnixSocket::dataNotifier()+0x15c (../src/libcamera/ipc_unixsocket.cpp:348)\n> libcamera::BoundMethodMember<libcamera::IPCUnixSocket, void>::activate(bool)+0x80 (../include/libcamera/base/bound_method.h:169)\n> libcamera::Signal<>::emit()+0x70 (../include/libcamera/base/signal.h:146)\n> libcamera::EventDispatcherPoll::processNotifiers(std::vector<pollfd, std::allocator<pollfd> > const&)+0x260 (../src/libcamera/base/event_dispatcher_poll.cpp:280)\n> libcamera::EventDispatcherPoll::processEvents()+0x1f4 (../src/libcamera/base/event_dispatcher_poll.cpp:171)\n> IPAProxyRkISP1Worker::run()+0x34 (src/libcamera/proxy/worker/rkisp1_ipa_proxy_worker.cpp:392)\n> main+0x3ec (src/libcamera/proxy/worker/rkisp1_ipa_proxy_worker.cpp:556)\n> ??? [0x0000ffffab89229c] (/usr/lib/aarch64-linux-gnu/libc.so.6 [0x0000ffffab89229c])\n> __libc_start_main+0x9c (/usr/lib/aarch64-linux-gnu/libc.so.6 [0x0000ffffab89237c])\n> Exiting\n>\n> I've filled in more details in the issue.\n>\n> On Thu, Nov 20, 2025 at 04:45:02PM +0100, Jacopo Mondi wrote:\n> > Hi Paul, Stefan\n> >\n> > I'm running with this patches applied, but probably camshark need an\n> > updated as well\n> >\n> >   File \"camshark/venv/lib64/python3.13/site-packages/pyqtgraph/parametertree/Parameter.py\", line 785, in child\n> >     param = self.names[names[0]]\n> >             ~~~~~~~~~~^^^^^^^^^^\n> > KeyError: 'ColourGains'\n> >\n> > The above exception was the direct cause of the following exception:\n> >\n> > Traceback (most recent call last):\n> >   File \"camshark/src/camshark/camshark.py\", line 585, in on_camera_info\n> >     param = controlsParam.child(name)\n> >   File \"camshark/venv/lib64/python3.13/site-packages/pyqtgraph/parametertree/Parameter.py\", line 787, in child\n> >     raise KeyError(f\"Parameter {self.name()} has no child named {names[0]}\") from e\n> > KeyError: 'Parameter Controls has no child named ColourGains'\n> >\n> > During handling of the above exception, another exception occurred:\n> >\n> > Traceback (most recent call last):\n> >   File \"camshark/src/camshark/camshark.py\", line 587, in on_camera_info\n> >     p = self.create_parameter_for_control(name, desc)\n> >   File \"camshark/src/camshark/camshark.py\", line 537, in create_parameter_for_control\n> >     if desc['default'] not in span:\n> >        ^^^^^^^^^^^^^^^^^^^^^^^^^^^\n> > ValueError: operands could not be broadcast together with shapes (201,) (2,)\n> >\n> > let me know if I should file a bug report\n> >\n> > On Mon, Nov 17, 2025 at 05:08:13PM +0900, Paul Elder wrote:\n> > > This series fixes bug 285 [0] where running IPAs in isolation with array\n> > > controls would cause the control deserialization to fail, since the\n> > > deserializer didn't properly deserialize array controls.\n> > >\n> > > This is fixed by making the deserializer properly deserialize array\n> > > controls, by adding all ControlValue metadata to the serialized form of\n> > > ControlInfoMap.\n> > >\n> > > v6 notably moves ipa_control_value_entry into ipa_control_info_entry, as\n> > > opposed to serializing them in the same level like before.\n> > >\n> > > v5 contains minor cleanups.\n> > >\n> > > v4 notably cleans up unused fields in metatata structs, so it touches\n> > > ControlList as well.\n> > >\n> > > In v3 we reuse struct ipa_control_value_entry to store the relevant\n> > > information instead, and add them to the serialized form of\n> > > ControlInfoMap.\n> > >\n> > > In v2 the arrayness and size are stored in the serialized form of\n> > > ControlValue instead of using the information registered in the\n> > > ControlId. This allows us to support variable-length arrays (which v1\n> > > didn't), and allows us to support both non-array and array types min/max\n> > > ControlValues in the ControlInfo, depending on which type of min/max\n> > > value makes more sense for the specific control.\n> > >\n> > > [0] https://bugs.libcamera.org/show_bug.cgi?id=285\n> > >\n> > > Paul Elder (2):\n> > >   libcamera: control_serializer: Add array info to serialized\n> > >     ControlValue\n> > >   ipa: ipu3, mali-c55, rkisp1, rpi: Fix reporting non-scalar controls\n> > >\n> > >  .../libcamera/internal/control_serializer.h   |   8 +-\n> > >  include/libcamera/ipa/ipa_controls.h          |  16 +-\n> > >  src/ipa/ipu3/ipu3.cpp                         |   4 +-\n> > >  src/ipa/mali-c55/mali-c55.cpp                 |   4 +-\n> > >  src/ipa/rkisp1/algorithms/awb.cpp             |   4 +-\n> > >  src/ipa/rkisp1/rkisp1.cpp                     |   3 +-\n> > >  src/ipa/rpi/common/ipa_base.cpp               |   7 +-\n> > >  src/libcamera/control_serializer.cpp          | 106 +++++++----\n> > >  src/libcamera/ipa_controls.cpp                | 178 ++++++++++--------\n> > >  9 files changed, 197 insertions(+), 133 deletions(-)\n> > >\n> > > --\n> > > 2.47.2\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 47F5DC326B\n\tfor <parsemail@patchwork.libcamera.org>;\n\tMon, 24 Nov 2025 15:24:18 +0000 (UTC)","from lancelot.ideasonboard.com (localhost [IPv6:::1])\n\tby lancelot.ideasonboard.com (Postfix) with ESMTP id 7092A60A9D;\n\tMon, 24 Nov 2025 16:24:17 +0100 (CET)","from perceval.ideasonboard.com (perceval.ideasonboard.com\n\t[213.167.242.64])\n\tby lancelot.ideasonboard.com (Postfix) with ESMTPS id E733F6096B\n\tfor <libcamera-devel@lists.libcamera.org>;\n\tMon, 24 Nov 2025 16:24:14 +0100 (CET)","from ideasonboard.com (mob-5-90-137-64.net.vodafone.it\n\t[5.90.137.64])\n\tby perceval.ideasonboard.com (Postfix) with ESMTPSA id E79B089A;\n\tMon, 24 Nov 2025 16:22:05 +0100 (CET)"],"Authentication-Results":"lancelot.ideasonboard.com; dkim=pass (1024-bit key;\n\tunprotected) header.d=ideasonboard.com header.i=@ideasonboard.com\n\theader.b=\"loKTrd37\"; dkim-atps=neutral","DKIM-Signature":"v=1; a=rsa-sha256; c=relaxed/simple; d=ideasonboard.com;\n\ts=mail; t=1763997726;\n\tbh=4X3R+ndGde2rUITcE0YI3u1pE5dDc/HIGbViHFMhDmc=;\n\th=Date:From:To:Cc:Subject:References:In-Reply-To:From;\n\tb=loKTrd37srreLGiIZ9WW/NyiY0sM6YWdLXmxRDUz2ATnYT73/res79LrimQ6kyOis\n\t973fV4TqN/mQJiYpGZyMuk0nf0E5+C9vbtjZgMz8yNvye6/ZoN2Mop+bipAKELEv2d\n\txPjOhvuvoT8LMVp1V3Tnghh5MgbcrO90uvC2I670=","Date":"Mon, 24 Nov 2025 16:24:09 +0100","From":"Jacopo Mondi <jacopo.mondi@ideasonboard.com>","To":"Jacopo Mondi <jacopo.mondi@ideasonboard.com>","Cc":"Paul Elder <paul.elder@ideasonboard.com>, \n\tStefan Klug <stefan.klug@ideasonboard.com>,\n\tlibcamera-devel@lists.libcamera.org","Subject":"Re: [PATCH v6 0/2] Fix ControlSerializer deserializing array\n\tcontrols","Message-ID":"<zizeiegjpxuuwshkg4fuuyncaexqln435xgpdhe2ppmtjcshso@prkwz56lc7xf>","References":"<20251117080818.3009835-1-paul.elder@ideasonboard.com>\n\t<thso6h7mqhbxk4ndnwfz5on7peuc76dfktqb47wip6w6uwxw4i@adquogviiqbp>\n\t<2kle3u4ua6r7jh747p2x52ad6j3bcsvsclvsgxtqpg2quuqs44@woukcsw3dstb>","MIME-Version":"1.0","Content-Type":"text/plain; charset=utf-8","Content-Disposition":"inline","In-Reply-To":"<2kle3u4ua6r7jh747p2x52ad6j3bcsvsclvsgxtqpg2quuqs44@woukcsw3dstb>","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>"}}]