[{"id":34564,"web_url":"https://patchwork.libcamera.org/comment/34564/","msgid":"<o6csvf5hujdcinaffmpzxaqkt7kiqw7z5junavd6flejwv5pwc@asojq2jal6od>","date":"2025-06-19T11:12:31","subject":"Re: [RFC PATCH v1 11/23] libcamera: request: Store `MetadataList`","submitter":{"id":143,"url":"https://patchwork.libcamera.org/api/people/143/","name":"Jacopo Mondi","email":"jacopo.mondi@ideasonboard.com"},"content":"Hi Barnabás\n\nOn Fri, Jun 06, 2025 at 06:41:44PM +0200, Barnabás Pőcze wrote:\n> Add a `MetadataList` to the `Request` object to store the metadata items\n> returned by the camera. The metadata list is initialized using the camera's\n> `MetadataListPlan` object, which is supposed to be filled by the pipeline\n> handlers.\n>\n> Signed-off-by: Barnabás Pőcze <barnabas.pocze@ideasonboard.com>\n\nReviewed-by: Jacopo Mondi <jacopo.mondi@ideasonboard.com>\n\nThanks\n  j\n\n> ---\n>  include/libcamera/request.h | 5 +++++\n>  src/libcamera/request.cpp   | 2 ++\n>  2 files changed, 7 insertions(+)\n>\n> diff --git a/include/libcamera/request.h b/include/libcamera/request.h\n> index e214a9d13..171a40903 100644\n> --- a/include/libcamera/request.h\n> +++ b/include/libcamera/request.h\n> @@ -18,6 +18,7 @@\n>\n>  #include <libcamera/controls.h>\n>  #include <libcamera/fence.h>\n> +#include <libcamera/metadata_list.h>\n>\n>  namespace libcamera {\n>\n> @@ -51,6 +52,9 @@ public:\n>\n>  \tControlList &controls() { return *controls_; }\n>  \tControlList &metadata() { return *metadata_; }\n> +#ifndef __DOXYGEN__\n> +\t[[nodiscard]] auto &metadata2() { return metadata2_; }\n> +#endif\n>  \tconst BufferMap &buffers() const { return bufferMap_; }\n>  \tint addBuffer(const Stream *stream, FrameBuffer *buffer,\n>  \t\t      std::unique_ptr<Fence> fence = nullptr);\n> @@ -69,6 +73,7 @@ private:\n>\n>  \tControlList *controls_;\n>  \tControlList *metadata_;\n> +\tMetadataList metadata2_;\n>  \tBufferMap bufferMap_;\n>\n>  \tconst uint64_t cookie_;\n> diff --git a/src/libcamera/request.cpp b/src/libcamera/request.cpp\n> index 7f1e11e8f..17ca67d08 100644\n> --- a/src/libcamera/request.cpp\n> +++ b/src/libcamera/request.cpp\n> @@ -354,6 +354,7 @@ void Request::Private::timeout()\n>   */\n>  Request::Request(Camera *camera, uint64_t cookie)\n>  \t: Extensible(std::make_unique<Private>(camera)),\n> +\t  metadata2_(camera->_d()->metadataPlan_),\n>  \t  cookie_(cookie), status_(RequestPending)\n>  {\n>  \tcontrols_ = new ControlList(controls::controls,\n> @@ -407,6 +408,7 @@ void Request::reuse(ReuseFlag flags)\n>\n>  \tcontrols_->clear();\n>  \tmetadata_->clear();\n> +\tmetadata2_.clear();\n>  }\n>\n>  /**\n> --\n> 2.49.0\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 AD2BFBDE6B\n\tfor <parsemail@patchwork.libcamera.org>;\n\tThu, 19 Jun 2025 11:12:37 +0000 (UTC)","from lancelot.ideasonboard.com (localhost [IPv6:::1])\n\tby lancelot.ideasonboard.com (Postfix) with ESMTP id CB5CF68DE3;\n\tThu, 19 Jun 2025 13:12:36 +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 073D268DDB\n\tfor <libcamera-devel@lists.libcamera.org>;\n\tThu, 19 Jun 2025 13:12:34 +0200 (CEST)","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 36E552EC;\n\tThu, 19 Jun 2025 13:12:21 +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=\"QOQhbB0e\"; dkim-atps=neutral","DKIM-Signature":"v=1; a=rsa-sha256; c=relaxed/simple; d=ideasonboard.com;\n\ts=mail; t=1750331541;\n\tbh=Z/jm1OtP3u3gVzwFLNnXpWcSdi3+2rDM4SX48/YfR+E=;\n\th=Date:From:To:Cc:Subject:References:In-Reply-To:From;\n\tb=QOQhbB0elzw6i1xqU2QKtGIvQPJpPIjWKVRpBh7fkB/xB/SEAfzBB7dUwZHcEhinW\n\t8GSd2AvWcV430CvP3I4zjZ1m0DQ0xfFaZd38YP0EPW6zoLUlX4qP9T1JmgANK4yBh/\n\tCjQonu+5ZupZEB/EPaf5WS8EjseXR46zrYG2qN1g=","Date":"Thu, 19 Jun 2025 13:12:31 +0200","From":"Jacopo Mondi <jacopo.mondi@ideasonboard.com>","To":"=?utf-8?q?Barnab=C3=A1s_P=C5=91cze?= <barnabas.pocze@ideasonboard.com>","Cc":"libcamera-devel@lists.libcamera.org","Subject":"Re: [RFC PATCH v1 11/23] libcamera: request: Store `MetadataList`","Message-ID":"<o6csvf5hujdcinaffmpzxaqkt7kiqw7z5junavd6flejwv5pwc@asojq2jal6od>","References":"<20250606164156.1442682-1-barnabas.pocze@ideasonboard.com>\n\t<20250606164156.1442682-12-barnabas.pocze@ideasonboard.com>","MIME-Version":"1.0","Content-Type":"text/plain; charset=utf-8","Content-Disposition":"inline","Content-Transfer-Encoding":"8bit","In-Reply-To":"<20250606164156.1442682-12-barnabas.pocze@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":34581,"web_url":"https://patchwork.libcamera.org/comment/34581/","msgid":"<6fjd3mtw6ncrfi3riwb6djbnud2lvhtvr24yuzkbt44c6p3lua@s5yh6fof2q5g>","date":"2025-06-19T14:15:26","subject":"Re: [RFC PATCH v1 11/23] libcamera: request: Store `MetadataList`","submitter":{"id":143,"url":"https://patchwork.libcamera.org/api/people/143/","name":"Jacopo Mondi","email":"jacopo.mondi@ideasonboard.com"},"content":"Sorry, one additional note\n\nOn Fri, Jun 06, 2025 at 06:41:44PM +0200, Barnabás Pőcze wrote:\n> Add a `MetadataList` to the `Request` object to store the metadata items\n> returned by the camera. The metadata list is initialized using the camera's\n> `MetadataListPlan` object, which is supposed to be filled by the pipeline\n> handlers.\n>\n> Signed-off-by: Barnabás Pőcze <barnabas.pocze@ideasonboard.com>\n> ---\n>  include/libcamera/request.h | 5 +++++\n>  src/libcamera/request.cpp   | 2 ++\n>  2 files changed, 7 insertions(+)\n>\n> diff --git a/include/libcamera/request.h b/include/libcamera/request.h\n> index e214a9d13..171a40903 100644\n> --- a/include/libcamera/request.h\n> +++ b/include/libcamera/request.h\n> @@ -18,6 +18,7 @@\n>\n>  #include <libcamera/controls.h>\n>  #include <libcamera/fence.h>\n> +#include <libcamera/metadata_list.h>\n>\n>  namespace libcamera {\n>\n> @@ -51,6 +52,9 @@ public:\n>\n>  \tControlList &controls() { return *controls_; }\n>  \tControlList &metadata() { return *metadata_; }\n> +#ifndef __DOXYGEN__\n> +\t[[nodiscard]] auto &metadata2() { return metadata2_; }\n\nlet's not use auto in public interfaces, what do you think ?\n\n\t[[nodiscard]] MetadataList &metadata2() { return metadata2_; }\n\ngives me the type without having to look at the metadata2_\ndefinition.\n\n(my battle against 'auto' continues :)\n\n\n> +#endif\n>  \tconst BufferMap &buffers() const { return bufferMap_; }\n>  \tint addBuffer(const Stream *stream, FrameBuffer *buffer,\n>  \t\t      std::unique_ptr<Fence> fence = nullptr);\n> @@ -69,6 +73,7 @@ private:\n>\n>  \tControlList *controls_;\n>  \tControlList *metadata_;\n> +\tMetadataList metadata2_;\n>  \tBufferMap bufferMap_;\n>\n>  \tconst uint64_t cookie_;\n> diff --git a/src/libcamera/request.cpp b/src/libcamera/request.cpp\n> index 7f1e11e8f..17ca67d08 100644\n> --- a/src/libcamera/request.cpp\n> +++ b/src/libcamera/request.cpp\n> @@ -354,6 +354,7 @@ void Request::Private::timeout()\n>   */\n>  Request::Request(Camera *camera, uint64_t cookie)\n>  \t: Extensible(std::make_unique<Private>(camera)),\n> +\t  metadata2_(camera->_d()->metadataPlan_),\n>  \t  cookie_(cookie), status_(RequestPending)\n>  {\n>  \tcontrols_ = new ControlList(controls::controls,\n> @@ -407,6 +408,7 @@ void Request::reuse(ReuseFlag flags)\n>\n>  \tcontrols_->clear();\n>  \tmetadata_->clear();\n> +\tmetadata2_.clear();\n>  }\n>\n>  /**\n> --\n> 2.49.0\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 50362C3237\n\tfor <parsemail@patchwork.libcamera.org>;\n\tThu, 19 Jun 2025 14:15:32 +0000 (UTC)","from lancelot.ideasonboard.com (localhost [IPv6:::1])\n\tby lancelot.ideasonboard.com (Postfix) with ESMTP id F036068DE3;\n\tThu, 19 Jun 2025 16:15:31 +0200 (CEST)","from perceval.ideasonboard.com (perceval.ideasonboard.com\n\t[213.167.242.64])\n\tby lancelot.ideasonboard.com (Postfix) with ESMTPS id 50D9D68DDB\n\tfor <libcamera-devel@lists.libcamera.org>;\n\tThu, 19 Jun 2025 16:15:30 +0200 (CEST)","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 8392F107;\n\tThu, 19 Jun 2025 16:15: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=\"ZznLZOVh\"; dkim-atps=neutral","DKIM-Signature":"v=1; a=rsa-sha256; c=relaxed/simple; d=ideasonboard.com;\n\ts=mail; t=1750342516;\n\tbh=kB9HjYEd3qzUwrxxsubu/esQPqZQLU4t45H49PudL00=;\n\th=Date:From:To:Cc:Subject:References:In-Reply-To:From;\n\tb=ZznLZOVhtYJmdxOkaAbFT+QeBKORJTPIJlhRcOc4sL152UvoTLHoGKQIqfXIg5l1/\n\tcysuyILUCsFPNM/Vr4HwHB6nH67LfzaDrnziiTA9ThPHWAKmETJLAhgp7eqWOMBW60\n\ttdlYcKPzbKqCNJY1zhKTWTbK1q/x7Pkbx2jmnpgg=","Date":"Thu, 19 Jun 2025 16:15:26 +0200","From":"Jacopo Mondi <jacopo.mondi@ideasonboard.com>","To":"=?utf-8?q?Barnab=C3=A1s_P=C5=91cze?= <barnabas.pocze@ideasonboard.com>","Cc":"libcamera-devel@lists.libcamera.org","Subject":"Re: [RFC PATCH v1 11/23] libcamera: request: Store `MetadataList`","Message-ID":"<6fjd3mtw6ncrfi3riwb6djbnud2lvhtvr24yuzkbt44c6p3lua@s5yh6fof2q5g>","References":"<20250606164156.1442682-1-barnabas.pocze@ideasonboard.com>\n\t<20250606164156.1442682-12-barnabas.pocze@ideasonboard.com>","MIME-Version":"1.0","Content-Type":"text/plain; charset=utf-8","Content-Disposition":"inline","Content-Transfer-Encoding":"8bit","In-Reply-To":"<20250606164156.1442682-12-barnabas.pocze@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>"}}]