From patchwork Wed Aug 6 12:30:44 2025 Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 8bit X-Patchwork-Submitter: Jacopo Mondi X-Patchwork-Id: 24060 Return-Path: X-Original-To: parsemail@patchwork.libcamera.org Delivered-To: parsemail@patchwork.libcamera.org Received: from lancelot.ideasonboard.com (lancelot.ideasonboard.com [92.243.16.209]) by patchwork.libcamera.org (Postfix) with ESMTPS id A45D9BDCC1 for ; Wed, 6 Aug 2025 12:31:02 +0000 (UTC) Received: from lancelot.ideasonboard.com (localhost [IPv6:::1]) by lancelot.ideasonboard.com (Postfix) with ESMTP id 744F969221; Wed, 6 Aug 2025 14:31:01 +0200 (CEST) Authentication-Results: lancelot.ideasonboard.com; dkim=pass (1024-bit key; unprotected) header.d=ideasonboard.com header.i=@ideasonboard.com header.b="PlOTvPDe"; dkim-atps=neutral Received: from perceval.ideasonboard.com (perceval.ideasonboard.com [IPv6:2001:4b98:dc2:55:216:3eff:fef7:d647]) by lancelot.ideasonboard.com (Postfix) with ESMTPS id CB591691F5 for ; Wed, 6 Aug 2025 14:30:59 +0200 (CEST) Received: from [192.168.0.172] (mob-5-90-59-79.net.vodafone.it [5.90.59.79]) by perceval.ideasonboard.com (Postfix) with ESMTPSA id 173C5CF; Wed, 6 Aug 2025 14:30:11 +0200 (CEST) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/simple; d=ideasonboard.com; s=mail; t=1754483411; bh=ZhGSD9hEnzM6hENxXGWbIrGCg1rbky63iKVG9Z0tnO8=; h=From:Subject:Date:To:Cc:From; b=PlOTvPDeLrlmTRabWlN7v61n8LXwgrKM1QVSCxq+Na0wIewd+pc0kxIveYkvAFzS/ pRqBDYn38memQwS/hayq7jiar6KmSXaABecyoV4OUnnzQMkQ/TVeOjC3LKkbSECQr1 8QPrhYMDHcE64q1Mgv1jsRgA85LHTTcZcbW7BYvU= From: Jacopo Mondi 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 X-B4-Tracking: v=1; b=H4sIAPRKk2gC/x2MQQqAIBAAvyJ7TjBDsr4SEaFrLYTGGhFIf086D sNMgYxMmGEUBRhvypRihbYR4PY1bijJVwattFFWddKleHE6lnwlXqu2Q69NZwJ6E6BWJ2Og5z9 O8/t+2qQtH2EAAAA= X-Change-ID: 20250803-control_storage-8972535fed5f To: libcamera-devel@lists.libcamera.org Cc: Jacopo Mondi , =?utf-8?b?QmFybmFiw6Fz?= =?utf-8?q?_P=C5=91cze?= X-Mailer: b4 0.14.2 X-Developer-Signature: v=1; a=openpgp-sha256; l=3898; i=jacopo.mondi@ideasonboard.com; h=from:subject:message-id; bh=ZhGSD9hEnzM6hENxXGWbIrGCg1rbky63iKVG9Z0tnO8=; b=owEBbQKS/ZANAwAKAXI0Bo8WoVY8AcsmYgBok0sC6XRTtLnIbFDRbl0CYgmXZ3OIvFTBt5dEy k7B78eq/2GJAjMEAAEKAB0WIQS1xD1IgJogio9YOMByNAaPFqFWPAUCaJNLAgAKCRByNAaPFqFW PHp3EAC0Cuo9522N0W6y+yUsVdiwsvwNAWRG1AkAKwbS2P9tTz6VlZFpRHHDZT1ShH4VniZTlFI +qroGs7euqWlrD2DLiVxiQ74EGhc7wJOs37JH3UGSvjLgRiFgBU9uupYBKkBm9dCgbF6QKgsWgn NM6Q08wXExxsguDTwMN5OXhHE93gsqco1M3h8PY39ystUTri4C0bwoXe102fOZdJB/68oPvpRh7 EizqlKoKW4WMQxOQ6MVuTzsWFjtfYZ3Fw11s42gFP5EojbHhUJS1pAiB5QzAYraH33CqtPhjsi1 oiFuuMOWn+Ko8UKWXEsVfxeBtR4ED4isKhFHWU37lo++bPHbrGy9Y9RAxYxknKfPbX0LUkWPIXO +yo6fItKASnbl+ngwati2Apl/oqklgx6h3pgwxmq2zkGrDeSSag3aGY9FUg7Ij4MdH6J+Oj8CaN DFyENwaeUb2Go1Uc2yb8zu27BOQ4FfTZGI2Mi8hQw1TfgzMlNAgeU+SeXjtOH5+WGduhOFqUjx2 dCcSrg0rsnfnKkfU0cOKbsMaok4nAuLiu7ewDjDB5eGchSlJRREcv0MsQiwHRup/Yu/gFcTg83V TOji9/3YRPFQYNHY1of5VZHWqpM430Y6X2ivfoppJ46INcwEULwQbDWnfD4yY3TkqvKbcdLjzqb EdGcv8yy/D4WGNA== X-Developer-Key: i=jacopo.mondi@ideasonboard.com; a=openpgp; fpr=72392EDC88144A65C701EA9BA5826A2587AD026B X-BeenThere: libcamera-devel@lists.libcamera.org X-Mailman-Version: 2.1.29 Precedence: list List-Id: List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , Errors-To: libcamera-devel-bounces@lists.libcamera.org Sender: "libcamera-devel" This series picks Barnabas patch [PATCH RFC 1/3] libcamera: controls: Add `ControlValueView` and on top of that one it makes the existing ControlValue a view re-naming it to ControlStorage. The final goal is to prepare for the introduction of MetadataList and make sure it expose the same types to applications as ControlList does. MetadataList stores control values in a serialized buffer of binary data, while ControlList at the moment stores controls in a map of For this reason MetadataList, not storing values in a map of ControlValue, cannot use ControlValue in their interface but instead expose a view-like interface which gives to application a read-only access to the underlying storage. I think that's desirable for ControlList as well, even more now that we're preparing to get towards a C ABI. On top of this series, it would be possible to apply Barnabas https://patchwork.libcamera.org/project/libcamera/list/?series=5135 that gives to ControlValue (now ControlStorage) a move interface. I would even consider going further and make it a move-only type, so that a time there is a single storage for a ControlValue. Sending as RFC to collect opinions, as this certainly is an ABI breaking change. Signed-off-by: Jacopo Mondi --- Barnabás Pőcze (1): libcamera: controls: Add `ControlValueView` Jacopo Mondi (2): libcamera: Rename ControlValue to ControlStorage libcamera: Make ControlValue a view include/libcamera/control_ids.h.in | 2 +- include/libcamera/controls.h | 133 +++++-- include/libcamera/internal/control_serializer.h | 2 +- include/libcamera/internal/debug_controls.h | 2 +- include/libcamera/internal/delayed_controls.h | 6 +- src/apps/cam/capture_script.cpp | 16 +- src/apps/cam/capture_script.h | 8 +- src/ipa/libipa/agc_mean_luminance.cpp | 4 +- src/ipa/libipa/awb.cpp | 4 +- src/ipa/libipa/awb.h | 2 +- src/ipa/rkisp1/algorithms/agc.cpp | 16 +- src/ipa/rkisp1/algorithms/ccm.cpp | 6 +- src/ipa/rpi/common/ipa_base.cpp | 18 +- src/ipa/rpi/pisp/pisp.cpp | 2 +- src/ipa/rpi/vc4/vc4.cpp | 20 +- src/libcamera/control_ids.cpp.in | 2 +- src/libcamera/control_serializer.cpp | 14 +- src/libcamera/controls.cpp | 399 ++++++++++++++------- src/libcamera/debug_controls.cpp | 4 +- src/libcamera/ipa_controls.cpp | 2 +- src/libcamera/pipeline/ipu3/ipu3.cpp | 4 +- .../pipeline/rpi/common/delayed_controls.h | 6 +- .../pipeline/rpi/common/pipeline_base.cpp | 2 +- src/libcamera/pipeline/rpi/vc4/vc4.cpp | 4 +- src/libcamera/pipeline/uvcvideo/uvcvideo.cpp | 10 +- src/libcamera/pipeline/virtual/config_parser.cpp | 2 +- src/libcamera/sensor/camera_sensor_legacy.cpp | 2 +- src/libcamera/sensor/camera_sensor_raw.cpp | 2 +- src/libcamera/v4l2_device.cpp | 14 +- src/py/libcamera/py_helpers.cpp | 18 +- src/py/libcamera/py_helpers.h | 2 +- test/controls/control_value.cpp | 8 +- test/serialization/serialization_test.cpp | 12 +- test/v4l2_videodevice/controls.cpp | 4 +- 34 files changed, 478 insertions(+), 274 deletions(-) --- base-commit: 7a42f3c3d88926aa05b07d9c6a783bdbbfb73610 change-id: 20250803-control_storage-8972535fed5f Best regards,