2398147_ja-JP

キャンセル
次の結果を表示 
表示  限定  | 次の代わりに検索 
もしかして: 

2398147_ja-JP

2398147_ja-JP

IMX95 Aquila ISP の使用状況

こんにちは、


私はAquila IMX95評価キット2を2つのov5640センサ(https://www.toradex.com/cart)搭載で購入しました。

センサのドライバは持っています。基板は正しくフラッシュされ、ISPモジュールもアクティブになっています。

root@imx95-1:~# lsmod | grep -i isp
neoisp 69632 0

カメラはlibcameraに表示されています。

root@imx95-1:~# libcamera
-sh: libcamera: command not found
root@imx95-1:~# cam -l
[17:17:31.010001558] [2747] INFO Camera camera_manager.cpp:327 libcamera v0.4.0+dirty (2026-06-03T11:26:44UTC)
[17:17:31.044088474] [2748] WARN CameraSensor camera_sensor_legacy.cpp:354 'ov5640 4-003c': Recommended V4L2 control 0x009a0922 not supported
[17:17:31.044159391] [2748] WARN CameraSensor camera_sensor_legacy.cpp:426 'ov5640 4-003c': The sensor kernel driver needs to be fixed
[17:17:31.044178224] [2748] WARN CameraSensor camera_sensor_legacy.cpp:428 'ov5640 4-003c': See Documentation/sensor_driver_requirements.rst in the libcamera sources for more information
[17:17:31.044882558] [2748] WARN CameraSensor camera_sensor_legacy.cpp:594 'ov5640 4-003c': Failed to retrieve the camera location
[17:17:31.044918891] [2748] WARN CameraSensor camera_sensor_legacy.cpp:616 'ov5640 4-003c': Rotation control not available, default to 0 degrees
[17:17:31.045722599] [2748] WARN CameraSensor camera_sensor_legacy.cpp:354 'ov5640 3-003c': Recommended V4L2 control 0x009a0922 not supported
[17:17:31.045762974] [2748] WARN CameraSensor camera_sensor_legacy.cpp:426 'ov5640 3-003c': The sensor kernel driver needs to be fixed
[17:17:31.045783849] [2748] WARN CameraSensor camera_sensor_legacy.cpp:428 'ov5640 3-003c': See Documentation/sensor_driver_requirements.rst in the libcamera sources for more information
[17:17:31.046362016] [2748] WARN CameraSensor camera_sensor_legacy.cpp:594 'ov5640 3-003c': Failed to retrieve the camera location
[17:17:31.046388308] [2748] WARN CameraSensor camera_sensor_legacy.cpp:616 'ov5640 3-003c': Rotation control not available, default to 0 degrees
[17:17:31.048068724] [2748] WARN V4L2 v4l2_pixelformat.cpp:346 Unsupported V4L2 pixel format AR30
[17:17:31.048640224] [2748] WARN V4L2 v4l2_pixelformat.cpp:346 Unsupported V4L2 pixel format AR30
[17:17:31.048904099] [2748] WARN V4L2 v4l2_pixelformat.cpp:346 Unsupported V4L2 pixel format AR30
[17:17:31.049145974] [2748] WARN V4L2 v4l2_pixelformat.cpp:346 Unsupported V4L2 pixel format AR30
[17:17:31.049451724] [2748] WARN V4L2 v4l2_pixelformat.cpp:346 Unsupported V4L2 pixel format AR30
[17:17:31.049694683] [2748] WARN V4L2 v4l2_pixelformat.cpp:346 Unsupported V4L2 pixel format AR30
[17:17:31.049937141] [2748] WARN V4L2 v4l2_pixelformat.cpp:346 Unsupported V4L2 pixel format AR30
[17:17:31.050184266] [2748] WARN V4L2 v4l2_pixelformat.cpp:346 Unsupported V4L2 pixel format AR30
[17:17:31.050477516] [2748] WARN V4L2 v4l2_pixelformat.cpp:346 Unsupported V4L2 pixel format AR30
[17:17:31.050720433] [2748] WARN V4L2 v4l2_pixelformat.cpp:346 Unsupported V4L2 pixel format AR30
[17:17:31.050962433] [2748] WARN V4L2 v4l2_pixelformat.cpp:346 Unsupported V4L2 pixel format AR30
[17:17:31.051201724] [2748] WARN V4L2 v4l2_pixelformat.cpp:346 Unsupported V4L2 pixel format AR30
[17:17:31.051441724] [2748] WARN V4L2 v4l2_pixelformat.cpp:346 Unsupported V4L2 pixel format AR30
[17:17:31.051683308] [2748] WARN V4L2 v4l2_pixelformat.cpp:346 Unsupported V4L2 pixel format AR30
[17:17:31.051925308] [2748] WARN V4L2 v4l2_pixelformat.cpp:346 Unsupported V4L2 pixel format AR30
[17:17:31.052259141] [2748] WARN V4L2 v4l2_pixelformat.cpp:346 Unsupported V4L2 pixel format AR30
[17:17:31.052510099] [2748] WARN V4L2 v4l2_pixelformat.cpp:346 Unsupported V4L2 pixel format AR30
[17:17:31.061185308] [2748] WARN V4L2 v4l2_pixelformat.cpp:346 Unsupported V4L2 pixel format AR30
[17:17:31.061469974] [2748] WARN V4L2 v4l2_pixelformat.cpp:346 Unsupported V4L2 pixel format AR30
[17:17:31.061736058] [2748] WARN V4L2 v4l2_pixelformat.cpp:346 Unsupported V4L2 pixel format AR30
[17:17:31.061988683] [2748] WARN V4L2 v4l2_pixelformat.cpp:346 Unsupported V4L2 pixel format AR30
[17:17:31.062242933] [2748] WARN V4L2 v4l2_pixelformat.cpp:346 Unsupported V4L2 pixel format AR30
[17:17:31.062489474] [2748] WARN V4L2 v4l2_pixelformat.cpp:346 Unsupported V4L2 pixel format AR30
[17:17:31.062733266] [2748] WARN V4L2 v4l2_pixelformat.cpp:346 Unsupported V4L2 pixel format AR30
[17:17:31.062980349] [2748] WARN V4L2 v4l2_pixelformat.cpp:346 Unsupported V4L2 pixel format AR30
[17:17:31.063228266] [2748] WARN V4L2 v4l2_pixelformat.cpp:346 Unsupported V4L2 pixel format AR30
[17:17:31.063470391] [2748] WARN V4L2 v4l2_pixelformat.cpp:346 Unsupported V4L2 pixel format AR30
[17:17:31.063712849] [2748] WARN V4L2 v4l2_pixelformat.cpp:346 Unsupported V4L2 pixel format AR30
[17:17:31.063953933] [2748] WARN V4L2 v4l2_pixelformat.cpp:346 Unsupported V4L2 pixel format AR30
[17:17:31.064216891] [2748] WARN V4L2 v4l2_pixelformat.cpp:346 Unsupported V4L2 pixel format AR30
[17:17:31.064463349] [2748] WARN V4L2 v4l2_pixelformat.cpp:346 Unsupported V4L2 pixel format AR30
[17:17:31.064706683] [2748] WARN V4L2 v4l2_pixelformat.cpp:346 Unsupported V4L2 pixel format AR30
[17:17:31.064958766] [2748] WARN V4L2 v4l2_pixelformat.cpp:346 Unsupported V4L2 pixel format AR30
[17:17:31.065200974] [2748] WARN V4L2 v4l2_pixelformat.cpp:346 Unsupported V4L2 pixel format AR30
Available cameras:
1: 'ov5640' (/base/soc/bus@42000000/i2c@42540000/camera@3c)
2: 'ov5640' (/base/soc/bus@42000000/i2c@426e0000/camera@3c)

MIPが正常に動作しているかどうかを確認するために、GStreamerパイプラインを起動したところ、両方のカメラで安定した30fpsのストリームを取得することができました。v4l2-ctlを使ってスナップショットを撮ることにも成功しました。


今、AquilaのISPをカメラでテストしてみたいと思っています。

https://www.nxp.com/docs/en/user-guide/UG10215.pdfに従って環境変数を追加しました。

root@imx95-1:~# export LIBCAMERA_PIPELINES_MATCH_LIST='nxp/neo'

しかし、そうするとlibcameraにカメラが検出されなくなり、なぜかはわかりません:

root@imx95-1:~# cam -l
[17:36:38.947430563] [2788] INFO Camera camera_manager.cpp:327 libcamera v0.4.0+dirty (2026-06-03T11:26:44UTC)
Available cameras:
root@imx95-1:~#

お返事ありがとうございます !


敬具

Re: IMX95 Aquila ISP usage

ログを見たところ、問題はMIPIインターフェースやOV5640ドライバ自体には関係ないと思います。

事実:

  • 両方のOV5640カメラはlibcameraによって検出されます
  • GStreamer は30fpsでストリーミング可能です
  • V4L2-CTLは画像を撮影できます

センサードライバー、I2C通信、 CSI-2 links、メディアトポロジーがすべて正常に動作していることを示します。

重要な点は、NXP Neo ISPパイプラインがRAWのBayerセンサー入力を想定していることです。

OV5640は独自の内部画像処理パイプラインを持つSoCイメージセンサーであり、NXP BSPでは通常、RAWバイヤーセンサーとしてではなくYUV出力モード(例:YUV422)で使用されます。このような構成では、カメラは標準のV4L2/libcameraパイプラインを通じて使用できますが、Neo ISPパイプラインの要件には合致しません。

これは以下の理由を説明するだろう。

  • `cam -l` はデフォルトで両方の OV5640 カメラを表示します
  • 設定後

export LIBCAMERA_PIPELINES_MATCH_LIST='nxp/neo'

カメラは検出されなくなりました

カメラはシステム内に存在しますが、NEOパイプラインハンドラーは互換性のあるカメラトポロジーを見つけられず、そのためlibcameraにはカメラが0台も露出します。

実際のセンサー出力フォーマットを確認するために、以下の出力を教えていただけますか:

「バッシュ」
media-ctl -p
V4L2-ctl --list-formats-ext
特に、センサーが以下のようなRAWバイヤーフォーマットを露出しているかどうかに関心があります:
SBGGR8
SBGGR10
SRGGB10
RG10
BA10
YUVフォーマット(例:YUYV/UYVY)のみが利用可能な場合、カメラはRAWモードで動作せず、Neo ISPパイプラインで処理できません。
OV5640ハードウェアはRAWバイヤー出力に対応していますが、BSPカメラドライバーではRAWサポートは一般的に有効ではなく、NXP Neo ISPスタックもセンサー固有のチューニングデータに依存しています。RAW出力が有効であっても、専用のOV5640チューニングプロファイルがないため、ISPの適切な動作(AE/AWB/画像品質チューニング)が妨げられる可能性があります。
もしNeo ISPフレームワーク自体を評価するのが目的なら、NXP ISPスタックで動作することが知られているセンサを使う方が簡単かもしれません。一般的な候補としては、以下のようなものがあります。

OS08A20
OX03C10
OX05B1S
AR0521
AR1335(追加の調整作業が必要になる場合があります)

上記のコマンドの出力を教えてもらえますか?これにより、現在のOV5640の設定がRAWベイヤーフォーマットをシステムに公開しているかどうかを確認できます。
よろしくお願いします、

Re: IMX95 Aquila ISP usage

ご返信ありがとうございます。

追加の確認を行いました。

  • おっしゃる通り、OV5640は最初は UYVYモードで動作していましたが、手動で1つのセンサーを RAWのBayer(SRGGB8)に切り替えました。
  • media-ctl -p は現在次のように表示します:
 
root@imx95-1:~# media-ctl -p
Media controller API version 6.12.55

Media device information
------------------------
driver          mxc-isi
model           FSL Capture Media Device
serial          
bus info        platform:4ad50000.isi
hw revision     0x0
driver version  6.12.55

Device topology
- entity 1: crossbar (13 pads, 11 links, 8 routes)
            type V4L2 subdev subtype Unknown flags 0
            device node name /dev/v4l-subdev0
	routes:
		2/0 -> 5/0 [ACTIVE]
		3/0 -> 6/0 [ACTIVE]
		2/0 -> 7/0 [ACTIVE]
		3/0 -> 8/0 [ACTIVE]
		2/0 -> 9/0 [ACTIVE]
		3/0 -> 10/0 [ACTIVE]
		2/0 -> 11/0 [ACTIVE]
		3/0 -> 12/0 [ACTIVE]
	pad0: SINK,MUST_CONNECT
	pad1: SINK,MUST_CONNECT
	pad2: SINK,MUST_CONNECT
		[stream:0 fmt:SRGGB8_1X8/1920x1080 field:none]
		<- "4ac10000.syscon:formatter@20":1 [ENABLED,IMMUTABLE]
	pad3: SINK,MUST_CONNECT
		[stream:0 fmt:UYVY8_1X16/1920x1080 field:none]
		<- "4ac10000.syscon:formatter@120":1 [ENABLED,IMMUTABLE]
	pad4: SINK,MUST_CONNECT
		<- "mxc_isi.output":0 [ENABLED,IMMUTABLE]
	pad5: SOURCE
		[stream:0 fmt:SRGGB8_1X8/1920x1080 field:none]
		-> "mxc_isi.0":0 [ENABLED,IMMUTABLE]
	pad6: SOURCE
		[stream:0 fmt:UYVY8_1X16/1920x1080 field:none]
		-> "mxc_isi.1":0 [ENABLED,IMMUTABLE]
	pad7: SOURCE
		[stream:0 fmt:SRGGB8_1X8/1920x1080 field:none]
		-> "mxc_isi.2":0 [ENABLED,IMMUTABLE]
	pad8: SOURCE
		[stream:0 fmt:UYVY8_1X16/1920x1080 field:none]
		-> "mxc_isi.3":0 [ENABLED,IMMUTABLE]
	pad9: SOURCE
		[stream:0 fmt:SRGGB8_1X8/1920x1080 field:none]
		-> "mxc_isi.4":0 [ENABLED,IMMUTABLE]
	pad10: SOURCE
		[stream:0 fmt:UYVY8_1X16/1920x1080 field:none]
		-> "mxc_isi.5":0 [ENABLED,IMMUTABLE]
	pad11: SOURCE
		[stream:0 fmt:SRGGB8_1X8/1920x1080 field:none]
		-> "mxc_isi.6":0 [ENABLED,IMMUTABLE]
	pad12: SOURCE
		[stream:0 fmt:UYVY8_1X16/1920x1080 field:none]
		-> "mxc_isi.7":0 [ENABLED,IMMUTABLE]

- entity 15: mxc_isi.0 (2 pads, 2 links, 0 routes)
             type V4L2 subdev subtype Unknown flags 0
             device node name /dev/v4l-subdev1
	pad0: SINK
		[stream:0 fmt:UYVY8_1X16/1920x1080 field:none
		 compose.bounds:(0,0)/1920x1080
		 compose:(0,0)/1920x1080]
		<- "crossbar":5 [ENABLED,IMMUTABLE]
	pad1: SOURCE
		[stream:0 fmt:YUV8_1X24/1920x1080 field:none
		 crop.bounds:(0,0)/1920x1080
		 crop:(0,0)/1920x1080]
		-> "mxc_isi.0.capture":0 [ENABLED,IMMUTABLE]

- entity 18: mxc_isi.0.capture (1 pad, 1 link)
             type Node subtype V4L flags 0
             device node name /dev/video2
	pad0: SINK
		<- "mxc_isi.0":1 [ENABLED,IMMUTABLE]

- entity 26: mxc_isi.1 (2 pads, 2 links, 0 routes)
             type V4L2 subdev subtype Unknown flags 0
             device node name /dev/v4l-subdev2
	pad0: SINK
		[stream:0 fmt:UYVY8_1X16/1920x1080 field:none
		 compose.bounds:(0,0)/1920x1080
		 compose:(0,0)/1920x1080]
		<- "crossbar":6 [ENABLED,IMMUTABLE]
	pad1: SOURCE
		[stream:0 fmt:YUV8_1X24/1920x1080 field:none
		 crop.bounds:(0,0)/1920x1080
		 crop:(0,0)/1920x1080]
		-> "mxc_isi.1.capture":0 [ENABLED,IMMUTABLE]

- entity 29: mxc_isi.1.capture (1 pad, 1 link)
             type Node subtype V4L flags 0
             device node name /dev/video3
	pad0: SINK
		<- "mxc_isi.1":1 [ENABLED,IMMUTABLE]

- entity 37: mxc_isi.2 (2 pads, 2 links, 0 routes)
             type V4L2 subdev subtype Unknown flags 0
             device node name /dev/v4l-subdev3
	pad0: SINK
		[stream:0 fmt:UYVY8_1X16/1920x1080 field:none colorspace:jpeg xfer:srgb ycbcr:601 quantization:full-range
		 compose.bounds:(0,0)/1920x1080
		 compose:(0,0)/1920x1080]
		<- "crossbar":7 [ENABLED,IMMUTABLE]
	pad1: SOURCE
		[stream:0 fmt:YUV8_1X24/1920x1080 field:none colorspace:jpeg xfer:srgb ycbcr:601 quantization:full-range
		 crop.bounds:(0,0)/1920x1080
		 crop:(0,0)/1920x1080]
		-> "mxc_isi.2.capture":0 [ENABLED,IMMUTABLE]

- entity 40: mxc_isi.2.capture (1 pad, 1 link)
             type Node subtype V4L flags 0
             device node name /dev/video4
	pad0: SINK
		<- "mxc_isi.2":1 [ENABLED,IMMUTABLE]

- entity 48: mxc_isi.3 (2 pads, 2 links, 0 routes)
             type V4L2 subdev subtype Unknown flags 0
             device node name /dev/v4l-subdev4
	pad0: SINK
		[stream:0 fmt:UYVY8_1X16/1920x1080 field:none colorspace:jpeg xfer:srgb ycbcr:601 quantization:full-range
		 compose.bounds:(0,0)/1920x1080
		 compose:(0,0)/1920x1080]
		<- "crossbar":8 [ENABLED,IMMUTABLE]
	pad1: SOURCE
		[stream:0 fmt:YUV8_1X24/1920x1080 field:none colorspace:jpeg xfer:srgb ycbcr:601 quantization:full-range
		 crop.bounds:(0,0)/1920x1080
		 crop:(0,0)/1920x1080]
		-> "mxc_isi.3.capture":0 [ENABLED,IMMUTABLE]

- entity 51: mxc_isi.3.capture (1 pad, 1 link)
             type Node subtype V4L flags 0
             device node name /dev/video5
	pad0: SINK
		<- "mxc_isi.3":1 [ENABLED,IMMUTABLE]

- entity 59: mxc_isi.4 (2 pads, 2 links, 0 routes)
             type V4L2 subdev subtype Unknown flags 0
             device node name /dev/v4l-subdev5
	pad0: SINK
		[stream:0 fmt:UYVY8_1X16/1920x1080 field:none colorspace:jpeg xfer:srgb ycbcr:601 quantization:full-range
		 compose.bounds:(0,0)/1920x1080
		 compose:(0,0)/1920x1080]
		<- "crossbar":9 [ENABLED,IMMUTABLE]
	pad1: SOURCE
		[stream:0 fmt:YUV8_1X24/1920x1080 field:none colorspace:jpeg xfer:srgb ycbcr:601 quantization:full-range
		 crop.bounds:(0,0)/1920x1080
		 crop:(0,0)/1920x1080]
		-> "mxc_isi.4.capture":0 [ENABLED,IMMUTABLE]

- entity 62: mxc_isi.4.capture (1 pad, 1 link)
             type Node subtype V4L flags 0
             device node name /dev/video6
	pad0: SINK
		<- "mxc_isi.4":1 [ENABLED,IMMUTABLE]

- entity 70: mxc_isi.5 (2 pads, 2 links, 0 routes)
             type V4L2 subdev subtype Unknown flags 0
             device node name /dev/v4l-subdev6
	pad0: SINK
		[stream:0 fmt:UYVY8_1X16/1920x1080 field:none colorspace:jpeg xfer:srgb ycbcr:601 quantization:full-range
		 compose.bounds:(0,0)/1920x1080
		 compose:(0,0)/1920x1080]
		<- "crossbar":10 [ENABLED,IMMUTABLE]
	pad1: SOURCE
		[stream:0 fmt:YUV8_1X24/1920x1080 field:none colorspace:jpeg xfer:srgb ycbcr:601 quantization:full-range
		 crop.bounds:(0,0)/1920x1080
		 crop:(0,0)/1920x1080]
		-> "mxc_isi.5.capture":0 [ENABLED,IMMUTABLE]

- entity 73: mxc_isi.5.capture (1 pad, 1 link)
             type Node subtype V4L flags 0
             device node name /dev/video7
	pad0: SINK
		<- "mxc_isi.5":1 [ENABLED,IMMUTABLE]

- entity 81: mxc_isi.6 (2 pads, 2 links, 0 routes)
             type V4L2 subdev subtype Unknown flags 0
             device node name /dev/v4l-subdev7
	pad0: SINK
		[stream:0 fmt:UYVY8_1X16/1920x1080 field:none colorspace:jpeg xfer:srgb ycbcr:601 quantization:full-range
		 compose.bounds:(0,0)/1920x1080
		 compose:(0,0)/1920x1080]
		<- "crossbar":11 [ENABLED,IMMUTABLE]
	pad1: SOURCE
		[stream:0 fmt:YUV8_1X24/1920x1080 field:none colorspace:jpeg xfer:srgb ycbcr:601 quantization:full-range
		 crop.bounds:(0,0)/1920x1080
		 crop:(0,0)/1920x1080]
		-> "mxc_isi.6.capture":0 [ENABLED,IMMUTABLE]

- entity 84: mxc_isi.6.capture (1 pad, 1 link)
             type Node subtype V4L flags 0
             device node name /dev/video8
	pad0: SINK
		<- "mxc_isi.6":1 [ENABLED,IMMUTABLE]

- entity 92: mxc_isi.7 (2 pads, 2 links, 0 routes)
             type V4L2 subdev subtype Unknown flags 0
             device node name /dev/v4l-subdev8
	pad0: SINK
		[stream:0 fmt:UYVY8_1X16/1920x1080 field:none colorspace:jpeg xfer:srgb ycbcr:601 quantization:full-range
		 compose.bounds:(0,0)/1920x1080
		 compose:(0,0)/1920x1080]
		<- "crossbar":12 [ENABLED,IMMUTABLE]
	pad1: SOURCE
		[stream:0 fmt:YUV8_1X24/1920x1080 field:none colorspace:jpeg xfer:srgb ycbcr:601 quantization:full-range
		 crop.bounds:(0,0)/1920x1080
		 crop:(0,0)/1920x1080]
		-> "mxc_isi.7.capture":0 [ENABLED,IMMUTABLE]

- entity 95: mxc_isi.7.capture (1 pad, 1 link)
             type Node subtype V4L flags 0
             device node name /dev/video9
	pad0: SINK
		<- "mxc_isi.7":1 [ENABLED,IMMUTABLE]

- entity 103: mxc_isi.output (1 pad, 1 link)
              type Node subtype V4L flags 0
	pad0: SOURCE
		-> "crossbar":4 [ENABLED,IMMUTABLE]

- entity 110: 4ac10000.syscon:formatter@120 (2 pads, 2 links, 1 route)
              type V4L2 subdev subtype Unknown flags 0
              device node name /dev/v4l-subdev9
	routes:
		0/0 -> 1/0 [ACTIVE]
	pad0: SINK
		[stream:0 fmt:UYVY8_1X16/1920x1080 field:none]
		<- "csidev-4ad40000.csi":1 [ENABLED,IMMUTABLE]
	pad1: SOURCE
		[stream:0 fmt:UYVY8_1X16/1920x1080 field:none]
		-> "crossbar":3 [ENABLED,IMMUTABLE]

- entity 115: 4ac10000.syscon:formatter@20 (2 pads, 2 links, 1 route)
              type V4L2 subdev subtype Unknown flags 0
              device node name /dev/v4l-subdev10
	routes:
		0/0 -> 1/0 [ACTIVE]
	pad0: SINK
		[stream:0 fmt:SRGGB8_1X8/1920x1080]
		<- "csidev-4ad30000.csi":1 [ENABLED,IMMUTABLE]
	pad1: SOURCE
		[stream:0 fmt:SRGGB8_1X8/1920x1080]
		-> "crossbar":2 [ENABLED,IMMUTABLE]

- entity 120: csidev-4ad30000.csi (2 pads, 2 links, 1 route)
              type V4L2 subdev subtype Unknown flags 0
              device node name /dev/v4l-subdev11
	routes:
		0/0 -> 1/0 [ACTIVE]
	pad0: SINK
		[stream:0 fmt:SRGGB8_1X8/1920x1080 colorspace:srgb xfer:srgb ycbcr:601 quantization:full-range]
		<- "ov5640 4-003c":0 [ENABLED]
	pad1: SOURCE
		[stream:0 fmt:SRGGB8_1X8/1920x1080 colorspace:srgb xfer:srgb ycbcr:601 quantization:full-range]
		-> "4ac10000.syscon:formatter@20":0 [ENABLED,IMMUTABLE]

- entity 125: csidev-4ad40000.csi (2 pads, 2 links, 1 route)
              type V4L2 subdev subtype Unknown flags 0
              device node name /dev/v4l-subdev12
	routes:
		0/0 -> 1/0 [ACTIVE]
	pad0: SINK
		[stream:0 fmt:UYVY8_1X16/1920x1080 field:none]
		<- "ov5640 3-003c":0 [ENABLED]
	pad1: SOURCE
		[stream:0 fmt:UYVY8_1X16/1920x1080 field:none]
		-> "4ac10000.syscon:formatter@120":0 [ENABLED,IMMUTABLE]

- entity 130: ov5640 4-003c (1 pad, 1 link, 0 routes)
              type V4L2 subdev subtype Sensor flags 0
              device node name /dev/v4l-subdev13
	pad0: SOURCE
		[stream:0 fmt:SRGGB8_1X8/1920x1080@1/30 colorspace:srgb xfer:srgb ycbcr:601 quantization:full-range
		 crop.bounds:(0,0)/2624x1964
		 crop:(336,434)/1952x1088]
		-> "csidev-4ad30000.csi":0 [ENABLED]

- entity 134: ov5640 3-003c (1 pad, 1 link, 0 routes)
              type V4L2 subdev subtype Sensor flags 0
              device node name /dev/v4l-subdev14
	pad0: SOURCE
		[stream:0 fmt:UYVY8_1X16/1920x1080@1/30 field:none colorspace:srgb xfer:srgb ycbcr:601 quantization:full-range
		 crop.bounds:(0,0)/2624x1964
		 crop:(336,434)/1952x1088]
		-> "csidev-4ad40000.csi":0 [ENABLED]

(比較のため、2台目のOV5640はUYVYモードのままです)

SO :
  • OV5640 -> SRGGB8
  • CSI -> SRGGB8
  • フォーマッター -> SRGGB8
  • クロスバー -> SRGGB8

=> RAWバイエルはセンサ、CSI、フォーマタを通じて正常に伝播されています。


neoispカーネルモジュールがロードされました。

root@imx95-1:~# modprobe neoisp
root@imx95-1:~# lsmod | grep -i isp
neoisp                 69632  0

実行中のデバイスツリーにISPノードが存在します。

 
/sys/firmware/devicetree/base/soc/isp@4ae00000
 

=> しかし、CSI/Formatter/ISIパイプラインを公開しているメディアデバイス(/dev/media0)は1台だけです。メディアグラフにはneoispのエンティティは現れません。メディアのグラフにneoispの存在は見当たりませんし、これが予想されるものなのかも分かりません。

=> cam -l (libcamera) を実行しても、利用可能なカメラは返されません。


現時点ではRAWのBayerパスは機能しているようですが、Neo ISPがどこでアクティブなパイプラインの一部になるのかは特定できません。

 
ストリームが実際にNeo ISPによって処理されているか、単にCSI -> Formatter -> ISI経路をたどるのではなく、どうやって確認できますか?
 
また、 https://www.nxp.com/docs/en/user-guide/UG10215.pdf も参照してください。この構成に関する推奨ガイドはまだありますか?それとも、i.MX95 上で OV5640 + Neo ISP を使用するためのより具体的な参考資料はありますか?
 
 
 
敬具
Re: IMX95 Aquila ISP usage

現時点で私が疑っているのは、以下のいずれかが起こっているということです。

  1. OV5640はRAWベイヤーモードではなく、YUVモードで動作している可能性が高い。
  2. カメラのDTオーバーレイは、ISP対応バージョンではありません
  3. Neo IPA/キャリブレーションコンポーネントがルートファイルシステムに存在しません
  4. Neoパイプラインで見られるメディアトポロジーは、期待されるi.MX95のISPグラフと一致しません。

media-ctl -pの出力は通常、どちらが実際の問題かを特定します。

Re: IMX95 Aquila ISP usage

こんにちは!


出力結果は以下のとおりです。

root@imx95-1:~# v4l2-ctl --list-formats-ext -d /dev/video2
ioctl: VIDIOC_ENUM_FMT
	Type: Video Capture Multiplanar


	[0]: 'YUYV' (YUYV 4:2:2, csc-colorspace, csc-ycbcr, csc-quantization, csc-xfer-func)
		Size: Stepwise 1x1 - 4096x8191 with step 1/1
	[1]: 'YUVA' (32-bit YUVA 8-8-8-8, csc-colorspace, csc-ycbcr, csc-quantization, csc-xfer-func)
		Size: Stepwise 1x1 - 4096x8191 with step 1/1
	[2]: 'NV12' (Y/UV 4:2:0, csc-colorspace, csc-ycbcr, csc-quantization, csc-xfer-func)
		Size: Stepwise 2x2 - 4096x8190 with step 2/2
	[3]: 'NM12' (Y/UV 4:2:0 (N-C), csc-colorspace, csc-ycbcr, csc-quantization, csc-xfer-func)
		Size: Stepwise 2x2 - 4096x8190 with step 2/2
	[4]: 'NV16' (Y/UV 4:2:2, csc-colorspace, csc-ycbcr, csc-quantization, csc-xfer-func)
		Size: Stepwise 2x1 - 4096x8191 with step 2/1
	[5]: 'NM16' (Y/UV 4:2:2 (N-C), csc-colorspace, csc-ycbcr, csc-quantization, csc-xfer-func)
		Size: Stepwise 2x1 - 4096x8191 with step 2/1
	[6]: 'YM24' (Planar YUV 4:4:4 (N-C), csc-colorspace, csc-ycbcr, csc-quantization, csc-xfer-func)
		Size: Stepwise 1x1 - 4096x8191 with step 1/1
	[7]: 'RGBP' (16-bit RGB 5-6-5, csc-colorspace, csc-ycbcr, csc-quantization, csc-xfer-func)
		Size: Stepwise 1x1 - 4096x8191 with step 1/1
	[8]: 'RGB3' (24-bit RGB 8-8-8, csc-colorspace, csc-ycbcr, csc-quantization, csc-xfer-func)
		Size: Stepwise 1x1 - 4096x8191 with step 1/1
	[9]: 'BGR3' (24-bit BGR 8-8-8, csc-colorspace, csc-ycbcr, csc-quantization, csc-xfer-func)
		Size: Stepwise 1x1 - 4096x8191 with step 1/1
	[10]: 'XR24' (32-bit BGRX 8-8-8-8, csc-colorspace, csc-ycbcr, csc-quantization, csc-xfer-func)
		Size: Stepwise 1x1 - 4096x8191 with step 1/1
	[11]: 'AR24' (32-bit BGRA 8-8-8-8, csc-colorspace, csc-ycbcr, csc-quantization, csc-xfer-func)
		Size: Stepwise 1x1 - 4096x8191 with step 1/1
	[12]: 'RA24' (32-bit ABGR 8-8-8-8, csc-colorspace, csc-ycbcr, csc-quantization, csc-xfer-func)
		Size: Stepwise 1x1 - 4096x8191 with step 1/1
	[13]: 'AB24' (32-bit RGBA 8-8-8-8, csc-colorspace, csc-ycbcr, csc-quantization, csc-xfer-func)
		Size: Stepwise 1x1 - 4096x8191 with step 1/1
	[14]: 'RX24' (32-bit XBGR 8-8-8-8, csc-colorspace, csc-ycbcr, csc-quantization, csc-xfer-func)
		Size: Stepwise 1x1 - 4096x8191 with step 1/1
	[15]: 'XB24' (32-bit RGBX 8-8-8-8, csc-colorspace, csc-ycbcr, csc-quantization, csc-xfer-func)
		Size: Stepwise 1x1 - 4096x8191 with step 1/1
	[16]: 'AR30' (32-bit ARGB 2-10-10-10, csc-colorspace, csc-ycbcr, csc-quantization, csc-xfer-func)
		Size: Stepwise 1x1 - 4096x8191 with step 1/1
	[17]: 'GREY' (8-bit Greyscale, csc-colorspace, csc-ycbcr, csc-quantization, csc-xfer-func)
		Size: Stepwise 1x1 - 4096x8191 with step 1/1
	[18]: 'Y10 ' (10-bit Greyscale, csc-colorspace, csc-ycbcr, csc-quantization, csc-xfer-func)
		Size: Stepwise 1x1 - 4096x8191 with step 1/1
	[19]: 'Y12 ' (12-bit Greyscale, csc-colorspace, csc-ycbcr, csc-quantization, csc-xfer-func)
		Size: Stepwise 1x1 - 4096x8191 with step 1/1
	[20]: 'Y14 ' (14-bit Greyscale, csc-colorspace, csc-ycbcr, csc-quantization, csc-xfer-func)
		Size: Stepwise 1x1 - 4096x8191 with step 1/1
	[21]: 'BA81' (8-bit Bayer BGBG/GRGR, csc-colorspace, csc-ycbcr, csc-quantization, csc-xfer-func)
		Size: Stepwise 1x1 - 4096x8191 with step 1/1
	[22]: 'GBRG' (8-bit Bayer GBGB/RGRG, csc-colorspace, csc-ycbcr, csc-quantization, csc-xfer-func)
		Size: Stepwise 1x1 - 4096x8191 with step 1/1
	[23]: 'GRBG' (8-bit Bayer GRGR/BGBG, csc-colorspace, csc-ycbcr, csc-quantization, csc-xfer-func)
		Size: Stepwise 1x1 - 4096x8191 with step 1/1
	[24]: 'RGGB' (8-bit Bayer RGRG/GBGB, csc-colorspace, csc-ycbcr, csc-quantization, csc-xfer-func)
		Size: Stepwise 1x1 - 4096x8191 with step 1/1
	[25]: 'BG10' (10-bit Bayer BGBG/GRGR, csc-colorspace, csc-ycbcr, csc-quantization, csc-xfer-func)
		Size: Stepwise 1x1 - 4096x8191 with step 1/1
	[26]: 'GB10' (10-bit Bayer GBGB/RGRG, csc-colorspace, csc-ycbcr, csc-quantization, csc-xfer-func)
		Size: Stepwise 1x1 - 4096x8191 with step 1/1
	[27]: 'BA10' (10-bit Bayer GRGR/BGBG, csc-colorspace, csc-ycbcr, csc-quantization, csc-xfer-func)
		Size: Stepwise 1x1 - 4096x8191 with step 1/1
	[28]: 'RG10' (10-bit Bayer RGRG/GBGB, csc-colorspace, csc-ycbcr, csc-quantization, csc-xfer-func)
		Size: Stepwise 1x1 - 4096x8191 with step 1/1
	[29]: 'BG12' (12-bit Bayer BGBG/GRGR, csc-colorspace, csc-ycbcr, csc-quantization, csc-xfer-func)
		Size: Stepwise 1x1 - 4096x8191 with step 1/1
	[30]: 'GB12' (12-bit Bayer GBGB/RGRG, csc-colorspace, csc-ycbcr, csc-quantization, csc-xfer-func)
		Size: Stepwise 1x1 - 4096x8191 with step 1/1
	[31]: 'BA12' (12-bit Bayer GRGR/BGBG, csc-colorspace, csc-ycbcr, csc-quantization, csc-xfer-func)
		Size: Stepwise 1x1 - 4096x8191 with step 1/1
	[32]: 'RG12' (12-bit Bayer RGRG/GBGB, csc-colorspace, csc-ycbcr, csc-quantization, csc-xfer-func)
		Size: Stepwise 1x1 - 4096x8191 with step 1/1
	[33]: 'BG14' (14-bit Bayer BGBG/GRGR, csc-colorspace, csc-ycbcr, csc-quantization, csc-xfer-func)
		Size: Stepwise 1x1 - 4096x8191 with step 1/1
	[34]: 'GB14' (14-bit Bayer GBGB/RGRG, csc-colorspace, csc-ycbcr, csc-quantization, csc-xfer-func)
		Size: Stepwise 1x1 - 4096x8191 with step 1/1
	[35]: 'GR14' (14-bit Bayer GRGR/BGBG, csc-colorspace, csc-ycbcr, csc-quantization, csc-xfer-func)
		Size: Stepwise 1x1 - 4096x8191 with step 1/1
	[36]: 'RG14' (14-bit Bayer RGRG/GBGB, csc-colorspace, csc-ycbcr, csc-quantization, csc-xfer-func)
		Size: Stepwise 1x1 - 4096x8191 with step 1/1
	[37]: 'BYR2' (16-bit Bayer BGBG/GRGR, csc-colorspace, csc-ycbcr, csc-quantization, csc-xfer-func)
		Size: Stepwise 1x1 - 4096x8191 with step 1/1
	[38]: 'GB16' (16-bit Bayer GBGB/RGRG, csc-colorspace, csc-ycbcr, csc-quantization, csc-xfer-func)
		Size: Stepwise 1x1 - 4096x8191 with step 1/1
	[39]: 'GR16' (16-bit Bayer GRGR/BGBG, csc-colorspace, csc-ycbcr, csc-quantization, csc-xfer-func)
		Size: Stepwise 1x1 - 4096x8191 with step 1/1
	[40]: 'RG16' (16-bit Bayer RGRG/GBGB, csc-colorspace, csc-ycbcr, csc-quantization, csc-xfer-func)
		Size: Stepwise 1x1 - 4096x8191 with step 1/1
	[41]: 'MJPG' (Motion-JPEG, compressed, csc-colorspace, csc-ycbcr, csc-quantization, csc-xfer-func)
		Size: Stepwise 1x1 - 4096x8191 with step 1/1

私の理解が正しければ、このカメラはRAWベイヤー形式で撮影できるはずなので、私もそのように設定しました(正しく設定できていればいいのですが)。

別のイメージを使って再度フラッシュしてみて、問題がそのあたりにあるかどうか確認してみます。


敬具

Re: IMX95 Aquila ISP usage

最新情報のご提供ありがとうございます。The v4l2-ctl outputはISIキャプチャノードがRAWバイエルフォーマットをサポートしていることを確認しており、前のメッセージの media-ctl -p outputはすでにRAWバイエルパスがパイプライン内で正しく伝播していることを示しています:

OV5640 (SRGGB8) -> CSI (SRGGB8) -> フォーマッタ (SRGGB8) -> クロスバー (SRGGB8)

つまり、センサー側の構成は正しいように見えます。

現在の核心的な問題は、 neoisp モジュールが読み込まれているものの、プレスリリース、製品ニュースグラフに表示されず、 /dev/media1 が作成されていないことです。これは通常、 neoisp ドライバがカーネルモジュールとしては正常にロードされたが、デバイスプローブ中に失敗し、プレスリリース、製品ニュースデバイスの登録ができなくなることを意味します。

以下の診断情報を教えていただけますか?

# Neoispプローブの状態を
確認 dmesg |grep -i neoisp
dmesg |grep -i "isp@4ae"
 DMESG |grep -i 「プローブ失敗」
DMESG |grep -i "4ae00000"

# 利用可能なプレスリリース、製品ニュース機器を
ls -la /dev/プレスリリース、製品ニュース*

# sysfs  neoisp ステータスを確認してください 
ls /sys/bus/プラットフォーム/ドライバ/nxp-neoisp/
cat /sys/firmware/devicetree/base/soc/isp@4ae00000/status

並行してお聞きしたいのですが、NXP Neo ISPスタックで公式にサポートされている以下のセンサのいずれかに、完全なチューニングプロファイルでアクセスできますか?

  • OS08A20
  • OX03C10
  • OX05B1S

これらのセンサのいずれかでテストすることで、Neo ISPドライバ自体が環境で正しく動作しているかを迅速に確認でき、問題がドライバや環境に関係するのか、OV5640特有のものかを特定するのに役立ちます。

OV5640はRAWのBayer出力が可能ですが、公式のNXP Neo ISPチューニングプロファイルは持っておらず、パイプラインが正しくコネクテッドされていてもAE/AWBや画像品質チューニングは利用できません。

Re: IMX95 Aquila ISP usage

最新情報:
社内で調査した結果、OV5640とi.MX95 NeoのISPパイプラインに関して以下の所見をお伝えしたいと思います。
OV5640はRAWのバイエルデータの出力が可能ですが、以下の理由から一般的にOV5640+Neo ISPの組み合わせは新しいデザインに推奨しません。

OV5640はすでに寿命切れ(EOL)センサです。
RAW出力はサポートされていますが、センサ自体は最新のRAWセンサに比べて調整可能なコントロールが限られています。
NXPのi.MX95リファレンスカメラソリューションは、すでにNeo ISPソフトウェアフレームワーク内でサポート・検証されているOS08A20などのRAWセンサに基づいています。

したがって、弊社の推奨案は以下のいずれかとなります。

OV5640を既存の画像プロセッシングパスと併用してください(Neo ISP AE/AWBチューニング機能に依存しません)。
Neo ISPのフル機能が必要な場合は、NXP対応のRAWセンサー(OS08A20など)を使用してください。
もしOV5640をNeo ISPパイプラインで使用する必要がある場合は、追加のソフトウェアエンイネーブルメント作業が必要となります。

OV5640 + Neo ISP方式の場合、libcamera CameraHelperを実装する必要があります。以下のファイルが開始参照として使用できます:
camera_helper_ov5640.cpp
https://github.com/nxp-imx/libcamera/blob/lf-6.6.52_2.2.0/src/ipa/nxp/cam_helper/camera_helper_ov564...


このCameraHelperの実装は、あくまでも第一歩に過ぎないことにご注意ください。主な目的は、libcameraがOV5640センサーを認識し識別できるようにすることです。追加のセンサー特有の適応は依然として必要です。
例えば、Neo ISP 車載 Exposure(AE)が動作すると予想される場合、センサの利得変換関数などのAPIを実装する必要があります。IMX219 CameraHelperの実装に簡単な例があります:
https://github.com/nxp-imx/libcamera/blob/lf-6.18.20_2.0.0/src/ipa/nxp/cam_helper/camera_helper_imx2...
特に、顧客は以下の間のマッピングを決定し実装する必要があります:

センサーゲインコード
実アナログゲイン乗算器(ゲイン値)

これにより、Neo ISP AEアルゴリズムがセンサの露出と利得を正しく制御できるようにしています。
CameraHelperの開発の詳細については、カメラ移植ガイドをご参照ください:
セクション5.3 – 「新しいセンサのためのlibcamera CameraHelperの実装」
OV5640の特別な考慮点の一つは、すでに独自のAE機能を備えています。したがって、Neo ISP AEアルゴリズムの代わりにセンサ内部AEを継続使用する意図がある場合、gainCodeToGain()やgainToGainCode()などの実装は必ずしも必要とは限りません。この場合、センサ検出専用の基本的なCameraHelperでパイプラインを起動するのに十分かもしれません。
しかし、画像品質の調整は評価と調整が必要です。OV5640は元々Neo ISP基準センサとして特性評価・調整されていなかったため、最適な画像品質を得るために追加のISPチューニング作業が必要になる場合があります。

全体として、OV5640のRAW出力はi.MX95 Neo ISPパイプラインに接続可能ですが、センサー固有のlibcameraやISP統合作業が期待されています。新しい開発については、可能な限りNeo ISP認証済みRAWセンサー(OS08A20など)を使用することを推奨します。


Re: IMX95 Aquila ISP usage

前回の議論に続き、Neo ISPパイプラインがOV5640センサーを認識できない根本原因を調査しました。

問題は、NXP Neo IPA(Image プロセッシング Algorithm)フレームワークがa CameraHelper factoryを使って、カーネルのV4L2サブ開発モデル文字列を照合してセンサ固有のゲイン/露出アルゴリズムを調べていることです。CameraHelper "ov5640" に登録されていなかったため、工場出荷時は nullptr が戻り、ISPパイプラインはこのセンサに設定できませんでした。

これに対処するため、 CameraHelper をOV5640センサ用にNXPカーネルドライバ(drivers/media/i2c/ov5640.c)に基づく実装しました

ゲインレジスタのマッピング:

  • 登録する: OV5640_REG_AEC_PK_REAL_GAIN ( 0x350a )、10ビット値
  • 形式: Q6.4 固定小数点、ユニティゲイン = 16
  • gainCode(g) = round(g * 16)
  • ゲイン(コード) = コード / 16.0

2つのファイルが変更されました。

  1. camera_helper_ov5640.cpp – OV5640用の新しいCameraHelper実装で、カーネルのサブ開発モデル文字列に合わせて "ov5640 " として登録
  2. メソンビルド - 追加した camera_helper_ov5640.cpp ビルドソースリストへ

これらの2つのファイルを使用してlibcameraを再構築し、再度試してください。 LIBCAMERA_PIPELINES_MATCH_LIST='nxp/neo' 。Neo ISPパイプラインは今後OV5640センサーを見つけて設定できるようになるはずです。

なお、これによりゲイン/露出制御パスは有効になりますが、OV5640用の完全なISPチューニングプロファイル(AE/AWBパラメータ)はまだ利用できません。画像品質調整にはさらなる作業が必要かもしれません。

再建後の結果をお知らせください。

タグ(1)
評価なし
バージョン履歴
最終更新日:
2 週間前
更新者: