Show a patch.

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

{
    "id": 12027,
    "url": "https://patchwork.libcamera.org/api/1.1/patches/12027/?format=api",
    "web_url": "https://patchwork.libcamera.org/patch/12027/",
    "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": "<20210421064847.324118-3-hiroh@chromium.org>",
    "date": "2021-04-21T06:48:47",
    "name": "[libcamera-devel,v4,2/2] libcamera: ipu3: Try queuing pending requests if a buffer is available",
    "commit_ref": null,
    "pull_url": null,
    "state": "superseded",
    "archived": false,
    "hash": "de9c3d2768ed590aca7b1bdc74cedf2658f1429a",
    "submitter": {
        "id": 63,
        "url": "https://patchwork.libcamera.org/api/1.1/people/63/?format=api",
        "name": "Hirokazu Honda",
        "email": "hiroh@chromium.org"
    },
    "delegate": null,
    "mbox": "https://patchwork.libcamera.org/patch/12027/mbox/",
    "series": [
        {
            "id": 1954,
            "url": "https://patchwork.libcamera.org/api/1.1/series/1954/?format=api",
            "web_url": "https://patchwork.libcamera.org/project/libcamera/list/?series=1954",
            "date": "2021-04-21T06:48:45",
            "name": "ipu3: Enable to handle a number of concurrent requests",
            "version": 4,
            "mbox": "https://patchwork.libcamera.org/series/1954/mbox/"
        }
    ],
    "comments": "https://patchwork.libcamera.org/api/patches/12027/comments/",
    "check": "pending",
    "checks": "https://patchwork.libcamera.org/api/patches/12027/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 43466BDB16\n\tfor <parsemail@patchwork.libcamera.org>;\n\tWed, 21 Apr 2021 06:48:59 +0000 (UTC)",
            "from lancelot.ideasonboard.com (localhost [IPv6:::1])\n\tby lancelot.ideasonboard.com (Postfix) with ESMTP id 9956368848;\n\tWed, 21 Apr 2021 08:48:58 +0200 (CEST)",
            "from mail-pf1-x431.google.com (mail-pf1-x431.google.com\n\t[IPv6:2607:f8b0:4864:20::431])\n\tby lancelot.ideasonboard.com (Postfix) with ESMTPS id 3F39C602C3\n\tfor <libcamera-devel@lists.libcamera.org>;\n\tWed, 21 Apr 2021 08:48:57 +0200 (CEST)",
            "by mail-pf1-x431.google.com with SMTP id y62so3964471pfg.4\n\tfor <libcamera-devel@lists.libcamera.org>;\n\tTue, 20 Apr 2021 23:48:57 -0700 (PDT)",
            "from hiroh2.tok.corp.google.com\n\t([2401:fa00:8f:2:7aaa:cbeb:5d87:4ab6])\n\tby smtp.gmail.com with ESMTPSA id\n\tng6sm1021458pjb.14.2021.04.20.23.48.54\n\t(version=TLS1_3 cipher=TLS_AES_256_GCM_SHA384 bits=256/256);\n\tTue, 20 Apr 2021 23:48:55 -0700 (PDT)"
        ],
        "Authentication-Results": "lancelot.ideasonboard.com;\n\tdkim=fail reason=\"signature verification failed\" (1024-bit key;\n\tunprotected) header.d=chromium.org header.i=@chromium.org\n\theader.b=\"e+LiJN/p\"; dkim-atps=neutral",
        "DKIM-Signature": "v=1; a=rsa-sha256; c=relaxed/relaxed; d=chromium.org;\n\ts=google; \n\th=from:to:cc:subject:date:message-id:in-reply-to:references\n\t:mime-version:content-transfer-encoding;\n\tbh=kNV6qYjAU7VLtEqntOrtKziregsJiMkAO84CZN8Pklo=;\n\tb=e+LiJN/pyqzhCkiS/pD0VUcEEhsqY6dPlN2aZFE/PMdFDsXE9bIv//avCD2TN9cfYt\n\tbEZ6tZLFi6ESEeTMhB0sbxKxK1T2YKm/kEIDA/Y5kOOsCURirUhbtBQpBW2jinEZ2lsW\n\tFTECugAp0Q97lsw6K1E/XaybqAuECMPKCH4p4=",
        "X-Google-DKIM-Signature": "v=1; a=rsa-sha256; c=relaxed/relaxed;\n\td=1e100.net; s=20161025;\n\th=x-gm-message-state:from:to:cc:subject:date:message-id:in-reply-to\n\t:references:mime-version:content-transfer-encoding;\n\tbh=kNV6qYjAU7VLtEqntOrtKziregsJiMkAO84CZN8Pklo=;\n\tb=uLlURWylqfEkeBJ3QMbVDC/spBKnebNXjjs8UedhsWDwQQf6J7D/wVorS6elsRx92u\n\tHhNGIHQlXJEA7hKqBV5hh2hH7kyODLP23+knEzqimFI7sxNKHPZFtD3gTCcBEmMLFAjL\n\t/KXKxtkUX84mj0jECtqOH8gcXKi7MAsSnpE4QFxA+kpVKMdduiIAxa1tGuyrIr5VZ2SU\n\t+XqaVbbZj0LHzmLCvT/VofHZbNP38rag/Ea0AkE3acpJMDHX1is1fFucUnYPm2Sq57Xl\n\tze3dx9jfVjCa0fvdfK+L8ddedT3AwPQN5hRneFq11yzHNgfnGVQ+koNwRr1SWlYE+MId\n\tcbeQ==",
        "X-Gm-Message-State": "AOAM530AcAa/XIXNEseminthN8JGP1uwcy7Se+MaGRRpiTN5sulVZAYC\n\thbdP5q5Xh1w2Hi4NNt/iWgOjXUrUZ8E+6g==",
        "X-Google-Smtp-Source": "ABdhPJx1aWMzP8UtOa64we3O5bO4/zUtMEUeLHBczpwXQha7WI/K0sC5SMngA7WLXPAtbvs/XNO2xg==",
        "X-Received": "by 2002:a62:8c8c:0:b029:253:31e:55cb with SMTP id\n\tm134-20020a628c8c0000b0290253031e55cbmr28182804pfd.27.1618987735602; \n\tTue, 20 Apr 2021 23:48:55 -0700 (PDT)",
        "From": "Hirokazu Honda <hiroh@chromium.org>",
        "To": "libcamera-devel@lists.libcamera.org",
        "Date": "Wed, 21 Apr 2021 15:48:47 +0900",
        "Message-Id": "<20210421064847.324118-3-hiroh@chromium.org>",
        "X-Mailer": "git-send-email 2.31.1.368.gbe11c130af-goog",
        "In-Reply-To": "<20210421064847.324118-1-hiroh@chromium.org>",
        "References": "<20210421064847.324118-1-hiroh@chromium.org>",
        "MIME-Version": "1.0",
        "Subject": "[libcamera-devel] [PATCH v4 2/2] libcamera: ipu3: Try queuing\n\tpending requests if a buffer is available",
        "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>",
        "Content-Type": "text/plain; charset=\"us-ascii\"",
        "Content-Transfer-Encoding": "7bit",
        "Errors-To": "libcamera-devel-bounces@lists.libcamera.org",
        "Sender": "\"libcamera-devel\" <libcamera-devel-bounces@lists.libcamera.org>"
    },
    "content": "IPU3CameraData stores requests that have been failed due to a\nbuffer shortage. The requests should be retried once enough\nbuffers are available. This sets the retry function as signal to\nCIO2Device and IPU3Frame, and invokes it from\nCIO2Device::tryReturnBuffer() and IPU3Frame::remove().\n\nSigned-off-by: Hirokazu Honda <hiroh@chromium.org>\n---\n src/libcamera/pipeline/ipu3/cio2.cpp   | 2 ++\n src/libcamera/pipeline/ipu3/cio2.h     | 2 ++\n src/libcamera/pipeline/ipu3/frames.cpp | 2 ++\n src/libcamera/pipeline/ipu3/frames.h   | 4 ++++\n src/libcamera/pipeline/ipu3/ipu3.cpp   | 4 ++++\n 5 files changed, 14 insertions(+)",
    "diff": "diff --git a/src/libcamera/pipeline/ipu3/cio2.cpp b/src/libcamera/pipeline/ipu3/cio2.cpp\nindex 8bbef174..1be2cbcd 100644\n--- a/src/libcamera/pipeline/ipu3/cio2.cpp\n+++ b/src/libcamera/pipeline/ipu3/cio2.cpp\n@@ -302,6 +302,8 @@ void CIO2Device::tryReturnBuffer(FrameBuffer *buffer)\n \t\t\tbreak;\n \t\t}\n \t}\n+\n+\tbufferAvailable.emit();\n }\n \n void CIO2Device::freeBuffers()\ndiff --git a/src/libcamera/pipeline/ipu3/cio2.h b/src/libcamera/pipeline/ipu3/cio2.h\nindex 5ecc4f47..d8d4a181 100644\n--- a/src/libcamera/pipeline/ipu3/cio2.h\n+++ b/src/libcamera/pipeline/ipu3/cio2.h\n@@ -56,6 +56,8 @@ public:\n \tSignal<FrameBuffer *> &bufferReady() { return output_->bufferReady; }\n \tSignal<uint32_t> &frameStart() { return csi2_->frameStart; }\n \n+\tSignal<> bufferAvailable;\n+\n private:\n \tvoid freeBuffers();\n \ndiff --git a/src/libcamera/pipeline/ipu3/frames.cpp b/src/libcamera/pipeline/ipu3/frames.cpp\nindex 2c4fe508..43cca7c8 100644\n--- a/src/libcamera/pipeline/ipu3/frames.cpp\n+++ b/src/libcamera/pipeline/ipu3/frames.cpp\n@@ -103,6 +103,8 @@ bool IPU3Frames::tryComplete(IPU3Frames::Info *info)\n \n \tremove(info);\n \n+\tbufferAvailable.emit();\n+\n \treturn true;\n }\n \ndiff --git a/src/libcamera/pipeline/ipu3/frames.h b/src/libcamera/pipeline/ipu3/frames.h\nindex 4acdf48e..59e64e81 100644\n--- a/src/libcamera/pipeline/ipu3/frames.h\n+++ b/src/libcamera/pipeline/ipu3/frames.h\n@@ -12,6 +12,8 @@\n #include <queue>\n #include <vector>\n \n+#include <libcamera/signal.h>\n+\n namespace libcamera {\n \n class FrameBuffer;\n@@ -49,6 +51,8 @@ public:\n \tInfo *find(unsigned int id);\n \tInfo *find(FrameBuffer *buffer);\n \n+\tSignal<> bufferAvailable;\n+\n private:\n \tstd::queue<FrameBuffer *> availableParamBuffers_;\n \tstd::queue<FrameBuffer *> availableStatBuffers_;\ndiff --git a/src/libcamera/pipeline/ipu3/ipu3.cpp b/src/libcamera/pipeline/ipu3/ipu3.cpp\nindex 3f311e58..1c67c5fd 100644\n--- a/src/libcamera/pipeline/ipu3/ipu3.cpp\n+++ b/src/libcamera/pipeline/ipu3/ipu3.cpp\n@@ -701,6 +701,8 @@ int PipelineHandlerIPU3::allocateBuffers(Camera *camera)\n \tdata->ipa_->mapBuffers(ipaBuffers_);\n \n \tdata->frameInfos_.init(imgu->paramBuffers_, imgu->statBuffers_);\n+\tdata->frameInfos_.bufferAvailable.connect(\n+\t\tdata, &IPU3CameraData::queuePendingRequests);\n \n \treturn 0;\n }\n@@ -1140,6 +1142,8 @@ int PipelineHandlerIPU3::registerCameras()\n \t\t */\n \t\tdata->cio2_.bufferReady().connect(data.get(),\n \t\t\t\t\t&IPU3CameraData::cio2BufferReady);\n+\t\tdata->cio2_.bufferAvailable.connect(\n+\t\t\tdata.get(), &IPU3CameraData::queuePendingRequests);\n \t\tdata->imgu_->input_->bufferReady.connect(&data->cio2_,\n \t\t\t\t\t&CIO2Device::tryReturnBuffer);\n \t\tdata->imgu_->output_->bufferReady.connect(data.get(),\n",
    "prefixes": [
        "libcamera-devel",
        "v4",
        "2/2"
    ]
}