[{"id":34559,"web_url":"https://patchwork.libcamera.org/comment/34559/","msgid":"<tlfeyl3ftozfhyz42siaxozkx7hp5acquzafolgdyzweniopnk@r6y37vakwnmy>","date":"2025-06-19T10:47:44","subject":"Re: [RFC PATCH v1 09/23] libcamera: ipa_data_serializer: Support\n\t`MetadataListPlan`","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:42PM +0200, Barnabás Pőcze wrote:\n> Define the type in `core.mojom` with external (de)serialization, and\n> add the necessary `IPADataSerializer` template specialization.\n>\n> Signed-off-by: Barnabás Pőcze <barnabas.pocze@ideasonboard.com>\n> ---\n>  include/libcamera/ipa/core.mojom              |  1 +\n>  src/libcamera/ipa_data_serializer.cpp         | 84 +++++++++++++++++++\n>  .../core_ipa_interface.h.tmpl                 |  1 +\n>  3 files changed, 86 insertions(+)\n>\n> diff --git a/include/libcamera/ipa/core.mojom b/include/libcamera/ipa/core.mojom\n> index bce797245..754e4065c 100644\n> --- a/include/libcamera/ipa/core.mojom\n> +++ b/include/libcamera/ipa/core.mojom\n> @@ -83,6 +83,7 @@ module libcamera;\n>  [skipSerdes, skipHeader] struct ControlInfoMap {};\n>  [skipSerdes, skipHeader] struct ControlList {};\n>  [skipSerdes, skipHeader] struct SharedFD {};\n> +[skipSerdes, skipHeader] struct MetadataListPlan {};\n>\n>  [skipHeader] struct Point {\n>  \tint32 x;\n> diff --git a/src/libcamera/ipa_data_serializer.cpp b/src/libcamera/ipa_data_serializer.cpp\n> index 0537f785b..4646f4aa9 100644\n> --- a/src/libcamera/ipa_data_serializer.cpp\n> +++ b/src/libcamera/ipa_data_serializer.cpp\n> @@ -11,6 +11,8 @@\n>\n>  #include <libcamera/base/log.h>\n>\n> +#include <libcamera/metadata_list_plan.h>\n> +\n>  #include \"libcamera/internal/byte_stream_buffer.h\"\n>\n>  /**\n> @@ -620,6 +622,88 @@ IPADataSerializer<FrameBuffer::Plane>::deserialize(const std::vector<uint8_t> &d\n>  \treturn deserialize(data.cbegin(), data.end(), fds.cbegin(), fds.end(), cs);\n>  }\n>\n> +template<>\n> +std::tuple<std::vector<uint8_t>, std::vector<SharedFD>>\n> +IPADataSerializer<MetadataListPlan>::serialize([[maybe_unused]] const MetadataListPlan &data,\n\ndata is defintely used ;)\n\n> +\t\t\t\t\t       [[maybe_unused]] ControlSerializer *cs)\n> +{\n> +\tstd::vector<uint8_t> dataVec;\n> +\n> +\tappendPOD<uint32_t>(dataVec, data.size());\n> +\n> +\tfor (auto &&[tag, e] : data) {\n\nWhy using a forwarding reference and not \"const auto &[]\" ?\n\n> +\t\tappendPOD<uint32_t>(dataVec, tag);\n> +\t\tappendPOD<uint32_t>(dataVec, e.size);\n> +\t\tappendPOD<uint32_t>(dataVec, e.alignment);\n> +\t\tappendPOD<uint8_t>(dataVec, e.type);\n> +\t\tappendPOD<uint8_t>(dataVec, e.isArray);\n> +\t}\n> +\n> +\treturn { dataVec, {} };\n> +}\n> +\n> +template<>\n> +MetadataListPlan\n> +IPADataSerializer<MetadataListPlan>::deserialize([[maybe_unused]] std::vector<uint8_t>::const_iterator dataBegin,\n> +\t\t\t\t\t\t [[maybe_unused]] std::vector<uint8_t>::const_iterator dataEnd,\n> +\t\t\t\t\t\t [[maybe_unused]] std::vector<SharedFD>::const_iterator fdsBegin,\n> +\t\t\t\t\t\t [[maybe_unused]] std::vector<SharedFD>::const_iterator fdsEnd,\n> +\t\t\t\t\t\t [[maybe_unused]] ControlSerializer *cs)\n\nAlso here you can probably remove some [[maybe_unused]]\n\n> +{\n> +\tMetadataListPlan ret;\n> +\tstd::size_t offset = 0;\n> +\n> +\tauto count = readPOD<uint32_t>(dataBegin, 0, dataEnd);\n\ndunno, I'm always a bit meh when I see 'auto' being used  when the\ntype is known.\n\nOne could say the type is knows, so using auto is the right thing to\ndo :)\n\n> +\toffset += sizeof(count);\n> +\n> +\twhile (count--) {\n> +\t\tauto tag = readPOD<uint32_t>(dataBegin, offset, dataEnd);\n> +\t\toffset += sizeof(tag);\n> +\n> +\t\tauto size = readPOD<uint32_t>(dataBegin, offset, dataEnd);\n> +\t\toffset += sizeof(size);\n> +\n> +\t\tauto alignment = readPOD<uint32_t>(dataBegin, offset, dataEnd);\n> +\t\toffset += sizeof(alignment);\n> +\n> +\t\tauto type = readPOD<uint8_t>(dataBegin, offset, dataEnd);\n> +\t\toffset += sizeof(type);\n> +\n> +\t\tauto isArray = readPOD<uint8_t>(dataBegin, offset, dataEnd);\n> +\t\toffset += sizeof(isArray);\n> +\n> +\t\tret.add(tag, size, 1, alignment, static_cast<ControlType>(type), isArray);\n> +\t}\n> +\n> +\treturn ret;\n> +}\n> +\n> +template<>\n> +MetadataListPlan\n> +IPADataSerializer<MetadataListPlan>::deserialize(std::vector<uint8_t>::const_iterator dataBegin,\n> +\t\t\t\t\t\t std::vector<uint8_t>::const_iterator dataEnd,\n> +\t\t\t\t\t\t ControlSerializer *cs)\n> +{\n> +\treturn deserialize(dataBegin, dataEnd, {}, {}, cs);\n> +}\n> +\n> +template<>\n> +MetadataListPlan\n> +IPADataSerializer<MetadataListPlan>::deserialize(const std::vector<uint8_t> &data,\n> +\t\t\t\t\t\t ControlSerializer *cs)\n> +{\n> +\treturn deserialize(data.cbegin(), data.end(), cs);\n> +}\n> +\n> +template<>\n> +MetadataListPlan\n> +IPADataSerializer<MetadataListPlan>::deserialize(const std::vector<uint8_t> &data,\n> +\t\t\t\t\t\t const std::vector<SharedFD> &fds,\n> +\t\t\t\t\t\t ControlSerializer *cs)\n> +{\n> +\treturn deserialize(data.cbegin(), data.end(), fds.cbegin(), fds.end(), cs);\n> +}\n> +\n>  #endif /* __DOXYGEN__ */\n>\n>  } /* namespace libcamera */\n> diff --git a/utils/codegen/ipc/generators/libcamera_templates/core_ipa_interface.h.tmpl b/utils/codegen/ipc/generators/libcamera_templates/core_ipa_interface.h.tmpl\n> index 3942e5708..b3774cd64 100644\n> --- a/utils/codegen/ipc/generators/libcamera_templates/core_ipa_interface.h.tmpl\n> +++ b/utils/codegen/ipc/generators/libcamera_templates/core_ipa_interface.h.tmpl\n> @@ -21,6 +21,7 @@\n>  #include <libcamera/controls.h>\n>  #include <libcamera/framebuffer.h>\n>  #include <libcamera/geometry.h>\n> +#include <libcamera/metadata_list_plan.h>\n\nDo you need this in the .cpp file then ?\n\nAll minors,\nReviewed-by: Jacopo Mondi <jacopo.mondi@ideasonboard.com>\n\nThanks\n  j\n\n>\n>  #include <libcamera/ipa/ipa_interface.h>\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 976C8C3237\n\tfor <parsemail@patchwork.libcamera.org>;\n\tThu, 19 Jun 2025 10:47:51 +0000 (UTC)","from lancelot.ideasonboard.com (localhost [IPv6:::1])\n\tby lancelot.ideasonboard.com (Postfix) with ESMTP id 8C23A68DE3;\n\tThu, 19 Jun 2025 12:47:50 +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 5212268DDB\n\tfor <libcamera-devel@lists.libcamera.org>;\n\tThu, 19 Jun 2025 12:47:48 +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 5E9472EC;\n\tThu, 19 Jun 2025 12:47:34 +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=\"HNjN4864\"; dkim-atps=neutral","DKIM-Signature":"v=1; a=rsa-sha256; c=relaxed/simple; d=ideasonboard.com;\n\ts=mail; t=1750330054;\n\tbh=VXVrZNOgbFs4ExrWgaeq3bL2YGG8uKIFTMTBTHEZmIY=;\n\th=Date:From:To:Cc:Subject:References:In-Reply-To:From;\n\tb=HNjN4864ZX72wRgytl4vbFIvBU7GP0omV2g8lFYIfi1sZStV0YJqQmn57eYcFvK4J\n\tHUyaa1kcGHJbBLcZZ2c+jRn6Yb9uXXNmMNsYjUbGUV+GPyO/65n7zggBdB3xDwPNiR\n\t/4dZon+gLVUSrASkLk+hZulg4Z+WIoA502S+0N+c=","Date":"Thu, 19 Jun 2025 12:47:44 +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 09/23] libcamera: ipa_data_serializer: Support\n\t`MetadataListPlan`","Message-ID":"<tlfeyl3ftozfhyz42siaxozkx7hp5acquzafolgdyzweniopnk@r6y37vakwnmy>","References":"<20250606164156.1442682-1-barnabas.pocze@ideasonboard.com>\n\t<20250606164156.1442682-10-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-10-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":34601,"web_url":"https://patchwork.libcamera.org/comment/34601/","msgid":"<39981491-781b-4524-876e-d6893349cf4f@ideasonboard.com>","date":"2025-06-23T12:46:08","subject":"Re: [RFC PATCH v1 09/23] libcamera: ipa_data_serializer: Support\n\t`MetadataListPlan`","submitter":{"id":216,"url":"https://patchwork.libcamera.org/api/people/216/","name":"Barnabás Pőcze","email":"barnabas.pocze@ideasonboard.com"},"content":"Hi\n\n2025. 06. 19. 12:47 keltezéssel, Jacopo Mondi írta:\n> Hi Barnabás\n> \n> On Fri, Jun 06, 2025 at 06:41:42PM +0200, Barnabás Pőcze wrote:\n>> Define the type in `core.mojom` with external (de)serialization, and\n>> add the necessary `IPADataSerializer` template specialization.\n>>\n>> Signed-off-by: Barnabás Pőcze <barnabas.pocze@ideasonboard.com>\n>> ---\n>>   include/libcamera/ipa/core.mojom              |  1 +\n>>   src/libcamera/ipa_data_serializer.cpp         | 84 +++++++++++++++++++\n>>   .../core_ipa_interface.h.tmpl                 |  1 +\n>>   3 files changed, 86 insertions(+)\n>>\n>> diff --git a/include/libcamera/ipa/core.mojom b/include/libcamera/ipa/core.mojom\n>> index bce797245..754e4065c 100644\n>> --- a/include/libcamera/ipa/core.mojom\n>> +++ b/include/libcamera/ipa/core.mojom\n>> @@ -83,6 +83,7 @@ module libcamera;\n>>   [skipSerdes, skipHeader] struct ControlInfoMap {};\n>>   [skipSerdes, skipHeader] struct ControlList {};\n>>   [skipSerdes, skipHeader] struct SharedFD {};\n>> +[skipSerdes, skipHeader] struct MetadataListPlan {};\n>>\n>>   [skipHeader] struct Point {\n>>   \tint32 x;\n>> diff --git a/src/libcamera/ipa_data_serializer.cpp b/src/libcamera/ipa_data_serializer.cpp\n>> index 0537f785b..4646f4aa9 100644\n>> --- a/src/libcamera/ipa_data_serializer.cpp\n>> +++ b/src/libcamera/ipa_data_serializer.cpp\n>> @@ -11,6 +11,8 @@\n>>\n>>   #include <libcamera/base/log.h>\n>>\n>> +#include <libcamera/metadata_list_plan.h>\n>> +\n>>   #include \"libcamera/internal/byte_stream_buffer.h\"\n>>\n>>   /**\n>> @@ -620,6 +622,88 @@ IPADataSerializer<FrameBuffer::Plane>::deserialize(const std::vector<uint8_t> &d\n>>   \treturn deserialize(data.cbegin(), data.end(), fds.cbegin(), fds.end(), cs);\n>>   }\n>>\n>> +template<>\n>> +std::tuple<std::vector<uint8_t>, std::vector<SharedFD>>\n>> +IPADataSerializer<MetadataListPlan>::serialize([[maybe_unused]] const MetadataListPlan &data,\n> \n> data is defintely used ;)\n\nOops, yes, you're right.\n\n\n> \n>> +\t\t\t\t\t       [[maybe_unused]] ControlSerializer *cs)\n>> +{\n>> +\tstd::vector<uint8_t> dataVec;\n>> +\n>> +\tappendPOD<uint32_t>(dataVec, data.size());\n>> +\n>> +\tfor (auto &&[tag, e] : data) {\n> \n> Why using a forwarding reference and not \"const auto &[]\" ?\n\nI'm just used to doing that. But a const lref is enough,\nso I replaced it with that.\n\n\n> \n>> +\t\tappendPOD<uint32_t>(dataVec, tag);\n>> +\t\tappendPOD<uint32_t>(dataVec, e.size);\n>> +\t\tappendPOD<uint32_t>(dataVec, e.alignment);\n>> +\t\tappendPOD<uint8_t>(dataVec, e.type);\n>> +\t\tappendPOD<uint8_t>(dataVec, e.isArray);\n>> +\t}\n>> +\n>> +\treturn { dataVec, {} };\n>> +}\n>> +\n>> +template<>\n>> +MetadataListPlan\n>> +IPADataSerializer<MetadataListPlan>::deserialize([[maybe_unused]] std::vector<uint8_t>::const_iterator dataBegin,\n>> +\t\t\t\t\t\t [[maybe_unused]] std::vector<uint8_t>::const_iterator dataEnd,\n>> +\t\t\t\t\t\t [[maybe_unused]] std::vector<SharedFD>::const_iterator fdsBegin,\n>> +\t\t\t\t\t\t [[maybe_unused]] std::vector<SharedFD>::const_iterator fdsEnd,\n>> +\t\t\t\t\t\t [[maybe_unused]] ControlSerializer *cs)\n> \n> Also here you can probably remove some [[maybe_unused]]\n\nIndeed.\n\n\n> \n>> +{\n>> +\tMetadataListPlan ret;\n>> +\tstd::size_t offset = 0;\n>> +\n>> +\tauto count = readPOD<uint32_t>(dataBegin, 0, dataEnd);\n> \n> dunno, I'm always a bit meh when I see 'auto' being used  when the\n> type is known.\n> \n> One could say the type is knows, so using auto is the right thing to\n> do :)\n\nI definitely prefer to use auto if the type is clear from the initializer,\nsuch as `static_cast`, or here.\n\n\n> \n>> +\toffset += sizeof(count);\n>> +\n>> +\twhile (count--) {\n>> +\t\tauto tag = readPOD<uint32_t>(dataBegin, offset, dataEnd);\n>> +\t\toffset += sizeof(tag);\n>> +\n>> +\t\tauto size = readPOD<uint32_t>(dataBegin, offset, dataEnd);\n>> +\t\toffset += sizeof(size);\n>> +\n>> +\t\tauto alignment = readPOD<uint32_t>(dataBegin, offset, dataEnd);\n>> +\t\toffset += sizeof(alignment);\n>> +\n>> +\t\tauto type = readPOD<uint8_t>(dataBegin, offset, dataEnd);\n>> +\t\toffset += sizeof(type);\n>> +\n>> +\t\tauto isArray = readPOD<uint8_t>(dataBegin, offset, dataEnd);\n>> +\t\toffset += sizeof(isArray);\n>> +\n>> +\t\tret.add(tag, size, 1, alignment, static_cast<ControlType>(type), isArray);\n>> +\t}\n>> +\n>> +\treturn ret;\n>> +}\n>> +\n>> +template<>\n>> +MetadataListPlan\n>> +IPADataSerializer<MetadataListPlan>::deserialize(std::vector<uint8_t>::const_iterator dataBegin,\n>> +\t\t\t\t\t\t std::vector<uint8_t>::const_iterator dataEnd,\n>> +\t\t\t\t\t\t ControlSerializer *cs)\n>> +{\n>> +\treturn deserialize(dataBegin, dataEnd, {}, {}, cs);\n>> +}\n>> +\n>> +template<>\n>> +MetadataListPlan\n>> +IPADataSerializer<MetadataListPlan>::deserialize(const std::vector<uint8_t> &data,\n>> +\t\t\t\t\t\t ControlSerializer *cs)\n>> +{\n>> +\treturn deserialize(data.cbegin(), data.end(), cs);\n>> +}\n>> +\n>> +template<>\n>> +MetadataListPlan\n>> +IPADataSerializer<MetadataListPlan>::deserialize(const std::vector<uint8_t> &data,\n>> +\t\t\t\t\t\t const std::vector<SharedFD> &fds,\n>> +\t\t\t\t\t\t ControlSerializer *cs)\n>> +{\n>> +\treturn deserialize(data.cbegin(), data.end(), fds.cbegin(), fds.end(), cs);\n>> +}\n>> +\n>>   #endif /* __DOXYGEN__ */\n>>\n>>   } /* namespace libcamera */\n>> diff --git a/utils/codegen/ipc/generators/libcamera_templates/core_ipa_interface.h.tmpl b/utils/codegen/ipc/generators/libcamera_templates/core_ipa_interface.h.tmpl\n>> index 3942e5708..b3774cd64 100644\n>> --- a/utils/codegen/ipc/generators/libcamera_templates/core_ipa_interface.h.tmpl\n>> +++ b/utils/codegen/ipc/generators/libcamera_templates/core_ipa_interface.h.tmpl\n>> @@ -21,6 +21,7 @@\n>>   #include <libcamera/controls.h>\n>>   #include <libcamera/framebuffer.h>\n>>   #include <libcamera/geometry.h>\n>> +#include <libcamera/metadata_list_plan.h>\n> \n> Do you need this in the .cpp file then ?\n\nCan you clarify what you mean here? Which cpp file?\n\n\nRegards,\nBarnabás Pőcze\n\n\n> \n> All minors,\n> Reviewed-by: Jacopo Mondi <jacopo.mondi@ideasonboard.com>\n> \n> Thanks\n>    j\n> \n>>\n>>   #include <libcamera/ipa/ipa_interface.h>\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 82017C3237\n\tfor <parsemail@patchwork.libcamera.org>;\n\tMon, 23 Jun 2025 12:46:16 +0000 (UTC)","from lancelot.ideasonboard.com (localhost [IPv6:::1])\n\tby lancelot.ideasonboard.com (Postfix) with ESMTP id 3655C68DE5;\n\tMon, 23 Jun 2025 14:46:15 +0200 (CEST)","from perceval.ideasonboard.com (perceval.ideasonboard.com\n\t[213.167.242.64])\n\tby lancelot.ideasonboard.com (Postfix) with ESMTPS id DB29F68DC9\n\tfor <libcamera-devel@lists.libcamera.org>;\n\tMon, 23 Jun 2025 14:46:13 +0200 (CEST)","from [192.168.33.21] (185.221.143.107.nat.pool.zt.hu\n\t[185.221.143.107])\n\tby perceval.ideasonboard.com (Postfix) with ESMTPSA id CE66FD77;\n\tMon, 23 Jun 2025 14:45:56 +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=\"P9fB1ndT\"; dkim-atps=neutral","DKIM-Signature":"v=1; a=rsa-sha256; c=relaxed/simple; d=ideasonboard.com;\n\ts=mail; t=1750682757;\n\tbh=MDdGukYs5EPLs/gwGHj71ju0sFH6K71qPIJO2pYb014=;\n\th=Date:Subject:To:Cc:References:From:In-Reply-To:From;\n\tb=P9fB1ndTxi2W5wATVlAF9cWBfSTJAuqXv/hCaPOQEr/Pwb74HhEnrj0XvftK3DsGN\n\tQAbh9RXk2rT5pB/YXoT3pt71Lt8tyLXjeXog6mQ5smFcWcQ4s/LmGzKiUaeCiyQtf3\n\ttMCr1dqlM5e3hQIwMKA+jmHGnHZmQHZSVR+g/Evg=","Message-ID":"<39981491-781b-4524-876e-d6893349cf4f@ideasonboard.com>","Date":"Mon, 23 Jun 2025 14:46:08 +0200","MIME-Version":"1.0","User-Agent":"Mozilla Thunderbird","Subject":"Re: [RFC PATCH v1 09/23] libcamera: ipa_data_serializer: Support\n\t`MetadataListPlan`","To":"Jacopo Mondi <jacopo.mondi@ideasonboard.com>","Cc":"libcamera-devel@lists.libcamera.org","References":"<20250606164156.1442682-1-barnabas.pocze@ideasonboard.com>\n\t<20250606164156.1442682-10-barnabas.pocze@ideasonboard.com>\n\t<tlfeyl3ftozfhyz42siaxozkx7hp5acquzafolgdyzweniopnk@r6y37vakwnmy>","From":"=?utf-8?q?Barnab=C3=A1s_P=C5=91cze?= <barnabas.pocze@ideasonboard.com>","Content-Language":"en-US, hu-HU","In-Reply-To":"<tlfeyl3ftozfhyz42siaxozkx7hp5acquzafolgdyzweniopnk@r6y37vakwnmy>","Content-Type":"text/plain; charset=UTF-8; format=flowed","Content-Transfer-Encoding":"8bit","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":34602,"web_url":"https://patchwork.libcamera.org/comment/34602/","msgid":"<2323yndfpgie66klebxkbbsfz4t3q2hmvil7rj2hjhhgjwjvwy@fx7abdklmpfw>","date":"2025-06-23T13:42:37","subject":"Re: [RFC PATCH v1 09/23] libcamera: ipa_data_serializer: Support\n\t`MetadataListPlan`","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 Mon, Jun 23, 2025 at 02:46:08PM +0200, Barnabás Pőcze wrote:\n> Hi\n> > > --- a/utils/codegen/ipc/generators/libcamera_templates/core_ipa_interface.h.tmpl\n> > > +++ b/utils/codegen/ipc/generators/libcamera_templates/core_ipa_interface.h.tmpl\n> > > @@ -21,6 +21,7 @@\n> > >   #include <libcamera/controls.h>\n> > >   #include <libcamera/framebuffer.h>\n> > >   #include <libcamera/geometry.h>\n> > > +#include <libcamera/metadata_list_plan.h>\n> >\n> > Do you need this in the .cpp file then ?\n>\n> Can you clarify what you mean here? Which cpp file?\n>\n\nI thought src/libcamera/ipa_data_serializer.cpp was going to include\nthis header but apparently it does not. Ignore this comment please :)\n\n>\n> Regards,\n> Barnabás Pőcze\n>\n>\n> >\n> > All minors,\n> > Reviewed-by: Jacopo Mondi <jacopo.mondi@ideasonboard.com>\n> >\n> > Thanks\n> >    j\n> >\n> > >\n> > >   #include <libcamera/ipa/ipa_interface.h>\n> > >\n> > > --\n> > > 2.49.0\n> > >\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 36467BDE6B\n\tfor <parsemail@patchwork.libcamera.org>;\n\tMon, 23 Jun 2025 13:42:49 +0000 (UTC)","from lancelot.ideasonboard.com (localhost [IPv6:::1])\n\tby lancelot.ideasonboard.com (Postfix) with ESMTP id 217A868DE3;\n\tMon, 23 Jun 2025 15:42:48 +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 1376568DC9\n\tfor <libcamera-devel@lists.libcamera.org>;\n\tMon, 23 Jun 2025 15:42:46 +0200 (CEST)","from ideasonboard.com (mob-5-90-136-88.net.vodafone.it\n\t[5.90.136.88])\n\tby perceval.ideasonboard.com (Postfix) with ESMTPSA id 3963F8DB;\n\tMon, 23 Jun 2025 15:42:27 +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=\"QouvsHAs\"; dkim-atps=neutral","DKIM-Signature":"v=1; a=rsa-sha256; c=relaxed/simple; d=ideasonboard.com;\n\ts=mail; t=1750686149;\n\tbh=j25uH4zlLqOrB0VSjXDzHBNeJDGzn9fCitcr02o0SGc=;\n\th=Date:From:To:Cc:Subject:References:In-Reply-To:From;\n\tb=QouvsHAs5a2DwsOILjZRPidUXmn6yzKEllprebcrNJxBtOel+Lwhax/OBL+AmpFvt\n\tDiCQLPc4NQ/nuOHRaqz3ZEeDDwjAraAVKM5A6X3tvrQ+ZtD7l6Nlly38OY/OQD2IcV\n\t5fQat5LlbLJs6nxTJBO8a3ni5ul5D6H+ex/bNKWY=","Date":"Mon, 23 Jun 2025 15:42:37 +0200","From":"Jacopo Mondi <jacopo.mondi@ideasonboard.com>","To":"=?utf-8?q?Barnab=C3=A1s_P=C5=91cze?= <barnabas.pocze@ideasonboard.com>","Cc":"Jacopo Mondi <jacopo.mondi@ideasonboard.com>, \n\tlibcamera-devel@lists.libcamera.org","Subject":"Re: [RFC PATCH v1 09/23] libcamera: ipa_data_serializer: Support\n\t`MetadataListPlan`","Message-ID":"<2323yndfpgie66klebxkbbsfz4t3q2hmvil7rj2hjhhgjwjvwy@fx7abdklmpfw>","References":"<20250606164156.1442682-1-barnabas.pocze@ideasonboard.com>\n\t<20250606164156.1442682-10-barnabas.pocze@ideasonboard.com>\n\t<tlfeyl3ftozfhyz42siaxozkx7hp5acquzafolgdyzweniopnk@r6y37vakwnmy>\n\t<39981491-781b-4524-876e-d6893349cf4f@ideasonboard.com>","MIME-Version":"1.0","Content-Type":"text/plain; charset=utf-8","Content-Disposition":"inline","Content-Transfer-Encoding":"8bit","In-Reply-To":"<39981491-781b-4524-876e-d6893349cf4f@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>"}}]