{"id":22230,"url":"https://patchwork.libcamera.org/api/1.1/patches/22230/?format=json","web_url":"https://patchwork.libcamera.org/patch/22230/","project":{"id":1,"url":"https://patchwork.libcamera.org/api/1.1/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":"<20241206160747.97176-5-jacopo.mondi@ideasonboard.com>","date":"2024-12-06T16:07:42","name":"[4/8] guides: pipeline_handler: Document PipelineHandler::metadataAvailable","commit_ref":null,"pull_url":null,"state":"new","archived":false,"hash":"35bf673b302fb19db354aaabb42a70e329d441d0","submitter":{"id":143,"url":"https://patchwork.libcamera.org/api/1.1/people/143/?format=json","name":"Jacopo Mondi","email":"jacopo.mondi@ideasonboard.com"},"delegate":null,"mbox":"https://patchwork.libcamera.org/patch/22230/mbox/","series":[{"id":4858,"url":"https://patchwork.libcamera.org/api/1.1/series/4858/?format=json","web_url":"https://patchwork.libcamera.org/project/libcamera/list/?series=4858","date":"2024-12-06T16:07:38","name":"libcamera: Support partial metadata completion","version":1,"mbox":"https://patchwork.libcamera.org/series/4858/mbox/"}],"comments":"https://patchwork.libcamera.org/api/patches/22230/comments/","check":"pending","checks":"https://patchwork.libcamera.org/api/patches/22230/checks/","tags":{},"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 4DD8ABE173\n\tfor <parsemail@patchwork.libcamera.org>;\n\tFri,  6 Dec 2024 16:08:07 +0000 (UTC)","from lancelot.ideasonboard.com (localhost [IPv6:::1])\n\tby lancelot.ideasonboard.com (Postfix) with ESMTP id 323BB67E30;\n\tFri,  6 Dec 2024 17:08:01 +0100 (CET)","from perceval.ideasonboard.com (perceval.ideasonboard.com\n\t[213.167.242.64])\n\tby lancelot.ideasonboard.com (Postfix) with ESMTPS id 5CF2C67E1C\n\tfor <libcamera-devel@lists.libcamera.org>;\n\tFri,  6 Dec 2024 17:07:56 +0100 (CET)","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 ADC009FC;\n\tFri,  6 Dec 2024 17:07:26 +0100 (CET)"],"Authentication-Results":"lancelot.ideasonboard.com; dkim=pass (1024-bit key;\n\tunprotected) header.d=ideasonboard.com header.i=@ideasonboard.com\n\theader.b=\"NnkUB2s0\"; dkim-atps=neutral","DKIM-Signature":"v=1; a=rsa-sha256; c=relaxed/simple; d=ideasonboard.com;\n\ts=mail; t=1733501246;\n\tbh=7Y0HjASJaq70ru03BO0gmDiDRiK9/i3qxwgjLsFrHJk=;\n\th=From:To:Cc:Subject:Date:In-Reply-To:References:From;\n\tb=NnkUB2s0WQ9UyH0XwXbZMRZEbLNAhE4hBIKfOnGT9BiMpTCfr5d4HeSrgtPQChjfX\n\tUpLRvn26w9sh+JGuopyDIpoiS6nkUt6r2498BuhAwt3SuHgD/v6G2TkN65zC66euH+\n\t35VWkKTKcLckYWGTTDNCOvDL73pcN86NGPBH3ozg=","From":"Jacopo Mondi <jacopo.mondi@ideasonboard.com>","To":"libcamera-devel@lists.libcamera.org","Cc":"Jacopo Mondi <jacopo.mondi@ideasonboard.com>,\n\tHarvey Yang <chenghaoyang@chromium.org>,\n\tHan-Lin Chen <hanlinchen@chromium.org>","Subject":"[PATCH 4/8] guides: pipeline_handler: Document\n\tPipelineHandler::metadataAvailable","Date":"Fri,  6 Dec 2024 17:07:42 +0100","Message-ID":"<20241206160747.97176-5-jacopo.mondi@ideasonboard.com>","X-Mailer":"git-send-email 2.47.1","In-Reply-To":"<20241206160747.97176-1-jacopo.mondi@ideasonboard.com>","References":"<20241206160747.97176-1-jacopo.mondi@ideasonboard.com>","MIME-Version":"1.0","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>"},"content":"Document the new available helpers to accumulate metadata results in\nRequest::metadata and notify applications about metadata availability.\n\nSigned-off-by: Jacopo Mondi <jacopo.mondi@ideasonboard.com>\n---\n Documentation/guides/pipeline-handler.rst | 26 ++++++++++++++++-------\n 1 file changed, 18 insertions(+), 8 deletions(-)","diff":"diff --git a/Documentation/guides/pipeline-handler.rst b/Documentation/guides/pipeline-handler.rst\nindex 69e832a5587e..5a1b402fcc62 100644\n--- a/Documentation/guides/pipeline-handler.rst\n+++ b/Documentation/guides/pipeline-handler.rst\n@@ -1431,18 +1431,28 @@ classes documentation.\n .. _libcamera Signal and Slot: https://libcamera.org/api-html/classlibcamera_1_1Signal.html#details\n \n In order to notify applications about the availability of new frames and data,\n-the ``Camera`` device exposes two ``Signals`` to which applications can connect\n-to be notified of frame completion events. The ``bufferComplete`` signal serves\n-to report to applications the completion event of a single ``Stream`` part of a\n-``Request``, while the ``requestComplete`` signal notifies the completion of all\n-the ``Streams`` and data submitted as part of a request. This mechanism allows\n+the ``Camera`` device exposes three ``Signals`` to which applications can\n+connect to be notified of frame completion and metadata availability events.\n+\n+The ``metadataAvailable`` signal serves to notify about the availability of\n+metadata and accumulates metadata results in the list of metadata associated\n+with a ``Request``.  The ``bufferComplete`` signal serves to report to\n+applications the completion event of a single ``Stream`` part of a ``Request``,\n+while the ``requestComplete`` signal notifies the completion of all the\n+``Streams`` and data submitted as part of a request. This mechanism allows\n implementation of partial request completion, which allows an application to\n inspect completed buffers associated with the single streams without waiting for\n all of them to be ready.\n \n-The ``bufferComplete`` and ``requestComplete`` signals are emitted by the\n-``Camera`` device upon notifications received from the pipeline handler, which\n-tracks the buffers and request completion status.\n+The ``metadataAvailable``, ``bufferComplete`` and ``requestComplete`` signals\n+are emitted by the ``Camera`` device upon notifications received from the\n+pipeline handler, which tracks the metadata, buffers and request completion\n+status.\n+\n+Metadata availability is signalled by the pipeline handlers by calling the\n+PipelineHandler base class ``metadataAvailable`` function. This function\n+notifies applications about metadata availability and accumulates metadata\n+results in the ``Request::metadata()`` list.\n \n The single buffer completion notification is implemented by pipeline handlers by\n `connecting`_ the ``bufferReady`` signal of the capture devices they have queued\n","prefixes":["4/8"]}