[{"id":34574,"web_url":"https://patchwork.libcamera.org/comment/34574/","msgid":"<hf43tmtk75vn6fpt3x7votscqt3a76jtggkzhytqimreetpt2t@tobuw6wphkae>","date":"2025-06-19T13:02:42","subject":"Re: [RFC PATCH v1 15/23] libcamera: pipeline_handler: Add\n\tmetadataAvailable() function","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:48PM +0200, Barnabás Pőcze wrote:\n> From: Jacopo Mondi <jacopo.mondi@ideasonboard.com>\n>\n> Currently the way pipeline handlers have to store metadata results\n> for a Request is to access the Request::metadata_ list directly and\n> either merge a ControlList or set a single control value there.\n>\n> Direct access to Request::metadata_ is however problematic as even if\n> metadata would be available earlier, pipeline handlers can only\n> accumulate the results in Request::metadata_ and they're only available\n> for applications at Request complete time.\n>\n> Instead of letting pipeline handlers access Request::metadata_ directly\n> provide two helper functions, similar in spirit to\n> PipelineHandler::completeBuffer() and\n> PipelineHandler::completeRequest(), to allow pipeline handlers to\n> notify early availability of metadata.\n>\n> Provide two overloads, one that accepts a ControlList and merges it into\n> Request::metadata_ and one that allows to set a single metadata result\n> there without going through an intermediate copy.\n>\n> The newly provided helpers trigger the Camera::availableMetadata signal\n> from where applications can retrieve the list of controls that have\n> just been made available by the pipeline handler.\n\nThis paragraphs should be updated to report that that the\nCamera::availableMetadata signal transports a Diff which can be used\nby applications.\n\nAlso I would point out that this patch currently populates both the\nexisting Request::metadata_ list and the metadata2_ list as long as we\ndon't replace the former with the latter.\n\n>\n> Signed-off-by: Jacopo Mondi <jacopo.mondi@ideasonboard.com>\n> [Fill both metadat lists, use `type_identity`, adjust commit message.]\n> Signed-off-by: Barnabás Pőcze <barnabas.pocze@ideasonboard.com>\n> ---\n> Original: https://patchwork.libcamera.org/patch/22229/\n> ---\n>  include/libcamera/internal/pipeline_handler.h | 21 +++++++\n>  src/libcamera/pipeline_handler.cpp            | 61 +++++++++++++++++++\n>  2 files changed, 82 insertions(+)\n>\n> diff --git a/include/libcamera/internal/pipeline_handler.h b/include/libcamera/internal/pipeline_handler.h\n> index 972a2fa65..bdec80589 100644\n> --- a/include/libcamera/internal/pipeline_handler.h\n> +++ b/include/libcamera/internal/pipeline_handler.h\n> @@ -13,11 +13,15 @@\n>  #include <sys/types.h>\n>  #include <vector>\n>\n> +#include <libcamera/base/details/cxx20.h>\n>  #include <libcamera/base/object.h>\n>\n> +#include <libcamera/camera.h>\n>  #include <libcamera/controls.h>\n>  #include <libcamera/stream.h>\n>\n> +#include \"libcamera/internal/request.h\"\n> +\n>  namespace libcamera {\n>\n>  class Camera;\n> @@ -58,6 +62,23 @@ public:\n>  \tvoid registerRequest(Request *request);\n>  \tvoid queueRequest(Request *request);\n>\n> +\tvoid metadataAvailable(Request *request, const ControlList &metadata);\n> +\n> +\ttemplate<typename T>\n> +\tvoid metadataAvailable(Request *request, const Control<T> &ctrl,\n> +\t\t\t       const details::cxx20::type_identity_t<T> &value)\n> +\t{\n> +\t\tauto &m = request->metadata2();\n> +\t\tconst auto c = m.checkpoint();\n> +\n> +\t\tm.set(ctrl, value);\n> +\t\trequest->metadata().set(ctrl, value);\n> +\n> +\t\tconst auto d = c.diffSince();\n> +\t\tif (d)\n> +\t\t\trequest->_d()->camera()->metadataAvailable.emit(request, d);\n> +\t}\n> +\n>  \tbool completeBuffer(Request *request, FrameBuffer *buffer);\n>  \tvoid completeRequest(Request *request);\n>  \tvoid cancelRequest(Request *request);\n> diff --git a/src/libcamera/pipeline_handler.cpp b/src/libcamera/pipeline_handler.cpp\n> index d84dff3c9..6a9d11241 100644\n> --- a/src/libcamera/pipeline_handler.cpp\n> +++ b/src/libcamera/pipeline_handler.cpp\n> @@ -507,6 +507,67 @@ void PipelineHandler::doQueueRequests()\n>   * \\return 0 on success or a negative error code otherwise\n>   */\n>\n> +/**\n> + * \\brief Notify the availability of a list of metadata for \\a request\n> + * \\param[in] request The request the metadata belongs to\n> + * \\param[in] metadata The metadata list\n> + *\n> + * This function should be called multiple times by pipeline handlers to signal\n> + * the availability of a list of metadata results. It notifies applications\n> + * by triggering the Camera::availableMetadata signal and accumulates the\n> + * metadata results in Request::metadata().\n> + *\n> + * Early metadata completion allows pipeline handlers to fast track delivery of\n> + * metadata results as soon as they are available before the completion of \\a\n> + * request. The full list of metadata results of a Request is available at\n> + * Request completion time in Request::metadata().\n> + *\n> + * A metadata key is expected to be notified at most once. Metadata keys\n> + * notified multiple times are ignored.\n> + *\n> + * This overload allows to signal the availability of a list of metadata and\n> + * merges them in the Request::metadata() list. This operations is expensive\n> + * as controls are copied from \\a metadata to Request::metadata().\n\nI would have proposed to adjust this documentation to mention\nmetadata2_ but as we're going to replace metadata_ with metadata2_\nthis documentation will be up-to-date with the final result of this\nseries\n\n> + *\n> + * \\context This function shall be called from the CameraManager thread.\n> + */\n> +void PipelineHandler::metadataAvailable(Request *request, const ControlList &metadata)\n> +{\n> +\trequest->metadata().merge(metadata);\n> +\n> +\tconst auto d = request->metadata2().merge(metadata);\n> +\tif (d)\n> +\t\trequest->_d()->camera()->metadataAvailable.emit(request, d);\n> +}\n> +\n> +/**\n> + * \\fn void PipelineHandler::metadataAvailable(Request *request, const Control<T> &ctrl,\n> + *\t\t\t\t\t       const details::cxx20::type_identity_t<T> &value)\n> + * \\brief Notify the availability of a metadata result for \\a request\n> + * \\param[in] request The request the metadata belongs to\n> + * \\param[in] ctrl The control id to notify\n> + * \\param[in] value the control value\n> + *\n> + * This function should be called multiple times by pipeline handlers to signal\n> + * the availability of a metadata result. It notifies applications\n> + * by triggering the Camera::availableMetadata signal and accumulates the\n> + * metadata result in Request::metadata().\n> + *\n> + * Early metadata completion allows pipeline handlers to fast track delivery of\n> + * metadata results as soon as they are available before the completion of \\a\n> + * request. The full list of metadata results of a Request is available at\n> + * Request completion time in Request::metadata().\n> + *\n> + * A metadata key is expected to be notified at most once. Metadata keys\n> + * notified multiple times are ignored.\n> + *\n> + * This overload allows to signal the availability of a single metadata and\n> + * merge \\a value in the Request::metadata() list. This operations copies \\a\n> + * value in the Request::metadata() list without creating intermediate copies.\n> + *\n> + * \\context This function shall be called from the CameraManager thread.\n> + */\n> +\n\nFWIW\nReviewed-by: Jacopo Mondi <jacopo.mondi@ideasonboard.com>\n\nThanks\n  j\n\n>  /**\n>   * \\brief Complete a buffer for a request\n>   * \\param[in] request The request the buffer belongs to\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 6BEFABDE6B\n\tfor <parsemail@patchwork.libcamera.org>;\n\tThu, 19 Jun 2025 13:02:48 +0000 (UTC)","from lancelot.ideasonboard.com (localhost [IPv6:::1])\n\tby lancelot.ideasonboard.com (Postfix) with ESMTP id 5448168DE3;\n\tThu, 19 Jun 2025 15:02:47 +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 979B368DDB\n\tfor <libcamera-devel@lists.libcamera.org>;\n\tThu, 19 Jun 2025 15:02:45 +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 8F3262EC;\n\tThu, 19 Jun 2025 15:02:31 +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=\"wb2XeRxu\"; dkim-atps=neutral","DKIM-Signature":"v=1; a=rsa-sha256; c=relaxed/simple; d=ideasonboard.com;\n\ts=mail; t=1750338151;\n\tbh=ouHRIGNEecdYq8HcIsQmoOMHVCLL9AZOc0mg2aNj8gk=;\n\th=Date:From:To:Cc:Subject:References:In-Reply-To:From;\n\tb=wb2XeRxuRowvf+7SPn98ag7yszDrFkl5PmU3Dr/ajS6u5rxF0B2n+Dq/vxkeL3Y32\n\tjzOc1x/3QIYzYkytb1U3i8CcMEJwK1gguiU3ATtjHfWYwdfb9r3DJHOd0fecye+ynv\n\tr//B6jlHGiCBADtBzn3QACjV8cX+1u3mMPpcO7rk=","Date":"Thu, 19 Jun 2025 15:02:42 +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, \n\tJacopo Mondi <jacopo.mondi@ideasonboard.com>","Subject":"Re: [RFC PATCH v1 15/23] libcamera: pipeline_handler: Add\n\tmetadataAvailable() function","Message-ID":"<hf43tmtk75vn6fpt3x7votscqt3a76jtggkzhytqimreetpt2t@tobuw6wphkae>","References":"<20250606164156.1442682-1-barnabas.pocze@ideasonboard.com>\n\t<20250606164156.1442682-16-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-16-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":34614,"web_url":"https://patchwork.libcamera.org/comment/34614/","msgid":"<5674aca4-9790-4624-93e0-61b2145392e2@ideasonboard.com>","date":"2025-06-23T14:37:25","subject":"Re: [RFC PATCH v1 15/23] libcamera: pipeline_handler: Add\n\tmetadataAvailable() function","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. 15:02 keltezéssel, Jacopo Mondi írta:\n> Hi Barnabás\n> \n> On Fri, Jun 06, 2025 at 06:41:48PM +0200, Barnabás Pőcze wrote:\n>> From: Jacopo Mondi <jacopo.mondi@ideasonboard.com>\n>>\n>> Currently the way pipeline handlers have to store metadata results\n>> for a Request is to access the Request::metadata_ list directly and\n>> either merge a ControlList or set a single control value there.\n>>\n>> Direct access to Request::metadata_ is however problematic as even if\n>> metadata would be available earlier, pipeline handlers can only\n>> accumulate the results in Request::metadata_ and they're only available\n>> for applications at Request complete time.\n>>\n>> Instead of letting pipeline handlers access Request::metadata_ directly\n>> provide two helper functions, similar in spirit to\n>> PipelineHandler::completeBuffer() and\n>> PipelineHandler::completeRequest(), to allow pipeline handlers to\n>> notify early availability of metadata.\n>>\n>> Provide two overloads, one that accepts a ControlList and merges it into\n>> Request::metadata_ and one that allows to set a single metadata result\n>> there without going through an intermediate copy.\n>>\n>> The newly provided helpers trigger the Camera::availableMetadata signal\n>> from where applications can retrieve the list of controls that have\n>> just been made available by the pipeline handler.\n> \n> This paragraphs should be updated to report that that the\n> Camera::availableMetadata signal transports a Diff which can be used\n> by applications.\n\nHmm... I thought about that but I came to the conclusion that the description\nis general enough to be considered acceptable (at least by me). Do you have any\nconcrete text in mind?\n\n\n> \n> Also I would point out that this patch currently populates both the\n> existing Request::metadata_ list and the metadata2_ list as long as we\n> don't replace the former with the latter.\n> \n>>\n>> Signed-off-by: Jacopo Mondi <jacopo.mondi@ideasonboard.com>\n>> [Fill both metadat lists, use `type_identity`, adjust commit message.]\n>> Signed-off-by: Barnabás Pőcze <barnabas.pocze@ideasonboard.com>\n>> ---\n>> Original: https://patchwork.libcamera.org/patch/22229/\n>> ---\n>>   include/libcamera/internal/pipeline_handler.h | 21 +++++++\n>>   src/libcamera/pipeline_handler.cpp            | 61 +++++++++++++++++++\n>>   2 files changed, 82 insertions(+)\n> [...]\n\n\nRegards,\nBarnabás Pőcze","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 C8C4EBDE6B\n\tfor <parsemail@patchwork.libcamera.org>;\n\tMon, 23 Jun 2025 14:37:33 +0000 (UTC)","from lancelot.ideasonboard.com (localhost [IPv6:::1])\n\tby lancelot.ideasonboard.com (Postfix) with ESMTP id 042E068DE5;\n\tMon, 23 Jun 2025 16:37:33 +0200 (CEST)","from perceval.ideasonboard.com (perceval.ideasonboard.com\n\t[213.167.242.64])\n\tby lancelot.ideasonboard.com (Postfix) with ESMTPS id E14EA68DCE\n\tfor <libcamera-devel@lists.libcamera.org>;\n\tMon, 23 Jun 2025 16:37:30 +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 C5B8FD77;\n\tMon, 23 Jun 2025 16:37:13 +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=\"GHee4moC\"; dkim-atps=neutral","DKIM-Signature":"v=1; a=rsa-sha256; c=relaxed/simple; d=ideasonboard.com;\n\ts=mail; t=1750689434;\n\tbh=waciBBWA9fZsSmRQPULTqceHfE58rYN7X0V4o0lvR84=;\n\th=Date:Subject:To:Cc:References:From:In-Reply-To:From;\n\tb=GHee4moC3LxTHPyDFXVCb3awMSXyuqWhU+RethX7aBzEsF0ixQo52RXXAQ7hJ8PV4\n\tbJT+spxZEfAW+9+0sqXApGyM947V5u5JlAxJT8P1Jo1kUqy+EWeL2XmGAyR4oVcnKs\n\tQ7tJyIZegeErVnALyXod0l6dE9tstQDa5h3Vp6mw=","Message-ID":"<5674aca4-9790-4624-93e0-61b2145392e2@ideasonboard.com>","Date":"Mon, 23 Jun 2025 16:37:25 +0200","MIME-Version":"1.0","User-Agent":"Mozilla Thunderbird","Subject":"Re: [RFC PATCH v1 15/23] libcamera: pipeline_handler: Add\n\tmetadataAvailable() function","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-16-barnabas.pocze@ideasonboard.com>\n\t<hf43tmtk75vn6fpt3x7votscqt3a76jtggkzhytqimreetpt2t@tobuw6wphkae>","From":"=?utf-8?q?Barnab=C3=A1s_P=C5=91cze?= <barnabas.pocze@ideasonboard.com>","Content-Language":"en-US, hu-HU","In-Reply-To":"<hf43tmtk75vn6fpt3x7votscqt3a76jtggkzhytqimreetpt2t@tobuw6wphkae>","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":34617,"web_url":"https://patchwork.libcamera.org/comment/34617/","msgid":"<cku6dmkmtt3rvoaoyfigdf4zhoky2dcio4elqqqh4c5s6oh526@afpri7hzgtm3>","date":"2025-06-23T15:09:12","subject":"Re: [RFC PATCH v1 15/23] libcamera: pipeline_handler: Add\n\tmetadataAvailable() function","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 04:37:25PM +0200, Barnabás Pőcze wrote:\n> Hi\n>\n> 2025. 06. 19. 15:02 keltezéssel, Jacopo Mondi írta:\n> > Hi Barnabás\n> >\n> > On Fri, Jun 06, 2025 at 06:41:48PM +0200, Barnabás Pőcze wrote:\n> > > From: Jacopo Mondi <jacopo.mondi@ideasonboard.com>\n> > >\n> > > Currently the way pipeline handlers have to store metadata results\n> > > for a Request is to access the Request::metadata_ list directly and\n> > > either merge a ControlList or set a single control value there.\n> > >\n> > > Direct access to Request::metadata_ is however problematic as even if\n> > > metadata would be available earlier, pipeline handlers can only\n> > > accumulate the results in Request::metadata_ and they're only available\n> > > for applications at Request complete time.\n> > >\n> > > Instead of letting pipeline handlers access Request::metadata_ directly\n> > > provide two helper functions, similar in spirit to\n> > > PipelineHandler::completeBuffer() and\n> > > PipelineHandler::completeRequest(), to allow pipeline handlers to\n> > > notify early availability of metadata.\n> > >\n> > > Provide two overloads, one that accepts a ControlList and merges it into\n> > > Request::metadata_ and one that allows to set a single metadata result\n> > > there without going through an intermediate copy.\n> > >\n> > > The newly provided helpers trigger the Camera::availableMetadata signal\n> > > from where applications can retrieve the list of controls that have\n> > > just been made available by the pipeline handler.\n> >\n> > This paragraphs should be updated to report that that the\n> > Camera::availableMetadata signal transports a Diff which can be used\n> > by applications.\n>\n> Hmm... I thought about that but I came to the conclusion that the description\n> is general enough to be considered acceptable (at least by me). Do you have any\n> concrete text in mind?\n>\n\nSince this paragraph comes straight from my old patch where\nCamera::availableMetadata used to transport ControlId I thought it\nwould have been nice to update it to mention that it transports a\nMetadataListDiff.\n\nUp to you, it's the commit message, as you said, it's general enough\nnot to be wrong.\n\n>\n> >\n> > Also I would point out that this patch currently populates both the\n> > existing Request::metadata_ list and the metadata2_ list as long as we\n> > don't replace the former with the latter.\n> >\n> > >\n> > > Signed-off-by: Jacopo Mondi <jacopo.mondi@ideasonboard.com>\n> > > [Fill both metadat lists, use `type_identity`, adjust commit message.]\n> > > Signed-off-by: Barnabás Pőcze <barnabas.pocze@ideasonboard.com>\n> > > ---\n> > > Original: https://patchwork.libcamera.org/patch/22229/\n> > > ---\n> > >   include/libcamera/internal/pipeline_handler.h | 21 +++++++\n> > >   src/libcamera/pipeline_handler.cpp            | 61 +++++++++++++++++++\n> > >   2 files changed, 82 insertions(+)\n> > [...]\n>\n>\n> Regards,\n> Barnabás Pőcze\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 5F3E8C3237\n\tfor <parsemail@patchwork.libcamera.org>;\n\tMon, 23 Jun 2025 15:09:19 +0000 (UTC)","from lancelot.ideasonboard.com (localhost [IPv6:::1])\n\tby lancelot.ideasonboard.com (Postfix) with ESMTP id 2C61F68DE3;\n\tMon, 23 Jun 2025 17:09:18 +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 8ABAE68DC9\n\tfor <libcamera-devel@lists.libcamera.org>;\n\tMon, 23 Jun 2025 17:09:16 +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 871488DB;\n\tMon, 23 Jun 2025 17:08:59 +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=\"Aq8PJ2AP\"; dkim-atps=neutral","DKIM-Signature":"v=1; a=rsa-sha256; c=relaxed/simple; d=ideasonboard.com;\n\ts=mail; t=1750691339;\n\tbh=kl3OATBq8woIFYoDuQO+vOwyhf7nx6A5XNB9lDrcHcg=;\n\th=Date:From:To:Cc:Subject:References:In-Reply-To:From;\n\tb=Aq8PJ2APhPPM4wVvUBg9gNmeLtLWQG/foWbpZCqpbUmD0xVvuqe16bMO3Tpuh1/IS\n\tGfM3g2tUXfao+fNYO5Z5qox3v2ztNMgxJnTNC3FsKq2doZtqLw4p5RmoDNQE2XBFOC\n\tLcltT8HyKBMJeQRur+8crZBlLaEmaczlV/Le/9e8=","Date":"Mon, 23 Jun 2025 17:09:12 +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 15/23] libcamera: pipeline_handler: Add\n\tmetadataAvailable() function","Message-ID":"<cku6dmkmtt3rvoaoyfigdf4zhoky2dcio4elqqqh4c5s6oh526@afpri7hzgtm3>","References":"<20250606164156.1442682-1-barnabas.pocze@ideasonboard.com>\n\t<20250606164156.1442682-16-barnabas.pocze@ideasonboard.com>\n\t<hf43tmtk75vn6fpt3x7votscqt3a76jtggkzhytqimreetpt2t@tobuw6wphkae>\n\t<5674aca4-9790-4624-93e0-61b2145392e2@ideasonboard.com>","MIME-Version":"1.0","Content-Type":"text/plain; charset=utf-8","Content-Disposition":"inline","Content-Transfer-Encoding":"8bit","In-Reply-To":"<5674aca4-9790-4624-93e0-61b2145392e2@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>"}}]