Show a patch.

GET /api/1.1/patches/18555/?format=api
HTTP 200 OK
Allow: GET, PUT, PATCH, HEAD, OPTIONS
Content-Type: application/json
Vary: Accept

{
    "id": 18555,
    "url": "https://patchwork.libcamera.org/api/1.1/patches/18555/?format=api",
    "web_url": "https://patchwork.libcamera.org/patch/18555/",
    "project": {
        "id": 1,
        "url": "https://patchwork.libcamera.org/api/1.1/projects/1/?format=api",
        "name": "libcamera",
        "link_name": "libcamera",
        "list_id": "libcamera_core",
        "list_email": "libcamera-devel@lists.libcamera.org",
        "web_url": "",
        "scm_url": "",
        "webscm_url": ""
    },
    "msgid": "<20230426131057.21550-8-naush@raspberrypi.com>",
    "date": "2023-04-26T13:10:51",
    "name": "[libcamera-devel,07/13] pipeline: ipa: raspberrypi: Replace IPA metadataReady() call",
    "commit_ref": null,
    "pull_url": null,
    "state": "superseded",
    "archived": false,
    "hash": "b56a061864a3e3c12ed4105bb201053d588b412e",
    "submitter": {
        "id": 34,
        "url": "https://patchwork.libcamera.org/api/1.1/people/34/?format=api",
        "name": "Naushir Patuck",
        "email": "naush@raspberrypi.com"
    },
    "delegate": null,
    "mbox": "https://patchwork.libcamera.org/patch/18555/mbox/",
    "series": [
        {
            "id": 3847,
            "url": "https://patchwork.libcamera.org/api/1.1/series/3847/?format=api",
            "web_url": "https://patchwork.libcamera.org/project/libcamera/list/?series=3847",
            "date": "2023-04-26T13:10:44",
            "name": "Raspberry Pi: Code refactoring",
            "version": 1,
            "mbox": "https://patchwork.libcamera.org/series/3847/mbox/"
        }
    ],
    "comments": "https://patchwork.libcamera.org/api/patches/18555/comments/",
    "check": "pending",
    "checks": "https://patchwork.libcamera.org/api/patches/18555/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 1C7BFBDCBD\n\tfor <parsemail@patchwork.libcamera.org>;\n\tWed, 26 Apr 2023 13:13:22 +0000 (UTC)",
            "from lancelot.ideasonboard.com (localhost [IPv6:::1])\n\tby lancelot.ideasonboard.com (Postfix) with ESMTP id C164E627E0;\n\tWed, 26 Apr 2023 15:13:21 +0200 (CEST)",
            "from mail-wm1-x32a.google.com (mail-wm1-x32a.google.com\n\t[IPv6:2a00:1450:4864:20::32a])\n\tby lancelot.ideasonboard.com (Postfix) with ESMTPS id 824DC627ED\n\tfor <libcamera-devel@lists.libcamera.org>;\n\tWed, 26 Apr 2023 15:13:17 +0200 (CEST)",
            "by mail-wm1-x32a.google.com with SMTP id\n\t5b1f17b1804b1-3f1763ee8f8so48872745e9.1\n\tfor <libcamera-devel@lists.libcamera.org>;\n\tWed, 26 Apr 2023 06:13:17 -0700 (PDT)",
            "from localhost.localdomain ([93.93.133.154])\n\tby smtp.gmail.com with ESMTPSA id\n\tk5-20020adff5c5000000b002f103ca90cdsm15780949wrp.101.2023.04.26.06.13.15\n\t(version=TLS1_3 cipher=TLS_AES_256_GCM_SHA384 bits=256/256);\n\tWed, 26 Apr 2023 06:13:16 -0700 (PDT)"
        ],
        "DKIM-Signature": [
            "v=1; a=rsa-sha256; c=relaxed/simple; d=libcamera.org;\n\ts=mail; t=1682514801;\n\tbh=8ZJirGtzoI1nfzxKgVonMTAI0BmoM7sKCOo0NC5txqc=;\n\th=To:Date:In-Reply-To:References:Subject:List-Id:List-Unsubscribe:\n\tList-Archive:List-Post:List-Help:List-Subscribe:From:Reply-To:\n\tFrom;\n\tb=AMdt2VUhu4e3biif0MibKJzdnAWTK61Ud3C3yfFcxiHNnVlK1d1E6Wo1+/dOjyAzf\n\taVNZ1XxvwtMJOBIsYKsO4BhHikMDtK4JKWselFvDGYQ/3NkKSbc3tjUiMwgZDLES0R\n\tPGLTt6IjNfWBpWIX74ohDG3zsqhfTAg3ZmoiOmbUAp+wsUj475oAszMdI14qgbTZ8s\n\tJbJ6vbyg1M+cNN1MOSbUGuutwC+Tg+mz0qUHdq9EJDd9sGgMUv4AIBALOD9tvDw2tb\n\t4QkeFvPUTmkXgLRJXYAR3bfDz5UY/HwBVkr0ckx2pbuicP5pn0vNZi9gvMWmdSVw8z\n\t++Jb6zWlu/h0Q==",
            "v=1; a=rsa-sha256; c=relaxed/relaxed;\n\td=raspberrypi.com; s=google; t=1682514797; x=1685106797;\n\th=content-transfer-encoding:mime-version:references:in-reply-to\n\t:message-id:date:subject:cc:to:from:from:to:cc:subject:date\n\t:message-id:reply-to;\n\tbh=sxkrJNOXybpoweaw5C2D3mxs0OIHpZEwdQMHkFUZTyc=;\n\tb=mgbXOhEhxPVlgomonpV54g6wP5Cp7iFkCpoELnnuDqWseE/yVvVolm63grPIU2YG6B\n\trOeFS3a8Nf5ArYJCk9nedOPvcxGpLDlfHoTb7XOPw+efGPePwCL9RIr26u4IDEuwucCi\n\tzjlrWwE/eBwe/hxvWiUB0/Ve/6Qu6etRw3VGxKBZnYXLxcC0V29O/KFod3itSv/DladZ\n\tz+C7HLnm8CdyR5G2t+preNDqn6MNDobQp/VoeAg/nJRhWK4QfJvNwp40N+++Z6JiXU0J\n\txpP+ZQrcdL9YFeiztAVcfQaZjOq46MTISRL0DFK52Hl8aEQffZSmlCyhxQYX+bqTp5s/\n\tVqlg=="
        ],
        "Authentication-Results": "lancelot.ideasonboard.com; dkim=pass (2048-bit key; \n\tunprotected) header.d=raspberrypi.com\n\theader.i=@raspberrypi.com\n\theader.b=\"mgbXOhEh\"; dkim-atps=neutral",
        "X-Google-DKIM-Signature": "v=1; a=rsa-sha256; c=relaxed/relaxed;\n\td=1e100.net; s=20221208; t=1682514797; x=1685106797;\n\th=content-transfer-encoding:mime-version:references:in-reply-to\n\t:message-id:date:subject:cc:to:from:x-gm-message-state:from:to:cc\n\t:subject:date:message-id:reply-to;\n\tbh=sxkrJNOXybpoweaw5C2D3mxs0OIHpZEwdQMHkFUZTyc=;\n\tb=KJ7SwXD4Ypkq78oIhlnRPlHbBwcb6NuJTSnyKIUtCeHwCmyCVoEYZ/DFpDd1k+5fNy\n\tPwYdVPbxzt4hnIcxJ0yLvjjMPMzfuAP/p+uer6ZxOh1iYy/IxOSE2MymcNBHluHbei+K\n\tC/S/2cumuqI44K5ePSGsBXotavt6U63UEOrtrOl61+h/tu6+59nDWoZl+ipqvZV2L1my\n\tasRksYP7/6gFwewqakopEIq3SBKumiDiP/Vx3ZOgnudUBWxy1LNUKV2ZUHqQiyv/AEY9\n\tJ7KVFqdXyR/Ra1CyQK5kFA57Fsl0xx+spJmWDE2lb9ElrppTJMR+LC5NylpG5K6cLees\n\tkAZQ==",
        "X-Gm-Message-State": "AAQBX9foWcUUc/+lONHpaoy6WHeh/LbywfTi7aq5P3uFtLGrZsljKmCc\n\t4dergyRpL+K9RNRk8wrbYo+RrILwi5b1VBHAh4lFRg==",
        "X-Google-Smtp-Source": "AKy350Z/CyVuWjIBxK3eVEoZgrAaX/4XRnDzy2bSvBYGhqPidEJkq4dME3ApJUwiBDGZnuqJ8g1uVg==",
        "X-Received": "by 2002:adf:fe49:0:b0:2fa:631a:9f38 with SMTP id\n\tm9-20020adffe49000000b002fa631a9f38mr14906924wrs.2.1682514796652; \n\tWed, 26 Apr 2023 06:13:16 -0700 (PDT)",
        "To": "libcamera-devel@lists.libcamera.org",
        "Date": "Wed, 26 Apr 2023 14:10:51 +0100",
        "Message-Id": "<20230426131057.21550-8-naush@raspberrypi.com>",
        "X-Mailer": "git-send-email 2.34.1",
        "In-Reply-To": "<20230426131057.21550-1-naush@raspberrypi.com>",
        "References": "<20230426131057.21550-1-naush@raspberrypi.com>",
        "MIME-Version": "1.0",
        "Content-Transfer-Encoding": "8bit",
        "Subject": "[libcamera-devel] [PATCH 07/13] pipeline: ipa: raspberrypi: Replace\n\tIPA metadataReady() call",
        "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>",
        "From": "Naushir Patuck via libcamera-devel\n\t<libcamera-devel@lists.libcamera.org>",
        "Reply-To": "Naushir Patuck <naush@raspberrypi.com>",
        "Errors-To": "libcamera-devel-bounces@lists.libcamera.org",
        "Sender": "\"libcamera-devel\" <libcamera-devel-bounces@lists.libcamera.org>"
    },
    "content": "Remove the IPA -> pipeline metadataReady() call to signify the return\nRequest metdata is ready to be consumed. Instead, replace this with a\nnew pipeline -> IPA reportMetadata() call that explicitly ask the IPA\nto fill in the Request metdata at an appropriate time.\n\nThis change allows the pipeline handler to dictate when it receives the\nmetadata from the IPA if the structure of the pipeline were to ever\nchange.\n\nSigned-off-by: Naushir Patuck <naush@raspberrypi.com>\n---\n include/libcamera/ipa/raspberrypi.mojom        |  2 ++\n src/ipa/rpi/vc4/raspberrypi.cpp                |  9 ++++-----\n src/libcamera/pipeline/rpi/vc4/raspberrypi.cpp | 18 +++++++-----------\n 3 files changed, 13 insertions(+), 16 deletions(-)",
    "diff": "diff --git a/include/libcamera/ipa/raspberrypi.mojom b/include/libcamera/ipa/raspberrypi.mojom\nindex 7d56248f4ab3..620f13ba9717 100644\n--- a/include/libcamera/ipa/raspberrypi.mojom\n+++ b/include/libcamera/ipa/raspberrypi.mojom\n@@ -82,6 +82,8 @@ interface IPARPiInterface {\n \n \t[async] prepareIsp(PrepareParams params);\n \t[async] processStats(ProcessParams params);\n+\n+\treportMetadata(uint32 ipaContext) => (libcamera.ControlList controls);\n };\n \n interface IPARPiEventInterface {\ndiff --git a/src/ipa/rpi/vc4/raspberrypi.cpp b/src/ipa/rpi/vc4/raspberrypi.cpp\nindex d737f1d662a0..e3ca8e2f7cbe 100644\n--- a/src/ipa/rpi/vc4/raspberrypi.cpp\n+++ b/src/ipa/rpi/vc4/raspberrypi.cpp\n@@ -154,7 +154,7 @@ private:\n \tbool validateLensControls();\n \tvoid applyControls(const ControlList &controls);\n \tvoid prepare(const PrepareParams &params);\n-\tvoid reportMetadata(unsigned int ipaContext);\n+\tvoid reportMetadata(unsigned int ipaContext, ControlList *controls) override;\n \tvoid fillDeviceStatus(const ControlList &sensorControls, unsigned int ipaContext);\n \tRPiController::StatisticsPtr fillStatistics(bcm2835_isp_stats *stats) const;\n \tvoid process(unsigned int bufferId, unsigned int ipaContext);\n@@ -565,7 +565,6 @@ void IPARPi::processStats(const ProcessParams &params)\n \tif (processPending_ && frameCount_ > mistrustCount_)\n \t\tprocess(params.buffers.stats, context);\n \n-\treportMetadata(context);\n \tprocessStatsComplete.emit(params.buffers);\n }\n \n@@ -586,9 +585,9 @@ void IPARPi::prepareIsp(const PrepareParams &params)\n \tprepareIspComplete.emit(params.buffers);\n }\n \n-void IPARPi::reportMetadata(unsigned int ipaContext)\n+void IPARPi::reportMetadata(unsigned int ipaContext, ControlList *controls)\n {\n-\tRPiController::Metadata &rpiMetadata = rpiMetadata_[ipaContext];\n+\tRPiController::Metadata &rpiMetadata = rpiMetadata_[ipaContext % rpiMetadata_.size()];\n \tstd::unique_lock<RPiController::Metadata> lock(rpiMetadata);\n \n \t/*\n@@ -697,7 +696,7 @@ void IPARPi::reportMetadata(unsigned int ipaContext)\n \t\tlibcameraMetadata_.set(controls::AfPauseState, p);\n \t}\n \n-\tmetadataReady.emit(libcameraMetadata_);\n+\t*controls = std::move(libcameraMetadata_);\n }\n \n bool IPARPi::validateSensorControls()\ndiff --git a/src/libcamera/pipeline/rpi/vc4/raspberrypi.cpp b/src/libcamera/pipeline/rpi/vc4/raspberrypi.cpp\nindex 30ce6feab0d1..bd66468683df 100644\n--- a/src/libcamera/pipeline/rpi/vc4/raspberrypi.cpp\n+++ b/src/libcamera/pipeline/rpi/vc4/raspberrypi.cpp\n@@ -207,7 +207,6 @@ public:\n \tvoid enumerateVideoDevices(MediaLink *link);\n \n \tvoid processStatsComplete(const ipa::RPi::BufferIds &buffers);\n-\tvoid metadataReady(const ControlList &metadata);\n \tvoid prepareIspComplete(const ipa::RPi::BufferIds &buffers);\n \tvoid setIspControls(const ControlList &controls);\n \tvoid setDelayedControls(const ControlList &controls, uint32_t delayContext);\n@@ -1652,7 +1651,6 @@ int RPiCameraData::loadIPA(ipa::RPi::InitResult *result)\n \n \tipa_->processStatsComplete.connect(this, &RPiCameraData::processStatsComplete);\n \tipa_->prepareIspComplete.connect(this, &RPiCameraData::prepareIspComplete);\n-\tipa_->metadataReady.connect(this, &RPiCameraData::metadataReady);\n \tipa_->setIspControls.connect(this, &RPiCameraData::setIspControls);\n \tipa_->setDelayedControls.connect(this, &RPiCameraData::setDelayedControls);\n \tipa_->setLensControls.connect(this, &RPiCameraData::setLensControls);\n@@ -1892,17 +1890,12 @@ void RPiCameraData::processStatsComplete(const ipa::RPi::BufferIds &buffers)\n \tFrameBuffer *buffer = isp_[Isp::Stats].getBuffers().at(buffers.stats & RPi::MaskID);\n \n \thandleStreamBuffer(buffer, &isp_[Isp::Stats]);\n-\tstate_ = State::IpaComplete;\n-\thandleState();\n-}\n \n-void RPiCameraData::metadataReady(const ControlList &metadata)\n-{\n-\tif (!isRunning())\n-\t\treturn;\n-\n-\t/* Add to the Request metadata buffer what the IPA has provided. */\n+\t/* Last thing to do is to fill up the request metadata. */\n \tRequest *request = requestQueue_.front();\n+\tControlList metadata;\n+\n+\tipa_->reportMetadata(request->sequence(), &metadata);\n \trequest->metadata().merge(metadata);\n \n \t/*\n@@ -1923,6 +1916,9 @@ void RPiCameraData::metadataReady(const ControlList &metadata)\n \n \t\tsensor_->setControls(&ctrls);\n \t}\n+\n+\tstate_ = State::IpaComplete;\n+\thandleState();\n }\n \n void RPiCameraData::prepareIspComplete(const ipa::RPi::BufferIds &buffers)\n",
    "prefixes": [
        "libcamera-devel",
        "07/13"
    ]
}