Patch Detail
Show a patch.
GET /api/patches/23208/?format=api
{ "id": 23208, "url": "https://patchwork.libcamera.org/api/patches/23208/?format=api", "web_url": "https://patchwork.libcamera.org/patch/23208/", "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": "<20250422142010.13064-5-jaslo@ziska.de>", "date": "2025-04-22T14:11:01", "name": "[4/4] gstreamer: Split metadata controls into new member", "commit_ref": null, "pull_url": null, "state": "new", "archived": false, "hash": "8c145bd4f5eb07e3ccb5d0488a1c974ece326821", "submitter": { "id": 173, "url": "https://patchwork.libcamera.org/api/people/173/?format=api", "name": "Jaslo Ziska", "email": "jaslo@ziska.de" }, "delegate": null, "mbox": "https://patchwork.libcamera.org/patch/23208/mbox/", "series": [], "comments": "https://patchwork.libcamera.org/api/patches/23208/comments/", "check": "pending", "checks": "https://patchwork.libcamera.org/api/patches/23208/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 1A5FCC331F\n\tfor <parsemail@patchwork.libcamera.org>;\n\tTue, 22 Apr 2025 14:21:10 +0000 (UTC)", "from lancelot.ideasonboard.com (localhost [IPv6:::1])\n\tby lancelot.ideasonboard.com (Postfix) with ESMTP id 346FB68B2F;\n\tTue, 22 Apr 2025 16:21:10 +0200 (CEST)", "from mo4-p00-ob.smtp.rzone.de (mo4-p00-ob.smtp.rzone.de\n\t[81.169.146.217])\n\tby lancelot.ideasonboard.com (Postfix) with ESMTPS id 8C77968ADA\n\tfor <libcamera-devel@lists.libcamera.org>;\n\tTue, 22 Apr 2025 16:21:02 +0200 (CEST)", "from archlinux.fritz.box by smtp.strato.de (RZmta 51.3.0 AUTH)\n\twith ESMTPSA id z34f8113MEL1RI5\n\t(using TLSv1.3 with cipher TLS_AES_256_GCM_SHA384 (256 bits))\n\t(Client did not present a certificate);\n\tTue, 22 Apr 2025 16:21:01 +0200 (CEST)" ], "Authentication-Results": "lancelot.ideasonboard.com;\n\tdkim=fail reason=\"signature verification failed\" (2048-bit key;\n\tunprotected) header.d=ziska.de header.i=@ziska.de header.b=\"au+I1wu8\";\n\tdkim=permerror (0-bit key) header.d=ziska.de header.i=@ziska.de\n\theader.b=\"xURACEbD\"; dkim-atps=neutral", "ARC-Seal": "i=1; a=rsa-sha256; t=1745331661; cv=none;\n\td=strato.com; s=strato-dkim-0002;\n\tb=dMlKEMGnYC/BBVCKJXK6dgYfw7E4F8a5KyYTMxWt0bKdh7afzw8evOVT6bnM2i9zWD\n\t90CC3V/ZzgcPSuNuQujQTszZ4qHoF0jy2ca9aAadhNidHuhdtB8tDUZ438DYE3fUDCaN\n\t8iLSt6a5PkWOFn8Nem4zdg+USSVSnNVuKQxia1KwzeCMYqWMrLasuyNsBWadMN47M3Ry\n\tYwim7ye5c5b0QJTKtSh8njlfnhAzJFzizpxe5QaLFIuO0q1PYoKmjnaOnEq7yKXDW6qI\n\t4JoGK//Li9mxQoC62RagJsvKkVpHdIkZtPu0VYGcSXdsHMnYnheslKzOeBe/J2a5XU5K\n\tj0PA==", "ARC-Message-Signature": "i=1; a=rsa-sha256; c=relaxed/relaxed; t=1745331661;\n\ts=strato-dkim-0002; d=strato.com;\n\th=References:In-Reply-To:Message-ID:Date:Subject:Cc:To:From:Cc:Date:\n\tFrom:Subject:Sender;\n\tbh=40hkTnkJj6E5LUvC9jfAJHLwiM4iq11ygGr3KvF1wfs=;\n\tb=XFQ0OKEYqo0AkPGzTvqbRUmFTgIRO5NiFdc7FOz6fEbNg5I6VGjN17Trf56y1Kx/HA\n\tB3nSH8KSpfZB4c72NwAY4eL8RnQ90/HyIJQF/L7gtlZkf4bRqKVnbQY1Stggnbz8xBDC\n\tURtJ1tDBF3GRCCz4I42FyE761L4NM+M26lWKfRzpJAwUFpEJ11VCOG48CH6NXJfLqi2O\n\tq9KkCPg9ADavZlNNqPF7uzfqYDSO6c6xPqtaA5sgQRteTajyWTiqahvl7YfEXeFgLA0k\n\t5a3WR0WhsOulzpkxsgmmYDTrWVNh3pzU+lLTdSz+xstkDOlexBcxxt8wxvmU9paNTxLD\n\tvj8w==", "ARC-Authentication-Results": "i=1; strato.com;\n arc=none;\n dkim=none", "X-RZG-CLASS-ID": "mo00", "DKIM-Signature": [ "v=1; a=rsa-sha256; c=relaxed/relaxed; t=1745331661;\n\ts=strato-dkim-0002; d=ziska.de;\n\th=References:In-Reply-To:Message-ID:Date:Subject:Cc:To:From:Cc:Date:\n\tFrom:Subject:Sender;\n\tbh=40hkTnkJj6E5LUvC9jfAJHLwiM4iq11ygGr3KvF1wfs=;\n\tb=au+I1wu8OtEB6pZOqMXcSKEjGATnt7hDtdKnMJHpqzATeL6wwjvcDsFnE5yMazHBYh\n\thnInPgUKTRFCfqiRiyUwYEOi+miF7Fk8zYneJzm1s13War7k1qBFBHT24WFcl8to5rfj\n\tn7YAIKtEjmK1CMJV2L4Nie17gFt4SkDh/jVChQJfxXjg7jQ1Yc5KoLeCQGPloArWf8KN\n\t51ESI5p5hrJIonL2zfv/+zpRXomOCCpuSOP8vm7XI5wJTgKVAbPVvfTiZomGfqWAEYDd\n\tUdVRzYdEo+h4bihQOyEDDWKh6ZEbrIqX1ea/51QoqRwIfbQXScqhvRdSRnHyz1eL9NTI\n\tPQ9Q==", "v=1; a=ed25519-sha256; c=relaxed/relaxed; t=1745331661;\n\ts=strato-dkim-0003; d=ziska.de;\n\th=References:In-Reply-To:Message-ID:Date:Subject:Cc:To:From:Cc:Date:\n\tFrom:Subject:Sender;\n\tbh=40hkTnkJj6E5LUvC9jfAJHLwiM4iq11ygGr3KvF1wfs=;\n\tb=xURACEbDj3xGcxXcjv895RxPcqxJmTLP+MqQi+iIJQmly+HtM1PfeYRsLFUmxbfLR9\n\tgzrUlufrD+wZwv92/DDQ==" ], "X-RZG-AUTH": "\":Jm0XeU+IYfb0x77LHmrjN5Wlb7TBwusDqIM6Hizy8VdfzvKi4yoFC9cCgYrrBvJaIR9ymoISrfhsHWODCRPggeTRCTeK\"", "From": "Jaslo Ziska <jaslo@ziska.de>", "To": "libcamera-devel@lists.libcamera.org", "Cc": "Jaslo Ziska <jaslo@ziska.de>", "Subject": "[PATCH 4/4] gstreamer: Split metadata controls into new member", "Date": "Tue, 22 Apr 2025 16:11:01 +0200", "Message-ID": "<20250422142010.13064-5-jaslo@ziska.de>", "X-Mailer": "git-send-email 2.49.0", "In-Reply-To": "<20250422142010.13064-1-jaslo@ziska.de>", "References": "<20250422142010.13064-1-jaslo@ziska.de>", "MIME-Version": "1.0", "Content-Transfer-Encoding": "8bit", "Content-Type": "text/plain; charset=\"us-ascii\"", "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": "When the libcamerasrc element is stopped and started again, the\nGstCameraControls::setCamera() function is called, but now it is\npopulated with metadata returned by the previous requests. Because\nGstCameraControls::setCamera() filters the controls, this would cause\nwarnings to be emitted, as the returned metadata are not valid controls\nwhich can be set.\n\nThis is fixed by introducing a new member which only holds the metadata\nreturned by the requests, so that the controls and the metadata are now\ncompletely independent from each other.\n\nSigned-off-by: Jaslo Ziska <jaslo@ziska.de>\n---\n src/gstreamer/gstlibcamera-controls.cpp.in | 22 ++++++++++++++++------\n src/gstreamer/gstlibcamera-controls.h | 4 +++-\n 2 files changed, 19 insertions(+), 7 deletions(-)", "diff": "diff --git a/src/gstreamer/gstlibcamera-controls.cpp.in b/src/gstreamer/gstlibcamera-controls.cpp.in\nindex 89c530da..490e835e 100644\n--- a/src/gstreamer/gstlibcamera-controls.cpp.in\n+++ b/src/gstreamer/gstlibcamera-controls.cpp.in\n@@ -153,20 +153,24 @@ g_param_spec_{{ ctrl.gtype }}(\n bool GstCameraControls::getProperty(guint propId, GValue *value,\n \t\t\t\t [[maybe_unused]] GParamSpec *pspec)\n {\n-\tif (!controls_acc_.contains(propId)) {\n+\tconst ControlValue *cv;\n+\tif (controls_acc_.contains(propId)) {\n+\t\tcv = &controls_acc_.get(propId);\n+\t} else if (metadata_.contains(propId)) {\n+\t\tcv = &metadata_.get(propId);\n+\t} else {\n \t\tGST_WARNING(\"Control '%s' is not available, default value will \"\n \t\t\t \"be returned\",\n \t\t\t controls::controls.at(propId)->name().c_str());\n \t\treturn true;\n \t}\n-\tconst ControlValue &cv = controls_acc_.get(propId);\n \n \tswitch (propId) {\n {%- for vendor, ctrls in controls %}\n {%- for ctrl in ctrls %}\n \n \tcase controls::{{ ctrl.namespace }}{{ ctrl.name|snake_case|upper }}: {\n-\t\tauto control = cv.get<{{ ctrl.type }}>();\n+\t\tauto control = cv->get<{{ ctrl.type }}>();\n \n {%- if ctrl.is_array %}\n \t\tfor (size_t i = 0; i < control.size(); ++i) {\n@@ -309,9 +313,14 @@ void GstCameraControls::setCamera(const std::shared_ptr<libcamera::Camera> &cam)\n \t\t\t\t \"camera and will be ignored\",\n \t\t\t\t cid->name().c_str());\n \t}\n-\n \tcontrols_acc_ = new_controls;\n \tcontrols_ = new_controls;\n+\n+\t/*\n+\t * Clear metadata as this might already be populated if the element has\n+\t * been running before.\n+\t */\n+\tmetadata_.clear();\n }\n \n void GstCameraControls::applyControls(std::unique_ptr<libcamera::Request> &request)\n@@ -322,6 +331,7 @@ void GstCameraControls::applyControls(std::unique_ptr<libcamera::Request> &reque\n \n void GstCameraControls::readMetadata(libcamera::Request *request)\n {\n-\tcontrols_acc_.merge(request->metadata(),\n-\t\t\t ControlList::MergePolicy::OverwriteExisting);\n+\tmetadata_.merge(request->metadata(),\n+\t\t\tControlList::MergePolicy::OverwriteExisting);\n+\n }\ndiff --git a/src/gstreamer/gstlibcamera-controls.h b/src/gstreamer/gstlibcamera-controls.h\nindex 749220b5..ee97e61e 100644\n--- a/src/gstreamer/gstlibcamera-controls.h\n+++ b/src/gstreamer/gstlibcamera-controls.h\n@@ -36,8 +36,10 @@ private:\n \tControlInfoMap capabilities_;\n \t/* Set of user modified controls. */\n \tControlList controls_;\n-\t/* Accumulator of all controls ever set and metadata returned by camera */\n+\t/* Accumulator of all controls ever */\n \tControlList controls_acc_;\n+\t/* Metadata returned by requests */\n+\tControlList metadata_;\n };\n \n } /* namespace libcamera */\n", "prefixes": [ "4/4" ] }