Skip to main content
QCS6490IQ-9075-EVKIQ-8275-EVKIQ615稳定

MIPI CSI

多平台支持

GMSL

四路解串器

GStreamer

主要 API

V4L2

驱动 API

本页介绍如何将摄像头传感器连接到您的参考硬件平台,并提供可用 API 的相关信息。
在使用摄像头 API 之前,请确认目标平台正在运行受支持的 QLI 2.0 镜像。出厂镜像和 QLI 2.0 之前的镜像可能需要不同的摄像头支持和验证步骤。

01 · 设置摄像头

QCS6490 摄像头拓扑

默认摄像头模块
  • OV9282
  • IMX577

RB3G2 视觉夹层板:MIPI CSI

摄像头连接

连接方式:
  • OV9282 → CAM0A
  • IMX577 → CAM3

转接板上的 SW2300 DIP 开关

要使用视觉夹层板上的 CAM3 插槽,SW2300 开关 1 必须处于 OFF 状态。 这是默认状态。 CAM0A 无需任何 DIP 开关设置即可工作。

RB3G2 视觉夹层板:GMSL

视觉夹层板上有两个 GMSL 插槽:
  • GMSL1
  • GMSL2
重要
  • GMSL1 无需任何硬件设置即可工作
  • CAM3 CSI 与 GMSL2 共享同一 CSI 通路
  • 要使用 GMSL2,请将 SW2300 开关 1 设置为 ON
  • SW2300 开关 1 的默认状态为 OFF

RB3G2 转接板:MIPI CSI

摄像头连接

连接方式:
  • OV9282 → CAM1
  • IMX577 → CAM2

DIP 开关设置

将 CSI1_DIP_SW 和 CSI2_DIP_SW 设置为 ON,以使用转接板上的 CAM1 和 CAM2。 默认状态为 OFF。

支持的功能


02 · 选择流传输 API

Qualcomm Linux 为摄像头支持以下 API:

GStreamer API

GStreamer 是一个开源多媒体框架。Qualcomm 提供了 GStreamer 插件(qtiqmmfsrc),使开发者能够在应用程序中控制摄像头子系统。更多信息请参阅 Qualcomm GStreamer 插件。

V4L2 API

V4L2 是 Linux 内核中的一个框架,为视频捕获、视频输出和其他多媒体设备提供支持。开发者可以使用 V4L2 API 操作摄像头。V4L2 API 使用 CAMSS 驱动,适合只需要从摄像头获取原始图像的开发者。

03 · 使用 GStreamer API 进行摄像头流传输

gst-launch-1.0 是一个命令行 GStreamer 实用工具,用于构建和运行 GStreamer 管线。管线由一组带属性的元素组成,元素之间用感叹号(!)分隔。

前提条件

要使用 gst-launch-1.0 和 GStreamer 插件,请刷写 Config2 镜像。有关叠加(overlay)配置的详细信息,请参阅 Overlay Configurations。
使用 SSH 连接到设备控制台。有关说明,请参阅 How To SSH?。
1

🗑️ 清除 GStreamer 注册表

如果在启用摄像头叠加(overlay)之前执行过 GStreamer 命令,则在启用摄像头叠加之后必须清除 GStreamer 注册表。运行以下命令以清除注册表:
Terminal
2

📉 调整日志级别

摄像头用例应在性能(perf)构建上运行以获得最佳效果。在默认构建上,请按如下方式降低内核控制台日志级别:
Terminal
3

⚡ 为 cam-server 激活 Adreno OpenCL

在运行任何高级摄像头用例(如 SHDRv2、SHDRv3、Defog 等)之前,请将 cam-server systemd 服务配置为使用 Adreno OpenCL ICD 库。
1

🛠️ 打开服务覆盖配置

编辑 cam-server systemd 单元,使其可以加载自定义环境文件。
Terminal
在 [Service] 部分下添加以下行:
Terminal
保存并退出。
2

⚙️ 指向 Adreno OpenCL

设置 cam-server 使用的 OpenCL ICD 路径。
Terminal
3

🔄 重新加载并重启

应用更新后的服务配置并重启 cam-server。
Terminal

运行摄像头用例

确保 MIPI 摄像头已连接到 CSI 插槽。OV9282 MIPI 摄像头应连接到 CAM 0A 插槽,IMX577 MIPI 摄像头应连接到 CAM3 插槽。

单摄像头流启动

1

运行管线

在设备终端中运行以下命令:
GStreamer (Fakesink)
2

验证管线状态

此命令以 720p、30 FPS 的配置启动摄像头。来自摄像头传感器的帧会被 fakesink 丢弃。如果 gst 管线状态如下所示变为”PLAYING”,则表示摄像头正在运行。由于此命令将摄像头帧转储到 fakesink,因此设备上不会保存任何内容。
Log Output
要停止摄像头,请按 CTRL+C。

视频编码

1

运行管线

在设备终端中运行以下命令:
GStreamer (MP4 Record)
此命令以 720p、30 FPS 的配置启动摄像头,并在 h264 视频编码后将其保存为视频文件。如果 gst 管线状态变为”PLAYING”,则表示摄像头正在运行。要停止摄像头,请按 CTRL+C。
2

拉取录制内容

设备上会生成 /opt/mux_avc.mp4。可通过在主机 PC 上运行以下 scp 命令从设备拉取录制的内容:
SCP (SSH)

视频编码和快照

1

运行管线

在设备终端中运行以下命令:
GStreamer (Snapshot + Video)
2

浏览菜单

按 Enter。此命令会打印以下菜单并等待用户输入。
Menu
3

拍摄快照

使用以下菜单步骤在录制视频的同时拍摄快照。
Menu Steps
4

停止并获取文件

要停止摄像头,请按 Enter,再按 b(返回),然后按 q(退出)。录制的视频文件和快照图像保存在 /opt/ 中。可通过在主机 PC 上运行以下 scp 命令从设备拉取录制的内容:
SCP (SSH)

MIPI 多摄像头流传输

QCS6490 有五个 CSI PHY,可连接五个 MIPI 摄像头。QCS6490 有三个 IFE 和两个 IFE Lite。这意味着您可以使用 IFE 运行三个摄像头,使用 IFE Lite 运行两个摄像头。IFE Lite 仅支持从传感器进行原始(raw)转储。您可以将单色(mono)摄像头连接到 IFE Lite,转储原始帧,然后使用 CHI 节点将输出转换为 YUV 帧。要在 RB3 平台上验证五摄像头并发:
1

连接 MIPI 摄像头

按照下表连接 MIPI 摄像头。
2

并发运行所有五个摄像头的 GST 命令

对于 OV9282 单色摄像头,使用单独的摄像头管线(RealTimeMonoToYUV)。该管线使用 IFE Lite 转储原始帧,然后使用 CHI 节点将其转换为 YUV 帧。使用 GST 参数 ife-direct-stream=1 来使用此摄像头管线。由于它使用 IFE Lite 运行,因此这些摄像头上不会应用 2A。
QCS6490 的最大编码能力为 4K@30。因此,来自所有五个摄像头的总编码处理量必须低于 4k@30 的限制。
Cam 0: IMX577
GStreamer (Cam 0)
Cam 1: IMX577
GStreamer (Cam 1)
Cam 8: IMX577
GStreamer (Cam 8)
Cam 2: OV9282
GStreamer (Cam 2)
Cam 3: OV9282
GStreamer (Cam 3)

其他 GStreamer 示例

QIM SDK 包含摄像头 GStreamer 示例应用以及 AI/ML 和其他多媒体应用的示例应用。
在使用示例应用之前,请确保满足 gst-launch-1.0 和 GStreamer 插件的安装前提条件。
有关使用 gst-launch-1.0 的示例,请参阅多媒体用例示例。

04 · 使用 V4L2 API 进行摄像头流传输

要使用 V4L2 API,请刷写 Config1 镜像。有关叠加(overlay)配置的详细信息,请参阅 Overlay Configurations。
Linux 内核中的 V4L2 框架支持视频设备。它提供了一个 API,允许用户空间应用程序与摄像头和视频采集卡等设备进行交互。有关 V4L2 的更多信息,请访问 kernel.org。
Qualcomm 在上游内核中支持用于原始帧转储功能的 V4L2 接口摄像头 ISP 驱动。

CAMSS 驱动

上游内核中的 Qualcomm 摄像头子系统(CAMSS)驱动实现了 V4L2、媒体控制器和 V4L2 subdev 接口。支持在内核中使用 V4L2 subdev 接口的摄像头传感器。CAMSS 驱动由以下部分组成:
  • CSIPHY 模块 – 处理 CSI2 接收器的物理层。每个 CSIPHY 模块可以连接一个单独的摄像头传感器。
  • CSI 解码器(CSID)模块 – 处理 CSI2 接收器的协议层和应用层。CSID 可以解码来自任何 CSIPHY 的数据流。
  • 视频前端(VFE)模块 – 代表图像前端(IFE),其中包含绕过图像处理管线的原始转储接口(RDI)输入接口。VFE 还包含将输出数据写入内存的 AXI 总线接口。
CAMSS 驱动实现了 V4L2 接口。每个 CSIPHY、CSID 和 VFE 模块由一个单独的 V4L2 子设备表示。如下图所示,每个 CSIPHY 可以连接到每个 CSID。每个 CSID 可以连接到每个 VFE。每个 RDI 端口都有一个独立的视频节点。
CAMSS V4L2 驱动位于 <kernel_root>/drivers/media/platform/qcom/camss。<kernel_root> 是 Linux 内核的目录。

V4L2 示例应用 — Yavta

本节介绍如何使用支持 V4L2 接口的应用程序捕获原始帧数据。
将 IMX577 MIPI 摄像头传感器连接到 RB3 设备的 CAM3 插槽。
Yavta 默认作为镜像的一部分提供;无需显式安装。
1

验证 CAMSS 模块

IMX412 和 CAMSS 模块默认已加载。运行以下 lsmod 命令验证 qcom_camss 和 IMX412 模块是否已加载:
Verify Modules
预期结果是 IMX412 传感器驱动和 qcom_camss 摄像头子系统模块成功加载,确认上游摄像头软件栈处于活动状态。
2

检查媒体节点编号

运行以下命令以打印 CAMSS 驱动的媒体设备节点编号。如果 /dev/media0 未列出 qcom-camss 驱动,请尝试使用 /dev/media1。
Check Media Node
3

检查媒体设备图

运行以下命令检查媒体设备图:
Media Device Graph
4

查找传感器名称

运行以下命令将传感器名称打印到终端:
Find Sensor
5

配置媒体控制器

媒体控制器实用工具(media-ctrl)是一个 V4L2 实用工具,用于配置摄像头子系统的子设备。使用 media-ctl --help 打印使用信息。
将 [x] 替换为通过 :ref. <检查媒体节点编号> 找到的编号。例如,# media-ctl -d /dev/media1 --reset。
  1. 将所有链路重置为非活动状态:
    Reset Links
  2. 在管线节点上配置摄像头传感器格式和分辨率:
    Configure Sensor
  3. 以 4056x3040 分辨率配置 CSIPHY:
    Configure CSIPHY
  4. 以 4056x3040 分辨率配置 CSID:
    Configure CSID
  5. 以 3840x2160 分辨率配置 ISP:
    Configure ISP
  6. 链接管线:
    Link Pipeline
6

捕获图像

Yavta 测试应用使用 V4L2 接口验证摄像头。运行 Yavta 捕获图像:
Yavta Capture

V4L2 示例应用 — libcamera

libcamera 是一个开源软件框架。它负责控制 V4L2 摄像头接口,并向上层暴露原生 C++ API。应用程序和上层框架基于 libcamera 框架运行。有关 libcamera 架构的更多详细信息,请参阅 libcamera 架构。
libcamera 使用 cam 实用工具进行验证。

捕获原始帧数据

以下步骤介绍如何使用 V4L2 接口通过摄像头实用工具应用捕获原始帧数据。
将 IMX577 MIPI 摄像头传感器连接到 RB3 设备的 CAM3 插槽。
libcamera 默认作为镜像的一部分提供;无需显式安装。
1

验证 CAMSS 模块

IMX412 和 CAMSS 模块默认已加载。运行以下 lsmod 命令验证 qcom_camss 和 IMX412 模块是否已加载:
Verify Modules
2

删除 uncalibrated.yaml

请先运行 mount -o remount rw /usr,否则会因 Read-only file system 错误而失败。
Delete YAML
3

运行 cam 实用工具

Run cam Utility
这将运行该实用工具,在根目录中捕获 10 帧原始帧并将其保存到文件中。查看控制台日志消息以获取有关转储图像的分辨率和格式的信息。
Log Output

USB 摄像头

Qualcomm Linux 设备为符合 USB 视频类(UVC)标准的 USB 网络摄像头提供驱动支持。UVC 视频驱动将这些摄像头暴露为 V4L2 视频设备,可通过 /dev/videoX 等字符设备节点进行访问。有关 USB 摄像头的使用,请参阅 USB camera configuration。示例应用 gst-usb-single-camera-app 可用于 USB 摄像头验证。

网络摄像头

可以通过开源 GStreamer 插件支持网络摄像头。从网络获取摄像头流取决于 GStreamer 插件支持的网络协议。开发者可以使用开源 GStreamer 插件(例如 rtspsrc)来处理来自网络的摄像头流,并根据需要创建管线。有关插件详情,请参阅 rtspsrc。 示例应用 gst-ai-multistream-inference 也可用于网络摄像头验证。有关设置 Ethernet 网络连接的说明,请参阅 Bring up Ethernet。 有关在 Qualcomm 平台上开发 GStreamer 应用的信息,请参阅 Qualcomm Intelligent Multimedia SDK。