Patch Detail
Show a patch.
GET /api/1.1/patches/20888/?format=api
{ "id": 20888, "url": "https://patchwork.libcamera.org/api/1.1/patches/20888/?format=api", "web_url": "https://patchwork.libcamera.org/patch/20888/", "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": "<20240812115009.946036-15-mzamazal@redhat.com>", "date": "2024-08-12T11:50:03", "name": "[14/16] libcamera: software_isp: Track statistics buffers", "commit_ref": null, "pull_url": null, "state": "new", "archived": false, "hash": "2b679bdf75f9c16348ba0306c2a00c027d0b1bbf", "submitter": { "id": 177, "url": "https://patchwork.libcamera.org/api/1.1/people/177/?format=api", "name": "Milan Zamazal", "email": "mzamazal@redhat.com" }, "delegate": null, "mbox": "https://patchwork.libcamera.org/patch/20888/mbox/", "series": [ { "id": 4511, "url": "https://patchwork.libcamera.org/api/1.1/series/4511/?format=api", "web_url": "https://patchwork.libcamera.org/project/libcamera/list/?series=4511", "date": "2024-08-12T11:49:49", "name": "Software ISP: Share params and stats buffers", "version": 1, "mbox": "https://patchwork.libcamera.org/series/4511/mbox/" } ], "comments": "https://patchwork.libcamera.org/api/patches/20888/comments/", "check": "pending", "checks": "https://patchwork.libcamera.org/api/patches/20888/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 D1FF2C323E\n\tfor <parsemail@patchwork.libcamera.org>;\n\tMon, 12 Aug 2024 11:50:54 +0000 (UTC)", "from lancelot.ideasonboard.com (localhost [IPv6:::1])\n\tby lancelot.ideasonboard.com (Postfix) with ESMTP id 83FFE633D3;\n\tMon, 12 Aug 2024 13:50:54 +0200 (CEST)", "from us-smtp-delivery-124.mimecast.com\n\t(us-smtp-delivery-124.mimecast.com [170.10.133.124])\n\tby lancelot.ideasonboard.com (Postfix) with ESMTPS id 94B58633D6\n\tfor <libcamera-devel@lists.libcamera.org>;\n\tMon, 12 Aug 2024 13:50:44 +0200 (CEST)", "from mx-prod-mc-03.mail-002.prod.us-west-2.aws.redhat.com\n\t(ec2-54-186-198-63.us-west-2.compute.amazonaws.com [54.186.198.63])\n\tby relay.mimecast.com with ESMTP with STARTTLS (version=TLSv1.3,\n\tcipher=TLS_AES_256_GCM_SHA384) id us-mta-562-OZXEfsYwPEqFVZ0GbrEA5w-1;\n\tMon, 12 Aug 2024 07:50:42 -0400", "from mx-prod-int-02.mail-002.prod.us-west-2.aws.redhat.com\n\t(mx-prod-int-02.mail-002.prod.us-west-2.aws.redhat.com\n\t[10.30.177.15])\n\t(using TLSv1.3 with cipher TLS_AES_256_GCM_SHA384 (256/256 bits)\n\tkey-exchange X25519 server-signature RSA-PSS (2048 bits)\n\tserver-digest SHA256) (No client certificate requested)\n\tby mx-prod-mc-03.mail-002.prod.us-west-2.aws.redhat.com (Postfix)\n\twith ESMTPS\n\tid 2619A1954225 for <libcamera-devel@lists.libcamera.org>;\n\tMon, 12 Aug 2024 11:50:41 +0000 (UTC)", "from nuthatch.redhat.com (unknown [10.45.225.57])\n\tby mx-prod-int-02.mail-002.prod.us-west-2.aws.redhat.com (Postfix)\n\twith ESMTP id 2AD2D19772C4; Mon, 12 Aug 2024 11:50:39 +0000 (UTC)" ], "Authentication-Results": "lancelot.ideasonboard.com; dkim=pass (1024-bit key;\n\tunprotected) header.d=redhat.com header.i=@redhat.com\n\theader.b=\"f+/+g8ML\"; dkim-atps=neutral", "DKIM-Signature": "v=1; a=rsa-sha256; c=relaxed/relaxed; d=redhat.com;\n\ts=mimecast20190719; t=1723463443;\n\th=from:from:reply-to:subject:subject:date:date:message-id:message-id:\n\tto:to:cc:cc:mime-version:mime-version:content-type:content-type:\n\tcontent-transfer-encoding:content-transfer-encoding:\n\tin-reply-to:in-reply-to:references:references;\n\tbh=BhDmjC8q+iup+NUxl+/6VmxG1PqcdwEFDvjvinyQbmE=;\n\tb=f+/+g8MLZzxh0jrs4ZT2UZaZzQ3fxf38MSlZessAOXeP4VZ3DKafuZiY311G+GF+f27jq2\n\tuQcj5tF71oB+y/uPxqaE/HlU3u7CfWXqOHqvzA20/ezv/qICcJXIZLUPQjyaeBbmgAbFZ5\n\tW3UcHiyu7Pre7QQKYYSaFrZMLUHaBmY=", "X-MC-Unique": "OZXEfsYwPEqFVZ0GbrEA5w-1", "From": "Milan Zamazal <mzamazal@redhat.com>", "To": "libcamera-devel@lists.libcamera.org", "Cc": "Milan Zamazal <mzamazal@redhat.com>", "Subject": "[PATCH 14/16] libcamera: software_isp: Track statistics buffers", "Date": "Mon, 12 Aug 2024 13:50:03 +0200", "Message-ID": "<20240812115009.946036-15-mzamazal@redhat.com>", "In-Reply-To": "<20240812115009.946036-1-mzamazal@redhat.com>", "References": "<20240812115009.946036-1-mzamazal@redhat.com>", "MIME-Version": "1.0", "X-Scanned-By": "MIMEDefang 3.0 on 10.30.177.15", "X-Mimecast-Spam-Score": "0", "X-Mimecast-Originator": "redhat.com", "Content-Transfer-Encoding": "8bit", "Content-Type": "text/plain; charset=\"US-ASCII\"; x-default=true", "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": "As a preparation for passing the shared statistics buffers to IPA, this\npatch introduces tracking statistics buffer ids.\n\nSofwareIsp::availableStats_ is a queue of ids of the buffers available\nfor use. When a fresh statistics buffer is needed, its id is retrieved\nfrom there and once the buffer is no longer needed, it's put back there,\nin a method invoked by a signal. This is similar to what the hardware\npipelines do.\n\nWe use buffers' file descriptors as buffer ids. The statistics buffers\nwill be shared with the IPA, SwIspStats and debayering and we need their\ncommon identification everywhere. The buffer file descriptors are\nshared unchanged so they can be used for the purpose, avoiding a need to\npass a special mapping to the IPA and debayering on initialization.\n\nNote that the statistics buffer id is still actually unused, this will\nbe changed once the buffers are shared with the IPA.\n\nSigned-off-by: Milan Zamazal <mzamazal@redhat.com>\n---\n .../libcamera/internal/software_isp/software_isp.h | 1 +\n src/libcamera/software_isp/software_isp.cpp | 13 +++++++++++--\n 2 files changed, 12 insertions(+), 2 deletions(-)", "diff": "diff --git a/include/libcamera/internal/software_isp/software_isp.h b/include/libcamera/internal/software_isp/software_isp.h\nindex a6ba4a07..5959e86e 100644\n--- a/include/libcamera/internal/software_isp/software_isp.h\n+++ b/include/libcamera/internal/software_isp/software_isp.h\n@@ -102,6 +102,7 @@ private:\n \tDebayerParams debayerParams_;\n \tstd::queue<uint32_t> availableParams_;\n \tbool allocateParamsBuffers(const unsigned int bufferCount);\n+\tstd::queue<uint32_t> availableStats_;\n \tstd::unique_ptr<SwStatsCpu> allocateStatsBuffers(\n \t\tstd::vector<SharedFD> &fdStats,\n \t\tconst unsigned int bufferCount);\ndiff --git a/src/libcamera/software_isp/software_isp.cpp b/src/libcamera/software_isp/software_isp.cpp\nindex 1e224b6f..c4ad22be 100644\n--- a/src/libcamera/software_isp/software_isp.cpp\n+++ b/src/libcamera/software_isp/software_isp.cpp\n@@ -191,6 +191,7 @@ std::unique_ptr<SwStatsCpu> SoftwareIsp::allocateStatsBuffers(\n \t\tunsigned int bufferId = shared.fd().get();\n \t\tfdStats.emplace_back(shared.fd());\n \t\tsharedStats->emplace(bufferId, std::move(shared));\n+\t\tavailableStats_.push(bufferId);\n \t}\n \n \tauto stats = std::make_unique<SwStatsCpu>(std::move(sharedStats));\n@@ -413,11 +414,18 @@ void SoftwareIsp::process(uint32_t frame, FrameBuffer *input, FrameBuffer *outpu\n \t\twhile (availableParams_.empty())\n \t\t\t;\n \t}\n+\tif (availableStats_.empty()) {\n+\t\tLOG(SoftwareIsp, Error) << \"Statistics buffer underrun\";\n+\t\t/* Well, busy loop, but this situation shouldn't normally happen. */\n+\t\twhile (availableStats_.empty())\n+\t\t\t;\n+\t}\n \n \tconst uint32_t paramsBufferId = availableParams_.front();\n \tavailableParams_.pop();\n+\tconst uint32_t statsBufferId = availableStats_.front();\n+\tavailableStats_.pop();\n \tipa_->prepare(frame, paramsBufferId);\n-\tconst uint32_t statsBufferId = 0;\n \tdebayer_->invokeMethod(&DebayerCpu::process,\n \t\t\t ConnectionTypeQueued, frame,\n \t\t\t statsBufferId, paramsBufferId, input, output);\n@@ -443,8 +451,9 @@ void SoftwareIsp::statsReady(uint32_t frame, const uint32_t statsBufferId)\n \tispStatsReady.emit(frame, statsBufferId);\n }\n \n-void SoftwareIsp::statsProcessed([[maybe_unused]] const uint32_t statsBufferId)\n+void SoftwareIsp::statsProcessed(const uint32_t statsBufferId)\n {\n+\tavailableStats_.push(statsBufferId);\n }\n \n void SoftwareIsp::inputReady(FrameBuffer *input)\n", "prefixes": [ "14/16" ] }