Patch Detail
Show a patch.
GET /api/patches/14660/?format=api
{ "id": 14660, "url": "https://patchwork.libcamera.org/api/patches/14660/?format=api", "web_url": "https://patchwork.libcamera.org/patch/14660/", "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": "<20211119131506.382462-3-umang.jain@ideasonboard.com>", "date": "2021-11-19T13:15:06", "name": "[libcamera-devel,RFC,2/2] android: camera_request: Lifetime of a Camera3RequestDescriptor", "commit_ref": null, "pull_url": null, "state": "changes-requested", "archived": false, "hash": "9bb196ccefb7942dd24a46b4a46d31afd1ff542c", "submitter": { "id": 86, "url": "https://patchwork.libcamera.org/api/people/86/?format=api", "name": "Umang Jain", "email": "umang.jain@ideasonboard.com" }, "delegate": null, "mbox": "https://patchwork.libcamera.org/patch/14660/mbox/", "series": [ { "id": 2736, "url": "https://patchwork.libcamera.org/api/series/2736/?format=api", "web_url": "https://patchwork.libcamera.org/project/libcamera/list/?series=2736", "date": "2021-11-19T13:15:04", "name": "Document post-processing", "version": 1, "mbox": "https://patchwork.libcamera.org/series/2736/mbox/" } ], "comments": "https://patchwork.libcamera.org/api/patches/14660/comments/", "check": "pending", "checks": "https://patchwork.libcamera.org/api/patches/14660/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 2FD89BDB13\n\tfor <parsemail@patchwork.libcamera.org>;\n\tFri, 19 Nov 2021 13:15:28 +0000 (UTC)", "from lancelot.ideasonboard.com (localhost [IPv6:::1])\n\tby lancelot.ideasonboard.com (Postfix) with ESMTP id DBA9B60376;\n\tFri, 19 Nov 2021 14:15:27 +0100 (CET)", "from perceval.ideasonboard.com (perceval.ideasonboard.com\n\t[213.167.242.64])\n\tby lancelot.ideasonboard.com (Postfix) with ESMTPS id AAF3560376\n\tfor <libcamera-devel@lists.libcamera.org>;\n\tFri, 19 Nov 2021 14:15:25 +0100 (CET)", "from perceval.ideasonboard.com (unknown [103.238.109.11])\n\tby perceval.ideasonboard.com (Postfix) with ESMTPSA id 5CED91959;\n\tFri, 19 Nov 2021 14:15:24 +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=\"VgabFReV\"; dkim-atps=neutral", "DKIM-Signature": "v=1; a=rsa-sha256; c=relaxed/simple; d=ideasonboard.com;\n\ts=mail; t=1637327725;\n\tbh=XFGO2dcQ0y919xqo3DAU4E4FO8ntuB5pEhSEXyG5pmE=;\n\th=From:To:Cc:Subject:Date:In-Reply-To:References:From;\n\tb=VgabFReVyPlEPYTQnSxmvCiGP6/CEq0Pu1p7KMLouNNedkKXjhbq3DcJ75qS/m3Hs\n\taIj9iauGKERA6rs1nEjoj/W0T/p+16J5IR3pi7YSgoIKeQUKZFH5M5NY9w1P9ectSx\n\tfIBZwKovsYDByF/lSN4xG4+E3nwWT3kIv/Gw5R5U=", "From": "Umang Jain <umang.jain@ideasonboard.com>", "To": "libcamera-devel@lists.libcamera.org", "Date": "Fri, 19 Nov 2021 18:45:06 +0530", "Message-Id": "<20211119131506.382462-3-umang.jain@ideasonboard.com>", "X-Mailer": "git-send-email 2.31.1", "In-Reply-To": "<20211119131506.382462-1-umang.jain@ideasonboard.com>", "References": "<20211119131506.382462-1-umang.jain@ideasonboard.com>", "MIME-Version": "1.0", "Content-Type": "text/plain; charset=UTF-8", "Content-Transfer-Encoding": "8bit", "Subject": "[libcamera-devel] [RFC PATCH 2/2] android: camera_request: Lifetime\n\tof a Camera3RequestDescriptor", "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": "This commit provides a sketch regarding Camera3RequestDescriptor\nwhich is aids tracking each capture reuquest placed by the android\nframework to libcamera HAL.\n\nSigned-off-by: Umang Jain <umang.jain@ideasonboard.com>\n---\n src/android/camera_request.cpp | 97 ++++++++++++++++++++++++++++++++++\n 1 file changed, 97 insertions(+)", "diff": "diff --git a/src/android/camera_request.cpp b/src/android/camera_request.cpp\nindex 4e017792..824b667d 100644\n--- a/src/android/camera_request.cpp\n+++ b/src/android/camera_request.cpp\n@@ -18,6 +18,9 @@ using namespace libcamera;\n *\n * A utility class that groups information about a capture request to be later\n * reused at request complete time to notify the framework.\n+ *\n+ * Also, refer to the Camera3RequestDescriptor's lifetime diagram at the end of\n+ * this file.\n */\n \n Camera3RequestDescriptor::Camera3RequestDescriptor(\n@@ -105,3 +108,97 @@ Camera3RequestDescriptor::StreamBuffer::StreamBuffer(StreamBuffer &&) = default;\n \n Camera3RequestDescriptor::StreamBuffer &\n Camera3RequestDescriptor::StreamBuffer::operator=(Camera3RequestDescriptor::StreamBuffer &&) = default;\n+\n+/*******************************************************************************\n+ * Lifetime of a Camera3RequestDescriptor tracking a capture request placed by\n+ * Android Framework\n+ *******************************************************************************\n+ *\n+ *\n+ * Android Framework\n+ * │\n+ * │ ┌──────────────────────────────────┐\n+ * │ │camera3_capture_request_t │\n+ * │ │ │\n+ * │ │Requested output streams │\n+ * │ │ stream1 stream2 stream3 ... │\n+ * │ └──────────────────────────────────┘\n+ * ▼\n+ * ┌─────────────────────────────────────────────────────────────┐\n+ * │ libcamera HAL │\n+ * ├─────────────────────────────────────────────────────────────┤\n+ * │ CameraDevice │\n+ * │ │\n+ * │ processCaptureRequest(camera3_capture_request_t request) │\n+ * │ │\n+ * │ - Create Camera3RequestDescriptor tracking this request │\n+ * │ - Streams requiring post-processing is stored as a │\n+ * │ map Camera3Requestdescriptor::pendingStreamsToProcess │\n+ * │ - Add this Camera3RequestDescriptor to descriptors' queue │\n+ * │ CameraDevice::descriptors_ │\n+ * │ │ ┌─────────────────────────┐\n+ * │ - Queue the capture request to libcamera core ────────────┤►│libcamera core │\n+ * │ │ ├─────────────────────────┤\n+ * │ │ │- Capture from Camera │\n+ * │ │ │ │\n+ * │ │ │- Emit │\n+ * │ │ │ Camera::requestComplete│\n+ * │ requestCompleted(Request *request) ◄───────────────────────┼─┼──── │\n+ * │ │ │ │\n+ * │ - Check request completion status │ └─────────────────────────┘\n+ * │ │\n+ * │ - If(pendingStreamsToProcess > 0) │\n+ * │ Queue all entries from pendingStreamsToProcess │\n+ * │ else │ │\n+ * │ completeDescriptor() │ └──────────────────────┐\n+ * │ │ │\n+ * │ ┌──────────────────────────┴───┬──────────────────┐ │\n+ * │ │ │ │ │\n+ * │ ┌──────────▼────────────┐ ┌───────────▼─────────┐ ▼ │\n+ * │ │CameraStream1 │ │CameraStream2 │ .... │\n+ * │ ├┬───┬───┬──────────────┤ ├┬───┬───┬────────────┤ │\n+ * │ ││ │ │ │ ││ │ │ │ │\n+ * │ │▼───▼───▼──────────────┤ │▼───▼───▼────────────┤ │\n+ * │ │PostProcessorWorker ├─ │PostProcessorWorker │ │\n+ * │ │ │ │ │ │\n+ * │ │ xxxxxxxxxxxxxxxxxxx │ │ xxxxxxxxxxxxxxxxxxx │ │\n+ * │ │ x PostProcessor x │ │ x PostProcessor x │ │\n+ * │ │ x process() x │ │ x process() x │ │\n+ * │ │ x x │ │ x x │ │\n+ * │ │ x Emit x │ │ x Emit x │ │\n+ * │ │ x processComplete x │ │ x processComplete x │ │\n+ * │ │ x x │ │ x x │ │\n+ * │ │ xxxxxxxxxxxxxxx│xxx │ │ xxxxxxxxxxxxxxx│xxx │ │\n+ * │ │ │ │ │ │ │ │\n+ * │ │ │ │ │ │ │ │\n+ * │ └────────────────┼──────┘ └────────────────┼────┘ │\n+ * │ │ │ │\n+ * │ │ │ │\n+ * │ │ │ │\n+ * │ ▼ ▼ │\n+ * │ xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx │\n+ * │ x CameraDevice x x CameraDevice x │\n+ * │ x x x x │\n+ * │ x streamProcessingComplete() x x streamProcessingComplete() x │\n+ * │ x x x x │\n+ * │ x - Check and set buffer status x x - Check and set buffer status x │\n+ * │ x - Remove post-processing entry x x - Remove post-processing entry x │\n+ * │ x from pendingStreamsToProcess x x from pendingStreamsToProcess x │\n+ * │ x x x x │\n+ * │ x - If(pendingStreamsToProcess.empty()x x - If(pendingStreamsToProcess.empty()x │\n+ * │ x completeDescriptor x x completeDescriptor x │\n+ * │ x x x x │\n+ * │ xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx │\n+ * │ │\n+ * └────────────────────────────────────────────────────────────────────────────────────┘\n+ *\n+ *\n+ *\n+ *\n+ *\n+ *\n+ * xxxxxxxxxxxxxx\n+ * x x - PostProcessorWorker's thread\n+ * x x\n+ * xxxxxxxxxxxxxx\n+ */\n", "prefixes": [ "libcamera-devel", "RFC", "2/2" ] }