{"id":24060,"url":"https://patchwork.libcamera.org/api/covers/24060/?format=json","web_url":"https://patchwork.libcamera.org/cover/24060/","project":{"id":1,"url":"https://patchwork.libcamera.org/api/projects/1/?format=json","name":"libcamera","link_name":"libcamera","list_id":"libcamera_core","list_email":"libcamera-devel@lists.libcamera.org","web_url":"","scm_url":"","webscm_url":""},"msgid":"<20250806-control_storage-v1-0-2ec8424f6f7d@ideasonboard.com>","date":"2025-08-06T12:30:44","name":"[0/3] libcamera: Make ControlValue a view","submitter":{"id":143,"url":"https://patchwork.libcamera.org/api/people/143/?format=json","name":"Jacopo Mondi","email":"jacopo.mondi@ideasonboard.com"},"mbox":"https://patchwork.libcamera.org/cover/24060/mbox/","series":[{"id":5358,"url":"https://patchwork.libcamera.org/api/series/5358/?format=json","web_url":"https://patchwork.libcamera.org/project/libcamera/list/?series=5358","date":"2025-08-06T12:30:44","name":"libcamera: Make ControlValue a view","version":1,"mbox":"https://patchwork.libcamera.org/series/5358/mbox/"}],"comments":"https://patchwork.libcamera.org/api/covers/24060/comments/","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 A45D9BDCC1\n\tfor <parsemail@patchwork.libcamera.org>;\n\tWed,  6 Aug 2025 12:31:02 +0000 (UTC)","from lancelot.ideasonboard.com (localhost [IPv6:::1])\n\tby lancelot.ideasonboard.com (Postfix) with ESMTP id 744F969221;\n\tWed,  6 Aug 2025 14:31:01 +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 CB591691F5\n\tfor <libcamera-devel@lists.libcamera.org>;\n\tWed,  6 Aug 2025 14:30:59 +0200 (CEST)","from [192.168.0.172] (mob-5-90-59-79.net.vodafone.it [5.90.59.79])\n\tby perceval.ideasonboard.com (Postfix) with ESMTPSA id 173C5CF;\n\tWed,  6 Aug 2025 14:30:11 +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=\"PlOTvPDe\"; dkim-atps=neutral","DKIM-Signature":"v=1; a=rsa-sha256; c=relaxed/simple; d=ideasonboard.com;\n\ts=mail; t=1754483411;\n\tbh=ZhGSD9hEnzM6hENxXGWbIrGCg1rbky63iKVG9Z0tnO8=;\n\th=From:Subject:Date:To:Cc:From;\n\tb=PlOTvPDeLrlmTRabWlN7v61n8LXwgrKM1QVSCxq+Na0wIewd+pc0kxIveYkvAFzS/\n\tpRqBDYn38memQwS/hayq7jiar6KmSXaABecyoV4OUnnzQMkQ/TVeOjC3LKkbSECQr1\n\t8QPrhYMDHcE64q1Mgv1jsRgA85LHTTcZcbW7BYvU=","From":"Jacopo Mondi <jacopo.mondi@ideasonboard.com>","Subject":"[PATCH 0/3] libcamera: Make ControlValue a view","Date":"Wed, 06 Aug 2025 14:30:44 +0200","Message-Id":"<20250806-control_storage-v1-0-2ec8424f6f7d@ideasonboard.com>","MIME-Version":"1.0","Content-Type":"text/plain; charset=\"utf-8\"","Content-Transfer-Encoding":"8bit","X-B4-Tracking":"v=1; b=H4sIAPRKk2gC/x2MQQqAIBAAvyJ7TjBDsr4SEaFrLYTGGhFIf086D\n\tsNMgYxMmGEUBRhvypRihbYR4PY1bijJVwattFFWddKleHE6lnwlXqu2Q69NZwJ6E6BWJ2Og5z9\n\tO8/t+2qQtH2EAAAA=","X-Change-ID":"20250803-control_storage-8972535fed5f","To":"libcamera-devel@lists.libcamera.org","Cc":"Jacopo Mondi <jacopo.mondi@ideasonboard.com>, =?utf-8?b?QmFybmFiw6Fz?=\n\t=?utf-8?q?_P=C5=91cze?= <barnabas.pocze@ideasonboard.com>","X-Mailer":"b4 0.14.2","X-Developer-Signature":"v=1; a=openpgp-sha256; l=3898;\n\ti=jacopo.mondi@ideasonboard.com; h=from:subject:message-id;\n\tbh=ZhGSD9hEnzM6hENxXGWbIrGCg1rbky63iKVG9Z0tnO8=;\n\tb=owEBbQKS/ZANAwAKAXI0Bo8WoVY8AcsmYgBok0sC6XRTtLnIbFDRbl0CYgmXZ3OIvFTBt5dEy\n\tk7B78eq/2GJAjMEAAEKAB0WIQS1xD1IgJogio9YOMByNAaPFqFWPAUCaJNLAgAKCRByNAaPFqFW\n\tPHp3EAC0Cuo9522N0W6y+yUsVdiwsvwNAWRG1AkAKwbS2P9tTz6VlZFpRHHDZT1ShH4VniZTlFI\n\t+qroGs7euqWlrD2DLiVxiQ74EGhc7wJOs37JH3UGSvjLgRiFgBU9uupYBKkBm9dCgbF6QKgsWgn\n\tNM6Q08wXExxsguDTwMN5OXhHE93gsqco1M3h8PY39ystUTri4C0bwoXe102fOZdJB/68oPvpRh7\n\tEizqlKoKW4WMQxOQ6MVuTzsWFjtfYZ3Fw11s42gFP5EojbHhUJS1pAiB5QzAYraH33CqtPhjsi1\n\toiFuuMOWn+Ko8UKWXEsVfxeBtR4ED4isKhFHWU37lo++bPHbrGy9Y9RAxYxknKfPbX0LUkWPIXO\n\t+yo6fItKASnbl+ngwati2Apl/oqklgx6h3pgwxmq2zkGrDeSSag3aGY9FUg7Ij4MdH6J+Oj8CaN\n\tDFyENwaeUb2Go1Uc2yb8zu27BOQ4FfTZGI2Mi8hQw1TfgzMlNAgeU+SeXjtOH5+WGduhOFqUjx2\n\tdCcSrg0rsnfnKkfU0cOKbsMaok4nAuLiu7ewDjDB5eGchSlJRREcv0MsQiwHRup/Yu/gFcTg83V\n\tTOji9/3YRPFQYNHY1of5VZHWqpM430Y6X2ivfoppJ46INcwEULwQbDWnfD4yY3TkqvKbcdLjzqb\n\tEdGcv8yy/D4WGNA==","X-Developer-Key":"i=jacopo.mondi@ideasonboard.com; a=openpgp;\n\tfpr=72392EDC88144A65C701EA9BA5826A2587AD026B","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>"},"content":"This series picks Barnabas patch\n\n[PATCH RFC 1/3] libcamera: controls: Add `ControlValueView`\n\nand on top of that one it makes the existing ControlValue a view\nre-naming it to ControlStorage.\n\nThe final goal is to prepare for the introduction of MetadataList and\nmake sure it expose the same types to applications as ControlList does.\n\nMetadataList stores control values in a serialized buffer of binary\ndata, while ControlList at the moment stores controls in a map of <id,\nControlValue>\n\nFor this reason MetadataList, not storing values in a map of\nControlValue, cannot use ControlValue in their interface but instead\nexpose a view-like interface which gives to application a read-only\naccess to the underlying storage. I think that's desirable for\nControlList as well, even more now that we're preparing to get towards a\nC ABI.\n\nOn top of this series, it would be possible to apply Barnabas\nhttps://patchwork.libcamera.org/project/libcamera/list/?series=5135\nthat gives to ControlValue (now ControlStorage) a move interface.\n\nI would even consider going further and make it a move-only type, so\nthat a time there is a single storage for a ControlValue.\n\nSending as RFC to collect opinions, as this certainly is an ABI breaking\nchange.\n\nSigned-off-by: Jacopo Mondi <jacopo.mondi@ideasonboard.com>\n---\nBarnabás Pőcze (1):\n      libcamera: controls: Add `ControlValueView`\n\nJacopo 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---\nbase-commit: 7a42f3c3d88926aa05b07d9c6a783bdbbfb73610\nchange-id: 20250803-control_storage-8972535fed5f\n\nBest regards,"}