Patch Detail
Show a patch.
GET /api/1.1/patches/18089/?format=api
{ "id": 18089, "url": "https://patchwork.libcamera.org/api/1.1/patches/18089/?format=api", "web_url": "https://patchwork.libcamera.org/patch/18089/", "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": "<20230105043726.679968-4-chenghaoyang@google.com>", "date": "2023-01-05T04:37:20", "name": "[libcamera-devel,v3,3/9] libcamera: Use MediaDeviceBase in base classes", "commit_ref": null, "pull_url": null, "state": "superseded", "archived": false, "hash": "dab1775174612cad0f1ca23e0791c61f2cb23de1", "submitter": { "id": 117, "url": "https://patchwork.libcamera.org/api/1.1/people/117/?format=api", "name": "Cheng-Hao Yang", "email": "chenghaoyang@chromium.org" }, "delegate": null, "mbox": "https://patchwork.libcamera.org/patch/18089/mbox/", "series": [ { "id": 3700, "url": "https://patchwork.libcamera.org/api/1.1/series/3700/?format=api", "web_url": "https://patchwork.libcamera.org/project/libcamera/list/?series=3700", "date": "2023-01-05T04:37:17", "name": "Virtual pipeline handler", "version": 3, "mbox": "https://patchwork.libcamera.org/series/3700/mbox/" } ], "comments": "https://patchwork.libcamera.org/api/patches/18089/comments/", "check": "pending", "checks": "https://patchwork.libcamera.org/api/patches/18089/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 C8CDBC3291\n\tfor <parsemail@patchwork.libcamera.org>;\n\tThu, 5 Jan 2023 04:38:01 +0000 (UTC)", "from lancelot.ideasonboard.com (localhost [IPv6:::1])\n\tby lancelot.ideasonboard.com (Postfix) with ESMTP id 660D7625E7;\n\tThu, 5 Jan 2023 05:38:01 +0100 (CET)", "from mail-pj1-x1030.google.com (mail-pj1-x1030.google.com\n\t[IPv6:2607:f8b0:4864:20::1030])\n\tby lancelot.ideasonboard.com (Postfix) with ESMTPS id 82406625DF\n\tfor <libcamera-devel@lists.libcamera.org>;\n\tThu, 5 Jan 2023 05:37:58 +0100 (CET)", "by mail-pj1-x1030.google.com with SMTP id\n\to7-20020a17090a0a0700b00226c9b82c3aso870333pjo.3\n\tfor <libcamera-devel@lists.libcamera.org>;\n\tWed, 04 Jan 2023 20:37:58 -0800 (PST)", "from chenghaoyang-low.c.googlers.com.com\n\t(46.165.189.35.bc.googleusercontent.com. [35.189.165.46])\n\tby smtp.gmail.com with ESMTPSA id\n\tx23-20020a170902b41700b00188c5f0f9e9sm25015200plr.199.2023.01.04.20.37.55\n\t(version=TLS1_3 cipher=TLS_AES_256_GCM_SHA384 bits=256/256);\n\tWed, 04 Jan 2023 20:37:56 -0800 (PST)" ], "DKIM-Signature": [ "v=1; a=rsa-sha256; c=relaxed/simple; d=libcamera.org;\n\ts=mail; t=1672893481;\n\tbh=aNPoTsAaz6S8cvpjer+u/7q8UypJB4kTfGr6+27c49s=;\n\th=To:Date:In-Reply-To:References:Subject:List-Id:List-Unsubscribe:\n\tList-Archive:List-Post:List-Help:List-Subscribe:From:Reply-To:Cc:\n\tFrom;\n\tb=w3jf3j3zy9cIGi9gypbyPQj3nHMTztSppIqaclQ8TFxWXBx1Cex06kIjLAEwDZwGk\n\ttOMHhyv/2GKkLuyy91iS+skY2/SE5GxUKHafOmykGpNvoJ9VMpEuw1p/DgZT27fusl\n\tSaPW7lr39ZPlEoylrM47+u0mgJMlhzPBhdCV7xFF21JT96VY25kbLWjGtPCxdOWs6H\n\t+ujx1ZQ0R3TRAOTFWEQG8nrdoET64X8fjfW3mzVJcioUb7eYtn8ZNgzd/4UsTGew+I\n\tct5fmxs72SvZkGrRfWTYj8UJtXzACUBt+yX0B3p+wzLHuelb1l6vF0+JTifaHKdeES\n\tZjKPlnmE8ilWw==", "v=1; a=rsa-sha256; c=relaxed/relaxed; d=chromium.org;\n\ts=google; \n\th=content-transfer-encoding:mime-version:references:in-reply-to\n\t:message-id:date:subject:cc:to:from:from:to:cc:subject:date\n\t:message-id:reply-to;\n\tbh=2dcd59yRSKL3Fk+Qlt8vuBFn/l2W1oyI0rRReM2jI7U=;\n\tb=PpLPkagqqtmb9YhCAShk7cctSzR4l09bUfF5hspxHlTzmTWZLdMTlRSCzgRi+Uy689\n\tz1OHUYlBuTI72VE1vQQKQvX/5tPZV3b71vXkAPznGcgv5LB++34gCtioxUU+qvZURgtF\n\tUKb983nxnU1+sKib2Jaz+YV5yS7lkw2pQaKBk=" ], "Authentication-Results": "lancelot.ideasonboard.com; dkim=pass (1024-bit key; \n\tunprotected) header.d=chromium.org\n\theader.i=@chromium.org header.b=\"PpLPkagq\"; \n\tdkim-atps=neutral", "X-Google-DKIM-Signature": "v=1; a=rsa-sha256; c=relaxed/relaxed;\n\td=1e100.net; s=20210112;\n\th=content-transfer-encoding:mime-version:references:in-reply-to\n\t:message-id:date:subject:cc:to:from:x-gm-message-state:from:to:cc\n\t:subject:date:message-id:reply-to;\n\tbh=2dcd59yRSKL3Fk+Qlt8vuBFn/l2W1oyI0rRReM2jI7U=;\n\tb=KGbpXI2h7sEpZTD9XJzMlMOZqp8Z+wd35RwyTotbvmta0ZIMPBZHTjF3aTi35HDaQ9\n\t3OOtwbG10etDjM9hWDplqIUAyn+0BgFjNYjvVyRTkQni7vFU/RQoFP1gwAafbivFd0LF\n\tifo6fWn90+ulOUIgHGV+QdSK2421kfN36bbsQ6gD0IP1fgwktAfwE85a7OUF0bqVbFjr\n\tqDaiTo/qmWVIZfj9SfWd1WrJZ4sevB7BGEXpYGKrwGxYwYwZGBIowThtTwzOgBiUHOAM\n\tcJlHYaxayYX7J5vinvd57LtTZPs54oRnQ1oko/8s5aGRAJFXQQ19Ry7xl5Ek/FaYjFHG\n\tc3mg==", "X-Gm-Message-State": "AFqh2kopjzj7Z5aiskTGmSeZ+ct4v4Mc+i5PysBa2lud4A15PYN64odB\n\tUXxUewSdVloWTq0uWIpR3VCcOrX8pPKEfdX5", "X-Google-Smtp-Source": "AMrXdXtJ5/qLA8RdyuOhL5OsrgLLCdUD/QLzBG5Nlcyzt4uD0ibixtiE1yaVOlz2QfDgi3OGX9LRfw==", "X-Received": "by 2002:a17:903:200b:b0:192:467e:7379 with SMTP id\n\ts11-20020a170903200b00b00192467e7379mr44389317pla.49.1672893476455; \n\tWed, 04 Jan 2023 20:37:56 -0800 (PST)", "X-Google-Original-From": "Harvey Yang <chenghaoyang@google.com>", "To": "libcamera-devel@lists.libcamera.org", "Date": "Thu, 5 Jan 2023 04:37:20 +0000", "Message-Id": "<20230105043726.679968-4-chenghaoyang@google.com>", "X-Mailer": "git-send-email 2.39.0.314.g84b9a713c41-goog", "In-Reply-To": "<20230105043726.679968-1-chenghaoyang@google.com>", "References": "<20230105043726.679968-1-chenghaoyang@google.com>", "MIME-Version": "1.0", "Content-Transfer-Encoding": "8bit", "Subject": "[libcamera-devel] [PATCH v3 3/9] libcamera: Use MediaDeviceBase in\n\tbase classes", "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": "Harvey Yang via libcamera-devel <libcamera-devel@lists.libcamera.org>", "Reply-To": "Harvey Yang <chenghaoyang@chromium.org>", "Cc": "Harvey Yang <chenghaoyang@google.com>,\n\tHarvey Yang <chenghaoyang@chromium.org>", "Errors-To": "libcamera-devel-bounces@lists.libcamera.org", "Sender": "\"libcamera-devel\" <libcamera-devel-bounces@lists.libcamera.org>" }, "content": "Use MediaDeviceBase instead of MediaDevice in other base classes\nlike PipelineHandler and DeviceEnumerator.\n\nSigned-off-by: Harvey Yang <chenghaoyang@chromium.org>\n---\n .../libcamera/internal/device_enumerator.h | 12 ++++----\n .../internal/device_enumerator_sysfs.h | 4 +--\n .../internal/device_enumerator_udev.h | 8 ++---\n include/libcamera/internal/pipeline_handler.h | 12 ++++----\n src/libcamera/device_enumerator.cpp | 30 +++++++++----------\n src/libcamera/device_enumerator_sysfs.cpp | 4 +--\n src/libcamera/device_enumerator_udev.cpp | 4 +--\n src/libcamera/pipeline/imx8-isi/imx8-isi.cpp | 2 +-\n src/libcamera/pipeline/ipu3/ipu3.cpp | 4 +--\n .../pipeline/raspberrypi/raspberrypi.cpp | 4 +--\n src/libcamera/pipeline/rkisp1/rkisp1.cpp | 2 +-\n src/libcamera/pipeline/simple/simple.cpp | 4 +--\n src/libcamera/pipeline/uvcvideo/uvcvideo.cpp | 2 +-\n src/libcamera/pipeline/vimc/vimc.cpp | 2 +-\n src/libcamera/pipeline_handler.cpp | 18 +++++------\n 15 files changed, 56 insertions(+), 56 deletions(-)", "diff": "diff --git a/include/libcamera/internal/device_enumerator.h b/include/libcamera/internal/device_enumerator.h\nindex 72ec9a60..87a2b5ce 100644\n--- a/include/libcamera/internal/device_enumerator.h\n+++ b/include/libcamera/internal/device_enumerator.h\n@@ -15,7 +15,7 @@\n \n namespace libcamera {\n \n-class MediaDevice;\n+class MediaDeviceBase;\n \n class DeviceMatch\n {\n@@ -24,7 +24,7 @@ public:\n \n \tvoid add(const std::string &entity);\n \n-\tbool match(const MediaDevice *device) const;\n+\tbool match(const MediaDeviceBase *device) const;\n \n private:\n \tstd::string driver_;\n@@ -41,17 +41,17 @@ public:\n \tvirtual int init() = 0;\n \tvirtual int enumerate() = 0;\n \n-\tstd::shared_ptr<MediaDevice> search(const DeviceMatch &dm);\n+\tstd::shared_ptr<MediaDeviceBase> search(const DeviceMatch &dm);\n \n \tSignal<> devicesAdded;\n \n protected:\n-\tstd::unique_ptr<MediaDevice> createDevice(const std::string &deviceNode);\n-\tvoid addDevice(std::unique_ptr<MediaDevice> media);\n+\tstd::unique_ptr<MediaDeviceBase> createDevice(const std::string &deviceNode);\n+\tvoid addDevice(std::unique_ptr<MediaDeviceBase> media);\n \tvoid removeDevice(const std::string &deviceNode);\n \n private:\n-\tstd::vector<std::shared_ptr<MediaDevice>> devices_;\n+\tstd::vector<std::shared_ptr<MediaDeviceBase>> devices_;\n };\n \n } /* namespace libcamera */\ndiff --git a/include/libcamera/internal/device_enumerator_sysfs.h b/include/libcamera/internal/device_enumerator_sysfs.h\nindex 3e84b83f..920fd984 100644\n--- a/include/libcamera/internal/device_enumerator_sysfs.h\n+++ b/include/libcamera/internal/device_enumerator_sysfs.h\n@@ -12,7 +12,7 @@\n \n #include \"libcamera/internal/device_enumerator.h\"\n \n-class MediaDevice;\n+class MediaDeviceBase;\n \n namespace libcamera {\n \n@@ -23,7 +23,7 @@ public:\n \tint enumerate();\n \n private:\n-\tint populateMediaDevice(MediaDevice *media);\n+\tint populateMediaDevice(MediaDeviceBase *media);\n \tstd::string lookupDeviceNode(int major, int minor);\n };\n \ndiff --git a/include/libcamera/internal/device_enumerator_udev.h b/include/libcamera/internal/device_enumerator_udev.h\nindex 1b3360df..a833f7a6 100644\n--- a/include/libcamera/internal/device_enumerator_udev.h\n+++ b/include/libcamera/internal/device_enumerator_udev.h\n@@ -23,7 +23,7 @@ struct udev_monitor;\n namespace libcamera {\n \n class EventNotifier;\n-class MediaDevice;\n+class MediaDeviceBase;\n class MediaEntity;\n \n class DeviceEnumeratorUdev final : public DeviceEnumerator\n@@ -39,7 +39,7 @@ private:\n \tusing DependencyMap = std::map<dev_t, std::list<MediaEntity *>>;\n \n \tstruct MediaDeviceDeps {\n-\t\tMediaDeviceDeps(std::unique_ptr<MediaDevice> media,\n+\t\tMediaDeviceDeps(std::unique_ptr<MediaDeviceBase> media,\n \t\t\t\tDependencyMap deps)\n \t\t\t: media_(std::move(media)), deps_(std::move(deps))\n \t\t{\n@@ -50,12 +50,12 @@ private:\n \t\t\treturn media_ == other.media_;\n \t\t}\n \n-\t\tstd::unique_ptr<MediaDevice> media_;\n+\t\tstd::unique_ptr<MediaDeviceBase> media_;\n \t\tDependencyMap deps_;\n \t};\n \n \tint addUdevDevice(struct udev_device *dev);\n-\tint populateMediaDevice(MediaDevice *media, DependencyMap *deps);\n+\tint populateMediaDevice(MediaDeviceBase *media, DependencyMap *deps);\n \tstd::string lookupDeviceNode(dev_t devnum);\n \n \tint addV4L2Device(dev_t devnum);\ndiff --git a/include/libcamera/internal/pipeline_handler.h b/include/libcamera/internal/pipeline_handler.h\nindex ec4f662d..1223b1cb 100644\n--- a/include/libcamera/internal/pipeline_handler.h\n+++ b/include/libcamera/internal/pipeline_handler.h\n@@ -30,7 +30,7 @@ class CameraManager;\n class DeviceEnumerator;\n class DeviceMatch;\n class FrameBuffer;\n-class MediaDevice;\n+class MediaDeviceBase;\n class PipelineHandler;\n class Request;\n \n@@ -42,8 +42,8 @@ public:\n \tvirtual ~PipelineHandler();\n \n \tvirtual bool match(DeviceEnumerator *enumerator) = 0;\n-\tMediaDevice *acquireMediaDevice(DeviceEnumerator *enumerator,\n-\t\t\t\t\tconst DeviceMatch &dm);\n+\tMediaDeviceBase *acquireMediaDevice(DeviceEnumerator *enumerator,\n+\t\t\t\t\t const DeviceMatch &dm);\n \n \tbool acquire();\n \tvoid release(Camera *camera);\n@@ -69,7 +69,7 @@ public:\n \n protected:\n \tvoid registerCamera(std::shared_ptr<Camera> camera);\n-\tvoid hotplugMediaDevice(MediaDevice *media);\n+\tvoid hotplugMediaDevice(MediaDeviceBase *media);\n \n \tvirtual int queueRequestDevice(Camera *camera, Request *request) = 0;\n \tvirtual void stopDevice(Camera *camera) = 0;\n@@ -81,13 +81,13 @@ protected:\n private:\n \tvoid unlockMediaDevices();\n \n-\tvoid mediaDeviceDisconnected(MediaDevice *media);\n+\tvoid mediaDeviceDisconnected(MediaDeviceBase *media);\n \tvirtual void disconnect();\n \n \tvoid doQueueRequest(Request *request);\n \tvoid doQueueRequests();\n \n-\tstd::vector<std::shared_ptr<MediaDevice>> mediaDevices_;\n+\tstd::vector<std::shared_ptr<MediaDeviceBase>> mediaDevices_;\n \tstd::vector<std::weak_ptr<Camera>> cameras_;\n \n \tstd::queue<Request *> waitingRequests_;\ndiff --git a/src/libcamera/device_enumerator.cpp b/src/libcamera/device_enumerator.cpp\nindex f2e055de..ed5d7af3 100644\n--- a/src/libcamera/device_enumerator.cpp\n+++ b/src/libcamera/device_enumerator.cpp\n@@ -13,7 +13,7 @@\n \n #include \"libcamera/internal/device_enumerator_sysfs.h\"\n #include \"libcamera/internal/device_enumerator_udev.h\"\n-#include \"libcamera/internal/media_device.h\"\n+#include \"libcamera/internal/media_device_base.h\"\n \n /**\n * \\file device_enumerator.h\n@@ -25,12 +25,12 @@\n * At the core of the enumeration is the DeviceEnumerator class, responsible\n * for enumerating all media devices in the system. It handles all interactions\n * with the operating system in a platform-specific way. For each media device\n- * found an instance of MediaDevice is created to store information about the\n+ * found an instance of MediaDeviceBase is created to store information about the\n * device gathered from the kernel through the Media Controller API.\n *\n * The DeviceEnumerator can enumerate all or specific media devices in the\n * system. When a new media device is added the enumerator creates a\n- * corresponding MediaDevice instance.\n+ * corresponding MediaDeviceBase instance.\n *\n * The enumerator supports searching among enumerated devices based on criteria\n * expressed in a DeviceMatch object.\n@@ -91,7 +91,7 @@ void DeviceMatch::add(const std::string &entity)\n *\n * \\return true if the media device matches the search pattern, false otherwise\n */\n-bool DeviceMatch::match(const MediaDevice *device) const\n+bool DeviceMatch::match(const MediaDeviceBase *device) const\n {\n \tif (driver_ != device->driver())\n \t\treturn false;\n@@ -120,7 +120,7 @@ bool DeviceMatch::match(const MediaDevice *device) const\n * The DeviceEnumerator class is responsible for all interactions with the\n * operating system related to media devices. It enumerates all media devices\n * in the system, and for each device found creates an instance of the\n- * MediaDevice class and stores it internally. The list of media devices can\n+ * MediaDeviceBase class and stores it internally. The list of media devices can\n * then be searched using DeviceMatch search patterns.\n *\n * The enumerator also associates media device entities with device node paths.\n@@ -161,7 +161,7 @@ std::unique_ptr<DeviceEnumerator> DeviceEnumerator::create()\n \n DeviceEnumerator::~DeviceEnumerator()\n {\n-\tfor (const std::shared_ptr<MediaDevice> &media : devices_) {\n+\tfor (const std::shared_ptr<MediaDeviceBase> &media : devices_) {\n \t\tif (media->busy())\n \t\t\tLOG(DeviceEnumerator, Error)\n \t\t\t\t<< \"Removing media device \" << media->deviceNode()\n@@ -209,9 +209,9 @@ DeviceEnumerator::~DeviceEnumerator()\n *\n * \\return Created media device instance on success, or nullptr otherwise\n */\n-std::unique_ptr<MediaDevice> DeviceEnumerator::createDevice(const std::string &deviceNode)\n+std::unique_ptr<MediaDeviceBase> DeviceEnumerator::createDevice(const std::string &deviceNode)\n {\n-\tstd::unique_ptr<MediaDevice> media = std::make_unique<MediaDevice>(deviceNode);\n+\tstd::unique_ptr<MediaDeviceBase> media = std::make_unique<MediaDeviceBase>(deviceNode);\n \n \tint ret = media->populate();\n \tif (ret < 0) {\n@@ -247,7 +247,7 @@ std::unique_ptr<MediaDevice> DeviceEnumerator::createDevice(const std::string &d\n * This function shall be called after all members of the entities of the\n * media graph have been confirmed to be initialized.\n */\n-void DeviceEnumerator::addDevice(std::unique_ptr<MediaDevice> media)\n+void DeviceEnumerator::addDevice(std::unique_ptr<MediaDeviceBase> media)\n {\n \tLOG(DeviceEnumerator, Debug)\n \t\t<< \"Added device \" << media->deviceNode() << \": \" << media->driver();\n@@ -263,12 +263,12 @@ void DeviceEnumerator::addDevice(std::unique_ptr<MediaDevice> media)\n * \\param[in] deviceNode Path to the media device to remove\n *\n * Remove the media device identified by \\a deviceNode previously added to the\n- * enumerator with addDevice(). The media device's MediaDevice::disconnected\n+ * enumerator with addDevice(). The media device's MediaDeviceBase::disconnected\n * signal is emitted.\n */\n void DeviceEnumerator::removeDevice(const std::string &deviceNode)\n {\n-\tstd::shared_ptr<MediaDevice> media;\n+\tstd::shared_ptr<MediaDeviceBase> media;\n \n \tfor (auto iter = devices_.begin(); iter != devices_.end(); ++iter) {\n \t\tif ((*iter)->deviceNode() == deviceNode) {\n@@ -297,14 +297,14 @@ void DeviceEnumerator::removeDevice(const std::string &deviceNode)\n *\n * Search in the enumerated media devices that are not already in use for a\n * match described in \\a dm. If a match is found and the caller intends to use\n- * it the caller is responsible for acquiring the MediaDevice object and\n+ * it the caller is responsible for acquiring the MediaDeviceBase object and\n * releasing it when done with it.\n *\n- * \\return pointer to the matching MediaDevice, or nullptr if no match is found\n+ * \\return pointer to the matching MediaDeviceBase, or nullptr if no match is found\n */\n-std::shared_ptr<MediaDevice> DeviceEnumerator::search(const DeviceMatch &dm)\n+std::shared_ptr<MediaDeviceBase> DeviceEnumerator::search(const DeviceMatch &dm)\n {\n-\tfor (std::shared_ptr<MediaDevice> &media : devices_) {\n+\tfor (std::shared_ptr<MediaDeviceBase> &media : devices_) {\n \t\tif (media->busy())\n \t\t\tcontinue;\n \ndiff --git a/src/libcamera/device_enumerator_sysfs.cpp b/src/libcamera/device_enumerator_sysfs.cpp\nindex 686bb809..22bbe44f 100644\n--- a/src/libcamera/device_enumerator_sysfs.cpp\n+++ b/src/libcamera/device_enumerator_sysfs.cpp\n@@ -73,7 +73,7 @@ int DeviceEnumeratorSysfs::enumerate()\n \t\t\tcontinue;\n \t\t}\n \n-\t\tstd::unique_ptr<MediaDevice> media = createDevice(devnode);\n+\t\tstd::unique_ptr<MediaDeviceBase> media = createDevice(devnode);\n \t\tif (!media)\n \t\t\tcontinue;\n \n@@ -93,7 +93,7 @@ int DeviceEnumeratorSysfs::enumerate()\n \treturn 0;\n }\n \n-int DeviceEnumeratorSysfs::populateMediaDevice(MediaDevice *media)\n+int DeviceEnumeratorSysfs::populateMediaDevice(MediaDeviceBase *media)\n {\n \t/* Associate entities to device node paths. */\n \tfor (MediaEntity *entity : media->entities()) {\ndiff --git a/src/libcamera/device_enumerator_udev.cpp b/src/libcamera/device_enumerator_udev.cpp\nindex 5317afbd..8be8a8d2 100644\n--- a/src/libcamera/device_enumerator_udev.cpp\n+++ b/src/libcamera/device_enumerator_udev.cpp\n@@ -76,7 +76,7 @@ int DeviceEnumeratorUdev::addUdevDevice(struct udev_device *dev)\n \t\treturn -ENODEV;\n \n \tif (!strcmp(subsystem, \"media\")) {\n-\t\tstd::unique_ptr<MediaDevice> media =\n+\t\tstd::unique_ptr<MediaDeviceBase> media =\n \t\t\tcreateDevice(udev_device_get_devnode(dev));\n \t\tif (!media)\n \t\t\treturn -ENODEV;\n@@ -193,7 +193,7 @@ done:\n \treturn 0;\n }\n \n-int DeviceEnumeratorUdev::populateMediaDevice(MediaDevice *media, DependencyMap *deps)\n+int DeviceEnumeratorUdev::populateMediaDevice(MediaDeviceBase *media, DependencyMap *deps)\n {\n \tstd::set<dev_t> children;\n \ndiff --git a/src/libcamera/pipeline/imx8-isi/imx8-isi.cpp b/src/libcamera/pipeline/imx8-isi/imx8-isi.cpp\nindex 0c67e35d..f41e10c3 100644\n--- a/src/libcamera/pipeline/imx8-isi/imx8-isi.cpp\n+++ b/src/libcamera/pipeline/imx8-isi/imx8-isi.cpp\n@@ -865,7 +865,7 @@ bool PipelineHandlerISI::match(DeviceEnumerator *enumerator)\n \tdm.add(\"mxc_isi.0\");\n \tdm.add(\"mxc_isi.0.capture\");\n \n-\tisiDev_ = acquireMediaDevice(enumerator, dm);\n+\tisiDev_ = dynamic_cast<MediaDevice *>(acquireMediaDevice(enumerator, dm));\n \tif (!isiDev_)\n \t\treturn false;\n \ndiff --git a/src/libcamera/pipeline/ipu3/ipu3.cpp b/src/libcamera/pipeline/ipu3/ipu3.cpp\nindex e4d79ea4..c3f3c815 100644\n--- a/src/libcamera/pipeline/ipu3/ipu3.cpp\n+++ b/src/libcamera/pipeline/ipu3/ipu3.cpp\n@@ -923,11 +923,11 @@ bool PipelineHandlerIPU3::match(DeviceEnumerator *enumerator)\n \timgu_dm.add(\"ipu3-imgu 1 viewfinder\");\n \timgu_dm.add(\"ipu3-imgu 1 3a stat\");\n \n-\tcio2MediaDev_ = acquireMediaDevice(enumerator, cio2_dm);\n+\tcio2MediaDev_ = dynamic_cast<MediaDevice *>(acquireMediaDevice(enumerator, cio2_dm));\n \tif (!cio2MediaDev_)\n \t\treturn false;\n \n-\timguMediaDev_ = acquireMediaDevice(enumerator, imgu_dm);\n+\timguMediaDev_ = dynamic_cast<MediaDevice *>(acquireMediaDevice(enumerator, imgu_dm));\n \tif (!imguMediaDev_)\n \t\treturn false;\n \ndiff --git a/src/libcamera/pipeline/raspberrypi/raspberrypi.cpp b/src/libcamera/pipeline/raspberrypi/raspberrypi.cpp\nindex 8569df17..355cd556 100644\n--- a/src/libcamera/pipeline/raspberrypi/raspberrypi.cpp\n+++ b/src/libcamera/pipeline/raspberrypi/raspberrypi.cpp\n@@ -1160,7 +1160,7 @@ int PipelineHandlerRPi::queueRequestDevice(Camera *camera, Request *request)\n bool PipelineHandlerRPi::match(DeviceEnumerator *enumerator)\n {\n \tDeviceMatch unicam(\"unicam\");\n-\tMediaDevice *unicamDevice = acquireMediaDevice(enumerator, unicam);\n+\tMediaDevice *unicamDevice = dynamic_cast<MediaDevice *>(acquireMediaDevice(enumerator, unicam));\n \n \tif (!unicamDevice) {\n \t\tLOG(RPI, Debug) << \"Unable to acquire a Unicam instance\";\n@@ -1168,7 +1168,7 @@ bool PipelineHandlerRPi::match(DeviceEnumerator *enumerator)\n \t}\n \n \tDeviceMatch isp(\"bcm2835-isp\");\n-\tMediaDevice *ispDevice = acquireMediaDevice(enumerator, isp);\n+\tMediaDevice *ispDevice = dynamic_cast<MediaDevice *>(acquireMediaDevice(enumerator, isp));\n \n \tif (!ispDevice) {\n \t\tLOG(RPI, Debug) << \"Unable to acquire ISP instance\";\ndiff --git a/src/libcamera/pipeline/rkisp1/rkisp1.cpp b/src/libcamera/pipeline/rkisp1/rkisp1.cpp\nindex eb9ad65c..c14711ef 100644\n--- a/src/libcamera/pipeline/rkisp1/rkisp1.cpp\n+++ b/src/libcamera/pipeline/rkisp1/rkisp1.cpp\n@@ -1146,7 +1146,7 @@ bool PipelineHandlerRkISP1::match(DeviceEnumerator *enumerator)\n \tdm.add(\"rkisp1_stats\");\n \tdm.add(\"rkisp1_params\");\n \n-\tmedia_ = acquireMediaDevice(enumerator, dm);\n+\tmedia_ = dynamic_cast<MediaDevice *>(acquireMediaDevice(enumerator, dm));\n \tif (!media_)\n \t\treturn false;\n \ndiff --git a/src/libcamera/pipeline/simple/simple.cpp b/src/libcamera/pipeline/simple/simple.cpp\nindex a32de7f3..e6f4fad3 100644\n--- a/src/libcamera/pipeline/simple/simple.cpp\n+++ b/src/libcamera/pipeline/simple/simple.cpp\n@@ -1391,7 +1391,7 @@ bool SimplePipelineHandler::match(DeviceEnumerator *enumerator)\n \n \tfor (const SimplePipelineInfo &inf : supportedDevices) {\n \t\tDeviceMatch dm(inf.driver);\n-\t\tmedia_ = acquireMediaDevice(enumerator, dm);\n+\t\tmedia_ = dynamic_cast<MediaDevice *>(acquireMediaDevice(enumerator, dm));\n \t\tif (media_) {\n \t\t\tinfo = &inf;\n \t\t\tbreak;\n@@ -1403,7 +1403,7 @@ bool SimplePipelineHandler::match(DeviceEnumerator *enumerator)\n \n \tfor (const auto &[name, streams] : info->converters) {\n \t\tDeviceMatch converterMatch(name);\n-\t\tconverter_ = acquireMediaDevice(enumerator, converterMatch);\n+\t\tconverter_ = dynamic_cast<MediaDevice *>(acquireMediaDevice(enumerator, converterMatch));\n \t\tif (converter_) {\n \t\t\tnumStreams = streams;\n \t\t\tbreak;\ndiff --git a/src/libcamera/pipeline/uvcvideo/uvcvideo.cpp b/src/libcamera/pipeline/uvcvideo/uvcvideo.cpp\nindex 277465b7..b97ec95e 100644\n--- a/src/libcamera/pipeline/uvcvideo/uvcvideo.cpp\n+++ b/src/libcamera/pipeline/uvcvideo/uvcvideo.cpp\n@@ -389,7 +389,7 @@ bool PipelineHandlerUVC::match(DeviceEnumerator *enumerator)\n \tMediaDevice *media;\n \tDeviceMatch dm(\"uvcvideo\");\n \n-\tmedia = acquireMediaDevice(enumerator, dm);\n+\tmedia = dynamic_cast<MediaDevice *>(acquireMediaDevice(enumerator, dm));\n \tif (!media)\n \t\treturn false;\n \ndiff --git a/src/libcamera/pipeline/vimc/vimc.cpp b/src/libcamera/pipeline/vimc/vimc.cpp\nindex 204f5ad7..0aaaa628 100644\n--- a/src/libcamera/pipeline/vimc/vimc.cpp\n+++ b/src/libcamera/pipeline/vimc/vimc.cpp\n@@ -454,7 +454,7 @@ bool PipelineHandlerVimc::match(DeviceEnumerator *enumerator)\n \tdm.add(\"RGB/YUV Input\");\n \tdm.add(\"Scaler\");\n \n-\tMediaDevice *media = acquireMediaDevice(enumerator, dm);\n+\tMediaDevice *media = dynamic_cast<MediaDevice *>(acquireMediaDevice(enumerator, dm));\n \tif (!media)\n \t\treturn false;\n \ndiff --git a/src/libcamera/pipeline_handler.cpp b/src/libcamera/pipeline_handler.cpp\nindex cfade490..613698a1 100644\n--- a/src/libcamera/pipeline_handler.cpp\n+++ b/src/libcamera/pipeline_handler.cpp\n@@ -73,7 +73,7 @@ PipelineHandler::PipelineHandler(CameraManager *manager)\n \n PipelineHandler::~PipelineHandler()\n {\n-\tfor (std::shared_ptr<MediaDevice> media : mediaDevices_)\n+\tfor (std::shared_ptr<MediaDeviceBase> media : mediaDevices_)\n \t\tmedia->release();\n }\n \n@@ -126,10 +126,10 @@ PipelineHandler::~PipelineHandler()\n *\n * \\return A pointer to the matching MediaDevice, or nullptr if no match is found\n */\n-MediaDevice *PipelineHandler::acquireMediaDevice(DeviceEnumerator *enumerator,\n-\t\t\t\t\t\t const DeviceMatch &dm)\n+MediaDeviceBase *PipelineHandler::acquireMediaDevice(DeviceEnumerator *enumerator,\n+\t\t\t\t\t\t const DeviceMatch &dm)\n {\n-\tstd::shared_ptr<MediaDevice> media = enumerator->search(dm);\n+\tstd::shared_ptr<MediaDeviceBase> media = enumerator->search(dm);\n \tif (!media)\n \t\treturn nullptr;\n \n@@ -170,7 +170,7 @@ bool PipelineHandler::acquire()\n \t\treturn true;\n \t}\n \n-\tfor (std::shared_ptr<MediaDevice> &media : mediaDevices_) {\n+\tfor (std::shared_ptr<MediaDeviceBase> &media : mediaDevices_) {\n \t\tif (!media->lock()) {\n \t\t\tunlockMediaDevices();\n \t\t\treturn false;\n@@ -223,7 +223,7 @@ void PipelineHandler::releaseDevice([[maybe_unused]] Camera *camera)\n \n void PipelineHandler::unlockMediaDevices()\n {\n-\tfor (std::shared_ptr<MediaDevice> &media : mediaDevices_)\n+\tfor (std::shared_ptr<MediaDeviceBase> &media : mediaDevices_)\n \t\tmedia->unlock();\n }\n \n@@ -556,7 +556,7 @@ void PipelineHandler::registerCamera(std::shared_ptr<Camera> camera)\n \t * to the camera.\n \t */\n \tstd::vector<dev_t> devnums;\n-\tfor (const std::shared_ptr<MediaDevice> &media : mediaDevices_) {\n+\tfor (const std::shared_ptr<MediaDeviceBase> &media : mediaDevices_) {\n \t\tfor (const MediaEntity *entity : media->entities()) {\n \t\t\tif (entity->pads().size() == 1 &&\n \t\t\t (entity->pads()[0]->flags() & MEDIA_PAD_FL_SINK) &&\n@@ -582,7 +582,7 @@ void PipelineHandler::registerCamera(std::shared_ptr<Camera> camera)\n * handler gets notified and automatically disconnects all the cameras it has\n * registered without requiring any manual intervention.\n */\n-void PipelineHandler::hotplugMediaDevice(MediaDevice *media)\n+void PipelineHandler::hotplugMediaDevice(MediaDeviceBase *media)\n {\n \tmedia->disconnected.connect(this, [=]() { mediaDeviceDisconnected(media); });\n }\n@@ -590,7 +590,7 @@ void PipelineHandler::hotplugMediaDevice(MediaDevice *media)\n /**\n * \\brief Slot for the MediaDevice disconnected signal\n */\n-void PipelineHandler::mediaDeviceDisconnected(MediaDevice *media)\n+void PipelineHandler::mediaDeviceDisconnected(MediaDeviceBase *media)\n {\n \tmedia->disconnected.disconnect(this);\n \n", "prefixes": [ "libcamera-devel", "v3", "3/9" ] }