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

MIPI CSI

多平台支持

GMSL

四路解串器

GStreamer

主要 API

V4L2

驱动 API

本页介绍如何将摄像头传感器连接到参考硬件平台,并提供有关可用 API 的信息。

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 CSIGMSL2 共享同一 CSI 路径
  • 要使用 GMSL2,请将 SW2300 开关 1 设置为 ON
  • SW2300 开关 1 的默认状态为 OFF

RB3G2 转接板:MIPI CSI

摄像头连接

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

DIP 开关设置

CSI1_DIP_SWCSI2_DIP_SW 设置为 ON,以使用转接板上的 CAM1CAM2。 默认状态为 OFF

支持的功能


02 · 选择流传输 API

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

GStreamer API

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

V4L2 API

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

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

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

前提条件

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

🗑️ 清除 GStreamer 注册表

如果在启用摄像头叠加之前执行过 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 镜像。有关叠加配置的详细信息,请参阅叠加配置
Linux 内核中的 V4L2 框架支持视频设备。它提供的 API 允许用户空间应用程序与摄像头和视频采集卡等设备交互。有关 V4L2 的更多信息,请访问 kernel.org
Qualcomm 在上游内核中为原始帧转储功能支持 V4L2 接口摄像头 ISP 驱动。

CAMSS 驱动

上游内核中的 Qualcomm 摄像头子系统(CAMSS)驱动实现了 V4L2、media controller 和 V4L2 subdev 接口。支持在内核中使用 V4L2 subdev 接口的摄像头传感器。CAMSS 驱动由以下部分组成:
  • CSIPHY 模块 – 处理 CSI2 接收器的物理层。每个 CSIPHY 模块可以连接一个独立的摄像头传感器。
  • CSI 解码器(CSID)模块 – 处理 CSI2 接收器的协议层和应用层。CSID 可以解码来自任意 CSIPHY 的数据流。
  • 视频前端(VFE)模块 – 代表包含原始转储接口(RDI)输入接口的图像前端(IFE),这些接口绕过图像处理流水线。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

检查 media 节点编号

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

检查 media 设备图

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

查找传感器名称

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

配置 media controller

media controller 实用工具(media-ctrl)是用于配置摄像头子系统子设备的 V4L2 实用工具。使用 media-ctl --help 打印使用说明。
将 [x] 替换为通过 :ref. <检查 media 节点编号> 找到的编号。例如 # 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 architecture
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 摄像头配置。示例应用程序 gst-usb-single-camera-app 可用于 USB 摄像头验证。

网络摄像头

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