[libcamera-devel] [PATCH 0/9] libcamera: camera: Add camera ID
Niklas Söderlund
niklas.soderlund at ragnatech.se
Sat Jul 18 15:23:15 CEST 2020
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:
<user-friendly name> (<machine-friendly ID>)
- 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(-)
--
2.27.0
More information about the libcamera-devel
mailing list