{"id":12459,"url":"https://patchwork.libcamera.org/api/patches/12459/?format=json","web_url":"https://patchwork.libcamera.org/patch/12459/","project":{"id":1,"url":"https://patchwork.libcamera.org/api/projects/1/?format=json","name":"libcamera","link_name":"libcamera","list_id":"libcamera_core","list_email":"libcamera-devel@lists.libcamera.org","web_url":"","scm_url":"","webscm_url":""},"msgid":"<20210527220359.30127-3-jacopo@jmondi.org>","date":"2021-05-27T22:03:53","name":"[libcamera-devel,v4,2/8] libcamera: request: Add Request::cancel()","commit_ref":null,"pull_url":null,"state":"superseded","archived":false,"hash":"4528e46b1749a5829be55eec9bdb9885e6e6c396","submitter":{"id":3,"url":"https://patchwork.libcamera.org/api/people/3/?format=json","name":"Jacopo Mondi","email":"jacopo@jmondi.org"},"delegate":{"id":15,"url":"https://patchwork.libcamera.org/api/users/15/?format=json","username":"jmondi","first_name":"Jacopo","last_name":"Mondi","email":"jacopo@jmondi.org"},"mbox":"https://patchwork.libcamera.org/patch/12459/mbox/","series":[{"id":2088,"url":"https://patchwork.libcamera.org/api/series/2088/?format=json","web_url":"https://patchwork.libcamera.org/project/libcamera/list/?series=2088","date":"2021-05-27T22:03:51","name":"Implement flush() camera operation","version":4,"mbox":"https://patchwork.libcamera.org/series/2088/mbox/"}],"comments":"https://patchwork.libcamera.org/api/patches/12459/comments/","check":"pending","checks":"https://patchwork.libcamera.org/api/patches/12459/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 B7D67C3206\n\tfor <parsemail@patchwork.libcamera.org>;\n\tThu, 27 May 2021 22:03:33 +0000 (UTC)","from lancelot.ideasonboard.com (localhost [IPv6:::1])\n\tby lancelot.ideasonboard.com (Postfix) with ESMTP id 7EBD46892C;\n\tFri, 28 May 2021 00:03:33 +0200 (CEST)","from relay10.mail.gandi.net (relay10.mail.gandi.net\n\t[217.70.178.230])\n\tby lancelot.ideasonboard.com (Postfix) with ESMTPS id 198F968920\n\tfor <libcamera-devel@lists.libcamera.org>;\n\tFri, 28 May 2021 00:03:21 +0200 (CEST)","(Authenticated sender: jacopo@jmondi.org)\n\tby relay10.mail.gandi.net (Postfix) with ESMTPSA id A825F240008;\n\tThu, 27 May 2021 22:03:19 +0000 (UTC)"],"From":"Jacopo Mondi <jacopo@jmondi.org>","To":"libcamera-devel@lists.libcamera.org","Date":"Fri, 28 May 2021 00:03:53 +0200","Message-Id":"<20210527220359.30127-3-jacopo@jmondi.org>","X-Mailer":"git-send-email 2.31.1","In-Reply-To":"<20210527220359.30127-1-jacopo@jmondi.org>","References":"<20210527220359.30127-1-jacopo@jmondi.org>","MIME-Version":"1.0","Content-Type":"text/plain; charset=UTF-8","Content-Transfer-Encoding":"8bit","Subject":"[libcamera-devel] [PATCH v4 2/8] libcamera: request: Add\n\tRequest::cancel()","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":"Add a cancel() function to the Request class that allows to forcefully\ncomplete the request and its associated buffers in error state.\n\nOnly pending requests can be forcefully cancelled. Enforce that\nby asserting the request state to be RequestPending.\n\nSigned-off-by: Jacopo Mondi <jacopo@jmondi.org>\nReviewed-by: Hirokazu Honda <hiroh@chromium.org>\nReviewed-by: Niklas Söderlund <niklas.soderlund@ragnatech.se>\nReviewed-by: Laurent Pinchart <laurent.pinchart@ideasonboard.com>\n---\n .../libcamera/internal/tracepoints/request.tp |  8 +++++++\n include/libcamera/request.h                   |  1 +\n src/libcamera/request.cpp                     | 23 +++++++++++++++++++\n 3 files changed, 32 insertions(+)","diff":"diff --git a/include/libcamera/internal/tracepoints/request.tp b/include/libcamera/internal/tracepoints/request.tp\nindex 9e872951374d..9c841b97438a 100644\n--- a/include/libcamera/internal/tracepoints/request.tp\n+++ b/include/libcamera/internal/tracepoints/request.tp\n@@ -66,6 +66,14 @@ TRACEPOINT_EVENT_INSTANCE(\n \t)\n )\n \n+TRACEPOINT_EVENT_INSTANCE(\n+\tlibcamera,\n+\trequest,\n+\trequest_cancel,\n+\tTP_ARGS(\n+\t\tlibcamera::Request *, req\n+\t)\n+)\n \n TRACEPOINT_EVENT(\n \tlibcamera,\ndiff --git a/include/libcamera/request.h b/include/libcamera/request.h\nindex 4cf5ff3f7d3b..5596901ddd8e 100644\n--- a/include/libcamera/request.h\n+++ b/include/libcamera/request.h\n@@ -65,6 +65,7 @@ private:\n \tfriend class PipelineHandler;\n \n \tvoid complete();\n+\tvoid cancel();\n \n \tbool completeBuffer(FrameBuffer *buffer);\n \ndiff --git a/src/libcamera/request.cpp b/src/libcamera/request.cpp\nindex ce2dd7b17f10..6611e74d1800 100644\n--- a/src/libcamera/request.cpp\n+++ b/src/libcamera/request.cpp\n@@ -292,6 +292,29 @@ void Request::complete()\n \tLIBCAMERA_TRACEPOINT(request_complete, this);\n }\n \n+/**\n+ * \\brief Cancel a queued request\n+ *\n+ * Mark the request and its associated buffers as cancelled and complete it.\n+ *\n+ * Set each pending buffer in error state and emit the buffer completion signal\n+ * before completing the Request.\n+ */\n+void Request::cancel()\n+{\n+\tLIBCAMERA_TRACEPOINT(request_cancel, this);\n+\n+\tASSERT(status_ == RequestPending);\n+\n+\tfor (FrameBuffer *buffer : pending_) {\n+\t\tbuffer->cancel();\n+\t\tcamera_->bufferCompleted.emit(this, buffer);\n+\t}\n+\n+\tpending_.clear();\n+\tcancelled_ = true;\n+}\n+\n /**\n  * \\brief Complete a buffer for the request\n  * \\param[in] buffer The buffer that has completed\n","prefixes":["libcamera-devel","v4","2/8"]}