Blog:
在 iMX8 上使用 MIPI-CSI 摄像头

Donnerstag, 18. März 2021

NXP i.MX8QM/QP 处理器能够支持 2 路 4 lane 的 MIPI CSI-2 输入,每路最高为 4K@30 分辨率。文章接下来将使用 Apalis iMX8QM 计算机模块配合 e-con 提供的 MIPI CSI-2 摄像头 AR0521 进行演示。

E-con MIPI CSI-2 摄像头 AR0521 最高像素 2592 × 1944@28fps,模组集成 ISP。摄像头可以直接连接 Ixora 底板,连接方式如下。线材的卡扣很精密,安装时请小心操作。同时接触摄像头模组前,务必释放上手的静电,如触摸接地设备的金属机壳。

 

Apalis iMX8QM 的 Linux BSP 对摄像头提供无缝集成,只需简单的设置即可使用。这里我们使用 Toradex 最新的 nightly image。由于摄像头需要使用 gstreamer 组件,tdx-reference-multimedia-image 参考镜像包含了常用多媒体软件,该镜像可以直接用于测试摄像头。使用 Toradex Easy Installer 进行镜像安装。

安装完毕后修改计算机模块上的  /boot/overlays.txt 文件,通过 device tree overlay 启动 AR0521。在 overlays.txt 中添加 apalis-imx8_ar0521_overlay.dtbo。

root@apalis-imx8:~# cat /boot/overlays.txt 
fdt_overlays=apalis-imx8_hdmi_overlay.dtbo apalis-imx8_ar0521_overlay.dtbo

关闭 tdx-reference-multimedia-image 开机自启动的 Qt 演示程序。

root@apalis-imx8:~#  systemctl stop wayland-app-launch.service
root@apalis-imx8:~# sync
root@apalis-imx8:~# reboot

重启后可以看到 AR0521 被正确识别。

root@apalis-imx8:~# dmesg|grep ar0
[    3.654557] ar0521 5-0042: Current Firmware Version - (1150CU96RKV1901110d381894XXXXXXX)
[    8.709560] mx8-img-md: Registered sensor subdevice: ar0521 5-0042 (1)
[    8.729187] mx8-img-md: created link [ar0521 5-0042] => [mxc-mipi-csi2.1] 

  • 查看摄像头支持的格式

root@apalis-imx8:~# v4l2-ctl --device=/dev/video0 --list-formats-ext
ioctl: VIDIOC_ENUM_FMT
      Type: Video Capture Multiplanar

      [0]: 'UYVY' (UYVY 4:2:2)
              Size: Discrete 640x480
                      Interval: Discrete 0.013s (75.000 fps)
              Size: Discrete 1280x720
                      Interval: Discrete 0.010s (100.000 fps)
              Size: Discrete 1280x960
                      Interval: Discrete 0.013s (75.000 fps)
              Size: Discrete 1920x1080
                      Interval: Discrete 0.015s (65.000 fps)
              Size: Discrete 2560x1440
                      Interval: Discrete 0.026s (38.000 fps)
              Size: Discrete 2592x1944
                      Interval: Discrete 0.036s (28.000 fps)
      [1]: 'RGBP' (16-bit RGB 5-6-5)
      [2]: 'RGB3' (24-bit RGB 8-8-8)
      [3]: 'BGR3' (24-bit BGR 8-8-8)
      [4]: 'YUYV' (YUYV 4:2:2)
      [5]: 'YUV4' (32-bit A/XYUV 8-8-8-8)
      [6]: 'NV12' (Y/CbCr 4:2:0)
      [7]: 'YM24' (Planar YUV 4:4:4 (N-C))
      [8]: 'XR24' (32-bit BGRX 8-8-8-8)
      [9]: 'AR24' (32-bit BGRA 8-8-8-8)

  • 预览摄像头画面

root@apalis-imx8:~# gst-launch-1.0 v4l2src device='/dev/video0' ! video/x-raw,format=RGB16,width=1920,height=1080,framerate=30/1 ! waylandsink -v

此时可能需要旋转摄像头上镜头进行对焦,直到清晰地看到拍摄物体。

 

  • 录制摄像

root@apalis-imx8:~#  gst-launch-1.0 v4l2src device=/dev/video0 num-buffers=300 ! \
'video/x-raw,format=(string)NV12,width=1920,height=1080,framerate=(fraction)30/1' \

! queue ! v4l2h264enc ! avimux ! filesink location=test.avi

可以将 test.avi 视频文件复制到电脑上,使用 mediainfo 命令查看该文件的视频信息。

Gstreamer pipeline 还可以支持 zero-copy 方式处理数据。借助 zero-copy CPU 能够使用一个 element 产生的数据而无需重新复制,从而有效降低 CPU 负荷。使用 io-mode 参数开启 zero-copy,io-mode=dmabuf 会使用硬件 DMA。更多的说明请参考 i.MX 8 GStreamer User Guide

root@apalis-imx8:~#  gst-launch-1.0 v4l2src device=/dev/video0 num-buffers=300 io-mode=dmabuf ! \
'video/x-raw,format=(string)NV12,width=1920,height=1080,framerate=(fraction)30/1' ! queue ! \
v4l2h264enc output-io-mode=dmabuf-import ! avimux ! filesink location=test1.avi 

两种模式下 CPU 占用率从 101.7% 下降到 10.6%。

 

  • 播放视频文件

播放上面录制的 avi 视频文件

root@apalis-imx8:~#  gst-launch-1.0 filesrc location=test.avi ! \
h264parse ! v4l2h264dec ! imxvideoconvert_g2d ! queue ! waylandsink 

  • RTP 网络传输

Apalis iMX8QM 作为 RTP 服务器

root@apalis-imx8:~#  gst-launch-1.0 -v v4l2src device=/dev/video0 ! \
'video/x-raw,format=(string)NV12,width=1920,height=1080,framerate=(fraction)30/1' ! \
v4l2h264enc ! rtph264pay ! udpsink host=PC_IP

Ubuntu 电脑作为客户端查看视频。上面的 PC_IP 为电脑的 IP 地址。

$  gst-launch-1.0 udpsrc caps='application/x-rtp,media=(string)video, clock-rate=(int)90000, encoding-name=(string)H264, payload=(int)96' ! \
rtph264depay ! h264parse ! avdec_h264 ! videoconvert ! autovideosink

 

总结

本文简要地介绍了在 Apalis iMX8QM 使用 MIPI-CSI 摄像头的方法。不同的摄像头通常需要对应的驱动,并根据摄像头参数调整 gstreamer pipeline 配置,从而实现高效的采集、编解码、传输和存储。

Autor: 胡珊逢,FAE,韬睿(上海)

Kommentar hinterlassen

Ihre E-Mail-Adresse wird vertraulich behandelt. Mit Stern markierte Felder sind Plichtfelder. *



* Ihr Kommentar wird geprüft und anschliessend veröffentlicht. Besten Dank.

Ähnliche Blogs

Neuste Blogs

Mittwoch, 28. Juli 2021
Is Torizon OTA Safe From Power Loss?
Mittwoch, 7. Juli 2021
Modern Development Process for Embedded/IoT Devices
Mittwoch, 23. Juni 2021
Building a Video Surveillance System with Torizon
Have a Question?