Patch Detail
Show a patch.
GET /api/1.1/patches/23733/?format=api
{ "id": 23733, "url": "https://patchwork.libcamera.org/api/1.1/patches/23733/?format=api", "web_url": "https://patchwork.libcamera.org/patch/23733/", "project": { "id": 1, "url": "https://patchwork.libcamera.org/api/1.1/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": "<20250703114225.2074071-4-paul.elder@ideasonboard.com>", "date": "2025-07-03T11:42:18", "name": "[v2,3/8] libcamera: camera: Add indirection to Camera signal emissions", "commit_ref": null, "pull_url": null, "state": "superseded", "archived": false, "hash": "457690684b8f0b89ab2430549c7edcc450ced291", "submitter": { "id": 17, "url": "https://patchwork.libcamera.org/api/1.1/people/17/?format=api", "name": "Paul Elder", "email": "paul.elder@ideasonboard.com" }, "delegate": null, "mbox": "https://patchwork.libcamera.org/patch/23733/mbox/", "series": [ { "id": 5267, "url": "https://patchwork.libcamera.org/api/1.1/series/5267/?format=api", "web_url": "https://patchwork.libcamera.org/project/libcamera/list/?series=5267", "date": "2025-07-03T11:42:15", "name": "Add Layers support", "version": 2, "mbox": "https://patchwork.libcamera.org/series/5267/mbox/" } ], "comments": "https://patchwork.libcamera.org/api/patches/23733/comments/", "check": "pending", "checks": "https://patchwork.libcamera.org/api/patches/23733/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 7AE57BDCBF\n\tfor <parsemail@patchwork.libcamera.org>;\n\tThu, 3 Jul 2025 11:42:53 +0000 (UTC)", "from lancelot.ideasonboard.com (localhost [IPv6:::1])\n\tby lancelot.ideasonboard.com (Postfix) with ESMTP id 2F50868E54;\n\tThu, 3 Jul 2025 13:42:53 +0200 (CEST)", "from perceval.ideasonboard.com (perceval.ideasonboard.com\n\t[213.167.242.64])\n\tby lancelot.ideasonboard.com (Postfix) with ESMTPS id E087C61528\n\tfor <libcamera-devel@lists.libcamera.org>;\n\tThu, 3 Jul 2025 13:42:49 +0200 (CEST)", "from neptunite.hamster-moth.ts.net (unknown\n\t[IPv6:2404:7a81:160:2100:c61b:f3bf:2578:6674])\n\tby perceval.ideasonboard.com (Postfix) with ESMTPSA id BBF32667;\n\tThu, 3 Jul 2025 13:42:24 +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=\"SXzuucbY\"; dkim-atps=neutral", "DKIM-Signature": "v=1; a=rsa-sha256; c=relaxed/simple; d=ideasonboard.com;\n\ts=mail; t=1751542946;\n\tbh=C85IeLpMU0FEG7CN4qC1ruQ/QkkK44RIJFZq+KPZ5Uk=;\n\th=From:To:Cc:Subject:Date:In-Reply-To:References:From;\n\tb=SXzuucbYmc7yg1ozCs/GsToAVAkRhxe1voltbncvwz8Ec+HPOeU/5G3bU5lwt8qDr\n\tO1BnYBKT3TsP6yNt/eKn2BLlXmPz7CZigXHepSUtt5AVSKyXA/7jHYbO97yCD1LNDS\n\tQoDok4gC5+y4wa03Cinh7GK3NYuiasEgPfXLyUjA=", "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", "Subject": "[PATCH v2 3/8] libcamera: camera: Add indirection to Camera signal\n\temissions", "Date": "Thu, 3 Jul 2025 20:42:18 +0900", "Message-ID": "<20250703114225.2074071-4-paul.elder@ideasonboard.com>", "X-Mailer": "git-send-email 2.47.2", "In-Reply-To": "<20250703114225.2074071-1-paul.elder@ideasonboard.com>", "References": "<20250703114225.2074071-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>\n\n---\nNo change in v2\n---\n include/libcamera/internal/camera.h | 4 ++++\n src/libcamera/camera.cpp | 23 +++++++++++++++++++++--\n src/libcamera/pipeline_handler.cpp | 2 +-\n src/libcamera/request.cpp | 2 +-\n 4 files changed, 27 insertions(+), 4 deletions(-)", "diff": "diff --git a/include/libcamera/internal/camera.h b/include/libcamera/internal/camera.h\nindex 18f5c32a18e4..967d4e1693ec 100644\n--- a/include/libcamera/internal/camera.h\n+++ b/include/libcamera/internal/camera.h\n@@ -35,6 +35,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 \tControlInfoMap controlInfo_;\n \tControlList properties_;\ndiff --git a/src/libcamera/camera.cpp b/src/libcamera/camera.cpp\nindex c180a5fdde93..c3e656cab671 100644\n--- a/src/libcamera/camera.cpp\n+++ b/src/libcamera/camera.cpp\n@@ -737,6 +737,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@@ -947,7 +966,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@@ -1451,7 +1470,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 d84dff3c9f19..b5faaae08d4c 100644\n--- a/src/libcamera/pipeline_handler.cpp\n+++ b/src/libcamera/pipeline_handler.cpp\n@@ -527,7 +527,7 @@ void PipelineHandler::doQueueRequests()\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": [ "v2", "3/8" ] }