[{"id":35301,"web_url":"https://patchwork.libcamera.org/comment/35301/","msgid":"<175457712266.2641331.4551453582314230482@ping.linuxembedded.co.uk>","date":"2025-08-07T14:32:02","subject":"Re: [PATCH 0/3] libcamera: Make ControlValue a view","submitter":{"id":4,"url":"https://patchwork.libcamera.org/api/people/4/","name":"Kieran Bingham","email":"kieran.bingham@ideasonboard.com"},"content":"Quoting Jacopo Mondi (2025-08-06 13:30:44)\n> This series picks Barnabas patch\n> \n> [PATCH RFC 1/3] libcamera: controls: Add `ControlValueView`\n> \n> and on top of that one it makes the existing ControlValue a view\n> re-naming it to ControlStorage.\n> \n> The final goal is to prepare for the introduction of MetadataList and\n> make sure it expose the same types to applications as ControlList does.\n> \n> MetadataList stores control values in a serialized buffer of binary\n> data, while ControlList at the moment stores controls in a map of <id,\n> ControlValue>\n> \n> For this reason MetadataList, not storing values in a map of\n> ControlValue, cannot use ControlValue in their interface but instead\n> expose a view-like interface which gives to application a read-only\n> access to the underlying storage. I think that's desirable for\n> ControlList as well, even more now that we're preparing to get towards a\n> C ABI.\n> \n> On top of this series, it would be possible to apply Barnabas\n> https://patchwork.libcamera.org/project/libcamera/list/?series=5135\n> that gives to ControlValue (now ControlStorage) a move interface.\n> \n> I would even consider going further and make it a move-only type, so\n> that a time there is a single storage for a ControlValue.\n> \n> Sending as RFC to collect opinions, as this certainly is an ABI breaking\n> change.\n\nNows a good time ;-)\n\nhttps://lists.libcamera.org/pipermail/libcamera-devel/2025-August/052182.html\n\n--\nKieran\n\n> \n> Signed-off-by: Jacopo Mondi <jacopo.mondi@ideasonboard.com>\n> ---\n> Barnabás Pőcze (1):\n>       libcamera: controls: Add `ControlValueView`\n> \n> Jacopo Mondi (2):\n>       libcamera: Rename ControlValue to ControlStorage\n>       libcamera: Make ControlValue a view\n> \n>  include/libcamera/control_ids.h.in                 |   2 +-\n>  include/libcamera/controls.h                       | 133 +++++--\n>  include/libcamera/internal/control_serializer.h    |   2 +-\n>  include/libcamera/internal/debug_controls.h        |   2 +-\n>  include/libcamera/internal/delayed_controls.h      |   6 +-\n>  src/apps/cam/capture_script.cpp                    |  16 +-\n>  src/apps/cam/capture_script.h                      |   8 +-\n>  src/ipa/libipa/agc_mean_luminance.cpp              |   4 +-\n>  src/ipa/libipa/awb.cpp                             |   4 +-\n>  src/ipa/libipa/awb.h                               |   2 +-\n>  src/ipa/rkisp1/algorithms/agc.cpp                  |  16 +-\n>  src/ipa/rkisp1/algorithms/ccm.cpp                  |   6 +-\n>  src/ipa/rpi/common/ipa_base.cpp                    |  18 +-\n>  src/ipa/rpi/pisp/pisp.cpp                          |   2 +-\n>  src/ipa/rpi/vc4/vc4.cpp                            |  20 +-\n>  src/libcamera/control_ids.cpp.in                   |   2 +-\n>  src/libcamera/control_serializer.cpp               |  14 +-\n>  src/libcamera/controls.cpp                         | 399 ++++++++++++++-------\n>  src/libcamera/debug_controls.cpp                   |   4 +-\n>  src/libcamera/ipa_controls.cpp                     |   2 +-\n>  src/libcamera/pipeline/ipu3/ipu3.cpp               |   4 +-\n>  .../pipeline/rpi/common/delayed_controls.h         |   6 +-\n>  .../pipeline/rpi/common/pipeline_base.cpp          |   2 +-\n>  src/libcamera/pipeline/rpi/vc4/vc4.cpp             |   4 +-\n>  src/libcamera/pipeline/uvcvideo/uvcvideo.cpp       |  10 +-\n>  src/libcamera/pipeline/virtual/config_parser.cpp   |   2 +-\n>  src/libcamera/sensor/camera_sensor_legacy.cpp      |   2 +-\n>  src/libcamera/sensor/camera_sensor_raw.cpp         |   2 +-\n>  src/libcamera/v4l2_device.cpp                      |  14 +-\n>  src/py/libcamera/py_helpers.cpp                    |  18 +-\n>  src/py/libcamera/py_helpers.h                      |   2 +-\n>  test/controls/control_value.cpp                    |   8 +-\n>  test/serialization/serialization_test.cpp          |  12 +-\n>  test/v4l2_videodevice/controls.cpp                 |   4 +-\n>  34 files changed, 478 insertions(+), 274 deletions(-)\n> ---\n> base-commit: 7a42f3c3d88926aa05b07d9c6a783bdbbfb73610\n> change-id: 20250803-control_storage-8972535fed5f\n> \n> Best regards,\n> -- \n> Jacopo Mondi <jacopo.mondi@ideasonboard.com>\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 83205BDCC1\n\tfor <parsemail@patchwork.libcamera.org>;\n\tThu,  7 Aug 2025 14:32:09 +0000 (UTC)","from lancelot.ideasonboard.com (localhost [IPv6:::1])\n\tby lancelot.ideasonboard.com (Postfix) with ESMTP id 5A0CC6921E;\n\tThu,  7 Aug 2025 16:32:08 +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 2EFC769052\n\tfor <libcamera-devel@lists.libcamera.org>;\n\tThu,  7 Aug 2025 16:32:06 +0200 (CEST)","from pendragon.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 B134CC75;\n\tThu,  7 Aug 2025 16:31:16 +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=\"FXRZVe4h\"; dkim-atps=neutral","DKIM-Signature":"v=1; a=rsa-sha256; c=relaxed/simple; d=ideasonboard.com;\n\ts=mail; t=1754577076;\n\tbh=xtDvOeFPLnEhZuHmm7fbENxHVdViptmJEhE9TnmDgKs=;\n\th=In-Reply-To:References:Subject:From:Cc:To:Date:From;\n\tb=FXRZVe4hvW8vQ5Ry75r/PAxg03Ckamj/zquVU8fCyIR1PuiYg2aH8F/Lem/jXCdGy\n\torUkwlWZccxBXklkoFQJA2PgU8aTXQKf6v5xV2FY9pmHtN9zXMaZxaIZlxWwvlY7m2\n\t0+UTMIXHkFUVLE95peQgZhkhalUAvPC/p3BkZ+x0=","Content-Type":"text/plain; charset=\"utf-8\"","MIME-Version":"1.0","Content-Transfer-Encoding":"quoted-printable","In-Reply-To":"<20250806-control_storage-v1-0-2ec8424f6f7d@ideasonboard.com>","References":"<20250806-control_storage-v1-0-2ec8424f6f7d@ideasonboard.com>","Subject":"Re: [PATCH 0/3] libcamera: Make ControlValue a view","From":"Kieran Bingham <kieran.bingham@ideasonboard.com>","Cc":"Jacopo Mondi <jacopo.mondi@ideasonboard.com>, =?utf-8?q?Barnab=C3=A1s_?=\n\t=?utf-8?b?UMWRY3pl?= <barnabas.pocze@ideasonboard.com>","To":"Jacopo Mondi <jacopo.mondi@ideasonboard.com>,\n\tlibcamera-devel@lists.libcamera.org","Date":"Thu, 07 Aug 2025 15:32:02 +0100","Message-ID":"<175457712266.2641331.4551453582314230482@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>"}}]