{"id":11701,"url":"https://patchwork.libcamera.org/api/patches/11701/?format=json","web_url":"https://patchwork.libcamera.org/patch/11701/","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":"<20210324200624.1347604-1-kieran.bingham@ideasonboard.com>","date":"2021-03-24T20:06:24","name":"[libcamera-devel,v3.1] libcamera: pipeline: ipu3: Cancel unused buffers","commit_ref":null,"pull_url":null,"state":"accepted","archived":false,"hash":"4b106c7c0e647ffe44f62e8d00932cc92d27df2f","submitter":{"id":4,"url":"https://patchwork.libcamera.org/api/people/4/?format=json","name":"Kieran Bingham","email":"kieran.bingham@ideasonboard.com"},"delegate":{"id":11,"url":"https://patchwork.libcamera.org/api/users/11/?format=json","username":"kbingham","first_name":"Kieran","last_name":"Bingham","email":"kieran.bingham@ideasonboard.com"},"mbox":"https://patchwork.libcamera.org/patch/11701/mbox/","series":[{"id":1829,"url":"https://patchwork.libcamera.org/api/series/1829/?format=json","web_url":"https://patchwork.libcamera.org/project/libcamera/list/?series=1829","date":"2021-03-24T20:06:24","name":"[libcamera-devel,v3.1] libcamera: pipeline: ipu3: Cancel unused buffers","version":1,"mbox":"https://patchwork.libcamera.org/series/1829/mbox/"}],"comments":"https://patchwork.libcamera.org/api/patches/11701/comments/","check":"pending","checks":"https://patchwork.libcamera.org/api/patches/11701/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 12426C32E5\n\tfor <parsemail@patchwork.libcamera.org>;\n\tWed, 24 Mar 2021 20:06:32 +0000 (UTC)","from lancelot.ideasonboard.com (localhost [IPv6:::1])\n\tby lancelot.ideasonboard.com (Postfix) with ESMTP id 37B8C68D61;\n\tWed, 24 Mar 2021 21:06:31 +0100 (CET)","from perceval.ideasonboard.com (perceval.ideasonboard.com\n\t[IPv6:2001:4b98:dc2:55:216:3eff:fef7:d647])\n\tby lancelot.ideasonboard.com (Postfix) with ESMTPS id 7E24A602E3\n\tfor <libcamera-devel@lists.libcamera.org>;\n\tWed, 24 Mar 2021 21:06:29 +0100 (CET)","from localhost.localdomain\n\t(cpc89244-aztw30-2-0-cust3082.18-1.cable.virginm.net [86.31.172.11])\n\tby perceval.ideasonboard.com (Postfix) with ESMTPSA id D7C96580;\n\tWed, 24 Mar 2021 21:06:28 +0100 (CET)"],"Authentication-Results":"lancelot.ideasonboard.com;\n\tdkim=fail reason=\"signature verification failed\" (1024-bit key;\n\tunprotected) header.d=ideasonboard.com header.i=@ideasonboard.com\n\theader.b=\"YPKIcPCQ\"; dkim-atps=neutral","DKIM-Signature":"v=1; a=rsa-sha256; c=relaxed/simple; d=ideasonboard.com;\n\ts=mail; t=1616616389;\n\tbh=lzSrkrUc0l8+nLWqJltYdrKwb9Zn5Q5Z7gP+1f2VyaE=;\n\th=From:To:Cc:Subject:Date:In-Reply-To:References:From;\n\tb=YPKIcPCQNyjqEhIHB8jNNYtruQU+wnGnlC/S9nh9nqs2p6S/4mfZ3pOuHJCLGsDZA\n\tKbvwFirUuSi6CU+W7KzIzgDkXbnOOcwn/XIqsSbBhxXZsTHNiDxHst8XKaqCfIM0BD\n\tJwnZyrZWKtTdZQmPZQmTmOBO0Sn3ewKMsDtMPIlU=","From":"Kieran Bingham <kieran.bingham@ideasonboard.com>","To":"libcamera devel <libcamera-devel@lists.libcamera.org>","Date":"Wed, 24 Mar 2021 20:06:24 +0000","Message-Id":"<20210324200624.1347604-1-kieran.bingham@ideasonboard.com>","X-Mailer":"git-send-email 2.25.1","In-Reply-To":"<YFtp4tEBzwD9lQa+@pendragon.ideasonboard.com>","References":"<YFtp4tEBzwD9lQa+@pendragon.ideasonboard.com>","MIME-Version":"1.0","Subject":"[libcamera-devel] [PATCH v3.1] libcamera: pipeline: ipu3: Cancel\n\tunused buffers","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":"When the CIO2 returns a cancelled buffer, we will not queue buffers\nto the IMGU.\n\nThese buffers should be explicitly marked as cancelled to ensure\nthe application knows there is no valid metadata or frame data\nprovided in the buffer.\n\nProvide a cancel() method on the FrameBuffer to allow explicitly\ncancelling a buffer.\n\nSigned-off-by: Kieran Bingham <kieran.bingham@ideasonboard.com>\n---\n include/libcamera/buffer.h           | 1 +\n src/libcamera/pipeline/ipu3/ipu3.cpp | 7 +++++--\n 2 files changed, 6 insertions(+), 2 deletions(-)","diff":"diff --git a/include/libcamera/buffer.h b/include/libcamera/buffer.h\nindex 302fe3d3e86b..6557fb1e59b5 100644\n--- a/include/libcamera/buffer.h\n+++ b/include/libcamera/buffer.h\n@@ -49,6 +49,7 @@ public:\n \tRequest *request() const { return request_; }\n \tvoid setRequest(Request *request) { request_ = request; }\n \tconst FrameMetadata &metadata() const { return metadata_; }\n+\tvoid cancel() { metadata_.status = FrameMetadata::FrameCancelled; }\n \n \tunsigned int cookie() const { return cookie_; }\n \tvoid setCookie(unsigned int cookie) { cookie_ = cookie; }\ndiff --git a/src/libcamera/pipeline/ipu3/ipu3.cpp b/src/libcamera/pipeline/ipu3/ipu3.cpp\nindex fc40dcb381ea..44bd5a9d042b 100644\n--- a/src/libcamera/pipeline/ipu3/ipu3.cpp\n+++ b/src/libcamera/pipeline/ipu3/ipu3.cpp\n@@ -1256,8 +1256,11 @@ void IPU3CameraData::cio2BufferReady(FrameBuffer *buffer)\n \n \t/* If the buffer is cancelled force a complete of the whole request. */\n \tif (buffer->metadata().status == FrameMetadata::FrameCancelled) {\n-\t\tfor (auto it : request->buffers())\n-\t\t\tpipe_->completeBuffer(request, it.second);\n+\t\tfor (auto it : request->buffers()) {\n+\t\t\tFrameBuffer *b = it.second;\n+\t\t\tb->cancel();\n+\t\t\tpipe_->completeBuffer(request, b);\n+\t\t}\n \n \t\tframeInfos_.remove(info);\n \t\tpipe_->completeRequest(request);\n","prefixes":["libcamera-devel","v3.1"]}