Patch Detail
Show a patch.
GET /api/patches/19515/?format=api
{ "id": 19515, "url": "https://patchwork.libcamera.org/api/patches/19515/?format=api", "web_url": "https://patchwork.libcamera.org/patch/19515/", "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": "<20240220164317.998477-5-dan.scally@ideasonboard.com>", "date": "2024-02-20T16:43:14", "name": "[v2,4/7] libcamera: rkisp1: Switch tryCompleteRequest() to use Request *", "commit_ref": null, "pull_url": null, "state": "rejected", "archived": true, "hash": "345ea5f7f5fa7cd491825b578961d8d5d7a81297", "submitter": { "id": 156, "url": "https://patchwork.libcamera.org/api/people/156/?format=api", "name": "Dan Scally", "email": "dan.scally@ideasonboard.com" }, "delegate": null, "mbox": "https://patchwork.libcamera.org/patch/19515/mbox/", "series": [ { "id": 4172, "url": "https://patchwork.libcamera.org/api/series/4172/?format=api", "web_url": "https://patchwork.libcamera.org/project/libcamera/list/?series=4172", "date": "2024-02-20T16:43:10", "name": "Remove RkISP1FrameInfo and IPU3Frames classes", "version": 2, "mbox": "https://patchwork.libcamera.org/series/4172/mbox/" } ], "comments": "https://patchwork.libcamera.org/api/patches/19515/comments/", "check": "pending", "checks": "https://patchwork.libcamera.org/api/patches/19515/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 A3622C3257\n\tfor <parsemail@patchwork.libcamera.org>;\n\tTue, 20 Feb 2024 16:43:37 +0000 (UTC)", "from lancelot.ideasonboard.com (localhost [IPv6:::1])\n\tby lancelot.ideasonboard.com (Postfix) with ESMTP id 5FB6061CAA;\n\tTue, 20 Feb 2024 17:43:37 +0100 (CET)", "from perceval.ideasonboard.com (perceval.ideasonboard.com\n\t[213.167.242.64])\n\tby lancelot.ideasonboard.com (Postfix) with ESMTPS id 4A30261CAA\n\tfor <libcamera-devel@lists.libcamera.org>;\n\tTue, 20 Feb 2024 17:43:25 +0100 (CET)", "from mail.ideasonboard.com\n\t(cpc141996-chfd3-2-0-cust928.12-3.cable.virginm.net [86.13.91.161])\n\tby perceval.ideasonboard.com (Postfix) with ESMTPSA id E18E213AC;\n\tTue, 20 Feb 2024 17:43:17 +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=\"WHnbW8Ti\"; dkim-atps=neutral", "DKIM-Signature": "v=1; a=rsa-sha256; c=relaxed/simple; d=ideasonboard.com;\n\ts=mail; t=1708447398;\n\tbh=+D0mqjYPqvZZVsEoTqPXJlIeJLBcXF9uANQXv72rSsg=;\n\th=From:To:Cc:Subject:Date:In-Reply-To:References:From;\n\tb=WHnbW8TiO6g8AdxYnhSJdyuOPQmMw1KQcsYj4xdP5SNuupZDo/305LEh34tXCn27C\n\tfiaUpyNJwaBgWC3K5SyoTq4iDupRc2QvqpsEEJ3W4nKRVKjAz9+1Jqb1nsm9PAPMEv\n\tibZDNJOHOETLCWUdj2ugp6lqwMFAr2cJmyPX+SSk=", "From": "Daniel Scally <dan.scally@ideasonboard.com>", "To": "libcamera-devel@lists.libcamera.org", "Subject": "[PATCH v2 4/7] libcamera: rkisp1: Switch tryCompleteRequest() to use\n\tRequest *", "Date": "Tue, 20 Feb 2024 16:43:14 +0000", "Message-Id": "<20240220164317.998477-5-dan.scally@ideasonboard.com>", "X-Mailer": "git-send-email 2.34.1", "In-Reply-To": "<20240220164317.998477-1-dan.scally@ideasonboard.com>", "References": "<20240220164317.998477-1-dan.scally@ideasonboard.com>", "MIME-Version": "1.0", "Content-Transfer-Encoding": "8bit", "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": "tryCompleteRequest() is used to delay completeRequest() until all the\nimage buffers have been returned to userspace and the Request's\nmetadata has been filled with control values by the IPA. To do that\nthe pipeline handler has a struct which holds various pieces of info\nthat allow the tryCompleteRequest() function to decide whether it's\nok to complete the request yet or not. This is quite a heavy way of\ndoing things - ultimately what is being tracked is whether or not the\nbuffers in question have been handled by the pipeline handler, and a\nRequest already tracks that for the image buffers. The internal buffers\ncan be tracked in the same way using the new concept of internal buffers\nfor a Request.\n\nRe-factor the tryCompleteRequest() function to take a Request * and\nsimply check hasPendingBuffers(request). Use the relatively new\nRequest::Private::addInternalBuffer() to link the stats and parameters\nbuffers to the request on each queueRequestDevice().\n\nSigned-off-by: Daniel Scally <dan.scally@ideasonboard.com>\n---\nChanges in v2:\n\n\t- Use the new internal buffers for Requests to track status rather than\n\t the inFlightStatsBuffers_ map.\n\n src/libcamera/pipeline/rkisp1/rkisp1.cpp | 28 ++++++++++++++++--------\n 1 file changed, 19 insertions(+), 9 deletions(-)", "diff": "diff --git a/src/libcamera/pipeline/rkisp1/rkisp1.cpp b/src/libcamera/pipeline/rkisp1/rkisp1.cpp\nindex d926c83c..43e9d98b 100644\n--- a/src/libcamera/pipeline/rkisp1/rkisp1.cpp\n+++ b/src/libcamera/pipeline/rkisp1/rkisp1.cpp\n@@ -39,6 +39,7 @@\n #include \"libcamera/internal/ipa_manager.h\"\n #include \"libcamera/internal/media_device.h\"\n #include \"libcamera/internal/pipeline_handler.h\"\n+#include \"libcamera/internal/request.h\"\n #include \"libcamera/internal/v4l2_subdevice.h\"\n #include \"libcamera/internal/v4l2_videodevice.h\"\n \n@@ -48,6 +49,8 @@ namespace libcamera {\n \n LOG_DEFINE_CATEGORY(RkISP1)\n \n+using InternalStream = Request::Private::InternalStream;\n+\n class PipelineHandlerRkISP1;\n class RkISP1CameraData;\n \n@@ -174,7 +177,7 @@ private:\n \tint initLinks(Camera *camera, const CameraSensor *sensor,\n \t\t const RkISP1CameraConfiguration &config);\n \tint createCamera(MediaEntity *sensor);\n-\tvoid tryCompleteRequest(RkISP1FrameInfo *info);\n+\tvoid tryCompleteRequest(Request *request);\n \tvoid bufferReady(FrameBuffer *buffer);\n \tvoid paramReady(FrameBuffer *buffer);\n \tvoid statReady(FrameBuffer *buffer);\n@@ -231,6 +234,7 @@ RkISP1FrameInfo *RkISP1Frames::create(const RkISP1CameraData *data, Request *req\n \n \t\tparamBuffer = pipe_->availableParamBuffers_.front();\n \t\tpipe_->availableParamBuffers_.pop();\n+\t\tparamBuffer->_d()->setRequest(request);\n \n \t\tstatBuffer = pipe_->availableStatBuffers_.front();\n \t\tpipe_->availableStatBuffers_.pop();\n@@ -413,7 +417,8 @@ void RkISP1CameraData::metadataReady(unsigned int frame, const ControlList &meta\n \tinfo->request->metadata().merge(metadata);\n \tinfo->metadataProcessed = true;\n \n-\tpipe()->tryCompleteRequest(info);\n+\tpipe()->completeBuffer(info->request, info->statBuffer);\n+\tpipe()->tryCompleteRequest(info->request);\n }\n \n /* -----------------------------------------------------------------------------\n@@ -1026,6 +1031,9 @@ int PipelineHandlerRkISP1::queueRequestDevice(Camera *camera, Request *request)\n \tif (!info)\n \t\treturn -ENOENT;\n \n+\trequest->_d()->addInternalBuffer(InternalStream::Statistics, info->statBuffer);\n+\trequest->_d()->addInternalBuffer(InternalStream::Parameters, info->paramBuffer);\n+\n \tdata->ipa_->queueRequest(request->sequence(), request->controls());\n \tif (isRaw_) {\n \t\tif (info->mainPathBuffer)\n@@ -1228,15 +1236,15 @@ bool PipelineHandlerRkISP1::match(DeviceEnumerator *enumerator)\n * Buffer Handling\n */\n \n-void PipelineHandlerRkISP1::tryCompleteRequest(RkISP1FrameInfo *info)\n+void PipelineHandlerRkISP1::tryCompleteRequest(Request *request)\n {\n \tRkISP1CameraData *data = cameraData(activeCamera_);\n-\tRequest *request = info->request;\n \n-\tif (request->hasPendingBuffers())\n+\tRkISP1FrameInfo *info = data->frameInfo_.find(request);\n+\tif (!info)\n \t\treturn;\n \n-\tif (!info->metadataProcessed)\n+\tif (request->hasPendingBuffers())\n \t\treturn;\n \n \tif (!isRaw_ && !info->paramDequeued)\n@@ -1281,7 +1289,7 @@ void PipelineHandlerRkISP1::bufferReady(FrameBuffer *buffer)\n \t}\n \n \tcompleteBuffer(request, buffer);\n-\ttryCompleteRequest(info);\n+\ttryCompleteRequest(request);\n }\n \n void PipelineHandlerRkISP1::paramReady(FrameBuffer *buffer)\n@@ -1294,7 +1302,8 @@ void PipelineHandlerRkISP1::paramReady(FrameBuffer *buffer)\n \t\treturn;\n \n \tinfo->paramDequeued = true;\n-\ttryCompleteRequest(info);\n+\tcompleteBuffer(info->request, buffer);\n+\ttryCompleteRequest(info->request);\n }\n \n void PipelineHandlerRkISP1::statReady(FrameBuffer *buffer)\n@@ -1309,7 +1318,8 @@ void PipelineHandlerRkISP1::statReady(FrameBuffer *buffer)\n \n \tif (buffer->metadata().status == FrameMetadata::FrameCancelled) {\n \t\tinfo->metadataProcessed = true;\n-\t\ttryCompleteRequest(info);\n+\t\tcompleteBuffer(info->request, buffer);\n+\t\ttryCompleteRequest(info->request);\n \t\treturn;\n \t}\n \n", "prefixes": [ "v2", "4/7" ] }