Patch Detail
Show a patch.
GET /api/patches/24000/?format=api
{ "id": 24000, "url": "https://patchwork.libcamera.org/api/patches/24000/?format=api", "web_url": "https://patchwork.libcamera.org/patch/24000/", "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": "<20250728115556.2886082-4-paul.elder@ideasonboard.com>", "date": "2025-07-28T11:55:50", "name": "[v3,3/8] libcamera: camera: Add indirection to Camera signal emissions", "commit_ref": null, "pull_url": null, "state": "superseded", "archived": false, "hash": "5c1b3d458f6b4409db14b9566ebfd949243542a8", "submitter": { "id": 17, "url": "https://patchwork.libcamera.org/api/people/17/?format=api", "name": "Paul Elder", "email": "paul.elder@ideasonboard.com" }, "delegate": null, "mbox": "https://patchwork.libcamera.org/patch/24000/mbox/", "series": [ { "id": 5343, "url": "https://patchwork.libcamera.org/api/series/5343/?format=api", "web_url": "https://patchwork.libcamera.org/project/libcamera/list/?series=5343", "date": "2025-07-28T11:55:47", "name": "Add Layers support", "version": 3, "mbox": "https://patchwork.libcamera.org/series/5343/mbox/" } ], "comments": "https://patchwork.libcamera.org/api/patches/24000/comments/", "check": "pending", "checks": "https://patchwork.libcamera.org/api/patches/24000/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 3CF07C3323\n\tfor <parsemail@patchwork.libcamera.org>;\n\tMon, 28 Jul 2025 11:56:16 +0000 (UTC)", "from lancelot.ideasonboard.com (localhost [IPv6:::1])\n\tby lancelot.ideasonboard.com (Postfix) with ESMTP id A0A726916F;\n\tMon, 28 Jul 2025 13:56:15 +0200 (CEST)", "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 044C26915F\n\tfor <libcamera-devel@lists.libcamera.org>;\n\tMon, 28 Jul 2025 13:56:13 +0200 (CEST)", "from neptunite.hamster-moth.ts.net (unknown\n\t[IPv6:2404:7a81:160:2100:5715:34ad:7742:5049])\n\tby perceval.ideasonboard.com (Postfix) with ESMTPSA id 7C9A16DC;\n\tMon, 28 Jul 2025 13:55:29 +0200 (CEST)" ], "Authentication-Results": "lancelot.ideasonboard.com; dkim=pass (1024-bit key;\n\tunprotected) header.d=ideasonboard.com header.i=@ideasonboard.com\n\theader.b=\"mtSqQUlM\"; dkim-atps=neutral", "DKIM-Signature": "v=1; a=rsa-sha256; c=relaxed/simple; d=ideasonboard.com;\n\ts=mail; t=1753703731;\n\tbh=ch6CzQ4knxf2A1jDaoEblQso/M9vCieLW4Ene6CBpIk=;\n\th=From:To:Cc:Subject:Date:In-Reply-To:References:From;\n\tb=mtSqQUlMY9Y5Fx1RLFoNKOJFNs0rZ0H3+gocD/fIxsrfSznK08pqhKbQoPCioBF0C\n\tdkgQSS/LOVMCQHn40C9mUykllw20i0HdH6DKCYAZ/3IHVFNPtdn+t6kbVBxbNTcdJ+\n\tClpOJ3tn5sV+vBQ6JXgLKkOvBCzSI8maypQioYeE=", "From": "Paul Elder <paul.elder@ideasonboard.com>", "To": "libcamera-devel@lists.libcamera.org", "Cc": "Paul Elder <paul.elder@ideasonboard.com>, kieran.bingham@ideasonboard.com,\n\tbarnabas.pocze@ideasonboard.com,\n\tStefan Klug <stefan.klug@ideasonboard.com>", "Subject": "[PATCH v3 3/8] libcamera: camera: Add indirection to Camera signal\n\temissions", "Date": "Mon, 28 Jul 2025 20:55:50 +0900", "Message-ID": "<20250728115556.2886082-4-paul.elder@ideasonboard.com>", "X-Mailer": "git-send-email 2.47.2", "In-Reply-To": "<20250728115556.2886082-1-paul.elder@ideasonboard.com>", "References": "<20250728115556.2886082-1-paul.elder@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": "Add an extra level of indirection when emitting signals from the Camera.\nThis is to facilitate the implementation of the layer system in the near\nfuture, which will need to hook into Camera signal emissions.\n\nSigned-off-by: Paul Elder <paul.elder@ideasonboard.com>\nReviewed-by: Stefan Klug <stefan.klug@ideasonboard.com>\nReviewed-by: Kieran Bingham <kieran.bingham@ideasonboard.com>\n\n---\nChanges in v3:\n- Add documentation\n\nNo change in v2\n---\n include/libcamera/internal/camera.h | 4 +++\n src/libcamera/camera.cpp | 47 +++++++++++++++++++++++++++--\n src/libcamera/pipeline_handler.cpp | 2 +-\n src/libcamera/request.cpp | 2 +-\n 4 files changed, 51 insertions(+), 4 deletions(-)", "diff": "diff --git a/include/libcamera/internal/camera.h b/include/libcamera/internal/camera.h\nindex 8a2e9ed5894d..d28cd921a0f9 100644\n--- a/include/libcamera/internal/camera.h\n+++ b/include/libcamera/internal/camera.h\n@@ -36,6 +36,10 @@ public:\n \tPipelineHandler *pipe() { return pipe_.get(); }\n \tconst PipelineHandler *pipe() const { return pipe_.get(); }\n \n+\tvoid emitBufferCompleted(Request *request, FrameBuffer *buffer);\n+\tvoid emitRequestCompleted(Request *request);\n+\tvoid emitDisconnected();\n+\n \tstd::list<Request *> queuedRequests_;\n \tstd::queue<Request *> waitingRequests_;\n \tControlInfoMap controlInfo_;\ndiff --git a/src/libcamera/camera.cpp b/src/libcamera/camera.cpp\nindex 2e1e146a25b1..99aed4f0703a 100644\n--- a/src/libcamera/camera.cpp\n+++ b/src/libcamera/camera.cpp\n@@ -611,6 +611,30 @@ Camera::Private::~Private()\n * \\copydoc Camera::Private::pipe()\n */\n \n+/**\n+ * \\fn Camera::Private::emitBufferCompleted\n+ * \\copydoc Camera::bufferCompleted\n+ *\n+ * This is one level of indirection so that we can call into the LayerManager\n+ * before actually emitting the Signal.\n+ */\n+\n+/**\n+ * \\fn Camera::Private::emitRequestCompleted\n+ * \\copydoc Camera::requestCompleted\n+ *\n+ * This is one level of indirection so that we can call into the LayerManager\n+ * before actually emitting the Signal.\n+ */\n+\n+/**\n+ * \\fn Camera::Private::emitDisconnected\n+ * \\copydoc Camera::disconnected\n+ *\n+ * This is one level of indirection so that we can call into the LayerManager\n+ * before actually emitting the Signal.\n+ */\n+\n /**\n * \\fn Camera::Private::validator()\n * \\brief Retrieve the control validator related to this camera\n@@ -746,6 +770,25 @@ void Camera::Private::setState(State state)\n {\n \tstate_.store(state, std::memory_order_release);\n }\n+\n+void Camera::Private::emitBufferCompleted(Request *request, FrameBuffer *buffer)\n+{\n+\tCamera *camera = _o<Camera>();\n+\tcamera->bufferCompleted.emit(request, buffer);\n+}\n+\n+void Camera::Private::emitRequestCompleted(Request *request)\n+{\n+\tCamera *camera = _o<Camera>();\n+\tcamera->requestCompleted.emit(request);\n+}\n+\n+void Camera::Private::emitDisconnected()\n+{\n+\tCamera *camera = _o<Camera>();\n+\tcamera->disconnected.emit();\n+}\n+\n #endif /* __DOXYGEN_PUBLIC__ */\n \n /**\n@@ -956,7 +999,7 @@ void Camera::disconnect()\n \tLOG(Camera, Debug) << \"Disconnecting camera \" << id();\n \n \t_d()->disconnect();\n-\tdisconnected.emit();\n+\t_d()->emitDisconnected();\n }\n \n int Camera::exportFrameBuffers(Stream *stream,\n@@ -1480,7 +1523,7 @@ void Camera::requestComplete(Request *request)\n \t\t\t\t true))\n \t\tLOG(Camera, Fatal) << \"Trying to complete a request when stopped\";\n \n-\trequestCompleted.emit(request);\n+\t_d()->emitRequestCompleted(request);\n }\n \n } /* namespace libcamera */\ndiff --git a/src/libcamera/pipeline_handler.cpp b/src/libcamera/pipeline_handler.cpp\nindex e5f9e55c9783..a7d98fe2fa65 100644\n--- a/src/libcamera/pipeline_handler.cpp\n+++ b/src/libcamera/pipeline_handler.cpp\n@@ -552,7 +552,7 @@ void PipelineHandler::doQueueRequests(Camera *camera)\n bool PipelineHandler::completeBuffer(Request *request, FrameBuffer *buffer)\n {\n \tCamera *camera = request->_d()->camera();\n-\tcamera->bufferCompleted.emit(request, buffer);\n+\tcamera->_d()->emitBufferCompleted(request, buffer);\n \treturn request->_d()->completeBuffer(buffer);\n }\n \ndiff --git a/src/libcamera/request.cpp b/src/libcamera/request.cpp\nindex 7f1e11e8f913..b4ae0f41a34c 100644\n--- a/src/libcamera/request.cpp\n+++ b/src/libcamera/request.cpp\n@@ -137,7 +137,7 @@ void Request::Private::doCancelRequest()\n \n \tfor (FrameBuffer *buffer : pending_) {\n \t\tbuffer->_d()->cancel();\n-\t\tcamera_->bufferCompleted.emit(request, buffer);\n+\t\tcamera_->_d()->emitBufferCompleted(request, buffer);\n \t}\n \n \tcancelled_ = true;\n", "prefixes": [ "v3", "3/8" ] }