{"id":8764,"url":"https://patchwork.libcamera.org/api/1.1/patches/8764/?format=json","web_url":"https://patchwork.libcamera.org/patch/8764/","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":"<20200713132451.2944673-4-kieran.bingham@ideasonboard.com>","date":"2020-07-13T13:24:45","name":"[libcamera-devel,3/9] libcamera: pipeline: vivid: Create a Camera","commit_ref":null,"pull_url":null,"state":"awaiting-upstream","archived":false,"hash":"d26f3b19539ae3b6b89eb0522823752e64adab23","submitter":{"id":4,"url":"https://patchwork.libcamera.org/api/1.1/people/4/?format=json","name":"Kieran Bingham","email":"kieran.bingham@ideasonboard.com"},"delegate":null,"mbox":"https://patchwork.libcamera.org/patch/8764/mbox/","series":[{"id":1102,"url":"https://patchwork.libcamera.org/api/1.1/series/1102/?format=json","web_url":"https://patchwork.libcamera.org/project/libcamera/list/?series=1102","date":"2020-07-13T13:24:42","name":"Introduce a new PipelineHandler","version":1,"mbox":"https://patchwork.libcamera.org/series/1102/mbox/"}],"comments":"https://patchwork.libcamera.org/api/patches/8764/comments/","check":"pending","checks":"https://patchwork.libcamera.org/api/patches/8764/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 D74E7BD792\n\tfor <parsemail@patchwork.libcamera.org>;\n\tMon, 13 Jul 2020 13:25:00 +0000 (UTC)","from lancelot.ideasonboard.com (localhost [IPv6:::1])\n\tby lancelot.ideasonboard.com (Postfix) with ESMTP id 566E560733;\n\tMon, 13 Jul 2020 15:25:00 +0200 (CEST)","from perceval.ideasonboard.com (perceval.ideasonboard.com\n\t[213.167.242.64])\n\tby lancelot.ideasonboard.com (Postfix) with ESMTPS id 8169E605A9\n\tfor <libcamera-devel@lists.libcamera.org>;\n\tMon, 13 Jul 2020 15:24:57 +0200 (CEST)","from Q.local (cpc89242-aztw30-2-0-cust488.18-1.cable.virginm.net\n\t[86.31.129.233])\n\tby perceval.ideasonboard.com (Postfix) with ESMTPSA id 09015AF3;\n\tMon, 13 Jul 2020 15:24:55 +0200 (CEST)"],"Authentication-Results":"lancelot.ideasonboard.com;\n\tdkim=fail reason=\"signature verification failed\" (1024-bit key;\n\tunprotected) header.d=ideasonboard.com header.i=@ideasonboard.com\n\theader.b=\"Dsr6/x8f\"; dkim-atps=neutral","DKIM-Signature":"v=1; a=rsa-sha256; c=relaxed/simple; d=ideasonboard.com;\n\ts=mail; t=1594646696;\n\tbh=eBj+pKgYiSaozcPVipHM4ZJXOU0PorVTmg0LrnSe60Q=;\n\th=From:To:Cc:Subject:Date:In-Reply-To:References:From;\n\tb=Dsr6/x8fSawBJP7T7E7A/nHAtdVVF3JE4rKZhqTVtFcFuIa+vZ0x6Qt9cIefX9Vhy\n\tm3Jp7JHbXr7XQf1n3DRT2wbwMkC9dSE9Y81QaJ4i2lyVRQmm0qSO7YP+GDROiPy9D+\n\tBkqjm7fL/TmqVuQmCT3KRCXtSeWrMb5dO8IWmnTM=","From":"Kieran Bingham <kieran.bingham@ideasonboard.com>","To":"libcamera devel <libcamera-devel@lists.libcamera.org>","Date":"Mon, 13 Jul 2020 14:24:45 +0100","Message-Id":"<20200713132451.2944673-4-kieran.bingham@ideasonboard.com>","X-Mailer":"git-send-email 2.25.1","In-Reply-To":"<20200713132451.2944673-1-kieran.bingham@ideasonboard.com>","References":"<20200713132451.2944673-1-kieran.bingham@ideasonboard.com>","MIME-Version":"1.0","Subject":"[libcamera-devel] [PATCH 3/9] libcamera: pipeline: vivid: Create a\n\tCamera","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>","Cc":"Chris Ward <chris@gregariousmammal.com>","Content-Type":"text/plain; charset=\"us-ascii\"","Content-Transfer-Encoding":"7bit","Errors-To":"libcamera-devel-bounces@lists.libcamera.org","Sender":"\"libcamera-devel\" <libcamera-devel-bounces@lists.libcamera.org>"},"content":"Create a VividCameraData 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\"\"\"\nLIBCAMERA_LOG_LEVELS=Pipeline,VIVID:0 ./src/cam/cam -l\n[231:44:49.325333712] [2880028]  INFO IPAManager ipa_manager.cpp:136 libcamera is not installed. Adding '/home/libcamera/build-vivid/src/ipa' to the IPA search path\n[231:44:49.325428449] [2880028]  WARN IPAManager ipa_manager.cpp:147 No IPA found in '/usr/local/lib/x86_64-linux-gnu/libcamera'\n[231:44:49.325446253] [2880028]  INFO Camera camera_manager.cpp:283 libcamera v0.0.11+713-d175334d-dirty\nAvailable cameras:\n1: vivid\n\"\"\"\n\nSigned-off-by: Kieran Bingham <kieran.bingham@ideasonboard.com>\n---\n src/libcamera/pipeline/vivid/vivid.cpp | 54 +++++++++++++++++++++++++-\n 1 file changed, 52 insertions(+), 2 deletions(-)","diff":"diff --git a/src/libcamera/pipeline/vivid/vivid.cpp b/src/libcamera/pipeline/vivid/vivid.cpp\nindex 9811f6ef5095..a8922ce70ed4 100644\n--- a/src/libcamera/pipeline/vivid/vivid.cpp\n+++ b/src/libcamera/pipeline/vivid/vivid.cpp\n@@ -5,14 +5,46 @@\n  * vivid.cpp - Pipeline handler for the vivid capture device\n  */\n \n+#include <libcamera/camera.h>\n+\n #include \"libcamera/internal/device_enumerator.h\"\n #include \"libcamera/internal/log.h\"\n+#include \"libcamera/internal/media_device.h\"\n #include \"libcamera/internal/pipeline_handler.h\"\n+#include \"libcamera/internal/v4l2_videodevice.h\"\n \n namespace libcamera {\n \n LOG_DEFINE_CATEGORY(VIVID)\n \n+class VividCameraData : public CameraData\n+{\n+public:\n+\tVividCameraData(PipelineHandler *pipe, MediaDevice *media)\n+\t\t: CameraData(pipe), media_(media), video_(nullptr)\n+\t{\n+\t}\n+\n+\t~VividCameraData()\n+\t{\n+\t\tdelete video_;\n+\t}\n+\n+\tint init();\n+\n+\tMediaDevice *media_;\n+\tV4L2VideoDevice *video_;\n+\tStream stream_;\n+};\n+\n+class VividCameraConfiguration : public CameraConfiguration\n+{\n+public:\n+\tVividCameraConfiguration();\n+\n+\tStatus validate() override;\n+};\n+\n class PipelineHandlerVivid : public PipelineHandler\n {\n public:\n@@ -78,9 +110,27 @@ bool PipelineHandlerVivid::match(DeviceEnumerator *enumerator)\n \tif (!media)\n \t\treturn false;\n \n-\tLOG(VIVID, Debug) << \"Obtained Vivid Device\";\n+\tstd::unique_ptr<VividCameraData> data = std::make_unique<VividCameraData>(this, media);\n+\n+\t/* Locate and open the capture video node. */\n+\tif (data->init())\n+\t\treturn false;\n+\n+\t/* Create and register the camera. */\n+\tstd::set<Stream *> streams{ &data->stream_ };\n+\tstd::shared_ptr<Camera> camera = Camera::create(this, data->video_->deviceName(), streams);\n+\tregisterCamera(std::move(camera), std::move(data));\n+\n+\treturn true;\n+}\n+\n+int VividCameraData::init()\n+{\n+\tvideo_ = new V4L2VideoDevice(media_->getEntityByName(\"vivid-000-vid-cap\"));\n+\tif (video_->open())\n+\t\treturn -ENODEV;\n \n-\treturn false; // Prevent infinite loops for now\n+\treturn 0;\n }\n \n REGISTER_PIPELINE_HANDLER(PipelineHandlerVivid);\n","prefixes":["libcamera-devel","3/9"]}