{"id":18092,"url":"https://patchwork.libcamera.org/api/1.1/patches/18092/?format=json","web_url":"https://patchwork.libcamera.org/patch/18092/","project":{"id":1,"url":"https://patchwork.libcamera.org/api/1.1/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":"<20230105043726.679968-7-chenghaoyang@google.com>","date":"2023-01-05T04:37:23","name":"[libcamera-devel,v3,6/9] libcamera: pipeline: virtual: Create a Camera","commit_ref":null,"pull_url":null,"state":"superseded","archived":false,"hash":"b009e2ac12c41b77a6fc5935b0f1e4b4634bd159","submitter":{"id":117,"url":"https://patchwork.libcamera.org/api/1.1/people/117/?format=json","name":"Cheng-Hao Yang","email":"chenghaoyang@chromium.org"},"delegate":null,"mbox":"https://patchwork.libcamera.org/patch/18092/mbox/","series":[{"id":3700,"url":"https://patchwork.libcamera.org/api/1.1/series/3700/?format=json","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/18092/comments/","check":"pending","checks":"https://patchwork.libcamera.org/api/patches/18092/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 7CA83C322E\n\tfor <parsemail@patchwork.libcamera.org>;\n\tThu,  5 Jan 2023 04:38:05 +0000 (UTC)","from lancelot.ideasonboard.com (localhost [IPv6:::1])\n\tby lancelot.ideasonboard.com (Postfix) with ESMTP id EE5D3625F3;\n\tThu,  5 Jan 2023 05:38:04 +0100 (CET)","from mail-pj1-x102f.google.com (mail-pj1-x102f.google.com\n\t[IPv6:2607:f8b0:4864:20::102f])\n\tby lancelot.ideasonboard.com (Postfix) with ESMTPS id 19F73625E0\n\tfor <libcamera-devel@lists.libcamera.org>;\n\tThu,  5 Jan 2023 05:38:02 +0100 (CET)","by mail-pj1-x102f.google.com with SMTP id\n\tv13-20020a17090a6b0d00b00219c3be9830so865525pjj.4\n\tfor <libcamera-devel@lists.libcamera.org>;\n\tWed, 04 Jan 2023 20:38:02 -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.59\n\t(version=TLS1_3 cipher=TLS_AES_256_GCM_SHA384 bits=256/256);\n\tWed, 04 Jan 2023 20:38:00 -0800 (PST)"],"DKIM-Signature":["v=1; a=rsa-sha256; c=relaxed/simple; d=libcamera.org;\n\ts=mail; t=1672893485;\n\tbh=8tx+Ta0U0Hr9zT1hQ96lmBQ3IGWjpjxzTmFKfRIMDKg=;\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=Ey6nUb+yTXakdoR461aYr4l2gcX6I9ZuAB7LbH+SvC2FJyphnDGr+nSWWUHICQOOy\n\tv/LWLM3vSbhPsmh9lM5Q36i8DV2itkyOmzvtIs/aGU6Bbg8Hl4I0KQ2Bb9ITiiIsFz\n\tAvlHHDGxsL1ARnkT+KHlfOmv5VsazRfG8VTAS5dEzMbL1mv7SwFcgQKP/Fq1YtUCJ/\n\tCsnSVE4ySBDdZBubVc/E35yae2z95H6iG7EI+vE0jRiwciQKZMPF5437/7XUXD18as\n\tI9Rx6BbVwfTG/B2zmSHNquje+i2ZjE7tkjSyxWJ4e+5WUkI8NQwlNWYjeja7/uByU4\n\tAFjzvot5Kpi3A==","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=J6oOo866++nJiEAfXkWSZqYz/D100v7GE53q9RtFW/E=;\n\tb=TBcRpZwkWEaAL96hfM/DeXb8hSg0nhZ90DbLyVVId7M7oDiwYvYJE7U6TEBGu9HuN8\n\t/Rbv2ayz/95DxtqsPNDrCcNdVo4Atd8h5HxtX4mgDjVnkU+KTegO5nLKdmvXHAQ9+A0h\n\tiMNO5FM5BEILtzAmGH+j83w8bYXUx5/8AIKdM="],"Authentication-Results":"lancelot.ideasonboard.com; dkim=pass (1024-bit key; \n\tunprotected) header.d=chromium.org\n\theader.i=@chromium.org header.b=\"TBcRpZwk\"; \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=J6oOo866++nJiEAfXkWSZqYz/D100v7GE53q9RtFW/E=;\n\tb=7V/UbFwE1r/ZaZPCmepZLheVz2HjXAwR7OxfpM2i5etv85TiSyYA498vmrWCIAOkAQ\n\tbViIadpWI9p/or5/kXPDg41PQKiK0gERIDe+EeuKrkPVM0g1HzRNAPdfBxVv6uLTfTIm\n\tet6cNMZVNY12lG2nOZ249iijNVbofoenMDwsm0GM3EQHfmNwy/4P4N8oKBEzS/VY6322\n\trDWmY9x4GAojUhxHYbaQQIWSEv5gqh7TdPMSKh7RBtoliZjgrL6shPLK54JHQDhqzR1T\n\tJydJnNwnfhSkBXGmmiI4jikXU1erb9W0SCzHiBS/exte0/jG8/pC5YPkkXsT/ThCnKmr\n\tY9DA==","X-Gm-Message-State":"AFqh2krjQha5JCrw4zpXA3RsJLUvmBzcHuSeqbShsQsa7aIfmuQQssEd\n\t6ZpKO3ntCTk+FnKrwRw2rHY4QMUV+6UzQ4S5","X-Google-Smtp-Source":"AMrXdXunX/QN9W0rb/VT/5iuhm8gnNJTtb3Dx6EfOzXqh0blEpiumX8Xa015uJYc+bpNqd7vHNPHZQ==","X-Received":"by 2002:a17:903:1c3:b0:192:903f:7ac9 with SMTP id\n\te3-20020a17090301c300b00192903f7ac9mr47906740plh.42.1672893480306; \n\tWed, 04 Jan 2023 20:38:00 -0800 (PST)","X-Google-Original-From":"Harvey Yang <chenghaoyang@google.com>","To":"libcamera-devel@lists.libcamera.org","Date":"Thu,  5 Jan 2023 04:37:23 +0000","Message-Id":"<20230105043726.679968-7-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 6/9] 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 | 22 ++++++++++++++++++++++\n 1 file changed, 22 insertions(+)","diff":"diff --git a/src/libcamera/pipeline/virtual/virtual.cpp b/src/libcamera/pipeline/virtual/virtual.cpp\nindex 6221196c..ba77d757 100644\n--- a/src/libcamera/pipeline/virtual/virtual.cpp\n+++ b/src/libcamera/pipeline/virtual/virtual.cpp\n@@ -9,6 +9,7 @@\n \n #include <libcamera/camera.h>\n \n+#include \"libcamera/internal/camera.h\"\n #include \"libcamera/internal/media_device_virtual.h\"\n #include \"libcamera/internal/pipeline_handler.h\"\n \n@@ -16,6 +17,19 @@ 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@@ -109,6 +123,14 @@ bool PipelineHandlerVirtual::match(DeviceEnumerator *enumerator)\n {\n \t(void)enumerator;\n \tmediaDevices_.push_back(mediaDeviceVirtual_);\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","prefixes":["libcamera-devel","v3","6/9"]}