Patch Detail
Show a patch.
GET /api/patches/22860/?format=api
{ "id": 22860, "url": "https://patchwork.libcamera.org/api/patches/22860/?format=api", "web_url": "https://patchwork.libcamera.org/patch/22860/", "project": { "id": 1, "url": "https://patchwork.libcamera.org/api/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": "<20250225150614.20195-4-mzamazal@redhat.com>", "date": "2025-02-25T15:06:09", "name": "[v3,3/6] libcamera: software_isp: Handle queued input buffers on stop", "commit_ref": null, "pull_url": null, "state": "accepted", "archived": false, "hash": "2758601a587cb1aadd32ef33d4747d908768924e", "submitter": { "id": 177, "url": "https://patchwork.libcamera.org/api/people/177/?format=api", "name": "Milan Zamazal", "email": "mzamazal@redhat.com" }, "delegate": null, "mbox": "https://patchwork.libcamera.org/patch/22860/mbox/", "series": [ { "id": 5019, "url": "https://patchwork.libcamera.org/api/series/5019/?format=api", "web_url": "https://patchwork.libcamera.org/project/libcamera/list/?series=5019", "date": "2025-02-25T15:06:06", "name": "Fix occasional software ISP assertion error on stop", "version": 3, "mbox": "https://patchwork.libcamera.org/series/5019/mbox/" } ], "comments": "https://patchwork.libcamera.org/api/patches/22860/comments/", "check": "pending", "checks": "https://patchwork.libcamera.org/api/patches/22860/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 77AD1BDB1C\n\tfor <parsemail@patchwork.libcamera.org>;\n\tTue, 25 Feb 2025 15:06:41 +0000 (UTC)", "from lancelot.ideasonboard.com (localhost [IPv6:::1])\n\tby lancelot.ideasonboard.com (Postfix) with ESMTP id 0187568725;\n\tTue, 25 Feb 2025 16:06:41 +0100 (CET)", "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 8968668715\n\tfor <libcamera-devel@lists.libcamera.org>;\n\tTue, 25 Feb 2025 16:06:38 +0100 (CET)", "from mx-prod-mc-08.mail-002.prod.us-west-2.aws.redhat.com\n\t(ec2-35-165-154-97.us-west-2.compute.amazonaws.com [35.165.154.97])\n\tby relay.mimecast.com with ESMTP with STARTTLS (version=TLSv1.3,\n\tcipher=TLS_AES_256_GCM_SHA384) id us-mta-602-XGv5gjWwO2yKETv080uwwQ-1;\n\tTue, 25 Feb 2025 10:06:32 -0500", "from mx-prod-int-06.mail-002.prod.us-west-2.aws.redhat.com\n\t(mx-prod-int-06.mail-002.prod.us-west-2.aws.redhat.com\n\t[10.30.177.93])\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-08.mail-002.prod.us-west-2.aws.redhat.com (Postfix)\n\twith ESMTPS id 3A7AE1801A1A; Tue, 25 Feb 2025 15:06:31 +0000 (UTC)", "from mzamazal-thinkpadp1gen7.tpbc.com (unknown [10.45.224.119])\n\tby mx-prod-int-06.mail-002.prod.us-west-2.aws.redhat.com (Postfix)\n\twith ESMTP id 3770B1800357; Tue, 25 Feb 2025 15:06:28 +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=\"WVOXxAKR\"; dkim-atps=neutral", "DKIM-Signature": "v=1; a=rsa-sha256; c=relaxed/relaxed; d=redhat.com;\n\ts=mimecast20190719; t=1740495997;\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=H32qMEkJX+61AWPrMY3td75sqtOqZS2G4yStvM1eI64=;\n\tb=WVOXxAKR3ZNPaHpH+4AX7Vd2dGBGXY7pVkDpx1dWG9Sf/Aj6i/I8qurMypSOnph3dvUK3V\n\t9QgNY0H2/0vcObRXYxMiUF4Kur+hD+mqDQMVEXqlu6b/w0GFlTNObkf00R4IczTehznCG7\n\tSjcPGqqOoU/xiPvXFNvkkki13izepCM=", "X-MC-Unique": "XGv5gjWwO2yKETv080uwwQ-1", "X-Mimecast-MFC-AGG-ID": "XGv5gjWwO2yKETv080uwwQ_1740495991", "From": "Milan Zamazal <mzamazal@redhat.com>", "To": "libcamera-devel@lists.libcamera.org", "Cc": "Milan Zamazal <mzamazal@redhat.com>,\n\tStanislaw Gruszka <stanislaw.gruszka@linux.intel.com>,\n\tLaurent Pinchart <laurent.pinchart@ideasonboard.com>,\n\tKieran Bingham <kieran.bingham@ideasonboard.com>", "Subject": "[PATCH v3 3/6] libcamera: software_isp: Handle queued input buffers\n\ton stop", "Date": "Tue, 25 Feb 2025 16:06:09 +0100", "Message-ID": "<20250225150614.20195-4-mzamazal@redhat.com>", "In-Reply-To": "<20250225150614.20195-1-mzamazal@redhat.com>", "References": "<20250225150614.20195-1-mzamazal@redhat.com>", "MIME-Version": "1.0", "X-Scanned-By": "MIMEDefang 3.4.1 on 10.30.177.93", "X-Mimecast-Spam-Score": "0", "X-Mimecast-MFC-PROC-ID": "Tdg03x3KHUi8xdNfxQIMtjve8qglk2IATtXL29MbVLs_1740495991", "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": "When SoftwareIsp stops, input and output buffers queued to it may not\nyet be fully processed. They will be eventually returned but stop means\nstop, there should be no processing related actions invoked afterwards.\n\nLet's stop forwarding processed input buffers from SoftwareIsp slots\nwhen SoftwareIsp is stopped. Let's track the queued input buffers and\nreturn them back for capture in SoftwareIsp::stop().\n\nThe returned input buffers are marked as canceled. This is not\nnecessary at the moment but it gives the pipeline handlers chance to\ndeal with this if they need to.\n\nSigned-off-by: Milan Zamazal <mzamazal@redhat.com>\n---\n .../internal/software_isp/software_isp.h | 1 +\n src/libcamera/software_isp/software_isp.cpp | 18 +++++++++++++++++-\n 2 files changed, 18 insertions(+), 1 deletion(-)", "diff": "diff --git a/include/libcamera/internal/software_isp/software_isp.h b/include/libcamera/internal/software_isp/software_isp.h\nindex 5073ce7a..400a4dc5 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 \n \tstd::unique_ptr<ipa::soft::IPAProxySoft> ipa_;\n \tbool running_;\n+\tstd::deque<FrameBuffer *> queuedInputBuffers_;\n \tstd::deque<FrameBuffer *> queuedOutputBuffers_;\n };\n \ndiff --git a/src/libcamera/software_isp/software_isp.cpp b/src/libcamera/software_isp/software_isp.cpp\nindex 140cddf3..beac66fc 100644\n--- a/src/libcamera/software_isp/software_isp.cpp\n+++ b/src/libcamera/software_isp/software_isp.cpp\n@@ -303,6 +303,8 @@ int SoftwareIsp::queueBuffers(uint32_t frame, FrameBuffer *input,\n \t\t\treturn -EINVAL;\n \t}\n \n+\tqueuedInputBuffers_.push_back(input);\n+\n \tfor (auto iter = outputs.begin(); iter != outputs.end(); iter++) {\n \t\tFrameBuffer *const buffer = iter->second;\n \t\tqueuedOutputBuffers_.push_back(buffer);\n@@ -329,6 +331,9 @@ int SoftwareIsp::start()\n \n /**\n * \\brief Stops the Software ISP streaming operation\n+ *\n+ * All pending buffers are returned back as canceled before this method\n+ * finishes.\n */\n void SoftwareIsp::stop()\n {\n@@ -344,6 +349,13 @@ void SoftwareIsp::stop()\n \t\toutputBufferReady.emit(buffer);\n \t}\n \tqueuedOutputBuffers_.clear();\n+\n+\tfor (auto buffer : queuedInputBuffers_) {\n+\t\tFrameMetadata &metadata = buffer->_d()->metadata();\n+\t\tmetadata.status = FrameMetadata::FrameCancelled;\n+\t\tinputBufferReady.emit(buffer);\n+\t}\n+\tqueuedInputBuffers_.clear();\n }\n \n /**\n@@ -377,7 +389,11 @@ void SoftwareIsp::statsReady(uint32_t frame, uint32_t bufferId)\n \n void SoftwareIsp::inputReady(FrameBuffer *input)\n {\n-\tinputBufferReady.emit(input);\n+\tif (running_) {\n+\t\tASSERT(queuedInputBuffers_.front() == input);\n+\t\tqueuedInputBuffers_.pop_front();\n+\t\tinputBufferReady.emit(input);\n+\t}\n }\n \n void SoftwareIsp::outputReady(FrameBuffer *output)\n", "prefixes": [ "v3", "3/6" ] }