{"id":14784,"url":"https://patchwork.libcamera.org/api/patches/14784/?format=json","web_url":"https://patchwork.libcamera.org/patch/14784/","project":{"id":1,"url":"https://patchwork.libcamera.org/api/projects/1/?format=json","name":"libcamera","link_name":"libcamera","list_id":"libcamera_core","list_email":"libcamera-devel@lists.libcamera.org","web_url":"","scm_url":"","webscm_url":""},"msgid":"<20211126003118.42356-2-djrscally@gmail.com>","date":"2021-11-26T00:31:14","name":"[libcamera-devel,1/5] libcamera: Add support for ancillary links to MediaLink","commit_ref":null,"pull_url":null,"state":"superseded","archived":false,"hash":"6de4ae5141c80bc471178bfc4b1b95def62482c0","submitter":{"id":90,"url":"https://patchwork.libcamera.org/api/people/90/?format=json","name":"Daniel Scally","email":"djrscally@gmail.com"},"delegate":null,"mbox":"https://patchwork.libcamera.org/patch/14784/mbox/","series":[{"id":2757,"url":"https://patchwork.libcamera.org/api/series/2757/?format=json","web_url":"https://patchwork.libcamera.org/project/libcamera/list/?series=2757","date":"2021-11-26T00:31:13","name":"Enumerate CameraLens by following sensor's ancillary links","version":1,"mbox":"https://patchwork.libcamera.org/series/2757/mbox/"}],"comments":"https://patchwork.libcamera.org/api/patches/14784/comments/","check":"pending","checks":"https://patchwork.libcamera.org/api/patches/14784/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 E62DEBDB13\n\tfor <parsemail@patchwork.libcamera.org>;\n\tFri, 26 Nov 2021 00:31:32 +0000 (UTC)","from lancelot.ideasonboard.com (localhost [IPv6:::1])\n\tby lancelot.ideasonboard.com (Postfix) with ESMTP id ECCCE604FB;\n\tFri, 26 Nov 2021 01:31:31 +0100 (CET)","from mail-wm1-x329.google.com (mail-wm1-x329.google.com\n\t[IPv6:2a00:1450:4864:20::329])\n\tby lancelot.ideasonboard.com (Postfix) with ESMTPS id 504CF6011D\n\tfor <libcamera-devel@lists.libcamera.org>;\n\tFri, 26 Nov 2021 01:31:28 +0100 (CET)","by mail-wm1-x329.google.com with SMTP id\n\tm25-20020a7bcb99000000b0033aa12cdd33so1684933wmi.1\n\tfor <libcamera-devel@lists.libcamera.org>;\n\tThu, 25 Nov 2021 16:31:28 -0800 (PST)","from localhost.localdomain\n\t(cpc141996-chfd3-2-0-cust928.12-3.cable.virginm.net. [86.13.91.161])\n\tby smtp.gmail.com with ESMTPSA id\n\tb188sm4381455wmd.45.2021.11.25.16.31.27\n\t(version=TLS1_3 cipher=TLS_AES_256_GCM_SHA384 bits=256/256);\n\tThu, 25 Nov 2021 16:31:27 -0800 (PST)"],"Authentication-Results":"lancelot.ideasonboard.com;\n\tdkim=fail reason=\"signature verification failed\" (2048-bit key;\n\tunprotected) header.d=gmail.com header.i=@gmail.com\n\theader.b=\"eAkvW3gV\"; dkim-atps=neutral","DKIM-Signature":"v=1; a=rsa-sha256; c=relaxed/relaxed; d=gmail.com; s=20210112;\n\th=from:to:cc:subject:date:message-id:in-reply-to:references\n\t:mime-version:content-transfer-encoding;\n\tbh=fSBgCp0X8JPVM+FaRxWoz/LqsQf7vjdyPzNhZaKS5rY=;\n\tb=eAkvW3gVxIM9PeX6CamuIVZCW1mlaQlIvg717set+7u7MaTLRExJ64MCw6AyAOIolK\n\tgHgE3YzvuYktX3QkDj+tKgl877wq9hxJ21zSXysOpfdXjhfWmNrwWf7Xvo/Kc91R1h2U\n\t671mZcu3of0e2jsKaQECYehfSnbn+aeTb5hXNLRFayrvEwrpeBI55wNc4WjPdGMvGZOa\n\tuzLHTJqBC5cw70EaLRPc98WoU31Dqje1nCH2COoBI7+EtugPirKJcatHEuWx7/gFMxJw\n\tpnOpJeqlYZwO0Q8q9ZFOuWxrsre0U0u/YjqFK9a8bzgSdTFvwmCrQp+f9+yVQqFlLu5o\n\t0rGQ==","X-Google-DKIM-Signature":"v=1; a=rsa-sha256; c=relaxed/relaxed;\n\td=1e100.net; s=20210112;\n\th=x-gm-message-state:from:to:cc:subject:date:message-id:in-reply-to\n\t:references:mime-version:content-transfer-encoding;\n\tbh=fSBgCp0X8JPVM+FaRxWoz/LqsQf7vjdyPzNhZaKS5rY=;\n\tb=5rvgnLMkoNurXcUWZBB7VavpP9USjtk3Nv5pGXOHmY8x3tbhszLe4TvT8TJqXG45hp\n\t48OsGt/xF5FfpRcLFY2JiZuPljvXNJH56lg6ll399J9zKS5pkBfE2O9cPIQsUbPQ1Mwq\n\teOLy9TNPNjs5Fb9M0gefzL+GAwpZhCV+7nY27nE6NQf6FLdoO1pBeDgBQxy/zuSjpLY0\n\t3MuXuPPYyKI9P3i2YVE0681XfTbAPkY9ItYDmw3T7vyz1p1SQQRSo0f7Ufixi6ktwmrA\n\tIuZ8+iyM4aMtOptkB82d022efzQUJ11rdo1ITXY3L4cRRCpYo6iQgXvF09Kl+IMbSqGJ\n\t67Nw==","X-Gm-Message-State":"AOAM530m2tSI1SFECCe99EjOWIteVidSOivXSLo/nyvc3ZtOjHAGPkMv\n\t8RXB00lQrNdFVQPgrn2JE/P6i417aj4=","X-Google-Smtp-Source":"ABdhPJwbQN7PeTtXpTZrG498qwAdGN2ZyzokyRaMC7lWbpnVtzzpJkcgYbJOIeeS2X6GPkJy+AxjeA==","X-Received":"by 2002:a05:600c:1993:: with SMTP id\n\tt19mr12354806wmq.21.1637886688102; \n\tThu, 25 Nov 2021 16:31:28 -0800 (PST)","From":"Daniel Scally <djrscally@gmail.com>","To":"libcamera-devel@lists.libcamera.org","Date":"Fri, 26 Nov 2021 00:31:14 +0000","Message-Id":"<20211126003118.42356-2-djrscally@gmail.com>","X-Mailer":"git-send-email 2.25.1","In-Reply-To":"<20211126003118.42356-1-djrscally@gmail.com>","References":"<20211126003118.42356-1-djrscally@gmail.com>","MIME-Version":"1.0","Content-Transfer-Encoding":"8bit","Subject":"[libcamera-devel] [PATCH 1/5] libcamera: Add support for ancillary\n\tlinks to MediaLink","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":"Update the MediaLink class to include members suitable for the new\ntype of media_v2_link, connecting two instances of MediaEntity\nrather than MediaPads\n\nSigned-off-by: Daniel Scally <djrscally@gmail.com>\n---\n\nAdding new members and a new constructor here seemed in the end like the least\nimpactful and probably cleanest method of doing this, as otherwise the source\nand sink would need to become MediaObjects and be cast everywhere.\n\n include/libcamera/internal/media_object.h | 10 ++++++++++\n src/libcamera/media_object.cpp            | 24 ++++++++++++++++++++++-\n 2 files changed, 33 insertions(+), 1 deletion(-)","diff":"diff --git a/include/libcamera/internal/media_object.h b/include/libcamera/internal/media_object.h\nindex 6ae22c67..79c71325 100644\n--- a/include/libcamera/internal/media_object.h\n+++ b/include/libcamera/internal/media_object.h\n@@ -45,6 +45,8 @@ class MediaLink : public MediaObject\n public:\n \tMediaPad *source() const { return source_; }\n \tMediaPad *sink() const { return sink_; }\n+\tMediaEntity *primary() const { return primary_; };\n+\tMediaEntity *ancillary() const { return ancillary_; };\n \tunsigned int flags() const { return flags_; }\n \tint setEnabled(bool enable);\n \n@@ -55,9 +57,13 @@ private:\n \n \tMediaLink(const struct media_v2_link *link,\n \t\t  MediaPad *source, MediaPad *sink);\n+\tMediaLink(const struct media_v2_link *link,\n+\t\t  MediaEntity *primary, MediaEntity *ancillary);\n \n \tMediaPad *source_;\n \tMediaPad *sink_;\n+\tMediaEntity *primary_;\n+\tMediaEntity *ancillary_;\n \tunsigned int flags_;\n };\n \n@@ -104,12 +110,15 @@ public:\n \tunsigned int deviceMinor() const { return minor_; }\n \n \tconst std::vector<MediaPad *> &pads() const { return pads_; }\n+\tconst std::vector<MediaLink *> &ancillary_links() const { return ancillary_links_; }\n \n \tconst MediaPad *getPadByIndex(unsigned int index) const;\n \tconst MediaPad *getPadById(unsigned int id) const;\n \n \tint setDeviceNode(const std::string &deviceNode);\n \n+\tvoid addLink(MediaLink *link);\n+\n private:\n \tLIBCAMERA_DISABLE_COPY_AND_MOVE(MediaEntity)\n \n@@ -129,6 +138,7 @@ private:\n \tunsigned int minor_;\n \n \tstd::vector<MediaPad *> pads_;\n+\tstd::vector<MediaLink *> ancillary_links_;\n };\n \n } /* namespace libcamera */\ndiff --git a/src/libcamera/media_object.cpp b/src/libcamera/media_object.cpp\nindex f425d044..e903d5ef 100644\n--- a/src/libcamera/media_object.cpp\n+++ b/src/libcamera/media_object.cpp\n@@ -134,7 +134,7 @@ int MediaLink::setEnabled(bool enable)\n }\n \n /**\n- * \\brief Construct a MediaLink\n+ * \\brief Construct a MediaLink between two pads\n  * \\param[in] link The media link kernel data\n  * \\param[in] source The source pad at the origin of the link\n  * \\param[in] sink The sink pad at the destination of the link\n@@ -146,6 +146,19 @@ MediaLink::MediaLink(const struct media_v2_link *link, MediaPad *source,\n {\n }\n \n+/**\n+ * \\brief Construct a MediaLink between two entities\n+ * \\param[in] link The media link kernel data\n+ * \\param[in] primary The primary entity at the origin of the link\n+ * \\param[in] ancillary The ancillary entity at the destination of the link\n+ */\n+MediaLink::MediaLink(const struct media_v2_link *link, MediaEntity *primary,\n+\t\t     MediaEntity *ancillary)\n+\t: MediaObject(primary->device(), link->id), primary_(primary),\n+\t  ancillary_(ancillary), flags_(link->flags)\n+{\n+}\n+\n /**\n  * \\fn MediaLink::source()\n  * \\brief Retrieve the link's source pad\n@@ -378,6 +391,15 @@ int MediaEntity::setDeviceNode(const std::string &deviceNode)\n \treturn 0;\n }\n \n+/**\n+ * \\brief Add an ancillary link to the MediaEntity\n+ * \\param[in] link Pointer to the MediaLink class\n+ */\n+void MediaEntity::addLink(MediaLink *link)\n+{\n+\tancillary_links_.push_back(link);\n+}\n+\n /**\n  * \\brief Construct a MediaEntity\n  * \\param[in] dev The media device this entity belongs to\n","prefixes":["libcamera-devel","1/5"]}