Перейти до основного вмісту

Камери MIPI CSI-2

Провайдер camera.mipi повідомляє про сенсори зображення за ISP Modalix. Він виконує повторне сканування за uevent media і video4linux. Виявлення відкриває вузли пристроїв лише для читання й надсилає тільки ioctl-запити; воно ніколи не встановлює формат чи зв’язок і ніколи не запускає потік.

Кожен /dev/mediaN драйвера simaai-v4l2-vid читається за допомогою MEDIA_IOC_G_TOPOLOGY, і кожна сутність MEDIA_ENT_F_CAM_SENSOR у його графі є однією камерою. Медіапристрої інших драйверів (наприклад, uvcvideo) ігноруються.

Ідентифікація​

id — це camera:<sensor entity name>, наприклад camera:imx477 5-001a: драйвер сенсора, шина I2C та адреса. libcamera використовує те саме ім’я, тож це також ім’я, яке приймає CameraInput. Два сенсори з однаковим ім’ям, наприклад на двох медіапристроях, мали б спільний id, тому натомість сканування завершується помилкою, у якій названо обидва медіапристрої.

Поля​

ПолеНаявністьЗначення
type, idзавждиcamera та ідентифікатор, описаний вище
backendзавждиmipi
modelякщо ім’я його міститьПерше слово імені сутності, наприклад imx477
availabilityзавжди{"state": "unknown", "reason": ...}: медіаконтролер не має стану володіння, доступного лише для читання
camera_nameзавждиІм’я сутності сенсора для передавання в CameraInput
media_deviceзавжди/dev/mediaN (лише для маршрутизації; не для ідентифікації)
bus_infoякщо повідомляєтьсяШина медіапристрою з MEDIA_IOC_DEVICE_INFO, наприклад platform:csi2video@1
ispзавжди{"state": "available", "device_path", "device_paths"} або {"state": "unavailable", "reason"} разом із modes: []
csi_receiverякщо є зв’язокСутність, з якою зв’язаний вихідний пад (source pad) сенсора, наприклад csidev-40c3000.csi
sensor_timingякщо вдається прочитатиpixel_rate (пікселів/с), hblank_min, vblank_min, width, height, прочитані з /dev/v4l-subdevN сенсора
max_fpsза наявності sensor_timingpixel_rate / ((width + hblank_min) * (height + vblank_min)), з точністю до двох знаків після коми

sensor_timing береться з інтерфейсу субпристрою сенсора (названого через /sys/dev/char/<major>:<minor>): активний формат зв’язаного вихідного пада (VIDIOC_SUBDEV_G_FMT), поточне значення V4L2_CID_PIXEL_RATE та мінімуми V4L2_CID_HBLANK і V4L2_CID_VBLANK. Поле пропускається, якщо будь-якого з них бракує.

Вихідні вузли ISP — це записи video4linux з іменем isp_v4l2-vid-cap-out і card arm-isp-out. Якщо їх кілька, повідомляються лише режими, спільні для всіх.

Режими​

Режими — це вихідні формати та дискретні розміри ISP, тобто те, що може захоплювати CameraInput. Кожен режим має format (FourCC), width, height і isp_output: true. Режим містить frame_intervals у тій самій формі, що й для USB-камер, лише якщо ISP повідомляє інтервали для свого розміру. ISP DevKit їх не повідомляє, тому його режими не мають частоти кадрів; max_fps і sensor_timing описують обмеження сенсора.

Помилки​

КодКоли
io.permission_deniedМедіапристрій неможливо відкрити (EACCES, EPERM) або неможливо отримати перелік вмісту /dev (EACCES)
io.openБудь-який інший збій відкриття медіапристрою або запиту до нього
peripherals.discovery_failedСутність сенсора без імені або два сенсори з однаковим ім’ям (їхні id збіглися б)

Пристрій, що зникає посеред сканування, пропускається. Збої ISP ніколи не спричиняють невдачу сканування; вони роблять isp недоступним із зазначенням причини.

Приклад​

IMX477 на Modalix DevKit зі скороченим переліком режимів (загалом дев’ять: три формати, три розміри). Граф і розміри ISP переписано з DevKit; значення таймінгів сенсора наведено так, як їх повідомляє DevKit, але вони покриті лише тестами.

{"type": "camera", "id": "camera:imx477 5-001a", "model": "imx477",
"availability": {"state": "unknown", "reason": "The media controller does not expose a reliable read-only ownership state; discovery does not acquire, configure, or stream from the camera."},
"modes": [{"format": "AR24", "width": 1920, "height": 1080, "isp_output": true},
{"format": "AR24", "width": 2048, "height": 1080, "isp_output": true}],
"backend": "mipi", "camera_name": "imx477 5-001a", "media_device": "/dev/media0",
"bus_info": "platform:csi2video@1",
"isp": {"state": "available", "device_path": "/dev/video1", "device_paths": ["/dev/video1"]},
"csi_receiver": "csidev-40c3000.csi",
"sensor_timing": {"pixel_rate": 840000000, "hblank_min": 9332, "vblank_min": 48,
"width": 1920, "height": 1080},
"max_fps": 66.18}