メインコンテンツまでスキップ

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_fpssensor_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}