Show a patch.

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

{
    "id": 22842,
    "url": "https://patchwork.libcamera.org/api/patches/22842/?format=api",
    "web_url": "https://patchwork.libcamera.org/patch/22842/",
    "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": "<20250224120854.19747-3-mzamazal@redhat.com>",
    "date": "2025-02-24T12:08:51",
    "name": "[2/5] libcamera: software_isp: Handle queued output buffers on stop",
    "commit_ref": null,
    "pull_url": null,
    "state": "superseded",
    "archived": false,
    "hash": "fd91ac83a479e1af25e51e7a19cd1198ea4b26f9",
    "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/22842/mbox/",
    "series": [
        {
            "id": 5015,
            "url": "https://patchwork.libcamera.org/api/series/5015/?format=api",
            "web_url": "https://patchwork.libcamera.org/project/libcamera/list/?series=5015",
            "date": "2025-02-24T12:08:49",
            "name": "Fix occasional software ISP assertion error on stop",
            "version": 1,
            "mbox": "https://patchwork.libcamera.org/series/5015/mbox/"
        }
    ],
    "comments": "https://patchwork.libcamera.org/api/patches/22842/comments/",
    "check": "pending",
    "checks": "https://patchwork.libcamera.org/api/patches/22842/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 14EBFC324E\n\tfor <parsemail@patchwork.libcamera.org>;\n\tMon, 24 Feb 2025 12:09:18 +0000 (UTC)",
            "from lancelot.ideasonboard.com (localhost [IPv6:::1])\n\tby lancelot.ideasonboard.com (Postfix) with ESMTP id CA59A686F0;\n\tMon, 24 Feb 2025 13:09:16 +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 6399F686E1\n\tfor <libcamera-devel@lists.libcamera.org>;\n\tMon, 24 Feb 2025 13:09:15 +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-138-yJpioRJWMGCM6jP2zjMVbg-1;\n\tMon, 24 Feb 2025 07:09:11 -0500",
            "from mx-prod-int-04.mail-002.prod.us-west-2.aws.redhat.com\n\t(mx-prod-int-04.mail-002.prod.us-west-2.aws.redhat.com\n\t[10.30.177.40])\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 D0265180087E; Mon, 24 Feb 2025 12:09:09 +0000 (UTC)",
            "from mzamazal-thinkpadp1gen7.tpbc.com (unknown [10.45.225.60])\n\tby mx-prod-int-04.mail-002.prod.us-west-2.aws.redhat.com (Postfix)\n\twith ESMTP id 158C719560AA; Mon, 24 Feb 2025 12:09:07 +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=\"Er+LhnpF\"; dkim-atps=neutral",
        "DKIM-Signature": "v=1; a=rsa-sha256; c=relaxed/relaxed; d=redhat.com;\n\ts=mimecast20190719; t=1740398954;\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=29/66h17M1IjrZ7ZQh3Q/K4Eiv/s2bDJePsDYud9OVM=;\n\tb=Er+LhnpFPXzZnwtmEFv1UHSO4hEiW6m1T8Kke7Y1uK2MBJSEdGO97bVE62YX0CduX0XYMA\n\tP2ZlzEhK23g6ut1sgnpZhJ6A7Bm9p3gznc/3tSQugRgxEJ3bawwRqcE7QZAh8tG9SRUIfS\n\txGlfOsWeClEXvZdkHRtwRkCJ9ODiQ9I=",
        "X-MC-Unique": "yJpioRJWMGCM6jP2zjMVbg-1",
        "X-Mimecast-MFC-AGG-ID": "yJpioRJWMGCM6jP2zjMVbg_1740398950",
        "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 2/5] libcamera: software_isp: Handle queued output buffers on\n\tstop",
        "Date": "Mon, 24 Feb 2025 13:08:51 +0100",
        "Message-ID": "<20250224120854.19747-3-mzamazal@redhat.com>",
        "In-Reply-To": "<20250224120854.19747-1-mzamazal@redhat.com>",
        "References": "<20250224120854.19747-1-mzamazal@redhat.com>",
        "MIME-Version": "1.0",
        "X-Scanned-By": "MIMEDefang 3.0 on 10.30.177.40",
        "X-Mimecast-Spam-Score": "0",
        "X-Mimecast-MFC-PROC-ID": "i9-8ydsV0xf92jmea00Ku91JuY9jMw8LgTJvFiFU2sc_1740398950",
        "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 output buffers from the SoftwareIsp\nslots once SoftwareIsp is stopped.  Let's track the queued output\nbuffers and mark those still pending as canceled in SoftwareIsp::stop\nand return them to the pipeline handler.\n\nDealing with input buffers is addressed in a separate patch.\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   | 22 ++++++++++++++++---\n 2 files changed, 20 insertions(+), 3 deletions(-)",
    "diff": "diff --git a/include/libcamera/internal/software_isp/software_isp.h b/include/libcamera/internal/software_isp/software_isp.h\nindex af0dcc24..f2344355 100644\n--- a/include/libcamera/internal/software_isp/software_isp.h\n+++ b/include/libcamera/internal/software_isp/software_isp.h\n@@ -101,6 +101,7 @@ private:\n \n \tstd::unique_ptr<ipa::soft::IPAProxySoft> ipa_;\n \tbool running_;\n+\tstd::deque<FrameBuffer *> queuedOutputBuffers_;\n };\n \n } /* namespace libcamera */\ndiff --git a/src/libcamera/software_isp/software_isp.cpp b/src/libcamera/software_isp/software_isp.cpp\nindex 1a39f4d8..4339e547 100644\n--- a/src/libcamera/software_isp/software_isp.cpp\n+++ b/src/libcamera/software_isp/software_isp.cpp\n@@ -17,6 +17,7 @@\n #include <libcamera/formats.h>\n #include <libcamera/stream.h>\n \n+#include \"libcamera/internal/framebuffer.h\"\n #include \"libcamera/internal/ipa_manager.h\"\n #include \"libcamera/internal/software_isp/debayer_params.h\"\n \n@@ -300,8 +301,11 @@ int SoftwareIsp::queueBuffers(uint32_t frame, FrameBuffer *input,\n \t\t\treturn -EINVAL;\n \t}\n \n-\tfor (auto iter = outputs.begin(); iter != outputs.end(); iter++)\n-\t\tprocess(frame, input, iter->second);\n+\tfor (auto iter = outputs.begin(); iter != outputs.end(); iter++) {\n+\t\tFrameBuffer *const buffer = iter->second;\n+\t\tqueuedOutputBuffers_.push_back(buffer);\n+\t\tprocess(frame, input, buffer);\n+\t}\n \n \treturn 0;\n }\n@@ -331,6 +335,13 @@ void SoftwareIsp::stop()\n \n \trunning_ = false;\n \tipa_->stop();\n+\n+\tfor (auto buffer : queuedOutputBuffers_) {\n+\t\tFrameMetadata &metadata = buffer->_d()->metadata();\n+\t\tmetadata.status = FrameMetadata::FrameCancelled;\n+\t\toutputBufferReady.emit(buffer);\n+\t}\n+\tqueuedOutputBuffers_.clear();\n }\n \n /**\n@@ -369,7 +380,12 @@ void SoftwareIsp::inputReady(FrameBuffer *input)\n \n void SoftwareIsp::outputReady(FrameBuffer *output)\n {\n-\toutputBufferReady.emit(output);\n+\tif (running_) {\n+\t\tqueuedOutputBuffers_.erase(find(queuedOutputBuffers_.begin(),\n+\t\t\t\t\t\tqueuedOutputBuffers_.end(),\n+\t\t\t\t\t\toutput));\n+\t\toutputBufferReady.emit(output);\n+\t}\n }\n \n } /* namespace libcamera */\n",
    "prefixes": [
        "2/5"
    ]
}