Patch Detail
Show a patch.
GET /api/patches/18405/?format=api
{ "id": 18405, "url": "https://patchwork.libcamera.org/api/patches/18405/?format=api", "web_url": "https://patchwork.libcamera.org/patch/18405/", "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": "<20230315102300.2265491-4-chenghaoyang@google.com>", "date": "2023-03-15T10:22:57", "name": "[libcamera-devel,v4,3/6] libcamera: pipeline: virtual: Create a Camera", "commit_ref": null, "pull_url": null, "state": "superseded", "archived": false, "hash": "b061c40853147eae703fe1d398e058e37ef9686f", "submitter": { "id": 117, "url": "https://patchwork.libcamera.org/api/people/117/?format=api", "name": "Cheng-Hao Yang", "email": "chenghaoyang@chromium.org" }, "delegate": null, "mbox": "https://patchwork.libcamera.org/patch/18405/mbox/", "series": [ { "id": 3806, "url": "https://patchwork.libcamera.org/api/series/3806/?format=api", "web_url": "https://patchwork.libcamera.org/project/libcamera/list/?series=3806", "date": "2023-03-15T10:22:54", "name": "Virtual pipeline handler", "version": 4, "mbox": "https://patchwork.libcamera.org/series/3806/mbox/" } ], "comments": "https://patchwork.libcamera.org/api/patches/18405/comments/", "check": "pending", "checks": "https://patchwork.libcamera.org/api/patches/18405/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 B4CDEBD80A\n\tfor <parsemail@patchwork.libcamera.org>;\n\tWed, 15 Mar 2023 10:23:16 +0000 (UTC)", "from lancelot.ideasonboard.com (localhost [IPv6:::1])\n\tby lancelot.ideasonboard.com (Postfix) with ESMTP id 5020262713;\n\tWed, 15 Mar 2023 11:23:16 +0100 (CET)", "from mail-pl1-x633.google.com (mail-pl1-x633.google.com\n\t[IPv6:2607:f8b0:4864:20::633])\n\tby lancelot.ideasonboard.com (Postfix) with ESMTPS id 272F361ED2\n\tfor <libcamera-devel@lists.libcamera.org>;\n\tWed, 15 Mar 2023 11:23:11 +0100 (CET)", "by mail-pl1-x633.google.com with SMTP id k2so11614723pll.8\n\tfor <libcamera-devel@lists.libcamera.org>;\n\tWed, 15 Mar 2023 03:23:11 -0700 (PDT)", "from chenghaoyang-low.c.googlers.com.com\n\t(112.157.221.35.bc.googleusercontent.com. [35.221.157.112])\n\tby smtp.gmail.com with ESMTPSA id\n\tf11-20020a17090274cb00b001a0450da45csm3262786plt.185.2023.03.15.03.23.08\n\t(version=TLS1_3 cipher=TLS_AES_256_GCM_SHA384 bits=256/256);\n\tWed, 15 Mar 2023 03:23:09 -0700 (PDT)" ], "DKIM-Signature": [ "v=1; a=rsa-sha256; c=relaxed/simple; d=libcamera.org;\n\ts=mail; t=1678875796;\n\tbh=CentXDF8+nDFGMuylFGBwlDbJfTcAFRpcnll8D9Wb+o=;\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=DzIJ/DhLrVVh9FbH6ePFpnc9GTJb1P66mRD87/wv9a04Q2SRgQpKWM5muYFxxqS0b\n\ti7ae+5PkufKJa4UQ3N5eqyNebO0J/bemyf3jVBfs6geDdQr+Bbr9ouSD3LRHs8NtU8\n\tg49NsZvpxPeSPKRAcyX01Dlrry4t3+US+wrRsOwXM5CcgmiAiuAGgrCTeTvotqz8xC\n\tH7wKtkYEqrdSLdsJGVXCao1KKUEq0uUs4Q/UNRLdYoc8CzYJBRcflUVPaqqyyzPC6y\n\tOm096cODvjPDC1PiLE0bNjYLkG9YGvsRpsyBJHjrYgdJSFHI4E8CUiEwfnvPc6PGOo\n\tPzKdX5+RGpcqQ==", "v=1; a=rsa-sha256; c=relaxed/relaxed;\n\td=chromium.org; s=google; t=1678875789;\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=pAw5c9JTwxEQpNQNeVzTS98+ZCH/QfhvpXbHNCRsR4c=;\n\tb=JDtR1mDwaan7B9e71NUX5c5pcGwCLlyaW1WKQeLlflDYkpN1duroB8H0PVQnA7E+n5\n\tfpE3W2bNmDsVsK8MPAUcC+YKnRTPYrbbLmpjEACWbYXWlvR0R4y0JpUClsrqbsF+v99p\n\tBhqJULgTd7nYoELOPlIkJz1m0kGgR+sLUdAqI=" ], "Authentication-Results": "lancelot.ideasonboard.com; dkim=pass (1024-bit key; \n\tunprotected) header.d=chromium.org\n\theader.i=@chromium.org header.b=\"JDtR1mDw\"; \n\tdkim-atps=neutral", "X-Google-DKIM-Signature": "v=1; a=rsa-sha256; c=relaxed/relaxed;\n\td=1e100.net; s=20210112; t=1678875789;\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=pAw5c9JTwxEQpNQNeVzTS98+ZCH/QfhvpXbHNCRsR4c=;\n\tb=rUJjL+sVLz47aqyO72jBiWHYR3sm3hb9LD0tRyB3fiMp5NTS8cif2Fip6LoZCW/IME\n\taXeYTMzHtRJUHS3xMFOS+miMEagRCzaKnQO56MwEC7fxbkgl6DVTZqYAc9Uaaw0ayARb\n\trOszNJudZZxze+s66mCl85+cepmL3i7J+iIE+k2ScPp2/IAFz+v/n0XJJY+mKYh7Rdk2\n\tfRpnaVbP3Y3MdtQBOX+S1Qez//LIu8jeRtDVdIDWRQqt9RhmTWKxMpCjA/5e1mBTuEIi\n\tA3ccQYIbTF7Pfw7GqHcr0cvXyqJEse/yiCahqLgRyjp2x/59ZObGdXwiDisz3F79T2Om\n\td3pg==", "X-Gm-Message-State": "AO0yUKV8b7pwpnR0Qp0uGWV2/nCLQqmf89bXTUR5HdOkoEBrLPeL9bPk\n\th5RucrP2IV1rv1iTG12XPbhBsxcTF2VishhyWes=", "X-Google-Smtp-Source": "AK7set+p7u5yWRPw11mucEfZMscO9uOzOWiQlFwujhXK/r1sjhMWMF8MB+6n/BG49mlsRhcC+xwd0Q==", "X-Received": "by 2002:a17:90b:17c4:b0:234:e0c:caaa with SMTP id\n\tme4-20020a17090b17c400b002340e0ccaaamr42338943pjb.6.1678875789470; \n\tWed, 15 Mar 2023 03:23:09 -0700 (PDT)", "X-Google-Original-From": "Harvey Yang <chenghaoyang@google.com>", "To": "libcamera-devel@lists.libcamera.org", "Date": "Wed, 15 Mar 2023 10:22:57 +0000", "Message-Id": "<20230315102300.2265491-4-chenghaoyang@google.com>", "X-Mailer": "git-send-email 2.40.0.rc1.284.g88254d51c5-goog", "In-Reply-To": "<20230315102300.2265491-1-chenghaoyang@google.com>", "References": "<20230315102300.2265491-1-chenghaoyang@google.com>", "MIME-Version": "1.0", "Content-Transfer-Encoding": "8bit", "Subject": "[libcamera-devel] [PATCH v4 3/6] libcamera: pipeline: virtual:\n\tCreate a Camera", "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": "Create a VirtualCameraData inheriting from the CameraData to handle camera\nspecific data, and use it to create and register the camera with the\nCameraManager.\n\nThis can now be tested to see that the camera becomes available to\napplications:\n\n\"\"\"\nbuild/src/apps/cam/cam -l\n[550:47:04.505850647] [1969734] INFO IPAManager ipa_manager.cpp:143\nlibcamera is not installed. Adding ... to the IPA search path\n[550:47:04.509307667] [1969734] INFO Camera camera_manager.cpp:293\nlibcamera v0.0.1+54-55fecb4d-dirty (2022-12-01T05:47:11+00:00)\nAvailable cameras:\n1: (Virtual0)\n\"\"\"\n\nSigned-off-by: Harvey Yang <chenghaoyang@chromium.org>\n---\n src/libcamera/pipeline/virtual/virtual.cpp | 24 +++++++++++++++++++++-\n 1 file changed, 23 insertions(+), 1 deletion(-)", "diff": "diff --git a/src/libcamera/pipeline/virtual/virtual.cpp b/src/libcamera/pipeline/virtual/virtual.cpp\nindex 09583b4e..1d66a60e 100644\n--- a/src/libcamera/pipeline/virtual/virtual.cpp\n+++ b/src/libcamera/pipeline/virtual/virtual.cpp\n@@ -9,12 +9,26 @@\n \n #include <libcamera/camera.h>\n \n+#include \"libcamera/internal/camera.h\"\n #include \"libcamera/internal/pipeline_handler.h\"\n \n namespace libcamera {\n \n LOG_DEFINE_CATEGORY(VIRTUAL)\n \n+class VirtualCameraData : public Camera::Private\n+{\n+public:\n+\tVirtualCameraData(PipelineHandler *pipe)\n+\t\t: Camera::Private(pipe)\n+\t{\n+\t}\n+\n+\t~VirtualCameraData() = default;\n+\n+\tStream stream_;\n+};\n+\n class VirtualCameraConfiguration : public CameraConfiguration\n {\n public:\n@@ -104,7 +118,15 @@ int PipelineHandlerVirtual::queueRequestDevice(Camera *camera, Request *request)\n bool PipelineHandlerVirtual::match(DeviceEnumerator *enumerator)\n {\n \t(void)enumerator;\n-\treturn false;\n+\n+\tstd::unique_ptr<VirtualCameraData> data = std::make_unique<VirtualCameraData>(this);\n+\t/* Create and register the camera. */\n+\tstd::set<Stream *> streams{ &data->stream_ };\n+\tconst std::string id = \"Virtual0\";\n+\tstd::shared_ptr<Camera> camera = Camera::create(std::move(data), id, streams);\n+\tregisterCamera(std::move(camera));\n+\n+\treturn false; // Prevent infinite loops for now\n }\n \n REGISTER_PIPELINE_HANDLER(PipelineHandlerVirtual)\n", "prefixes": [ "libcamera-devel", "v4", "3/6" ] }