MIPI CSI-2カメラ
camera.mipiプロバイダーは、Modalix ISPの背後にあるイメージセンサーを報告します。
mediaおよびvideo4linuxのueventで再スキャンします。
検出処理はデバイスノードを読み取り専用で開き、照会用のioctlのみを発行します。
フォーマットやリンクを設定することはなく、ストリーミングも行いません。
simaai-v4l2-vidドライバーの各/dev/mediaNは
MEDIA_IOC_G_TOPOLOGYで読み取られ、そのグラフ内の各MEDIA_ENT_F_CAM_SENSORエンティティが1台のカメラになります。
他のドライバーのメディアデバイス(たとえばuvcvideo)は無視されます。
識別情報
idはcamera:<sensor entity name>で、たとえばcamera:imx477 5-001aのように、
センサードライバー、I2Cバス、アドレスで構成されます。libcameraも同じ名前を使用するため、
これはCameraInputが受け付ける名前でもあります。
同じ名前を持つ2つのセンサー(たとえば2つのメディアデバイス上にある場合)は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 | リンクされている場合 | センサーのソースパッドのリンク先エンティティ。例:csidev-40c3000.csi |
sensor_timing | 読み取れる場合 | pixel_rate(ピクセル/秒)、hblank_min、vblank_min、width、height。センサーの/dev/v4l-subdevNから読み取ります |
max_fps | sensor_timingがある場合 | pixel_rate / ((width + hblank_min) * (height + vblank_min))。小数点以下2桁 |
sensor_timingは、センサーのサブデバイスインターフェース(/sys/dev/char/<major>:<minor>で名前を解決)から取得します。
内容は、リンクされたソースパッドのアクティブなフォーマット(VIDIOC_SUBDEV_G_FMT)、
現在のV4L2_CID_PIXEL_RATE、
およびV4L2_CID_HBLANKとV4L2_CID_VBLANKの最小値です。
いずれかが欠けている場合は省略されます。
ISP出力ノードは、isp_v4l2-vid-cap-outという名前で、
カードがarm-isp-outであるvideo4linuxエントリです。
複数存在する場合は、すべてに共通するモードのみが報告されます。
モード
モードはISPの出力フォーマットと離散サイズであり、
こ れはCameraInputがキャプチャできるものです。各モードにはformat(FourCC)、width、height、
およびisp_output: trueがあります。モードは、ISPがそのサイズの間隔を報告する場合にのみ、
USBカメラと同じ形式のframe_intervalsを持ちます。
DevKitのISPは間隔を報告しないため、そのモードにはフレームレートがありません。
max_fpsとsensor_timingがセンサーの上限を示します。
エラー
| コード | 発生条件 |
|---|---|
io.permission_denied | メディアデバイスを開けない(EACCES、EPERM)、または/devを一覧表示できない(EACCES) |
io.open | メディアデバイスのその他のオープンまたは照会の失敗 |
peripherals.discovery_failed | 名前のないセンサーエンティティ、または同じ名前を持つ2つのセンサー(idが衝突するため) |
スキャン中に消えたデバイスはスキップされます。ISPの失敗によってスキャンが失敗することはなく、
理由とともにispが利用不可になります。
例
Modalix DevKit上のIMX477の例です(モードは省略しています。全部で9つ: 3つのフォーマット×3つのサイズ)。グラフと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}