Patch Detail
Show a patch.
GET /api/patches/18763/?format=api
{ "id": 18763, "url": "https://patchwork.libcamera.org/api/patches/18763/?format=api", "web_url": "https://patchwork.libcamera.org/patch/18763/", "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": "<20230627115221.121279-1-umang.jain@ideasonboard.com>", "date": "2023-06-27T11:52:21", "name": "[libcamera-devel] gstreamer: Drop libcamera_private dependency", "commit_ref": null, "pull_url": null, "state": "accepted", "archived": false, "hash": "a91580bb181cd01ceaee4ced3d48421e0bc5a760", "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/18763/mbox/", "series": [ { "id": 3940, "url": "https://patchwork.libcamera.org/api/series/3940/?format=api", "web_url": "https://patchwork.libcamera.org/project/libcamera/list/?series=3940", "date": "2023-06-27T11:52:21", "name": "[libcamera-devel] gstreamer: Drop libcamera_private dependency", "version": 1, "mbox": "https://patchwork.libcamera.org/series/3940/mbox/" } ], "comments": "https://patchwork.libcamera.org/api/patches/18763/comments/", "check": "pending", "checks": "https://patchwork.libcamera.org/api/patches/18763/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 5A03ABE175\n\tfor <parsemail@patchwork.libcamera.org>;\n\tTue, 27 Jun 2023 11:52:28 +0000 (UTC)", "from lancelot.ideasonboard.com (localhost [IPv6:::1])\n\tby lancelot.ideasonboard.com (Postfix) with ESMTP id B8DEA61E3F;\n\tTue, 27 Jun 2023 13:52:27 +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 18F4561E3F\n\tfor <libcamera-devel@lists.libcamera.org>;\n\tTue, 27 Jun 2023 13:52:26 +0200 (CEST)", "from umang.jainideasonboard.com.praguecc.cz (unknown\n\t[193.85.242.128])\n\tby perceval.ideasonboard.com (Postfix) with ESMTPSA id 4ED1E1447;\n\tTue, 27 Jun 2023 13:51:46 +0200 (CEST)" ], "DKIM-Signature": [ "v=1; a=rsa-sha256; c=relaxed/simple; d=libcamera.org;\n\ts=mail; t=1687866747;\n\tbh=yrSXYFKh6qpASZ5AmwCQuRJWOFAwU8fOl7JRULAi8II=;\n\th=To:Date:Subject:List-Id:List-Unsubscribe:List-Archive:List-Post:\n\tList-Help:List-Subscribe:From:Reply-To:From;\n\tb=t/ULQizSrGT0r5grqFt6IRXAKZ+HO0gMv2igzhdXBXlgNz0ScaV2hJdyi9H1d0bYG\n\tBmORbRxsoEdEJ99XwC/DcsYMn69UruV60B22pLa+0E+Xckhd+GTXGtENlDP3PZHIWJ\n\t93q+xwLQ40A6WNGoSZp57A8Y82pDi0OMfY7TLgW5kVciDtwY6MV6elHOIAhrzcbZ2C\n\t8bQ2aX5FcvMYO8r8eHAV/Q3w/4uLp0cSidtsDDUmFmjjsLaTOBYFKEWkQe3K8UaYkv\n\twALiTkczEiEeZRvQgKJSExt1tCzdUlJ8AWKbnT+1nAXeB0T2VfVjbZHVQqzWSWWckj\n\taZdJkP3I3toMw==", "v=1; a=rsa-sha256; c=relaxed/simple; d=ideasonboard.com;\n\ts=mail; t=1687866706;\n\tbh=yrSXYFKh6qpASZ5AmwCQuRJWOFAwU8fOl7JRULAi8II=;\n\th=From:To:Cc:Subject:Date:From;\n\tb=sVghLgo/lmjW5B4Xyk6QA7lOi13dzlDEqfMLrSauj71mb/NgjUnZbhW/EK7QCmnaR\n\tG3z36yRkRU/c3+slBR4GN561qmJQtsLY+lNF7D1B15DPxyaBnKXU1cNHhLNrmsjJ53\n\tgKb81eskiK7vL8xWU51gMhQOCcVNKMv/tK6L1L4c=" ], "Authentication-Results": "lancelot.ideasonboard.com; dkim=pass (1024-bit key; \n\tunprotected) header.d=ideasonboard.com\n\theader.i=@ideasonboard.com\n\theader.b=\"sVghLgo/\"; dkim-atps=neutral", "To": "libcamera-devel@lists.libcamera.org", "Date": "Tue, 27 Jun 2023 13:52:21 +0200", "Message-Id": "<20230627115221.121279-1-umang.jain@ideasonboard.com>", "X-Mailer": "git-send-email 2.39.1", "MIME-Version": "1.0", "Content-Transfer-Encoding": "8bit", "Subject": "[libcamera-devel] [PATCH] gstreamer: Drop libcamera_private\n\tdependency", "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>", "From": "Umang Jain via libcamera-devel <libcamera-devel@lists.libcamera.org>", "Reply-To": "Umang Jain <umang.jain@ideasonboard.com>", "Errors-To": "libcamera-devel-bounces@lists.libcamera.org", "Sender": "\"libcamera-devel\" <libcamera-devel-bounces@lists.libcamera.org>" }, "content": "Drop libcamera_private dependency entirely as to avoid libcamerasrc\ngetting more dependent on it. In order to achieve that, one of the\nmutex locks in GstLibcameraSrcState needs to be replaced with GMutex.\n\nHowever doing so, this won't let us to use the clang's thread annotation\nmacros in libcamera (which should be fine as libcamerasrc would move\nout of libcamera repo once matured).\n\nSigned-off-by: Umang Jain <umang.jain@ideasonboard.com>\nReviewed-by: Kieran Bingham <kieran.bingham@ideasonboard.com>\n---\n src/gstreamer/gstlibcamerasrc.cpp | 23 +++++++++++------------\n src/gstreamer/meson.build | 2 +-\n 2 files changed, 12 insertions(+), 13 deletions(-)", "diff": "diff --git a/src/gstreamer/gstlibcamerasrc.cpp b/src/gstreamer/gstlibcamerasrc.cpp\nindex 11f15068..b5c6e9ab 100644\n--- a/src/gstreamer/gstlibcamerasrc.cpp\n+++ b/src/gstreamer/gstlibcamerasrc.cpp\n@@ -32,8 +32,6 @@\n #include <queue>\n #include <vector>\n \n-#include <libcamera/base/mutex.h>\n-\n #include <libcamera/camera.h>\n #include <libcamera/camera_manager.h>\n #include <libcamera/control_ids.h>\n@@ -125,11 +123,9 @@ struct GstLibcameraSrcState {\n \t * be held while calling into other graph elements (e.g. when calling\n \t * gst_pad_query()).\n \t */\n-\tMutex lock_;\n-\tstd::queue<std::unique_ptr<RequestWrap>> queuedRequests_\n-\t\tLIBCAMERA_TSA_GUARDED_BY(lock_);\n-\tstd::queue<std::unique_ptr<RequestWrap>> completedRequests_\n-\t\tLIBCAMERA_TSA_GUARDED_BY(lock_);\n+\tGMutex lock_;\n+\tstd::queue<std::unique_ptr<RequestWrap>> queuedRequests_;\n+\tstd::queue<std::unique_ptr<RequestWrap>> completedRequests_;\n \n \tControlList initControls_;\n \tguint group_id_;\n@@ -208,7 +204,7 @@ int GstLibcameraSrcState::queueRequest()\n \tcam_->queueRequest(wrap->request_.get());\n \n \t{\n-\t\tMutexLocker locker(lock_);\n+\t\tGLibLocker locker(&lock_);\n \t\tqueuedRequests_.push(std::move(wrap));\n \t}\n \n@@ -224,7 +220,7 @@ GstLibcameraSrcState::requestCompleted(Request *request)\n \tstd::unique_ptr<RequestWrap> wrap;\n \n \t{\n-\t\tMutexLocker locker(lock_);\n+\t\tGLibLocker locker(&lock_);\n \t\twrap = std::move(queuedRequests_.front());\n \t\tqueuedRequests_.pop();\n \t}\n@@ -251,7 +247,7 @@ GstLibcameraSrcState::requestCompleted(Request *request)\n \t}\n \n \t{\n-\t\tMutexLocker locker(lock_);\n+\t\tGLibLocker locker(&lock_);\n \t\tcompletedRequests_.push(std::move(wrap));\n \t}\n \n@@ -265,7 +261,7 @@ int GstLibcameraSrcState::processRequest()\n \tint err = 0;\n \n \t{\n-\t\tMutexLocker locker(lock_);\n+\t\tGLibLocker locker(&lock_);\n \n \t\tif (!completedRequests_.empty()) {\n \t\t\twrap = std::move(completedRequests_.front());\n@@ -639,7 +635,7 @@ gst_libcamera_src_task_leave([[maybe_unused]] GstTask *task,\n \tstate->cam_->stop();\n \n \t{\n-\t\tMutexLocker locker(state->lock_);\n+\t\tGLibLocker locker(&state->lock_);\n \t\tstate->completedRequests_ = {};\n \t}\n \n@@ -776,6 +772,7 @@ gst_libcamera_src_finalize(GObject *object)\n \n \tg_rec_mutex_clear(&self->stream_lock);\n \tg_clear_object(&self->task);\n+\tg_mutex_clear(&self->state->lock_);\n \tg_free(self->camera_name);\n \tdelete self->controls;\n \tdelete self->state;\n@@ -795,6 +792,8 @@ gst_libcamera_src_init(GstLibcameraSrc *self)\n \tgst_task_set_leave_callback(self->task, gst_libcamera_src_task_leave, self, nullptr);\n \tgst_task_set_lock(self->task, &self->stream_lock);\n \n+\tg_mutex_init(&state->lock_);\n+\n \tstate->srcpads_.push_back(gst_pad_new_from_template(templ, \"src\"));\n \tgst_element_add_pad(GST_ELEMENT(self), state->srcpads_.back());\n \ndiff --git a/src/gstreamer/meson.build b/src/gstreamer/meson.build\nindex eda246d7..77c79140 100644\n--- a/src/gstreamer/meson.build\n+++ b/src/gstreamer/meson.build\n@@ -42,7 +42,7 @@ endif\n libcamera_gst = shared_library('gstlibcamera',\n libcamera_gst_sources,\n cpp_args : libcamera_gst_cpp_args,\n- dependencies : [libcamera_private, gstvideo_dep, gstallocator_dep],\n+ dependencies : [libcamera_public, gstvideo_dep, gstallocator_dep],\n install: true,\n install_dir : '@0@/gstreamer-1.0'.format(get_option('libdir')),\n )\n", "prefixes": [ "libcamera-devel" ] }