From patchwork Sat Jul 18 13:23:15 2020 Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 8bit X-Patchwork-Submitter: =?utf-8?q?Niklas_S=C3=B6derlund?= X-Patchwork-Id: 8849 Return-Path: X-Original-To: parsemail@patchwork.libcamera.org Delivered-To: parsemail@patchwork.libcamera.org Received: from lancelot.ideasonboard.com (lancelot.ideasonboard.com [92.243.16.209]) by patchwork.libcamera.org (Postfix) with ESMTPS id 3D2D1C0109 for ; Sat, 18 Jul 2020 13:23:35 +0000 (UTC) Received: from lancelot.ideasonboard.com (localhost [IPv6:::1]) by lancelot.ideasonboard.com (Postfix) with ESMTP id 429CB60589; Sat, 18 Jul 2020 15:23:34 +0200 (CEST) Received: from vsp-unauthed02.binero.net (vsp-unauthed02.binero.net [195.74.38.227]) by lancelot.ideasonboard.com (Postfix) with ESMTPS id 3A28D60493 for ; Sat, 18 Jul 2020 15:23:32 +0200 (CEST) X-Halon-ID: dc891b3a-c8f9-11ea-933e-005056917a89 Authorized-sender: niklas@soderlund.pp.se Received: from bismarck.berto.se (p4fca2eca.dip0.t-ipconnect.de [79.202.46.202]) by bin-vsp-out-01.atm.binero.net (Halon) with ESMTPA id dc891b3a-c8f9-11ea-933e-005056917a89; Sat, 18 Jul 2020 15:23:29 +0200 (CEST) From: =?utf-8?q?Niklas_S=C3=B6derlund?= To: libcamera-devel@lists.libcamera.org Date: Sat, 18 Jul 2020 15:23:15 +0200 Message-Id: <20200718132324.867815-1-niklas.soderlund@ragnatech.se> X-Mailer: git-send-email 2.27.0 MIME-Version: 1.0 Subject: [libcamera-devel] [PATCH 0/9] libcamera: camera: Add camera ID X-BeenThere: libcamera-devel@lists.libcamera.org X-Mailman-Version: 2.1.29 Precedence: list List-Id: List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , Errors-To: libcamera-devel-bounces@lists.libcamera.org Sender: "libcamera-devel" Hello, This series aims to add a ID to each camera in addition to it's more user-friendly name. The ID is unique and persistent between reboots of the same system. The use-case for this is to create a single machine-friendly ID that can be stored and used to always resolve to the same camera. The idea on how to generate a ID is to take the sysfs path of the sensor device which is part of each camera pipeline. As the path describes the location of the sensor hardware it is persistent across reboots and as the path is read from sysfs it's guaranteed to be unique in the system. For pipelines that do not have a sensor (UVC) the sysfs path of the main video device is used instead. That path resolves to the USB device and includes the USB bus information so it satisfy the ID requirements. While working with this problem it became apparent that two pipelines diverge from the others on how they name their cameras, raspberrypi and vimc. This series aligns these two and adds a helper to avoid such situations in the future. Unfortunately this means the user-friendly name of the sensor changes but this proves the need for a machine-friendly ID which luckily this series also adds :-) Before this series camera user-friendly names on different systems looked like this (I do not have access to a simple pipeline device): - ipu3 ov13858 8-0010 ov5670 10-0036 - raspberrypi imx219 - rkisp1 ov5695 7-0036 ov2685 7-003c - uvcvideo Logitech Webcam C930e - vimc VIMC Sensor B With this series applied the user-friendly names machine-friendly ID on the same systems look like this: The format is: () - ipu3 ov13858 8-0010 (pci0000:00/0000:00:15.2/i2c_designware.2/i2c-8/i2c-OVTID858:00) ov5670 10-0036 (pci0000:00/0000:00:19.2/i2c_designware.5/i2c-10/i2c-INT3479:00) - raspberrypi imx219 10-0010 (platform/soc/3f205000.i2c/i2c-11/i2c-10/10-0010) - rkisp1 ov5695 7-0036 (platform/ff160000.i2c/i2c-7/7-0036) ov2685 7-003c (platform/ff160000.i2c/i2c-7/7-003c) - uvcvideo Logitech Webcam C930e (pci0000:00/0000:00:1c.4/0000:08:00.0/0000:09:02.0/0000:25:00.0/usb3/3-2/3-2.4/3-2.4:1.0) - vimc Sensor B (platform/vimc.0) Where it previously where possible to select a camera by its user-friendly name its now possible to also select it using its machine-friendly one. The following is therefor two equivalent commands: $ cam -c "Logitech Webcam C930e" -C $ cam -c "pci0000:00/0000:00:1c.4/0000:08:00.0/0000:09:02.0/0000:25:00.0/usb3/3-2/3-2.4/3-2.4:1.0" -C Niklas Söderlund (9): libcamera: v4l2_device: Add method to lookup device path libcamera: camera_sensor: Expose a sensor ID libcamera: camera: Add camera ID libcamera: camera_manager: Enforce unique camera IDs libcamera: camera_manager: Try to match camera IDs first libcamera: pipeline: vimc: Align camera name libcamera: pipeline: raspberrypi: Align camera name libcamera: camera: Add create() that operates on CameraSensor cam: Print camera IDs when listing cameras include/libcamera/camera.h | 11 +++- include/libcamera/internal/camera_sensor.h | 2 + include/libcamera/internal/v4l2_device.h | 1 + src/cam/main.cpp | 3 +- src/libcamera/camera.cpp | 54 +++++++++++++++---- src/libcamera/camera_manager.cpp | 13 +++++ src/libcamera/camera_sensor.cpp | 17 ++++++ src/libcamera/pipeline/ipu3/ipu3.cpp | 9 ++-- .../pipeline/raspberrypi/raspberrypi.cpp | 3 +- src/libcamera/pipeline/rkisp1/rkisp1.cpp | 2 +- src/libcamera/pipeline/simple/simple.cpp | 3 +- src/libcamera/pipeline/uvcvideo/uvcvideo.cpp | 7 ++- src/libcamera/pipeline/vimc/vimc.cpp | 4 +- src/libcamera/v4l2_device.cpp | 27 ++++++++++ test/camera/buffer_import.cpp | 2 +- test/camera/capture.cpp | 2 +- test/camera/configuration_default.cpp | 2 +- test/camera/configuration_set.cpp | 2 +- test/camera/statemachine.cpp | 2 +- test/controls/control_info_map.cpp | 2 +- test/controls/control_list.cpp | 2 +- 21 files changed, 138 insertions(+), 32 deletions(-)