> ## Documentation Index
> Fetch the complete documentation index at: https://dragonwingdocs.qualcomm.com/llms.txt
> Use this file to discover all available pages before exploring further.

# 摄像头流传输

> 将摄像头传感器连接到参考硬件平台，并使用 GStreamer 和 V4L2 API 进行流传输 — QCS6490、IQ-9075-EVK、IQ-8275-EVK 和 IQ615。

<div style={{display:'flex',gap:'8px',flexWrap:'wrap',marginBottom:'16px'}}>
  <span style={{background:'#ede9fe',color:'#5b21b6',padding:'2px 10px',borderRadius:'999px',fontSize:'12px',fontWeight:600}}>QCS6490</span>
  <span style={{background:'#ede9fe',color:'#5b21b6',padding:'2px 10px',borderRadius:'999px',fontSize:'12px',fontWeight:600}}>IQ-9075-EVK</span>
  <span style={{background:'#ede9fe',color:'#5b21b6',padding:'2px 10px',borderRadius:'999px',fontSize:'12px',fontWeight:600}}>IQ-8275-EVK</span>
  <span style={{background:'#ede9fe',color:'#5b21b6',padding:'2px 10px',borderRadius:'999px',fontSize:'12px',fontWeight:600}}>IQ615</span>
  <span style={{background:'#f0fdf4',color:'#166534',padding:'2px 10px',borderRadius:'999px',fontSize:'12px',fontWeight:600}}>稳定</span>
</div>

<CardGroup cols={4}>
  <Card title="MIPI CSI" icon="camera">多平台支持</Card>
  <Card title="GMSL" icon="link">四路解串器</Card>
  <Card title="GStreamer" icon="microchip">主要 API</Card>
  <Card title="V4L2" icon="bolt">驱动 API</Card>
</CardGroup>

***

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

***

## 01 · 设置摄像头

<Tabs>
  <Tab title="QCS6490">
    ## QCS6490 摄像头拓扑

    **默认摄像头模块**

    * **OV9282**
    * **IMX577**

    ***

    ## RB3G2 视觉夹层板：MIPI CSI

    ### 摄像头连接

    | 插槽        | 传感器    | 状态 |
    | --------- | ------ | -- |
    | **CAM0A** | OV9282 | 支持 |
    | **CAM3**  | IMX577 | 支持 |

    连接方式：

    * **OV9282 → CAM0A**
    * **IMX577 → CAM3**

    <div className="flex flex-col items-center gap-2">
      <img src="https://mintcdn.com/qualcomm-prod/PyJ823JBh-_RDtS4/Technologies/Camera/images/camera_module_connection_1.png?fit=max&auto=format&n=PyJ823JBh-_RDtS4&q=85&s=f463ae54c2682a9c34eb998359c4e3af" width="389" height="254" data-path="Technologies/Camera/images/camera_module_connection_1.png" />
    </div>

    <div className="flex flex-col items-center gap-2">
      <img src="https://mintcdn.com/qualcomm-prod/PyJ823JBh-_RDtS4/Technologies/Camera/images/camera_module_connection_2.png?fit=max&auto=format&n=PyJ823JBh-_RDtS4&q=85&s=4caacb8995de6f68bb6fa0028f903e16" width="411" height="297" data-path="Technologies/Camera/images/camera_module_connection_2.png" />
    </div>

    ### 转接板上的 SW2300 DIP 开关

    | 插槽        | SW2300 开关 1 | 默认  | 功能            |
    | --------- | ----------- | --- | ------------- |
    | **CAM0A** | 无需设置        | N/A | 无需 DIP 设置即可工作 |
    | **CAM3**  | **OFF**     | OFF | 启用 CAM3 使用    |

    <Note>
      要使用视觉夹层板上的 **CAM3** 插槽，**SW2300 开关 1 必须为 OFF**。
      这是**默认**状态。
      **CAM0A** 无需任何 DIP 开关设置即可工作。
    </Note>

    <div className="flex flex-col items-center gap-2">
      <img src="https://mintcdn.com/qualcomm-prod/PyJ823JBh-_RDtS4/Technologies/Camera/images/SW2300_dip.png?fit=max&auto=format&n=PyJ823JBh-_RDtS4&q=85&s=3bf290df9aecaed93f9f97e88a618e95" width="411" height="277" data-path="Technologies/Camera/images/SW2300_dip.png" />
    </div>

    ***

    ## RB3G2 视觉夹层板：GMSL

    视觉夹层板上有**两个 GMSL 插槽**：

    * **GMSL1**
    * **GMSL2**

    | 插槽        | 共享 CSI        | 所需开关                 | 默认状态 | 状态 |
    | --------- | ------------- | -------------------- | ---- | -- |
    | **GMSL1** | 否             | 无                    | N/A  | 支持 |
    | **GMSL2** | 与 CAM3 共享 CSI | **SW2300 开关 1 = ON** | OFF  | 支持 |

    <Note>
      **重要**

      * **GMSL1** 无需任何硬件设置即可工作
      * **CAM3 CSI** 与 **GMSL2** 共享同一 CSI 路径
      * 要使用 **GMSL2**，请将 **SW2300 开关 1 设置为 ON**
      * SW2300 开关 1 的默认状态为 **OFF**
    </Note>

    <div className="flex flex-col items-center gap-2">
      <img src="https://mintcdn.com/qualcomm-prod/PyJ823JBh-_RDtS4/Technologies/Camera/images/GMSL_slots.png?fit=max&auto=format&n=PyJ823JBh-_RDtS4&q=85&s=3d5b757c51cdfa232b1034f9b0bca4bd" width="411" height="247" data-path="Technologies/Camera/images/GMSL_slots.png" />
    </div>

    ***

    ## RB3G2 转接板：MIPI CSI

    ### 摄像头连接

    | 插槽       | 传感器    | 状态 |
    | -------- | ------ | -- |
    | **CAM1** | OV9282 | 支持 |
    | **CAM2** | IMX577 | 支持 |

    连接方式：

    * **OV9282 → CAM1**
    * **IMX577 → CAM2**

    <div className="flex flex-col items-center gap-2">
      <img src="https://mintcdn.com/qualcomm-prod/PyJ823JBh-_RDtS4/Technologies/Camera/images/connect_mipi_csi_on_interposer_board.png?fit=max&auto=format&n=PyJ823JBh-_RDtS4&q=85&s=0a270d160149caef009b5d037495c6c8" width="740" height="621" data-path="Technologies/Camera/images/connect_mipi_csi_on_interposer_board.png" />
    </div>

    ### DIP 开关设置

    | 开关                | 设置     | 默认  | 用途          |
    | ----------------- | ------ | --- | ----------- |
    | **CSI1\_DIP\_SW** | **ON** | OFF | 启用 **CAM1** |
    | **CSI2\_DIP\_SW** | **ON** | OFF | 启用 **CAM2** |

    <Note>
      将 **CSI1\_DIP\_SW** 和 **CSI2\_DIP\_SW** 设置为 **ON**，以使用转接板上的 **CAM1** 和 **CAM2**。
      默认状态为 **OFF**。
    </Note>

    <div className="flex flex-col items-center gap-2">
      <img src="https://mintcdn.com/qualcomm-prod/mGpYCfBsZaJSFIEo/Technologies/Camera/images/dip_switch_setting.jpg?fit=max&auto=format&n=mGpYCfBsZaJSFIEo&q=85&s=f9c4fea85c0132526e94a28804bba92f" width="872" height="759" data-path="Technologies/Camera/images/dip_switch_setting.jpg" />
    </div>

    ***

    ## 支持的功能

    | 功能       | IMX577（CAM3） | OV9282（CAM0A） | AR0231（GMSL） |
    | -------- | ------------ | ------------- | ------------ |
    | **SHDR** | 是            | 否             | 否            |
    | **LDC**  | 是            | 否             | 否            |
    | **EIS**  | 是            | 否             | 否            |
  </Tab>

  <Tab title="IQ-9075-EVK">
    ## IQ-9075-EVK 摄像头拓扑

    IQ-9075-EVK 以**核心套件**形式提供。
    核心套件仅支持 **MIPI CSI** 摄像头。
    **GMSL** 摄像头需要连接到核心套件的独立 **GMSL 夹层板**。

    | 接口           | 硬件路径        | 状态          |
    | ------------ | ----------- | ----------- |
    | **MIPI CSI** | 核心套件 / 主板   | **支持**      |
    | **GMSL**     | 外部 GMSL 夹层板 | **通过附加板支持** |

    在 IQ-9075-EVK 硬件堆栈中：

    * 核心套件 / 主板提供**四个 MIPI CSI（C/D-PHY）连接器**
    * GMSL 夹层板提供**四个 GMSL 端口（0 到 3）**

    <div className="flex flex-col items-center gap-2">
      <img src="https://mintcdn.com/qualcomm-prod/mGpYCfBsZaJSFIEo/Technologies/Camera/images/mipi_hardware_connectivity.png?fit=max&auto=format&n=mGpYCfBsZaJSFIEo&q=85&s=5c2d8b2dc97512cbcd666c7aa93bad52" width="424" height="324" data-path="Technologies/Camera/images/mipi_hardware_connectivity.png" />
    </div>

    ***

    ## GMSL 端口映射

    GMSL 夹层板上有**四个 GMSL 端口（0 到 3）**。

    <Note>
      **重要**

      * GMSL 端口编号**不是顺序编号**
      * 端口号根据 GMSL 端口所连接的 **CSI 索引**分配
      * 每个 GMSL 端口连接到一个 **MAX96724 四路 GMSL 解串器**
      * 每个解串器连接到**一个 CSI**
    </Note>

    | 端口         | CSI 映射     | 解串器      | 状态      | 传感器类别         |
    | ---------- | ---------- | -------- | ------- | ------------- |
    | **Port-0** | 基于 CSI 的映射 | MAX96724 | **已启用** | OX03F10 Bayer |
    | **Port-1** | 基于 CSI 的映射 | MAX96724 | **已禁用** | 本版本未启用        |
    | **Port-2** | 基于 CSI 的映射 | MAX96724 | **已启用** | OX03F10 YUV   |
    | **Port-3** | 基于 CSI 的映射 | MAX96724 | **已启用** | OX03F10 YUV   |

    <div className="flex flex-col items-center gap-2">
      <img src="https://mintcdn.com/qualcomm-prod/mGpYCfBsZaJSFIEo/Technologies/Camera/images/gmsl-camera-connection.png?fit=max&auto=format&n=mGpYCfBsZaJSFIEo&q=85&s=66d7c82f747afede134b9fcfe6a0bd96" width="354" height="260" data-path="Technologies/Camera/images/gmsl-camera-connection.png" />
    </div>

    <Note>
      **当前版本状态**

      * **Port-0**、**Port-2** 和 **Port-3** 已为 GMSL 摄像头启用
      * **Port-1** 未启用
    </Note>

    ### 端口容量

    每个 GMSL 端口包含**四个插槽**（也称为**通道**），编号为 **1 到 4**。

    | 项目                 | 值      |
    | ------------------ | ------ |
    | **每个 GMSL 端口的插槽数** | 4      |
    | **通道范围**           | 1 到 4  |
    | **每端口摄像头数**        | 最多 4 个 |

    ### 各端口的传感器支持

    | 端口         | 支持的传感器             | 分辨率 / FPS            | 容量     |
    | ---------- | ------------------ | -------------------- | ------ |
    | **Port-0** | OX03F10 Bayer GMSL | 1824 × 1536 @ 30 FPS | 4 个摄像头 |
    | **Port-2** | OX03F10 YUV GMSL   | 1920 × 1536 @ 30 FPS | 4 个摄像头 |
    | **Port-3** | OX03F10 YUV GMSL   | 1920 × 1536 @ 30 FPS | 4 个摄像头 |

    ***

    ## DIP 开关设置

    IQ-9075-EVK 具有**四个 CSI PHY**。
    每个 CSI PHY 可通过核心套件 / 主板上的 DIP 开关路由到 **MIPI 摄像头端口**或 **GMSL 摄像头端口**。

    **EVT** 与 **DVT/PVT** 硬件的开关分配不同。

    <Tabs>
      <Tab title="EVT 硬件">
        IQ-9075-EVK EVT 硬件的 DIP 开关设置：

        <div className="flex flex-col items-center gap-2">
          <img src="https://mintcdn.com/qualcomm-prod/mGpYCfBsZaJSFIEo/Technologies/Camera/images/dip-switch-sw2.png?fit=max&auto=format&n=mGpYCfBsZaJSFIEo&q=85&s=c65ad2eb779a417701b4a292f5a51015" width="506" height="288" data-path="Technologies/Camera/images/dip-switch-sw2.png" />
        </div>

        | 开关        | OFF（默认） | ON  | ON 时的连接         | OFF 时的连接  |
        | --------- | ------- | --- | --------------- | --------- |
        | **SW2-1** | HIGH    | LOW | CSI0 → GMSL 夹层板 | CSI0 → 主板 |
        | **SW2-2** | HIGH    | LOW | CSI1 → GMSL 夹层板 | CSI1 → 主板 |
        | **SW2-3** | HIGH    | LOW | CSI2 → GMSL 夹层板 | CSI2 → 主板 |
        | **SW2-4** | HIGH    | LOW | CSI3 → GMSL 夹层板 | CSI3 → 主板 |
      </Tab>

      <Tab title="DVT/PVT 硬件">
        IQ-9075-EVK DVT/PVT 硬件的 DIP 开关设置：

        <div className="flex flex-col items-center gap-2">
          <img src="https://mintcdn.com/qualcomm-prod/PyJ823JBh-_RDtS4/Technologies/Camera/images/dip-switch-dvt-pvt.png?fit=max&auto=format&n=PyJ823JBh-_RDtS4&q=85&s=be190a7b60c279e7b5f080b1b6c1019c" width="418" height="140" data-path="Technologies/Camera/images/dip-switch-dvt-pvt.png" />
        </div>

        | 开关        | ON              | OFF（默认）   |
        | --------- | --------------- | --------- |
        | **SW1-5** | CSI0 → GMSL 夹层板 | CSI0 → 主板 |
        | **SW1-6** | CSI1 → GMSL 夹层板 | CSI1 → 主板 |
        | **SW1-7** | CSI2 → GMSL 夹层板 | CSI2 → 主板 |
        | **SW1-8** | CSI3 → GMSL 夹层板 | CSI3 → 主板 |
      </Tab>
    </Tabs>

    ***

    ## 并发摄像头支持

    ### MIPI 支持

    软件支持 **OV9282 MIPI 摄像头**。

    | MIPI 摄像头   | 支持的分辨率 / FPS        | CAM0 | CAM1 | CAM2 | CAM3 | 备注                                                                               |
    | ---------- | ------------------- | ---: | ---: | ---: | ---: | -------------------------------------------------------------------------------- |
    | **OV9282** | 1280 × 720 @ 30 FPS |   支持 |   支持 |   支持 |   支持 | 任一摄像头都可独立工作。使用**实时 IFE** 最多可同时运行**两个摄像头**。使用 **Offline IFE** 功能可同时运行全部**四个摄像头**。 |

    ### GMSL 支持

    软件支持 **OX03F10 Bayer** 和 **OX03F10 YUV** GMSL 摄像头。

    | GMSL 端口             | 支持的分辨率 / FPS         | 传感器           | 备注                                                                                            |
    | ------------------- | -------------------- | ------------- | --------------------------------------------------------------------------------------------- |
    | **Port-0**          | 1824 × 1536 @ 30 FPS | OX03F10 Bayer | Port-0 上可连接四个 OX03F10 Bayer GMSL 摄像头。任一摄像头都可独立工作。使用**按端口分组**功能，单个端口上的全部四个摄像头可同时运行。            |
    | **Port-2**          | 1920 × 1536 @ 30 FPS | OX03F10 YUV   | Port-2 上可连接四个 OX03F10 YUV GMSL 摄像头。任一摄像头都可独立工作。使用**按端口分组**功能，单个端口上的全部四个摄像头可同时运行。              |
    | **Port-3**          | 1920 × 1536 @ 30 FPS | OX03F10 YUV   | Port-3 上可连接四个 OX03F10 YUV GMSL 摄像头。任一摄像头都可独立工作。使用**按端口分组**功能，单个端口上的全部四个摄像头可同时运行。              |
    | **Port-2 + Port-3** | 1920 × 1536 @ 30 FPS | OX03F10 YUV   | 可连接八个 OX03F10 YUV GMSL 摄像头，Port-2 上四个、Port-3 上四个。每个端口的任一摄像头都可独立工作。使用**按端口分组**功能，全部八个摄像头可同时运行。 |

    ### GMSL + MIPI 并发

    | CAM0                       | CAM1                       | GMSL Port-2                      | GMSL Port-3                      | 备注                        |
    | -------------------------- | -------------------------- | -------------------------------- | -------------------------------- | ------------------------- |
    | OV9282 1280 × 720 @ 30 FPS | OV9282 1280 × 720 @ 30 FPS | OX03F10 YUV 1920 × 1080 @ 30 FPS | OX03F10 YUV 1920 × 1080 @ 30 FPS | 任一摄像头都可独立工作。全部四个摄像头可同时工作。 |
  </Tab>

  <Tab title="IQ-8275-EVK">
    ## IQ-8275-EVK 摄像头拓扑

    IQ-8275-EVK 以**核心套件**形式提供。
    核心套件支持 **MIPI CSI** 摄像头。
    **GMSL** 摄像头需要连接到核心套件的独立 **GMSL 夹层板**。

    | 接口           | 硬件路径     | 状态          |
    | ------------ | -------- | ----------- |
    | **MIPI CSI** | 主板       | **支持**      |
    | **GMSL**     | GMSL 夹层板 | **通过附加板支持** |

    <div className="flex flex-col items-center gap-2">
      <img src="https://mintcdn.com/qualcomm-prod/mGpYCfBsZaJSFIEo/Technologies/Camera/images/rb4_core_kit_mipi_connectors.png?fit=max&auto=format&n=mGpYCfBsZaJSFIEo&q=85&s=ac20d4ecda703883b2fce9854222cda4" width="409" height="284" data-path="Technologies/Camera/images/rb4_core_kit_mipi_connectors.png" />
    </div>

    ***

    ## GMSL 端口映射

    GMSL 夹层板上有**四个 GMSL 端口（0 到 3）**。

    <Note>
      **重要**

      * GMSL 端口编号**不是顺序编号**
      * 端口号由 GMSL 端口所连接的 **CSI 索引**定义
      * 端口 **0、1 和 2** 各连接到一个 **MAX96724 四路 GMSL 解串器**
      * 每个解串器连接到**一个 CSI**
      * **Port-3** 是**虚拟（dummy）端口**
    </Note>

    | 端口         | CSI 映射     | 解串器      | 状态      | 传感器类别         |
    | ---------- | ---------- | -------- | ------- | ------------- |
    | **Port-0** | 基于 CSI 的映射 | MAX96724 | **支持**  | OX03F10 Bayer |
    | **Port-1** | 基于 CSI 的映射 | MAX96724 | **已禁用** | 硬件问题          |
    | **Port-2** | 基于 CSI 的映射 | MAX96724 | **支持**  | OX03F10 YUV   |
    | **Port-3** | —          | —        | **虚拟**  | 不支持           |

    <div className="flex flex-col items-center gap-2">
      <img src="https://mintcdn.com/qualcomm-prod/mGpYCfBsZaJSFIEo/Technologies/Camera/images/gmsl_ports_evt_hw.png?fit=max&auto=format&n=mGpYCfBsZaJSFIEo&q=85&s=453e20da657659038dd13970214ad65e" width="487" height="317" data-path="Technologies/Camera/images/gmsl_ports_evt_hw.png" />
    </div>

    <Note>
      **当前版本状态**

      * **Port-0** 和 **Port-2** 支持 GMSL 摄像头
      * **Port-1** 因硬件问题未启用
      * **Port-3** 是虚拟端口
    </Note>

    ### 端口容量

    每个 GMSL 端口包含**四个插槽**（也称为**通道**），编号为 **1 到 4**。

    | 项目                 | 值                  |
    | ------------------ | ------------------ |
    | **每个 GMSL 端口的插槽数** | 4                  |
    | **通道范围**           | 1 到 4              |
    | **每端口摄像头数**        | 最多 4 个             |
    | **Port-0 传感器支持**   | OX03F10 Bayer GMSL |
    | **Port-2 传感器支持**   | OX03F10 YUV GMSL   |

    ***

    ## DIP 开关设置

    IQ-8275-EVK 具有**三个 CSI PHY**。
    每个 CSI PHY 可通过核心套件/主板上的 DIP 开关路由到 **MIPI 摄像头端口**或 **GMSL 摄像头端口**。

    **EVT** 与 **DVT/PVT** 硬件的开关分配不同。

    <Tabs>
      <Tab title="EVT 硬件">
        IQ-8275-EVK EVT 硬件上的 DIP 开关设置：

        <div className="flex flex-col items-center gap-2">
          <img src="https://mintcdn.com/qualcomm-prod/mGpYCfBsZaJSFIEo/Technologies/Camera/images/rb4_dip_switch_sw2.png?fit=max&auto=format&n=mGpYCfBsZaJSFIEo&q=85&s=3422075c2c6fa0a29d40a9c9d5c1e90d" width="506" height="288" data-path="Technologies/Camera/images/rb4_dip_switch_sw2.png" />
        </div>

        | 开关        | ON              | OFF（默认）   |
        | --------- | --------------- | --------- |
        | **SW2-1** | CSI0 → GMSL 夹层板 | CSI0 → 主板 |
        | **SW2-2** | CSI1 → GMSL 夹层板 | CSI1 → 主板 |
        | **SW2-3** | CSI2 → GMSL 夹层板 | CSI2 → 主板 |
      </Tab>

      <Tab title="DVT / PVT 硬件">
        IQ-8275-EVK DVT/PVT 硬件上的 DIP 开关设置：

        <div className="flex flex-col items-center gap-2">
          <img src="https://mintcdn.com/qualcomm-prod/PyJ823JBh-_RDtS4/Technologies/Camera/images/dip-switch-dvt-pvt.png?fit=max&auto=format&n=PyJ823JBh-_RDtS4&q=85&s=be190a7b60c279e7b5f080b1b6c1019c" width="418" height="140" data-path="Technologies/Camera/images/dip-switch-dvt-pvt.png" />
        </div>

        | 开关        | ON              | OFF（默认）   |
        | --------- | --------------- | --------- |
        | **SW1-5** | CSI0 → GMSL 夹层板 | CSI0 → 主板 |
        | **SW1-6** | CSI1 → GMSL 夹层板 | CSI1 → 主板 |
        | **SW1-7** | CSI2 → GMSL 夹层板 | CSI2 → 主板 |
      </Tab>
    </Tabs>

    ***

    ## 并发摄像头支持

    ### MIPI 支持

    软件支持 **OV9282 MIPI 摄像头**。

    | MIPI 摄像头   | 支持的分辨率 / FPS        | CAM0 | CAM1 | CAM2 | 备注                                                                             |
    | ---------- | ------------------- | ---: | ---: | ---: | ------------------------------------------------------------------------------ |
    | **OV9282** | 1280 × 720 @ 30 FPS |   支持 |   支持 |   支持 | 任一摄像头都可独立工作。使用**实时 IFE** 最多可同时运行**两个摄像头**。使用 **Offline IFE** 可同时运行全部**三个摄像头**。 |

    ### GMSL 支持

    软件支持 **OX03F10 Bayer** 和 **OX03F10 YUV** GMSL 摄像头。

    | GMSL 端口    | 支持的分辨率 / FPS         | 传感器           | 备注                                                                         |
    | ---------- | -------------------- | ------------- | -------------------------------------------------------------------------- |
    | **Port-0** | 1824 × 1536 @ 30 FPS | OX03F10 Bayer | Port-0 上可连接四个 Bayer GMSL 摄像头。任一摄像头都可独立工作。使用**按端口分组**功能，单个端口上的全部四个摄像头可同时运行。 |
    | **Port-2** | 1920 × 1536 @ 30 FPS | OX03F10 YUV   | Port-2 上可连接四个 YUV GMSL 摄像头。任一摄像头都可独立工作。使用**按端口分组**功能，单个端口上的全部四个摄像头可同时运行。   |

    ### GMSL Port-0 + Port-2 并发

    | 配置                                                      | 状态     | 备注                         |
    | ------------------------------------------------------- | ------ | -------------------------- |
    | **Port-0 上 4× OX03F10 Bayer + Port-2 上 4× OX03F10 YUV** | **支持** | 使用**按端口分组**功能，全部八个摄像头可同时运行 |
    | **每个端口上独立摄像头**                                          | **支持** | 每个端口的任一摄像头都可独立工作           |
    | **IQ-8275-EVK 上完整 8 摄像头并发**                             | **稳定** | 全部八个摄像头可同时运行               |

    ### GMSL + MIPI 并发

    | GMSL Port-0                            | MIPI                                   | GMSL Port-2                          | 状态     |
    | -------------------------------------- | -------------------------------------- | ------------------------------------ | ------ |
    | **OX03F10 Bayer 1824 × 1536 @ 30 FPS** | **OV9282 1280 × 720 @ 30 FPS**         | **OX03F10 YUV 1920 × 1080 @ 30 FPS** | **支持** |
    | **OV9282 1280 × 720 @ 30 FPS**         | **OX03F10 Bayer 1824 × 1536 @ 30 FPS** | **OX03F10 YUV 1920 × 1080 @ 30 FPS** | **支持** |

    \*\*规则：\*\*任一摄像头都可独立工作。
    \*\*结果：\*\*全部三个摄像头可同时运行。
  </Tab>

  <Tab title="IQ615">
    ## IQ615 EVK 摄像头拓扑

    IQ615 EVK 支持 **MIPI CSI 摄像头**。
    **GMSL** 通过专用接口路由，但**当前版本未启用 GMSL 摄像头**。

    <div className="flex flex-col items-center gap-2">
      <img src="https://mintcdn.com/qualcomm-prod/PyJ823JBh-_RDtS4/Technologies/Camera/images/615-board-connectors.png?fit=max&auto=format&n=PyJ823JBh-_RDtS4&q=85&s=4614ca26870a941b06f7f1ef2a9a150b" width="681" height="358" data-path="Technologies/Camera/images/615-board-connectors.png" />
    </div>

    ### 板卡概览

    | 接口       | 连接器        |    通道数 | 默认状态       | 状态             |
    | -------- | ---------- | -----: | ---------- | -------------- |
    | **CSI0** | 22 针 CSI   | 2-lane | 已启用        | **支持**         |
    | **CSI1** | 22 针 CSI   | 4-lane | 默认路由到 GMSL | **通过 SW13 支持** |
    | **GMSL** | 专用 GMSL 插槽 |      — | 可用         | **当前版本未启用**    |

    <Note>
      **重要**

      * IQ615 EVK **不**随附默认传感器连接
      * **CSI0** 无需 **DIP 开关配置**
      * **CSI1** 使用 **SW13** 进行路径选择
    </Note>

    ***

    ## CSI1 路径选择

    **SW13 控制 CSI1 路由。**

    | SW13 设置 | CSI1 路由      | 结果                |
    | ------- | ------------ | ----------------- |
    | **OFF** | GMSL 解串器路径   | CSI1 配置为 **GMSL** |
    | **ON**  | 22 针摄像头连接器路径 | CSI1 配置为 **MIPI** |

    <Note>
      \*\*默认状态：\*\*SW13 为 **OFF**

      * CSI1 默认为 **GMSL 路径**
      * 可通过将 SW13 设置为 **ON** 将 CSI1 切换为 **MIPI**
    </Note>

    ***

    ## GMSL 接口

    <div className="flex flex-col items-center gap-2">
      <img src="https://mintcdn.com/qualcomm-prod/PyJ823JBh-_RDtS4/Technologies/Camera/images/615-gmsl-interface.png?fit=max&auto=format&n=PyJ823JBh-_RDtS4&q=85&s=173ea64b01787426d94dbb518e7b3617" width="682" height="493" data-path="Technologies/Camera/images/615-gmsl-interface.png" />
    </div>

    | 项目          | 状态      |
    | ----------- | ------- |
    | **GMSL 插槽** | 存在      |
    | **额外硬件配置**  | 不需要     |
    | **当前版本支持**  | **已禁用** |

    <Note>
      GMSL 摄像头当前在 IQ615 EVK 板上**未启用**。
    </Note>

    ***

    ## 开关配置

    | 载板功能                   | 开关           | 配置                | 备注          |
    | ---------------------- | ------------ | ----------------- | ----------- |
    | 为 **CSI1** 启用 **MIPI** | **SW13 OFF** | GMSL 解串器 → CSI1   | 默认状态        |
    | 为 **CSI1** 启用 **MIPI** | **SW13 ON**  | 22 针摄像头连接器 → CSI1 | 切换到 MIPI 路径 |

    ### 总结

    | 路径       | CSI0 | CSI1                  | GMSL        |
    | -------- | ---- | --------------------- | ----------- |
    | **MIPI** | 直接使用 | 通过 **SW13 ON** 启用     | 未启用         |
    | **GMSL** | 不适用  | 通过 **SW13 OFF** 为默认路径 | 存在，但当前版本未启用 |
  </Tab>

  <Tab title="IQx7181">
    IQx7181 EVK 提供多个摄像头串行接口（CSI）连接器，支持不同 PHY 类型和通道配置的摄像头模块。
    这为启动调试和验证用例提供了灵活的摄像头连接能力。

    ## 接口概要

    下表提供了接口配置的概要。

    | CSI 接口 |       传感器       |     PHY 类型    |             备注            |
    | :----: | :-------------: | :-----------: | :-----------------------: |
    |  CSI0  |     OG0VA1B     |     D-PHY     |           1-lane          |
    |  CSI1  | IMX766 / IMX577 | C-PHY / D-PHY | 30 针（默认）或通过 SW2-6 使用 22 针 |
    |  CSI2  |      IMX766     |     C-PHY     |            N/A            |
    |  CSI4  |      IMX688     |     C-PHY     |            N/A            |

    ***

    ## 支持的 CSI 接口

    IQx7181 EVK 上可用的 CSI 接口为：

    * CSI0
    * CSI1
    * CSI2
    * CSI4

    下图展示了 IQx7181 EVK 板上的 CSI 连接器布局。

    <div className="flex flex-col items-center gap-2">
      <img src="https://mintcdn.com/qualcomm-prod/mGpYCfBsZaJSFIEo/Technologies/Camera/images/x7181-board-connectors.png?fit=max&auto=format&n=mGpYCfBsZaJSFIEo&q=85&s=6f91ef25bc1cbeac3d62d0ef0951d215" alt="IQx7181 EVK CSI 连接器位置" width="501" height="718" data-path="Technologies/Camera/images/x7181-board-connectors.png" />
    </div>

    ***

    ## CSI 接口详情

    ### CSI0 接口

    * 连接的传感器：OG0VA1B
    * 通道配置：1-lane
    * PHY 类型：D-PHY

    ### CSI4 接口

    * 连接的传感器：IMX688
    * PHY 类型：C-PHY

    ### CSI1 和 CSI2 接口

    * 默认连接的传感器：IMX766（C-PHY）
    * 可选配置：CSI1 可连接 22 针 D-PHY IMX577 传感器

    ***

    ## 配置 CSI1 连接器（30 针和 22 针）

    CSI1 接口支持两种物理连接器类型：

    * 30 针连接器
    * 22 针连接器

    按照下表所述，使用开关 SW2-6 选择 CSI1 上的活动连接器。

    | SW2-6 位置 |  活动连接器  |
    | :------: | :-----: |
    |  OFF（默认） | 30 针连接器 |
    |    ON    | 22 针连接器 |

    <Note>
      默认配置为 SW2-6 = OFF，即启用 30 针 CSI1 连接器。
    </Note>

    ***

    ## 在 CSI1 上使用 IMX577 传感器

    连接 IMX577 图像传感器时：

    * 使用 CSI1 22 针接口。
    * 将 SW2-6 设置为 ON 以启用 22 针连接器。
    * 使用 22 针 Type-B FFC/FPC 排线连接传感器。
    * 在系统上电前，确保排线方向和引脚对齐正确。
  </Tab>
</Tabs>

***

## 02 · 选择流传输 API

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

<CardGroup cols={2}>
  <Card title="GStreamer API" icon="film" href="stream-cameras#03-·-stream-camera-with-the-gstreamer-api">
    GStreamer 是一个开源多媒体框架。Qualcomm 提供了 GStreamer 插件（`qtiqmmfsrc`），使开发者能够在应用程序中控制摄像头子系统。有关更多信息，请参阅 [Qualcomm GStreamer 插件](https://imsdkdocs.qualcomm.com/plugin-reference/introduction)。
  </Card>

  <Card title="V4L2 API" icon="microchip" href="stream-cameras#04-·-stream-camera-with-the-v4l2-api">
    V4L2 是 Linux 内核中的一个框架，为视频采集、视频输出和其他多媒体设备提供支持。开发者可以使用 V4L2 API 操作摄像头。使用 CAMSS 驱动的 V4L2 API 适合只需要从摄像头获取原始图像的开发者。
  </Card>
</CardGroup>

***

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

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

### 前提条件

要使用 [gst-launch-1.0](https://gstreamer.freedesktop.org/documentation/tools/gst-launch.html?gi-language=c) 和 GStreamer 插件，请刷写 Config2 镜像。有关叠加（overlay）配置的详细信息，请参阅[叠加配置](https://dragonwingdocs.qualcomm.com/Key-Documents/Migration-Guide/use-overlay-configurations-to-derive-image-recipes)。

<Note>
  使用 SSH 连接到设备控制台。相关说明请参阅 [How To SSH?](https://dragonwingdocs.qualcomm.com/Linux/devices/iq9075-evk/set-up-the-device#connect-over-ssh)。
</Note>

<Steps>
  <Step title="🗑️ 清除 GStreamer 注册表">
    <Accordion title="清除 GStreamer 注册表（如需要）">
      如果在启用摄像头叠加之前执行过 GStreamer 命令，则必须在启用摄像头叠加后清除 GStreamer 注册表。运行以下命令清除注册表：

      ```bash Terminal theme={null}
      rm ~/.cache/gstreamer-1.0/registry.aarch64.bin
      ```
    </Accordion>
  </Step>

  <Step title="📉 调整日志级别">
    <Accordion title="日志级别调整（如需要）">
      为获得最佳结果，摄像头用例应在性能（perf）构建上运行。在默认构建上，按如下方式降低内核控制台日志级别：

      ```bash Terminal theme={null}
      echo 4 > /proc/sys/kernel/printk
      ```
    </Accordion>
  </Step>

  <Step title="⚡ 为 cam-server 激活 Adreno OpenCL">
    <Accordion title="为 cam-server 激活 Adreno OpenCL（仅限高级摄像头用例）">
      在运行 SHDRv2、SHDRv3、Defog 等任何高级摄像头用例之前，请配置 `cam-server` systemd 服务以使用 Adreno OpenCL ICD 库。

      <Steps>
        <Step title="🛠️ 打开服务覆盖配置">
          编辑 `cam-server` systemd 单元，使其能够加载自定义环境文件。

          ```bash Terminal theme={null}
          systemctl edit --full cam-server
          ```

          在 `[Service]` 部分下添加此行：

          ```bash Terminal theme={null}
          EnvironmentFile=/etc/cam-server-env
          ```

          保存并退出。
        </Step>

        <Step title="⚙️ 指向 Adreno OpenCL">
          设置 `cam-server` 使用的 OpenCL ICD 路径。

          ```bash Terminal theme={null}
          echo "OCL_ICD_FILENAMES=/usr/lib/libOpenCL_adreno.so.1" > /etc/cam-server-env
          ```
        </Step>

        <Step title="🔄 重新加载并重启">
          应用更新后的服务配置并重启 `cam-server`。

          ```bash Terminal theme={null}
          systemctl daemon-reload
          systemctl restart cam-server
          ```
        </Step>
      </Steps>
    </Accordion>
  </Step>
</Steps>

***

### 运行摄像头用例

<Tabs>
  <Tab title="QCS6490">
    <Note>
      确保 MIPI 摄像头已连接到 CSI 插槽。OV9282 MIPI 摄像头应连接到 CAM 0A 插槽，IMX577 MIPI 摄像头应连接到 CAM3 插槽。
    </Note>

    #### 单摄像头流启动

    <Steps>
      <Step title="运行流水线">
        在设备终端中运行以下命令：

        ```bash GStreamer (Fakesink) theme={null}
        gst-launch-1.0 -e qtiqmmfsrc name=camsrc camera=0 ! 'video/x-raw,format=NV12,\
        width=1280,height=720,framerate=30/1' ! fakesink
        ```
      </Step>

      <Step title="验证流水线状态">
        此命令以 720p、30 FPS 的配置启动摄像头。来自摄像头传感器的帧会被 fakesink 丢弃。如果 gst 流水线状态如下所示变为 "PLAYING"，则表明摄像头正在运行。由于此命令将摄像头帧转储到 fakesink，设备上不会保存任何内容。

        ```text Log Output theme={null}
        gbm_create_device(187): Info: backend name is: msm_drm
        Setting pipeline to PAUSED ...
        Pipeline is live and does not need PREROLL ...
        Setting pipeline to PLAYING ...
        New clock: GstSystemClock
        ```

        要停止摄像头，按 **CTRL+C**。
      </Step>
    </Steps>

    ***

    #### 视频编码

    <Steps>
      <Step title="运行流水线">
        在设备终端中运行以下命令：

        ```bash GStreamer (MP4 Record) theme={null}
        gst-launch-1.0 -e qtiqmmfsrc name=camsrc camera=0 ! \
        video/x-raw,format=NV12,width=1280,height=720,framerate=30/1,\
        interlace-mode=progressive,colorimetry=bt601 ! v4l2h264enc \
        capture-io-mode=4 output-io-mode=5 extra-controls="controls,video_bitrate=6000000,\
        video_bitrate_mode=0;" ! h264parse ! mp4mux ! filesink location=/opt/mux_avc.mp4
        ```

        此命令以 720p、30 FPS 的配置启动摄像头，并在 h264 视频编码后将其保存为视频文件。如果 gst 流水线状态变为 "PLAYING"，则表明摄像头正在运行。

        要停止摄像头，按 **CTRL+C**。
      </Step>

      <Step title="拉取录制内容">
        设备上会生成 `/opt/mux_avc.mp4`。可在主机 PC 上运行以下 scp 命令从设备拉取录制内容：

        ```bash SCP (SSH) theme={null}
        $ scp -r root@[ip-addr]:/opt/mux_avc.mp4 .
        ```
      </Step>
    </Steps>

    ***

    #### 视频编码与快照

    <Steps>
      <Step title="运行流水线">
        在设备终端中运行以下命令：

        ```bash GStreamer (Snapshot + Video) theme={null}
        gst-pipeline-app -e qtiqmmfsrc name=camsrc camera=0 ! \
        video/x-raw,format=NV12,width=1280,height=720,framerate=30/1,\
        interlace-mode=progressive,colorimetry=bt601 ! v4l2h264enc \
        capture-io-mode=4 output-io-mode=5 extra-controls="controls,video_bitrate=6000000,\
        video_bitrate_mode=0;" ! h264parse ! mp4mux ! filesink location=/opt/mux_avc.mp4 \
        camsrc.image_1 ! "image/jpeg,width=1280,height=720,framerate=30/1" \
        ! multifilesink location=/opt/frame%d.jpg async=false sync=true enable-last-sample=false
        ```
      </Step>

      <Step title="浏览菜单">
        按 **Enter**。此命令将打印以下菜单并等待用户输入。

        ```text Menu theme={null}
        ##################################### MENU #####################################
        ============================== Pipeline Controls==============================
        (0) NULL: Set the pipeline into NULL state
        (1) READY: Set the pipeline into READY state
        (2) PAUSED: Set the pipeline into PAUSED state
        (3) PLAYING: Set the pipeline into PLAYING state
        ==================================== Other====================================
        (p) Plugin Mode: Choose a plugin which to control
        (q) Quit : Exit the application
        Choose an option:
        ```
      </Step>

      <Step title="拍摄快照">
        使用以下菜单步骤在录制视频的同时拍摄快照。

        ```text Menu Steps theme={null}
        (1) ready -> (3) Playing -> (p)Plugin Mode : Select (8)camerasrc -> (37) capture-image -> (1): still - Snapshot ->(1) Snapshot count ( 'guint' value for arg1)
        ```
      </Step>

      <Step title="停止并获取文件">
        要停止摄像头，按 **Enter**，按 **b**（返回），然后按 **q**（退出）。录制的视频文件和快照图像保存在 `/opt/` 中。可在主机 PC 上运行以下 scp 命令从设备拉取录制内容：

        ```bash SCP (SSH) theme={null}
        $ scp -r root@[ip-addr]:/opt/<file name> .
        ```
      </Step>
    </Steps>

    ***

    #### MIPI 多摄像头流传输

    QCS6490 具有五个 CSI PHY，可连接五个 MIPI 摄像头。

    QCS6490 具有三个 IFE 和两个 IFE Lite。这意味着你可以用 IFE 运行三个摄像头，用 IFE Lite 运行两个摄像头。IFE Lite 仅支持从传感器转储原始（raw）数据。你可以将黑白（mono）摄像头连接到 IFE Lite，转储原始帧，然后使用 CHI 节点将输出转换为 YUV 帧。

    要在 RB3 平台上验证五摄像头并发：

    <Steps>
      <Step title="连接 MIPI 摄像头">
        按下表所述连接 MIPI 摄像头。

        | **插槽** |    **摄像头传感器**    |
        | :----: | :--------------: |
        | CAM 0A |   OV9282 黑白摄像头   |
        | CAM 0B |   OV9282 黑白摄像头   |
        |  CAM1  | IMX577 bayer 摄像头 |
        |  CAM2  | IMX577 bayer 摄像头 |
        |  CAM3  | IMX577 bayer 摄像头 |
      </Step>

      <Step title="同时为全部五个摄像头运行 GST 命令">
        <Note>
          对于 OV9282 黑白摄像头，使用单独的摄像头流水线（RealTimeMonoToYUV）。该流水线使用 IFE Lite 转储原始帧，然后使用 CHI 节点将其转换为 YUV 帧。使用 GST 参数 `ife-direct-stream=1` 以使用此摄像头流水线。由于它使用 IFE Lite 运行，这些摄像头不会应用 2A。
        </Note>

        <Note>
          QCS6490 的最大编码能力为 4K\@30。因此，来自全部五个摄像头的总编码处理量必须低于 4k\@30 的限制。
        </Note>

        **Cam 0: IMX577**

        ```bash GStreamer (Cam 0) theme={null}
        gst-launch-1.0 -e qtiqmmfsrc name=camsrc camera=0 ! video/x-raw,format=NV12,width=1920,height=1080,\
        framerate=30/1 ! v4l2h264enc capture-io-mode=4 output-io-mode=5 extra-controls="controls,video_bitrate=5000000,\
        video_bitrate_mode=0;" ! queue ! h264parse ! mp4mux ! queue ! filesink location=/opt/Cam_0_1080p.mp4
        ```

        **Cam 1: IMX577**

        ```bash GStreamer (Cam 1) theme={null}
        gst-launch-1.0 -e qtiqmmfsrc name=camsrc camera=1 ! video/x-raw,format=NV12,width=1920,height=1080,\
        framerate=30/1 ! v4l2h264enc capture-io-mode=4 output-io-mode=5 extra-controls="controls,video_bitrate=5000000,\
        video_bitrate_mode=0;" ! queue ! h264parse ! mp4mux ! queue ! filesink location=/opt/Cam_1_1080p.mp4
        ```

        **Cam 8: IMX577**

        ```bash GStreamer (Cam 8) theme={null}
        gst-launch-1.0 -e qtiqmmfsrc name=camsrc camera=8 ! video/x-raw,format=NV12,width=1920,height=1080,\
        framerate=30/1 ! v4l2h264enc capture-io-mode=4 output-io-mode=5 extra-controls="controls,video_bitrate=5000000,\
        video_bitrate_mode=0;" ! queue ! h264parse ! mp4mux ! queue ! filesink location=/opt/Cam_8_1080p.mp4
        ```

        **Cam 2: OV9282**

        ```bash GStreamer (Cam 2) theme={null}
        gst-launch-1.0 -e qtiqmmfsrc name=camsrc camera=2 ife-direct-stream=1 ! video/x-raw,format=NV12,width=1280,height=720,\
        framerate=30/1 ! v4l2h264enc capture-io-mode=4 output-io-mode=5 extra-controls="controls,video_bitrate=5000000,\
        video_bitrate_mode=0;" ! queue ! h264parse ! mp4mux ! queue ! filesink location=/opt/Cam_2_720p.mp4
        ```

        **Cam 3: OV9282**

        ```bash GStreamer (Cam 3) theme={null}
        gst-launch-1.0 -e qtiqmmfsrc name=camsrc camera=3 ife-direct-stream=1 ! video/x-raw,format=NV12,width=1280,height=720,\
        framerate=30/1 ! v4l2h264enc capture-io-mode=4 output-io-mode=5 extra-controls="controls,video_bitrate=5000000,\
        video_bitrate_mode=0;" ! queue ! h264parse ! mp4mux ! queue ! filesink location=/opt/Cam_3_720p.mp4
        ```
      </Step>
    </Steps>
  </Tab>

  <Tab title="IQ-9075-EVK">
    <Note>
      确保摄像头（MIPI 或 GMSL）传感器已连接到 IQ-9075-EVK 设备。你可以将 OV9282 MIPI 摄像头连接到 CSI 插槽。将 OX03f10 Bayer GMSL 摄像头连接到 GMSL Port-0，将 OX03f10 YUV GMSL 摄像头连接到 Port-2 和 Port-3。
    </Note>

    #### 单摄像头流启动

    <Steps>
      <Step title="运行流水线">
        在设备终端中运行以下命令：

        ```bash GStreamer (Fakesink) theme={null}
        gst-launch-1.0 -e qtiqmmfsrc name=camsrc camera=0 ! 'video/x-raw,format=NV12,\
        width=1280,height=720,framerate=30/1' ! fakesink
        ```
      </Step>

      <Step title="验证流水线状态">
        以下命令以 720p、30 FPS 的配置启动摄像头。来自摄像头传感器的帧会被 fakesink 丢弃。如果 gst 流水线状态如下所示变为 "PLAYING"，则表明摄像头正在运行。由于此命令将摄像头帧转储到 fakesink，设备上不会保存任何内容。

        ```text Log Output theme={null}
        gbm_create_device(187): Info: backend name is: msm_drm
        Setting pipeline to PAUSED ...
        Pipeline is live and does not need PREROLL ...
        Setting pipeline to PLAYING ...
        New clock: GstSystemClock
        ```

        要停止摄像头，按 **CTRL+C**。
      </Step>
    </Steps>

    ***

    #### 视频编码

    <Steps>
      <Step title="运行流水线">
        在设备终端中运行以下命令：

        ```bash GStreamer (MP4 Record) theme={null}
        gst-launch-1.0 -e qtiqmmfsrc name=camsrc camera=0 ! \
        video/x-raw,format=NV12,width=1280,height=720,framerate=30/1,\
        interlace-mode=progressive,colorimetry=bt601 ! v4l2h264enc \
        capture-io-mode=4 output-io-mode=5 extra-controls="controls,video_bitrate=6000000,\
        video_bitrate_mode=0;" ! h264parse ! mp4mux ! filesink location=/opt/mux_avc.mp4
        ```

        此命令以 720p、30 FPS 的配置启动摄像头，并在 h264 视频编码后将其保存为视频文件。如果 gst 流水线状态变为 "PLAYING"，则表明摄像头正在运行。要停止摄像头，按 **CTRL+C**。
      </Step>

      <Step title="拉取录制内容">
        设备上会生成 `/opt/mux_avc.mp4`。可在主机 PC 上运行以下 scp 命令从设备拉取录制内容：

        ```bash SCP (SSH) theme={null}
        $ scp -r root@[ip-addr]:/opt/mux_avc.mp4 .
        ```
      </Step>
    </Steps>

    ***

    #### 视频编码与快照

    IQ-9075-EVK 没有硬件 JPEG 编码器。快照用例使用在 CPU 上运行的软件 JPEG 编码器算法。

    <Steps>
      <Step title="运行流水线">
        在设备终端中运行以下命令：

        ```bash GStreamer (Snapshot + Video) theme={null}
        gst-pipeline-app -e qtiqmmfsrc name=camsrc camera=0 ! video/x-raw,format=NV12,width=1280,height=720,\
        framerate=30/1,interlace-mode=progressive,colorimetry=bt601 ! queue ! v4l2h264enc capture-io-mode=4 \
        output-io-mode=5 extra-controls="controls,video_bitrate_mode=0,video_bitrate=6000000;" ! queue ! \
        h264parse ! mp4mux ! queue ! filesink location="/opt/mux_720_avc.mp4" camsrc.image_1 ! "image/jpeg,\
        width=1280,height=720,framerate=30/1" ! multifilesink location=/opt/frame%d.jpg async=false sync=true \
        enable-last-sample=false
        ```
      </Step>

      <Step title="浏览菜单">
        按 **Enter**。此命令将打印以下菜单并等待用户输入。

        ```text Menu theme={null}
        ##################################### MENU #####################################
        ============================== Pipeline Controls==============================
        (0)       NULL: Set the pipeline into NULL state
        (1)       READY: Set the pipeline into READY state
        (2)       PAUSED: Set the pipeline into PAUSED state
        (3)       PLAYING: Set the pipeline into PLAYING state
        ==================================== Other====================================
        (p)       Plugin Mode: Choose a plugin which to control
        (q)       Quit : Exit the application

        Choose an option:
        ```
      </Step>

      <Step title="拍摄快照">
        使用以下菜单步骤在录制视频的同时拍摄快照。

        ```text Menu Steps theme={null}
        (1) ready -> (3) Playing -> (p)Plugin Mode : Select (11)camerasrc ->
        (38) capture-image -> (1): still - Snapshot ->(1) Snapshot count ( 'guint' value for arg1)
        ```
      </Step>

      <Step title="停止并获取文件">
        要停止摄像头，按 **Enter**，按 **b**（返回），然后按 **q**（退出）。录制的视频文件和快照图像保存在 `/opt/` 中。可在主机 PC 上运行以下 scp 命令从设备拉取录制内容：

        ```bash SCP (SSH) theme={null}
        $ scp -r root@[ip-addr]:/opt/<file name> .
        ```
      </Step>
    </Steps>

    ***

    #### MIPI 多摄像头流传输

    IQ-9075-EVK 主板上有四个 MIPI CSI 插槽。将 OV9282 摄像头连接到 MIPI CSI 端口。四个摄像头中的任意两个 OV9282 摄像头可同时运行。

    在两个不同的终端中分别以 camera = 0、1 运行以下 GST 命令，以验证 MIPI 摄像头并发。保存每个摄像头的编码文件时请使用不同的文件名。

    ```bash GStreamer (Dual MIPI) theme={null}
    gst-launch-1.0 -e qtiqmmfsrc name=camsrc camera=0 ! \
    video/x-raw,format=NV12,width=1280,height=720,framerate=30/1,\
    interlace-mode=progressive,colorimetry=bt601 ! v4l2h264enc \
    capture-io-mode=4 output-io-mode=5 extra-controls="controls, video_bitrate=6000000,\
    video_bitrate_mode=0;" ! h264parse ! mp4mux ! filesink location=/opt/mux_avc.mp4
    ```

    你也可以使用 offline IFE 功能同时运行全部四个 MIPI 摄像头。有关四摄像头验证的信息，请参阅[使用 Offline IFE 支持多摄像头](./support-multi-camera-using-offline-ife)。

    ***

    #### GMSL 多摄像头流传输

    单个 GMSL 端口包含四个插槽，可使用不同的虚拟通道 ID 将四个 GMSL 摄像头连接到单个 CSI。连接在一个 CSI 上的四个摄像头被视为一个组。可以使用[按端口分组功能](./support-per-port-grouping)同时运行一组摄像头。
  </Tab>

  <Tab title="IQ-8275-EVK">
    <Note>
      确保摄像头（MIPI 或 GMSL）传感器已连接到 IQ-8275-EVK 设备。你可以将 OV9282 MIPI 摄像头连接到 CSI 插槽。将 OX03f10 bayer GMSL 摄像头连接到 GMSL Port-0，将 OX03f10 YUV GMSL 摄像头连接到 GMSL Port-2。
    </Note>

    #### 单摄像头流启动

    <Steps>
      <Step title="运行流水线">
        在设备终端中运行以下命令：

        ```bash GStreamer (Fakesink) theme={null}
        gst-launch-1.0 -e qtiqmmfsrc name=camsrc camera=0 ! 'video/x-raw,format=NV12,\
        width=1280,height=720,framerate=30/1' ! fakesink
        ```
      </Step>

      <Step title="验证流水线状态">
        以下命令以 720p、30 FPS 的配置启动摄像头。来自摄像头传感器的帧会被 fakesink 丢弃。如果 gst 流水线状态如下所示变为 "PLAYING"，则表明摄像头正在运行。由于此命令将摄像头帧转储到 fakesink，设备上不会保存任何内容。

        ```text Log Output theme={null}
        gbm_create_device(187): Info: backend name is: msm_drm
        Setting pipeline to PAUSED ...
        Pipeline is live and does not need PREROLL ...
        Setting pipeline to PLAYING ...
        New clock: GstSystemClock
        ```

        要停止摄像头，按 **CTRL+C**。
      </Step>
    </Steps>

    ***

    #### 视频编码

    <Steps>
      <Step title="运行流水线">
        在设备终端中运行以下命令：

        ```bash GStreamer (MP4 Record) theme={null}
        gst-launch-1.0 -e qtiqmmfsrc name=camsrc camera=0 ! \
        video/x-raw,format=NV12,width=1280,height=720,framerate=30/1,\
        interlace-mode=progressive,colorimetry=bt601 ! v4l2h264enc \
        capture-io-mode=4 output-io-mode=5 extra-controls="controls,video_bitrate=6000000,\
        video_bitrate_mode=0;" ! h264parse ! mp4mux ! filesink location=/opt/mux_avc.mp4
        ```

        此命令以 720p、30 FPS 的配置启动摄像头，并在 h264 视频编码后将其保存为视频文件。如果 gst 流水线状态变为 "PLAYING"，则表明摄像头正在运行。要停止摄像头，按 **CTRL+C**。
      </Step>

      <Step title="拉取录制内容">
        设备上会生成 `/opt/mux_avc.mp4`。可在主机 PC 上运行以下 scp 命令从设备拉取录制内容：

        ```bash SCP (SSH) theme={null}
        $ scp -r root@[ip-addr]:/opt/mux_avc.mp4 .
        ```
      </Step>
    </Steps>

    ***

    #### 视频编码与快照

    IQ-8275-EVK 没有硬件 JPEG 编码器。快照用例使用在 CPU 上运行的软件 JPEG 编码器算法。

    <Steps>
      <Step title="运行流水线">
        在设备终端中运行以下命令：

        ```bash GStreamer (Snapshot + Video) theme={null}
        gst-pipeline-app -e qtiqmmfsrc name=camsrc camera=0 ! video/x-raw,format=NV12,width=1280,height=720,\
        framerate=30/1,interlace-mode=progressive,colorimetry=bt601 ! queue ! v4l2h264enc capture-io-mode=4 \
        output-io-mode=5 extra-controls="controls,video_bitrate_mode=0,video_bitrate=6000000;" ! queue ! \
        h264parse ! mp4mux ! queue ! filesink location="/opt/mux_720_avc.mp4" camsrc.image_1 ! "image/jpeg,\
        width=1280,height=720,framerate=30/1" ! multifilesink location=/opt/frame%d.jpg async=false sync=true \
        enable-last-sample=false
        ```
      </Step>

      <Step title="浏览菜单">
        按 **Enter**。此命令将打印以下菜单并等待用户输入。

        ```text Menu theme={null}
        ##################################### MENU #####################################
        ============================== Pipeline Controls==============================
        (0)       NULL: Set the pipeline into NULL state
        (1)       READY: Set the pipeline into READY state
        (2)       PAUSED: Set the pipeline into PAUSED state
        (3)       PLAYING: Set the pipeline into PLAYING state
        ==================================== Other====================================
        (p)       Plugin Mode: Choose a plugin which to control
        (q)       Quit : Exit the application

        Choose an option:
        ```
      </Step>

      <Step title="拍摄快照">
        使用以下菜单步骤在录制视频的同时拍摄快照。

        ```text Menu Steps theme={null}
        (1) ready -> (3) Playing -> (p)Plugin Mode : Select (11)camerasrc ->
        (38) capture-image -> (1): still - Snapshot ->(1) Snapshot count ( 'guint' value for arg1)
        ```
      </Step>

      <Step title="停止并获取文件">
        要停止摄像头，按 **Enter**，按 **b**（返回），然后按 **q**（退出）。录制的视频文件和快照图像保存在 `/opt/` 中。可在主机 PC 上运行以下 scp 命令从设备拉取录制内容：

        ```bash SCP (SSH) theme={null}
        $ scp -r root@[ip-addr]:/opt/<file name> .
        ```
      </Step>
    </Steps>

    ***

    #### MIPI 多摄像头流传输

    IQ-8275-EVK 主板上有三个 MIPI CSI 插槽。将 OV9282 摄像头连接到 MIPI CSI 端口。任意两个 OV9282 摄像头可同时运行。

    在两个不同的终端中分别以 camera = 0、1 运行以下 GST 命令，以验证 MIPI 摄像头并发。保存每个摄像头的编码文件时请使用不同的文件名。

    ```bash GStreamer (Dual MIPI) theme={null}
    gst-launch-1.0 -e qtiqmmfsrc name=camsrc camera=0 ! \
    video/x-raw,format=NV12,width=1280,height=720,framerate=30/1,\
    interlace-mode=progressive,colorimetry=bt601 ! v4l2h264enc \
    capture-io-mode=4 output-io-mode=5 extra-controls="controls, video_bitrate=6000000,\
    video_bitrate_mode=0;" ! h264parse ! mp4mux ! filesink location=/opt/mux_avc.mp4
    ```

    你也可以使用 offline IFE 功能同时运行全部三个 MIPI 摄像头。有关三摄像头验证的信息，请参阅[使用 Offline IFE 支持多摄像头](./support-multi-camera-using-offline-ife)。

    ***

    #### GMSL 多摄像头流传输

    单个 GMSL 端口包含四个插槽，可使用不同的虚拟通道 ID 将四个 GMSL 摄像头连接到单个 CSI。连接在一个 CSI 上的四个摄像头被视为一个组。可以使用[按端口分组功能](./support-per-port-grouping)同时运行一组摄像头。
  </Tab>

  <Tab title="IQ615">
    <Note>
      确保摄像头 MIPI 传感器已连接到 IQ15 设备。你可以将 IMX577 MIPI 摄像头连接到 CSI 插槽。
    </Note>

    #### 单摄像头流启动

    <Steps>
      <Step title="运行流水线">
        在设备终端中运行以下命令：

        ```bash GStreamer (Fakesink) theme={null}
        gst-launch-1.0 -e qtiqmmfsrc name=camsrc camera=0 ! 'video/x-raw,format=NV12,\
        width=1280,height=720,framerate=30/1' ! fakesink
        ```
      </Step>

      <Step title="验证流水线状态">
        以下命令以 720p、30 FPS 的配置启动摄像头。来自摄像头传感器的帧会被 fakesink 丢弃。如果 gst 流水线状态如下所示变为 "PLAYING"，则表明摄像头正在运行。由于此命令将摄像头帧转储到 fakesink，设备上不会保存任何内容。

        ```text Log Output theme={null}
        gbm_create_device(187): Info: backend name is: msm_drm
        Setting pipeline to PAUSED ...
        Pipeline is live and does not need PREROLL ...
        Setting pipeline to PLAYING ...
        New clock: GstSystemClock
        ```

        要停止摄像头，按 **CTRL+C**。
      </Step>
    </Steps>

    ***

    #### 视频编码

    <Steps>
      <Step title="运行流水线">
        在设备终端中运行以下命令：

        ```bash GStreamer (MP4 Record) theme={null}
        gst-launch-1.0 -e qtiqmmfsrc name=camsrc camera=0 ! \
        video/x-raw,format=NV12,width=1280,height=720,framerate=30/1,\
        interlace-mode=progressive,colorimetry=bt601 ! v4l2h264enc \
        capture-io-mode=4 output-io-mode=5 extra-controls="controls,video_bitrate=6000000,\
        video_bitrate_mode=0;" ! h264parse ! mp4mux ! filesink location=/opt/mux_avc.mp4
        ```

        此命令以 720p、30 FPS 的配置启动摄像头，并在 h264 视频编码后将其保存为视频文件。如果 gst 流水线状态变为 "PLAYING"，则表明摄像头正在运行。要停止摄像头，按 **CTRL+C**。
      </Step>

      <Step title="拉取录制内容">
        设备上会生成 `/opt/mux_avc.mp4`。可在主机 PC 上运行以下 scp 命令从设备拉取录制内容：

        ```bash SCP (SSH) theme={null}
        $ scp -r root@[ip-addr]:/opt/mux_avc.mp4 .
        ```
      </Step>
    </Steps>

    ***

    #### 视频编码与快照

    IQ-9075-EVK 没有硬件 JPEG 编码器。快照用例使用在 CPU 上运行的软件 JPEG 编码器算法。

    <Steps>
      <Step title="运行流水线">
        在设备终端中运行以下命令：

        ```bash GStreamer (Snapshot + Video) theme={null}
        gst-pipeline-app -e qtiqmmfsrc name=camsrc camera=0 ! video/x-raw,format=NV12,width=1280,height=720,\
        framerate=30/1,interlace-mode=progressive,colorimetry=bt601 ! queue ! v4l2h264enc capture-io-mode=4 \
        output-io-mode=5 extra-controls="controls,video_bitrate_mode=0,video_bitrate=6000000;" ! queue ! \
        h264parse ! mp4mux ! queue ! filesink location="/opt/mux_720_avc.mp4" camsrc.image_1 ! "image/jpeg,\
        width=1280,height=720,framerate=30/1" ! multifilesink location=/opt/frame%d.jpg async=false sync=true \
        enable-last-sample=false
        ```
      </Step>

      <Step title="浏览菜单">
        按 **Enter**。此命令将打印以下菜单并等待用户输入。

        ```text Menu theme={null}
        ##################################### MENU #####################################
        ============================== Pipeline Controls==============================
        (0)       NULL: Set the pipeline into NULL state
        (1)       READY: Set the pipeline into READY state
        (2)       PAUSED: Set the pipeline into PAUSED state
        (3)       PLAYING: Set the pipeline into PLAYING state
        ==================================== Other====================================
        (p)       Plugin Mode: Choose a plugin which to control
        (q)       Quit : Exit the application

        Choose an option:
        ```
      </Step>

      <Step title="拍摄快照">
        使用以下菜单步骤在录制视频的同时拍摄快照。

        ```text Menu Steps theme={null}
        (1) ready -> (3) Playing -> (p)Plugin Mode : Select (11)camerasrc ->
        (38) capture-image -> (1): still - Snapshot ->(1) Snapshot count ( 'guint' value for arg1)
        ```
      </Step>

      <Step title="停止并获取文件">
        要停止摄像头，按 **Enter**，按 **b**（返回），然后按 **q**（退出）。录制的视频文件和快照图像保存在 `/opt/` 中。可在主机 PC 上运行以下 scp 命令从设备拉取录制内容：

        ```bash SCP (SSH) theme={null}
        $ scp -r root@[ip-addr]:/opt/<file name> .
        ```
      </Step>
    </Steps>

    ***
  </Tab>

  <Tab title="IQX7181">
    本版本未启用 GStreamer 应用支持。
  </Tab>
</Tabs>

***

### 其他 GStreamer 示例

QIM SDK 包含[摄像头 GStreamer 示例应用程序](https://imsdkdocs.qualcomm.com/sample-application/multimedia-sample-applications)以及 [AI/ML 和其他多媒体应用程序](https://imsdkdocs.qualcomm.com/sample-application/ai-sample-applications)的示例应用程序。

<Note>
  在使用示例应用程序之前，请确保满足 gst-launch-1.0 和 GStreamer 插件的安装前提条件。
</Note>

有关使用 `gst-launch-1.0` 的示例，请参阅[多媒体用例示例](https://imsdkdocs.qualcomm.com/sample-application/multimedia-sample-applications)。

***

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

要使用 V4L2 API，请刷写 Config1 镜像。有关叠加配置的详细信息，请参阅[叠加配置](https://dragonwingdocs.qualcomm.com/Key-Documents/Migration-Guide/use-overlay-configurations-to-derive-image-recipes)。

<Tabs>
  <Tab title="QCS6490">
    Linux 内核中的 V4L2 框架支持视频设备。它提供的 API 允许用户空间应用程序与摄像头和视频采集卡等设备交互。

    有关 V4L2 的更多信息，请访问 [kernel.org](http://kernel.org)。

    <div className="flex flex-col items-center gap-2">
      <img src="https://mintcdn.com/qualcomm-prod/PyJ823JBh-_RDtS4/Technologies/Camera/images/V4L2_interface.png?fit=max&auto=format&n=PyJ823JBh-_RDtS4&q=85&s=2d389eb4a92ae46d9e3009d2845c9416" width="409" height="397" data-path="Technologies/Camera/images/V4L2_interface.png" />
    </div>

    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 总线接口。

    <div className="flex flex-col items-center gap-2">
      <img src="https://mintcdn.com/qualcomm-prod/PyJ823JBh-_RDtS4/Technologies/Camera/images/camss_driver.png?fit=max&auto=format&n=PyJ823JBh-_RDtS4&q=85&s=3f34b24492d5a24b4bae5ce3fca77383" width="985" height="738" data-path="Technologies/Camera/images/camss_driver.png" />
    </div>

    CAMSS 驱动实现了 V4L2 接口。每个 CSIPHY、CSID 和 VFE 模块由一个 V4L2 子设备表示。

    如下图所示，每个 CSIPHY 都可以连接到每个 CSID。每个 CSID 都可以连接到每个 VFE。每个 RDI 端口都有独立的视频节点。

    <div className="flex flex-col items-center gap-2">
      <img src="https://mintcdn.com/qualcomm-prod/PyJ823JBh-_RDtS4/Technologies/Camera/images/csiphy_csid_connections.png?fit=max&auto=format&n=PyJ823JBh-_RDtS4&q=85&s=9ac30a5ba8491264dc57452ec449b879" width="3704" height="707" data-path="Technologies/Camera/images/csiphy_csid_connections.png" />
    </div>

    CAMSS V4L2 驱动位于 `<kernel_root>/drivers/media/platform/qcom/camss`。`<kernel_root>` 是 Linux 内核的目录。

    ***

    ### V4L2 示例应用程序 — Yavta

    本节介绍如何使用支持 V4L2 接口的应用程序捕获原始帧数据。

    <Note>
      将 IMX577 MIPI 摄像头传感器连接到 RB3 设备的 CAM3 插槽。
    </Note>

    <Note>
      Yavta 默认作为镜像的一部分提供；无需显式安装。
    </Note>

    <Steps>
      <Step title="验证 CAMSS 模块">
        IMX412 和 CAMSS 模块默认加载。运行以下 lsmod 命令，验证 qcom\_camss 和 IMX412 模块是否已加载：

        ```bash Verify Modules theme={null}
        root@rb3gen2-core-kit:/# lsmod |grep -iE "qcom_camss|imx412"
        imx412                 16384  0
        qcom_camss            569344  20
        ```

        预期结果是 IMX412 传感器驱动和 qcom\_camss 摄像头子系统模块加载成功，确认上游摄像头软件栈处于活动状态。
      </Step>

      <Step title="检查 media 节点编号">
        运行以下命令打印 CAMSS 驱动的 media 设备节点编号。

        如果 /dev/media0 未列出 qcom-camss 驱动，请尝试 /dev/media1。

        ```bash Check Media Node theme={null}
        # media-ctl -p -d /dev/media0 | grep camss
        driver       qcom-camss
        bus info     platform:acaf000.camss
        ```
      </Step>

      <Step title="检查 media 设备图">
        运行以下命令检查 media 设备图：

        ```bash Media Device Graph theme={null}
        media-ctl -p -d /dev/media'x'
        ```

        <div className="flex flex-col items-center gap-2">
          <img src="https://mintcdn.com/qualcomm-prod/PyJ823JBh-_RDtS4/Technologies/Camera/images/check-media-device-graph.png?fit=max&auto=format&n=PyJ823JBh-_RDtS4&q=85&s=e6ad0b7b921d0444ae235e510d760b1d" width="1075" height="362" data-path="Technologies/Camera/images/check-media-device-graph.png" />
        </div>
      </Step>

      <Step title="查找传感器名称">
        运行以下命令将传感器名称打印到终端：

        ```bash Find Sensor theme={null}
        # cat /sys/dev/char/81\:*/name | grep imx
        imx577 21-001a
        ```
      </Step>

      <Step title="配置 media controller">
        media controller 实用工具（media-ctrl）是用于配置摄像头子系统子设备的 [V4L2 实用工具](https://git.linuxtv.org/v4l-utils.git)。使用 `media-ctl --help` 打印使用说明。

        <Note>
          将 \[x] 替换为通过 :ref. \<检查 media 节点编号> 找到的编号。例如 `# media-ctl -d /dev/media1 --reset`。
        </Note>

        1. 将所有链接重置为非活动状态：
           ```bash Reset Links theme={null}
           # media-ctl -d /dev/media[x] --reset
           ```
        2. 在流水线节点上配置摄像头传感器格式和分辨率：
           ```bash Configure Sensor theme={null}
           # media-ctl -d /dev/media[x] -V '"imx577 17-001a":0[fmt:SRGGB10/4056x3040 field:none]'
           ```
        3. 以 4056x3040 分辨率配置 CSIPHY：
           ```bash Configure CSIPHY theme={null}
           # media-ctl -d /dev/media[x] -V '"msm_csiphy3":0[fmt:SRGGB10/ 4056x3040]'
           # media-ctl -d /dev/media[x] -V '"msm_csiphy3":1[fmt: SRGGB10/4056x3040]'
           ```
        4. 以 4056x3040 分辨率配置 CSID：
           ```bash Configure CSID theme={null}
           # media-ctl -d /dev/media[x] -V '"msm_csid0":0[fmt:SRGGB10/4056x3040] '
           # media-ctl -d /dev/media[x] -V '"msm_csid0":1[fmt:SRGGB10/ 4056x3040]'
           ```
        5. 以 3840x2160 分辨率配置 ISP：
           ```bash Configure ISP theme={null}
           # media-ctl -d /dev/media[x] -V '"msm_vfe0_rdi0":0[fmt:SRGGB10/ 4056x3040]'
           # media-ctl -d /dev/media[x] -V '"msm_vfe0_rdi0":1[fmt: SRGGB10/4056x3040]'
           ```
        6. 链接流水线：
           ```bash Link Pipeline theme={null}
           # media-ctl -d /dev/media[x] -l '"msm_csiphy3":1->"msm_csid0":0[1]'
           # media-ctl -d /dev/media[x] -l '"msm_csid0":1->"msm_vfe0_rdi0":0[1]'
           ```
      </Step>

      <Step title="捕获图像">
        [Yavta 测试应用程序](https://git.ideasonboard.org/yavta.git)使用 V4L2 接口验证摄像头。运行 Yavta 捕获图像：

        ```bash Yavta Capture theme={null}
        # yavta -B capture-mplane -c -I -n 5 -f SRGGB10P -s 4056x3040 -F /dev/video0 --capture=5 --file='frame-#.raw'
        ```
      </Step>
    </Steps>

    ***

    ### V4L2 示例应用程序 — libcamera

    libcamera 是一个开源软件框架。它负责控制 V4L2 摄像头接口，并向上层公开原生 C++ API。应用程序和上层框架基于 [libcamera 框架](https://www.kernel.org/doc/html/v4.9/media/kapi/v4l2-core.html)运行。

    有关 libcamera 架构的更多详细信息，请参阅 [libcamera architecture](https://libcamera.org/docs.html#libcamera-architecture)。

    <div className="flex flex-col items-center gap-2">
      <img src="https://mintcdn.com/qualcomm-prod/mGpYCfBsZaJSFIEo/Technologies/Camera/images/libcamera_framework.png?fit=max&auto=format&n=mGpYCfBsZaJSFIEo&q=85&s=c97752fbe4d6e6f45dad91f9f2f43d90" width="463" height="477" data-path="Technologies/Camera/images/libcamera_framework.png" />
    </div>

    libcamera 使用 [cam 实用工具](https://libcamera.org/getting-started.html#basic-testing-with-cam-utility)进行验证。

    ### 捕获原始帧数据

    以下步骤介绍如何通过 V4L2 接口使用摄像头实用应用程序捕获原始帧数据。

    <Note>
      将 IMX577 MIPI 摄像头传感器连接到 RB3 设备的 CAM3 插槽。
    </Note>

    <Note>
      libcamera 默认作为镜像的一部分提供；无需显式安装。
    </Note>

    <Steps>
      <Step title="验证 CAMSS 模块">
        IMX412 和 CAMSS 模块默认加载。运行以下 lsmod 命令，验证 qcom\_camss 和 IMX412 模块是否已加载：

        ```bash Verify Modules theme={null}
        # lsmod | grep qcom_camss
        # lsmod | grep imx412
        ```
      </Step>

      <Step title="删除 uncalibrated.yaml">
        <Note>
          请先运行 `mount -o remount rw /usr`，否则会因 `Read-only file system` 错误而失败。
        </Note>

        ```bash Delete YAML theme={null}
        # rm -rf /usr/share/libcamera/ipa/simple/uncalibrated.yaml
        ```
      </Step>

      <Step title="运行 cam 实用工具">
        ```bash Run cam Utility theme={null}
        # cam -c 1 --capture=10 --file='frame-#.raw'
        ```

        这将运行该实用工具，在根目录中捕获 10 个原始帧并保存为文件。

        请查看控制台日志消息，了解转储图像的分辨率和格式信息。

        ```text Log Output theme={null}
        Using camera /base/soc@0/cci@ac4b000/i2c-bus@1/camera@1a as cam0 [0:15:01.067615799] [2155] INFO Camera camera.cpp:945 configuring streams:
        (0) 4056x3040-SRGGB10_CSI2P
        cam0: Capture 10 frames
        ```
      </Step>
    </Steps>
  </Tab>

  <Tab title="IQ-9075-EVK">
    Linux 内核中的 V4L2 框架支持视频设备。它提供的 API 允许用户空间应用程序与摄像头和视频采集卡等设备交互。

    有关 V4L2 的更多信息，请访问 [kernel.org](http://kernel.org)。

    Qualcomm 在上游内核中为原始帧转储功能支持 V4L2 接口摄像头 ISP 驱动。

    <div className="flex flex-col items-center gap-2">
      <img src="https://mintcdn.com/qualcomm-prod/PyJ823JBh-_RDtS4/Technologies/Camera/images/V4L2_interface.png?fit=max&auto=format&n=PyJ823JBh-_RDtS4&q=85&s=2d389eb4a92ae46d9e3009d2845c9416" width="409" height="397" data-path="Technologies/Camera/images/V4L2_interface.png" />
    </div>

    ***

    ### CAMSS 驱动

    上游内核中的 Qualcomm 摄像头子系统（CAMSS）驱动实现了 V4L2、media controller 和 V4L2 subdev 接口。

    支持在内核中使用 V4L2 subdev 接口的摄像头传感器。

    CAMSS 驱动由以下部分组成：

    * **CSIPHY 模块** – 处理 CSI2 接收器的物理层。每个 CSIPHY 模块可以连接一个独立的摄像头传感器。
    * **CSI 解码器（CSID）模块** – 处理 CSI2 接收器的协议层和应用层。CSID 可以解码来自任意 CSIPHY 的数据流。
    * **视频前端（VFE）模块** – 代表包含原始转储接口（RDI）输入接口的图像前端（IFE），这些接口绕过图像处理流水线。VFE 还包含将输出数据写入内存的 AXI 总线接口。

    <div className="flex flex-col items-center gap-2">
      <img src="https://mintcdn.com/qualcomm-prod/PyJ823JBh-_RDtS4/Technologies/Camera/images/camss_driver.png?fit=max&auto=format&n=PyJ823JBh-_RDtS4&q=85&s=3f34b24492d5a24b4bae5ce3fca77383" width="985" height="738" data-path="Technologies/Camera/images/camss_driver.png" />
    </div>

    CAMSS 驱动实现了 V4L2 接口。每个 CSIPHY、CSID 和 VFE 模块由一个 V4L2 子设备表示。

    如下图所示，每个 CSIPHY 都可以连接到每个 CSID。每个 CSID 都可以连接到每个 VFE。每个 RDI 端口都有独立的视频节点。

    <div className="flex flex-col items-center gap-2">
      <img src="https://mintcdn.com/qualcomm-prod/PyJ823JBh-_RDtS4/Technologies/Camera/images/csiphy_csid_connections.png?fit=max&auto=format&n=PyJ823JBh-_RDtS4&q=85&s=9ac30a5ba8491264dc57452ec449b879" width="3704" height="707" data-path="Technologies/Camera/images/csiphy_csid_connections.png" />
    </div>

    CAMSS V4L2 驱动位于 `<kernel_root>/drivers/media/platform/qcom/camss`。`<kernel_root>` 是 Linux 内核的目录。

    ***

    ### V4L2 示例应用程序 — Yavta

    本节介绍如何使用支持 V4L2 接口的应用程序捕获原始帧数据。

    <Note>
      将 IMX577 MIPI 摄像头传感器连接到 IQ-9075-EVK 设备的 CAM1 插槽。
    </Note>

    <Note>
      Yavta 默认作为镜像的一部分提供；无需显式安装。
    </Note>

    <Steps>
      <Step title="验证 CAMSS 模块">
        IMX412 和 CAMSS 模块默认加载。运行以下 lsmod 命令，验证 qcom\_camss 和 IMX412 模块是否已加载：

        ```bash Verify Modules theme={null}
        root@iq-9075-evk:/# lsmod |grep -iE "qcom_camss|imx412"
        qcom_camss            569344  20
        imx412                 16384  0
        ```

        预期结果是 IMX412 传感器驱动和 qcom\_camss 摄像头子系统模块加载成功，确认上游摄像头软件栈处于活动状态。
      </Step>

      <Step title="检查 media 节点编号">
        运行以下命令打印 CAMSS 驱动的 media 设备节点编号。

        如果 /dev/media0 未列出 qcom-camss 驱动，请尝试 /dev/media1。

        ```bash Check Media Node theme={null}
        # media-ctl -p -d /dev/media1 | grep camss
        driver       qcom-camss
        bus info     platform:acaf000.camss
        ```
      </Step>

      <Step title="检查 media 设备图">
        运行以下命令检查 media 设备图：

        ```bash Media Device Graph theme={null}
        media-ctl -p -d /dev/media'x'
        ```

        <div className="flex flex-col items-center gap-2">
          <img src="https://mintcdn.com/qualcomm-prod/PyJ823JBh-_RDtS4/Technologies/Camera/images/check-media-device-graph.png?fit=max&auto=format&n=PyJ823JBh-_RDtS4&q=85&s=e6ad0b7b921d0444ae235e510d760b1d" width="1075" height="362" data-path="Technologies/Camera/images/check-media-device-graph.png" />
        </div>
      </Step>

      <Step title="查找传感器名称">
        运行以下命令将传感器名称打印到终端：

        ```bash Find Sensor theme={null}
        # cat /sys/dev/char/81\:*/name | grep imx
        imx577 21-001a
        ```
      </Step>

      <Step title="配置 media controller">
        media controller 实用工具（media-ctrl）是用于配置摄像头子系统子设备的 [V4L2 实用工具](https://git.linuxtv.org/v4l-utils.git)。使用 `media-ctl --help` 打印使用说明。

        <Note>
          将 \[x] 替换为通过 :ref. \<检查 media 节点编号> 找到的编号。例如 `# media-ctl -d /dev/media1 --reset`。
        </Note>

        1. 将所有链接重置为非活动状态：
           ```bash Reset Links theme={null}
           # media-ctl -d /dev/media[x] --reset
           ```
        2. 在流水线节点上配置摄像头传感器格式和分辨率：
           ```bash Configure Sensor theme={null}
           # media-ctl -d /dev/media[x] -V '"imx577 21-001a":0[fmt:SRGGB10/ 4056x3040 field:none]'
           ```
        3. 以 4056x3040 分辨率配置 CSIPHY：
           ```bash Configure CSIPHY theme={null}
           # media-ctl -d /dev/media[x] -V '"msm_csiphy1":0[fmt:SRGGB10/ 4056x3040]'
           # media-ctl -d /dev/media[x] -V '"msm_csiphy1":1[fmt: SRGGB10/ 4056x3040]'
           ```
        4. 以 4056x3040 分辨率配置 CSID：
           ```bash Configure CSID theme={null}
           # media-ctl -d /dev/media[x] -V '"msm_csid0":0[fmt:SRGGB10/4056x3040] '
           # media-ctl -d /dev/media[x] -V '"msm_csid0":1[fmt:SRGGB10/ 4056x3040]'
           ```
        5. 以 3840x2160 分辨率配置 ISP：
           ```bash Configure ISP theme={null}
           # media-ctl -d /dev/media[x] -V '"msm_vfe0_rdi0":0[fmt:SRGGB10/ 4056x3040]'
           # media-ctl -d /dev/media[x] -V '"msm_vfe0_rdi0":1[fmt: SRGGB10/ 4056x3040]'
           ```
        6. 链接流水线：
           ```bash Link Pipeline theme={null}
           # media-ctl -d /dev/media[x] -l '"msm_csiphy1":1->"msm_csid0":0[1]'
           # media-ctl -d /dev/media[x] -l '"msm_csid0":1->"msm_vfe0_rdi0":0[1]'
           ```
      </Step>

      <Step title="捕获图像">
        [Yavta 测试应用程序](https://git.ideasonboard.org/yavta.git)使用 V4L2 接口验证摄像头。运行 Yavta 捕获图像：

        ```bash Yavta Capture theme={null}
        # yavta -B capture-mplane -c -I -n 5 -f SRGGB10P -s 4056x3040 -F /dev/video0 --capture=5 --file='frame-#.raw'
        ```
      </Step>
    </Steps>

    ***

    ### V4L2 示例应用程序 — libcamera

    libcamera 是一个开源软件框架。它负责控制 V4L2 摄像头接口，并向上层公开原生 C++ API。应用程序和上层框架基于 [libcamera 框架](https://www.kernel.org/doc/html/v4.9/media/kapi/v4l2-core.html)运行。

    有关 libcamera 架构的更多详细信息，请参阅 [libcamera architecture](https://libcamera.org/docs.html#libcamera-architecture)。

    <div className="flex flex-col items-center gap-2">
      <img src="https://mintcdn.com/qualcomm-prod/mGpYCfBsZaJSFIEo/Technologies/Camera/images/libcamera_framework.png?fit=max&auto=format&n=mGpYCfBsZaJSFIEo&q=85&s=c97752fbe4d6e6f45dad91f9f2f43d90" width="463" height="477" data-path="Technologies/Camera/images/libcamera_framework.png" />
    </div>

    libcamera 使用 [cam 实用工具](https://libcamera.org/getting-started.html#basic-testing-with-cam-utility)进行验证。

    ### 捕获原始帧数据

    以下步骤介绍如何通过 V4L2 接口使用摄像头实用应用程序捕获原始帧数据。

    <Note>
      将 IMX577 MIPI 摄像头传感器连接到 IQ-9075-EVK 设备的 CAM1 插槽。
    </Note>

    <Note>
      libcamera 默认作为镜像的一部分提供；无需显式安装。
    </Note>

    <Steps>
      <Step title="验证 CAMSS 模块">
        IMX412 和 CAMSS 模块默认加载。运行以下 lsmod 命令，验证 qcom\_camss 和 IMX412 模块是否已加载：

        ```bash Verify Modules theme={null}
        # lsmod | grep qcom_camss
        # lsmod | grep imx412
        ```
      </Step>

      <Step title="删除 uncalibrated.yaml">
        <Note>
          请先运行 `mount -o remount rw /usr`，否则会因 `Read-only file system` 错误而失败。
        </Note>

        ```bash Delete YAML theme={null}
        # rm -rf /usr/share/libcamera/ipa/simple/uncalibrated.yaml
        ```
      </Step>

      <Step title="运行 cam 实用工具">
        ```bash Run cam Utility theme={null}
        # cam -c 1 --capture=10 --file='frame-#.raw'
        ```

        这将运行该实用工具，在根目录中捕获 10 个原始帧并保存为文件。

        请查看控制台日志消息，了解转储图像的分辨率和格式信息。

        ```text Log Output theme={null}
        Using camera /base/soc@0/cci@ac4b000/i2c-bus@1/camera@1a as cam0 [0:15:01.067615799] [2155] INFO Camera camera.cpp:945 configuring streams:
        (0) 4056x3040-SRGGB10_CSI2P
        cam0: Capture 10 frames
        ```
      </Step>
    </Steps>
  </Tab>

  <Tab title="IQ-8275-EVK">
    Linux 内核中的 V4L2 框架支持视频设备。它提供的 API 允许用户空间应用程序与摄像头和视频采集卡等设备交互。

    有关 V4L2 的更多信息，请访问 [kernel.org](http://kernel.org)。

    Qualcomm 在上游内核中为原始帧转储功能支持 V4L2 接口摄像头 ISP 驱动。

    <div className="flex flex-col items-center gap-2">
      <img src="https://mintcdn.com/qualcomm-prod/PyJ823JBh-_RDtS4/Technologies/Camera/images/V4L2_interface.png?fit=max&auto=format&n=PyJ823JBh-_RDtS4&q=85&s=2d389eb4a92ae46d9e3009d2845c9416" width="409" height="397" data-path="Technologies/Camera/images/V4L2_interface.png" />
    </div>

    ***

    ### CAMSS 驱动

    上游内核中的 Qualcomm 摄像头子系统（CAMSS）驱动实现了 V4L2、media controller 和 V4L2 subdev 接口。

    支持在内核中使用 V4L2 subdev 接口的摄像头传感器。

    CAMSS 驱动由以下部分组成：

    * **CSIPHY 模块** – 处理 CSI2 接收器的物理层。每个 CSIPHY 模块可以连接一个独立的摄像头传感器。
    * **CSI 解码器（CSID）模块** – 处理 CSI2 接收器的协议层和应用层。CSID 可以解码来自任意 CSIPHY 的数据流。
    * **视频前端（VFE）模块** – 代表包含原始转储接口（RDI）输入接口的图像前端（IFE），这些接口绕过图像处理流水线。VFE 还包含将输出数据写入内存的 AXI 总线接口。

    <div className="flex flex-col items-center gap-2">
      <img src="https://mintcdn.com/qualcomm-prod/PyJ823JBh-_RDtS4/Technologies/Camera/images/camss_driver.png?fit=max&auto=format&n=PyJ823JBh-_RDtS4&q=85&s=3f34b24492d5a24b4bae5ce3fca77383" width="985" height="738" data-path="Technologies/Camera/images/camss_driver.png" />
    </div>

    CAMSS 驱动实现了 V4L2 接口。每个 CSIPHY、CSID 和 VFE 模块由一个 V4L2 子设备表示。

    如下图所示，每个 CSIPHY 都可以连接到每个 CSID。每个 CSID 都可以连接到每个 VFE。每个 RDI 端口都有独立的视频节点。

    <div className="flex flex-col items-center gap-2">
      <img src="https://mintcdn.com/qualcomm-prod/PyJ823JBh-_RDtS4/Technologies/Camera/images/csiphy_csid_connections.png?fit=max&auto=format&n=PyJ823JBh-_RDtS4&q=85&s=9ac30a5ba8491264dc57452ec449b879" width="3704" height="707" data-path="Technologies/Camera/images/csiphy_csid_connections.png" />
    </div>

    CAMSS V4L2 驱动位于 `<kernel_root>/drivers/media/platform/qcom/camss`。`<kernel_root>` 是 Linux 内核的目录。

    ***

    ### V4L2 示例应用程序 — Yavta

    本节介绍如何使用支持 V4L2 接口的应用程序捕获原始帧数据。

    <Note>
      将 IMX577 MIPI 摄像头传感器连接到 IQ-8275-EVK 设备的 CAM1 插槽。
    </Note>

    <Note>
      Yavta 默认作为镜像的一部分提供；无需显式安装。
    </Note>

    <Steps>
      <Step title="验证 CAMSS 模块">
        IMX412 和 CAMSS 模块默认加载。运行以下 lsmod 命令，验证 qcom\_camss 和 IMX412 模块是否已加载：

        ```bash Verify Modules theme={null}
        root@iq-8275-evk:/# lsmod |grep -iE "qcom_camss|imx412"
        qcom_camss            569344  20
        imx412                 16384  0
        ```

        预期结果是 IMX412 传感器驱动和 qcom\_camss 摄像头子系统模块加载成功，确认上游摄像头软件栈处于活动状态。
      </Step>

      <Step title="检查 media 节点编号">
        运行以下命令打印 CAMSS 驱动的 media 设备节点编号。

        如果 /dev/media0 未列出 qcom-camss 驱动，请尝试 /dev/media1。

        ```bash Check Media Node theme={null}
        # media-ctl -p -d /dev/media1 | grep camss
        driver       qcom-camss
        bus info     platform:acaf000.camss
        ```
      </Step>

      <Step title="检查 media 设备图">
        运行以下命令检查 media 设备图：

        ```bash Media Device Graph theme={null}
        media-ctl -p -d /dev/media'x'
        ```

        <div className="flex flex-col items-center gap-2">
          <img src="https://mintcdn.com/qualcomm-prod/PyJ823JBh-_RDtS4/Technologies/Camera/images/check-media-device-graph.png?fit=max&auto=format&n=PyJ823JBh-_RDtS4&q=85&s=e6ad0b7b921d0444ae235e510d760b1d" width="1075" height="362" data-path="Technologies/Camera/images/check-media-device-graph.png" />
        </div>
      </Step>

      <Step title="查找传感器名称">
        运行以下命令将传感器名称打印到终端：

        ```bash Find Sensor theme={null}
        # cat /sys/dev/char/81\:*/name | grep imx
        imx577 21-001a
        ```
      </Step>

      <Step title="配置 media controller">
        media controller 实用工具（media-ctrl）是用于配置摄像头子系统子设备的 [V4L2 实用工具](https://git.linuxtv.org/v4l-utils.git)。使用 `media-ctl --help` 打印使用说明。

        <Note>
          将 \[x] 替换为通过 :ref. \<检查 media 节点编号> 找到的编号。例如 `# media-ctl -d /dev/media1 --reset`。
        </Note>

        1. 将所有链接重置为非活动状态：
           ```bash Reset Links theme={null}
           # media-ctl -d /dev/media[x] --reset
           ```
        2. 在流水线节点上配置摄像头传感器格式和分辨率：
           ```bash Configure Sensor theme={null}
           # media-ctl -d /dev/media[x] -V '"imx577 21-001a":0[fmt:SRGGB10/ 4056x3040 field:none]'
           ```
        3. 以 4056x3040 分辨率配置 CSIPHY：
           ```bash Configure CSIPHY theme={null}
           # media-ctl -d /dev/media[x] -V '"msm_csiphy1":0[fmt:SRGGB10/ 4056x3040]'
           # media-ctl -d /dev/media[x] -V '"msm_csiphy1":1[fmt: SRGGB10/ 4056x3040]'
           ```
        4. 以 4056x3040 分辨率配置 CSID：
           ```bash Configure CSID theme={null}
           # media-ctl -d /dev/media[x] -V '"msm_csid0":0[fmt:SRGGB10/4056x3040] '
           # media-ctl -d /dev/media[x] -V '"msm_csid0":1[fmt:SRGGB10/ 4056x3040]'
           ```
        5. 以 3840x2160 分辨率配置 ISP：
           ```bash Configure ISP theme={null}
           # media-ctl -d /dev/media[x] -V '"msm_vfe0_rdi0":0[fmt:SRGGB10/ 4056x3040]'
           # media-ctl -d /dev/media[x] -V '"msm_vfe0_rdi0":1[fmt: SRGGB10/ 4056x3040]'
           ```
        6. 链接流水线：
           ```bash Link Pipeline theme={null}
           # media-ctl -d /dev/media[x] -l '"msm_csiphy1":1->"msm_csid0":0[1]'
           # media-ctl -d /dev/media[x] -l '"msm_csid0":1->"msm_vfe0_rdi0":0[1]'
           ```
      </Step>

      <Step title="捕获图像">
        [Yavta 测试应用程序](https://git.ideasonboard.org/yavta.git)使用 V4L2 接口验证摄像头。运行 Yavta 捕获图像：

        ```bash Yavta Capture theme={null}
        # yavta -B capture-mplane -c -I -n 5 -f SRGGB10P -s 4056x3040 -F /dev/video0 --capture=5 --file='frame-#.raw'
        ```
      </Step>
    </Steps>

    ***

    ### V4L2 示例应用程序 — libcamera

    libcamera 是一个开源软件框架。它负责控制 V4L2 摄像头接口，并向上层公开原生 C++ API。应用程序和上层框架基于 [libcamera 框架](https://www.kernel.org/doc/html/v4.9/media/kapi/v4l2-core.html)运行。

    有关 libcamera 架构的更多详细信息，请参阅 [libcamera architecture](https://libcamera.org/docs.html#libcamera-architecture)。

    <div className="flex flex-col items-center gap-2">
      <img src="https://mintcdn.com/qualcomm-prod/mGpYCfBsZaJSFIEo/Technologies/Camera/images/libcamera_framework.png?fit=max&auto=format&n=mGpYCfBsZaJSFIEo&q=85&s=c97752fbe4d6e6f45dad91f9f2f43d90" width="463" height="477" data-path="Technologies/Camera/images/libcamera_framework.png" />
    </div>

    libcamera 使用 [cam 实用工具](https://libcamera.org/getting-started.html#basic-testing-with-cam-utility)进行验证。

    ### 捕获原始帧数据

    以下步骤介绍如何通过 V4L2 接口使用摄像头实用应用程序捕获原始帧数据。

    <Note>
      将 IMX577 MIPI 摄像头传感器连接到 IQ-8275-EVK 设备的 CAM1 插槽。
    </Note>

    <Note>
      libcamera 默认作为镜像的一部分提供；无需显式安装。
    </Note>

    <Steps>
      <Step title="验证 CAMSS 模块">
        IMX412 和 CAMSS 模块默认加载。运行以下 lsmod 命令，验证 qcom\_camss 和 IMX412 模块是否已加载：

        ```bash Verify Modules theme={null}
        # lsmod | grep qcom_camss
        # lsmod | grep imx412
        ```
      </Step>

      <Step title="删除 uncalibrated.yaml">
        <Note>
          请先运行 `mount -o remount rw /usr`，否则会因 `Read-only file system` 错误而失败。
        </Note>

        ```bash Delete YAML theme={null}
        # rm -rf /usr/share/libcamera/ipa/simple/uncalibrated.yaml
        ```
      </Step>

      <Step title="运行 cam 实用工具">
        ```bash Run cam Utility theme={null}
        # cam -c 1 --capture=10 --file='frame-#.raw'
        ```

        这将运行该实用工具，在根目录中捕获 10 个原始帧并保存为文件。

        请查看控制台日志消息，了解转储图像的分辨率和格式信息。

        ```text Log Output theme={null}
        Using camera /base/soc@0/cci@ac4b000/i2c-bus@1/camera@1a as cam0 [0:15:01.067615799] [2155] INFO Camera camera.cpp:945 configuring streams:
        (0) 4056x3040-SRGGB10_CSI2P
        cam0: Capture 10 frames
        ```
      </Step>
    </Steps>
  </Tab>

  <Tab title="IQ615">
    Linux 内核中的 V4L2 框架支持视频设备。它提供的 API 允许用户空间应用程序与摄像头和视频采集卡等设备交互。

    有关 V4L2 的更多信息，请访问 [kernel.org](http://kernel.org)。

    Qualcomm 在上游内核中为原始帧转储功能支持 V4L2 接口摄像头 ISP 驱动。

    <div className="flex flex-col items-center gap-2">
      <img src="https://mintcdn.com/qualcomm-prod/PyJ823JBh-_RDtS4/Technologies/Camera/images/V4L2_interface.png?fit=max&auto=format&n=PyJ823JBh-_RDtS4&q=85&s=2d389eb4a92ae46d9e3009d2845c9416" width="409" height="397" data-path="Technologies/Camera/images/V4L2_interface.png" />
    </div>

    ***

    ### CAMSS 驱动

    上游内核中的 Qualcomm 摄像头子系统（CAMSS）驱动实现了 V4L2、media controller 和 V4L2 subdev 接口。

    支持在内核中使用 V4L2 subdev 接口的摄像头传感器。

    CAMSS 驱动由以下部分组成：

    * **CSIPHY 模块** – 处理 CSI2 接收器的物理层。每个 CSIPHY 模块可以连接一个独立的摄像头传感器。
    * **CSI 解码器（CSID）模块** – 处理 CSI2 接收器的协议层和应用层。CSID 可以解码来自任意 CSIPHY 的数据流。
    * **视频前端（VFE）模块** – 代表包含原始转储接口（RDI）输入接口的图像前端（IFE），这些接口绕过图像处理流水线。VFE 还包含将输出数据写入内存的 AXI 总线接口。

    <div className="flex flex-col items-center gap-2">
      <img src="https://mintcdn.com/qualcomm-prod/PyJ823JBh-_RDtS4/Technologies/Camera/images/camss_driver.png?fit=max&auto=format&n=PyJ823JBh-_RDtS4&q=85&s=3f34b24492d5a24b4bae5ce3fca77383" width="985" height="738" data-path="Technologies/Camera/images/camss_driver.png" />
    </div>

    CAMSS 驱动实现了 V4L2 接口。每个 CSIPHY、CSID 和 VFE 模块由一个 V4L2 子设备表示。

    如下图所示，每个 CSIPHY 都可以连接到每个 CSID。每个 CSID 都可以连接到每个 VFE。每个 RDI 端口都有独立的视频节点。

    <div className="flex flex-col items-center gap-2">
      <img src="https://mintcdn.com/qualcomm-prod/PyJ823JBh-_RDtS4/Technologies/Camera/images/csiphy_csid_connections.png?fit=max&auto=format&n=PyJ823JBh-_RDtS4&q=85&s=9ac30a5ba8491264dc57452ec449b879" width="3704" height="707" data-path="Technologies/Camera/images/csiphy_csid_connections.png" />
    </div>

    CAMSS V4L2 驱动位于 `<kernel_root>/drivers/media/platform/qcom/camss`。`<kernel_root>` 是 Linux 内核的目录。

    ***

    ### V4L2 示例应用程序 — Yavta

    本节介绍如何使用支持 V4L2 接口的应用程序捕获原始帧数据。

    <Note>
      将 IMX577 MIPI 摄像头传感器连接到 IQ615 设备的 CAM1 插槽。
    </Note>

    <Note>
      Yavta 默认作为镜像的一部分提供；无需显式安装。
    </Note>

    <Steps>
      <Step title="验证 CAMSS 模块">
        IMX412 和 CAMSS 模块默认加载。运行以下 lsmod 命令，验证 qcom\_camss 和 IMX412 模块是否已加载：

        ```bash Verify Modules theme={null}
        root@iq-615-evk:/# lsmod |grep -iE "qcom_camss|imx412"
        qcom_camss            569344  20
        imx412                 16384  0
        ```

        预期结果是 IMX412 传感器驱动和 qcom\_camss 摄像头子系统模块加载成功，确认上游摄像头软件栈处于活动状态。
      </Step>

      <Step title="检查 media 节点编号">
        运行以下命令打印 CAMSS 驱动的 media 设备节点编号。

        如果 /dev/media0 未列出 qcom-camss 驱动，请尝试 /dev/media1。

        ```bash Check Media Node theme={null}
        # media-ctl -p -d /dev/media1 | grep camss
        driver       qcom-camss
        bus info     platform:acaf000.camss
        ```
      </Step>

      <Step title="检查 media 设备图">
        运行以下命令检查 media 设备图：

        ```bash Media Device Graph theme={null}
        media-ctl -p -d /dev/media'x'
        ```

        <div className="flex flex-col items-center gap-2">
          <img src="https://mintcdn.com/qualcomm-prod/PyJ823JBh-_RDtS4/Technologies/Camera/images/check-media-device-graph.png?fit=max&auto=format&n=PyJ823JBh-_RDtS4&q=85&s=e6ad0b7b921d0444ae235e510d760b1d" width="1075" height="362" data-path="Technologies/Camera/images/check-media-device-graph.png" />
        </div>
      </Step>

      <Step title="查找传感器名称">
        运行以下命令将传感器名称打印到终端：

        ```bash Find Sensor theme={null}
        # cat /sys/dev/char/81\:*/name | grep imx
        imx577 21-001a
        ```
      </Step>

      <Step title="配置 media controller">
        media controller 实用工具（media-ctrl）是用于配置摄像头子系统子设备的 [V4L2 实用工具](https://git.linuxtv.org/v4l-utils.git)。使用 `media-ctl --help` 打印使用说明。

        <Note>
          将 \[x] 替换为通过 :ref. \<检查 media 节点编号> 找到的编号。例如 `# media-ctl -d /dev/media1 --reset`。
        </Note>

        1. 将所有链接重置为非活动状态：
           ```bash Reset Links theme={null}
           # media-ctl -d /dev/media[x] --reset
           ```
        2. 在流水线节点上配置摄像头传感器格式和分辨率：
           ```bash Configure Sensor theme={null}
           # media-ctl -d /dev/media[x] -V '"imx577 21-001a":0[fmt:SRGGB10/ 4056x3040 field:none]'
           ```
        3. 以 4056x3040 分辨率配置 CSIPHY：
           ```bash Configure CSIPHY theme={null}
           # media-ctl -d /dev/media[x] -V '"msm_csiphy1":0[fmt:SRGGB10/ 4056x3040]'
           # media-ctl -d /dev/media[x] -V '"msm_csiphy1":1[fmt: SRGGB10/ 4056x3040]'
           ```
        4. 以 4056x3040 分辨率配置 CSID：
           ```bash Configure CSID theme={null}
           # media-ctl -d /dev/media[x] -V '"msm_csid0":0[fmt:SRGGB10/4056x3040] '
           # media-ctl -d /dev/media[x] -V '"msm_csid0":1[fmt:SRGGB10/ 4056x3040]'
           ```
        5. 以 3840x2160 分辨率配置 ISP：
           ```bash Configure ISP theme={null}
           # media-ctl -d /dev/media[x] -V '"msm_vfe0_rdi0":0[fmt:SRGGB10/ 4056x3040]'
           # media-ctl -d /dev/media[x] -V '"msm_vfe0_rdi0":1[fmt: SRGGB10/ 4056x3040]'
           ```
        6. 链接流水线：
           ```bash Link Pipeline theme={null}
           # media-ctl -d /dev/media[x] -l '"msm_csiphy1":1->"msm_csid0":0[1]'
           # media-ctl -d /dev/media[x] -l '"msm_csid0":1->"msm_vfe0_rdi0":0[1]'
           ```
      </Step>

      <Step title="捕获图像">
        [Yavta 测试应用程序](https://git.ideasonboard.org/yavta.git)使用 V4L2 接口验证摄像头。运行 Yavta 捕获图像：

        ```bash Yavta Capture theme={null}
        # yavta -B capture-mplane -c -I -n 5 -f SRGGB10P -s 4056x3040 -F /dev/video0 --capture=5 --file='frame-#.raw'
        ```
      </Step>
    </Steps>

    ***

    ### V4L2 示例应用程序 — libcamera

    libcamera 是一个开源软件框架。它负责控制 V4L2 摄像头接口，并向上层公开原生 C++ API。应用程序和上层框架基于 [libcamera 框架](https://www.kernel.org/doc/html/v4.9/media/kapi/v4l2-core.html)运行。

    有关 libcamera 架构的更多详细信息，请参阅 [libcamera architecture](https://libcamera.org/docs.html#libcamera-architecture)。

    <div className="flex flex-col items-center gap-2">
      <img src="https://mintcdn.com/qualcomm-prod/mGpYCfBsZaJSFIEo/Technologies/Camera/images/libcamera_framework.png?fit=max&auto=format&n=mGpYCfBsZaJSFIEo&q=85&s=c97752fbe4d6e6f45dad91f9f2f43d90" width="463" height="477" data-path="Technologies/Camera/images/libcamera_framework.png" />
    </div>

    libcamera 使用 [cam 实用工具](https://libcamera.org/getting-started.html#basic-testing-with-cam-utility)进行验证。

    ### 捕获原始帧数据

    以下步骤介绍如何通过 V4L2 接口使用摄像头实用应用程序捕获原始帧数据。

    <Note>
      将 IMX577 MIPI 摄像头传感器连接到 IQ615 设备的 CAM1 插槽。
    </Note>

    <Note>
      libcamera 默认作为镜像的一部分提供；无需显式安装。
    </Note>

    <Steps>
      <Step title="验证 CAMSS 模块">
        IMX412 和 CAMSS 模块默认加载。运行以下 lsmod 命令，验证 qcom\_camss 和 IMX412 模块是否已加载：

        ```bash Verify Modules theme={null}
        # lsmod | grep qcom_camss
        # lsmod | grep imx412
        ```
      </Step>

      <Step title="删除 uncalibrated.yaml">
        <Note>
          请先运行 `mount -o remount rw /usr`，否则会因 `Read-only file system` 错误而失败。
        </Note>

        ```bash Delete YAML theme={null}
        # rm -rf /usr/share/libcamera/ipa/simple/uncalibrated.yaml
        ```
      </Step>

      <Step title="运行 cam 实用工具">
        ```bash Run cam Utility theme={null}
        # cam -c 1 --capture=10 --file='frame-#.raw'
        ```

        这将运行该实用工具，在根目录中捕获 10 个原始帧并保存为文件。

        请查看控制台日志消息，了解转储图像的分辨率和格式信息。

        ```text Log Output theme={null}
        Using camera /base/soc@0/cci@ac4b000/i2c-bus@1/camera@1a as cam0 [0:15:01.067615799] [2155] INFO Camera camera.cpp:945 configuring streams:
        (0) 4056x3040-SRGGB10_CSI2P
        cam0: Capture 10 frames
        ```
      </Step>
    </Steps>
  </Tab>

  <Tab title="IQx7181">
    Linux 内核中的 V4L2 框架支持视频设备。它提供的 API 允许用户空间应用程序与摄像头和视频采集卡等设备交互。

    有关 V4L2 的更多信息，请访问 [kernel.org](http://kernel.org)。

    Qualcomm 在上游内核中为原始帧转储功能支持 V4L2 接口摄像头 ISP 驱动。

    <div className="flex flex-col items-center gap-2">
      <img src="https://mintcdn.com/qualcomm-prod/PyJ823JBh-_RDtS4/Technologies/Camera/images/V4L2_interface.png?fit=max&auto=format&n=PyJ823JBh-_RDtS4&q=85&s=2d389eb4a92ae46d9e3009d2845c9416" width="409" height="397" data-path="Technologies/Camera/images/V4L2_interface.png" />
    </div>

    ***

    ### CAMSS 驱动

    上游内核中的 Qualcomm 摄像头子系统（CAMSS）驱动实现了 V4L2、media controller 和 V4L2 subdev 接口。

    支持在内核中使用 V4L2 subdev 接口的摄像头传感器。

    CAMSS 驱动由以下部分组成：

    * **CSIPHY 模块** – 处理 CSI2 接收器的物理层。每个 CSIPHY 模块可以连接一个独立的摄像头传感器。
    * **CSI 解码器（CSID）模块** – 处理 CSI2 接收器的协议层和应用层。CSID 可以解码来自任意 CSIPHY 的数据流。
    * **视频前端（VFE）模块** – 代表包含原始转储接口（RDI）输入接口的图像前端（IFE），这些接口绕过图像处理流水线。VFE 还包含将输出数据写入内存的 AXI 总线接口。

    <div className="flex flex-col items-center gap-2">
      <img src="https://mintcdn.com/qualcomm-prod/PyJ823JBh-_RDtS4/Technologies/Camera/images/camss_driver.png?fit=max&auto=format&n=PyJ823JBh-_RDtS4&q=85&s=3f34b24492d5a24b4bae5ce3fca77383" width="985" height="738" data-path="Technologies/Camera/images/camss_driver.png" />
    </div>

    CAMSS 驱动实现了 V4L2 接口。每个 CSIPHY、CSID 和 VFE 模块由一个 V4L2 子设备表示。

    如下图所示，每个 CSIPHY 都可以连接到每个 CSID。每个 CSID 都可以连接到每个 VFE。每个 RDI 端口都有独立的视频节点。

    <div className="flex flex-col items-center gap-2">
      <img src="https://mintcdn.com/qualcomm-prod/PyJ823JBh-_RDtS4/Technologies/Camera/images/csiphy_csid_connections.png?fit=max&auto=format&n=PyJ823JBh-_RDtS4&q=85&s=9ac30a5ba8491264dc57452ec449b879" width="3704" height="707" data-path="Technologies/Camera/images/csiphy_csid_connections.png" />
    </div>

    CAMSS V4L2 驱动位于 `<kernel_root>/drivers/media/platform/qcom/camss`。`<kernel_root>` 是 Linux 内核的目录。

    ***

    ### V4L2 示例应用程序 — Yavta

    本节介绍如何使用支持 V4L2 接口的应用程序捕获原始帧数据。

    <Note>
      将 IMX577 MIPI 摄像头传感器连接到 IQx7181 设备的 CAM1（CSI1 22 针）插槽。
    </Note>

    <Note>
      Yavta 默认作为镜像的一部分提供；无需显式安装。
    </Note>

    <Steps>
      <Step title="验证 CAMSS 模块">
        IMX412 和 CAMSS 模块默认加载。运行以下 lsmod 命令，验证 qcom\_camss 和 IMX412 模块是否已加载：

        ```bash Verify Modules theme={null}
           lsmod | grep qcom_camss 
           lsmod | grep imx412
        ```
      </Step>

      <Step title="检查 media 节点编号">
        运行以下命令打印 CAMSS 驱动的 media 设备节点编号。

        如果 /dev/media0 未列出 qcom-camss 驱动，请尝试 /dev/media1。

        ```bash Check Media Node theme={null}
        # media-ctl -p -d /dev/media1 | grep camss
        driver       qcom-camss
        bus info     platform:acaf000.camss
        ```
      </Step>

      <Step title="检查 media 设备图">
        运行以下命令检查 media 设备图：

        ```bash Media Device Graph theme={null}
        media-ctl -p -d /dev/media'x'
        ```

        <div className="flex flex-col items-center gap-2">
          <img src="https://mintcdn.com/qualcomm-prod/PyJ823JBh-_RDtS4/Technologies/Camera/images/check-media-device-graph.png?fit=max&auto=format&n=PyJ823JBh-_RDtS4&q=85&s=e6ad0b7b921d0444ae235e510d760b1d" width="1075" height="362" data-path="Technologies/Camera/images/check-media-device-graph.png" />
        </div>
      </Step>

      <Step title="查找传感器名称">
        运行以下命令将传感器名称打印到终端：

        ```bash Find Sensor theme={null}
        # cat /sys/dev/char/81\:*/name | grep imx
        imx577 21-001a
        ```
      </Step>

      <Step title="配置 media controller">
        media controller 实用工具（media-ctrl）是用于配置摄像头子系统子设备的 [V4L2 实用工具](https://git.linuxtv.org/v4l-utils.git)。使用 `media-ctl --help` 打印使用说明。

        <Note>
          将 \[x] 替换为通过 :ref. \<检查 media 节点编号> 找到的编号。例如 `# media-ctl -d /dev/media1 --reset`。
        </Note>

        1. 将所有链接重置为非活动状态：
           ```bash Reset Links theme={null}
           # media-ctl -d /dev/media[x] --reset
           ```
        2. 在流水线节点上配置摄像头传感器格式和分辨率：
           ```bash Configure Sensor theme={null}
           # media-ctl -d /dev/media[x] -V '"imx577 21-001a":0[fmt:SRGGB10/ 4056x3040 field:none]'
           ```
        3. 以 4056x3040 分辨率配置 CSIPHY：
           ```bash Configure CSIPHY theme={null}
           # media-ctl -d /dev/media[x] -V '"msm_csiphy1":0[fmt:SRGGB10/ 4056x3040]'
           # media-ctl -d /dev/media[x] -V '"msm_csiphy1":1[fmt: SRGGB10/ 4056x3040]'
           ```
        4. 以 4056x3040 分辨率配置 CSID：
           ```bash Configure CSID theme={null}
           # media-ctl -d /dev/media[x] -V '"msm_csid0":0[fmt:SRGGB10/4056x3040] '
           # media-ctl -d /dev/media[x] -V '"msm_csid0":1[fmt:SRGGB10/ 4056x3040]'
           ```
        5. 以 3840x2160 分辨率配置 ISP：
           ```bash Configure ISP theme={null}
           # media-ctl -d /dev/media[x] -V '"msm_vfe0_rdi0":0[fmt:SRGGB10/ 4056x3040]'
           # media-ctl -d /dev/media[x] -V '"msm_vfe0_rdi0":1[fmt: SRGGB10/ 4056x3040]'
           ```
        6. 链接流水线：
           ```bash Link Pipeline theme={null}
           # media-ctl -d /dev/media[x] -l '"msm_csiphy1":1->"msm_csid0":0[1]'
           # media-ctl -d /dev/media[x] -l '"msm_csid0":1->"msm_vfe0_rdi0":0[1]'
           ```
      </Step>

      <Step title="捕获图像">
        [Yavta 测试应用程序](https://git.ideasonboard.org/yavta.git)使用 V4L2 接口验证摄像头。运行 Yavta 捕获图像：

        ```bash Yavta Capture theme={null}
        # yavta -B capture-mplane -c -I -n 5 -f SRGGB10P -s 4056x3040 -F /dev/video0 --capture=5 --file='frame-#.raw'
        ```
      </Step>
    </Steps>

    ***

    ### V4L2 示例应用程序 — libcamera

    libcamera 是一个开源软件框架。它负责控制 V4L2 摄像头接口，并向上层公开原生 C++ API。应用程序和上层框架基于 [libcamera 框架](https://www.kernel.org/doc/html/v4.9/media/kapi/v4l2-core.html)运行。

    有关 libcamera 架构的更多详细信息，请参阅 [libcamera architecture](https://libcamera.org/docs.html#libcamera-architecture)。

    <div className="flex flex-col items-center gap-2">
      <img src="https://mintcdn.com/qualcomm-prod/mGpYCfBsZaJSFIEo/Technologies/Camera/images/libcamera_framework.png?fit=max&auto=format&n=mGpYCfBsZaJSFIEo&q=85&s=c97752fbe4d6e6f45dad91f9f2f43d90" width="463" height="477" data-path="Technologies/Camera/images/libcamera_framework.png" />
    </div>

    libcamera 使用 [cam 实用工具](https://libcamera.org/getting-started.html#basic-testing-with-cam-utility)进行验证。

    ### 捕获原始帧数据

    以下步骤介绍如何通过 V4L2 接口使用摄像头实用应用程序捕获原始帧数据。

    <Note>
      将 IMX577 MIPI 摄像头传感器连接到 IQx7181 设备的 CAM1 插槽。
    </Note>

    <Note>
      libcamera 默认作为镜像的一部分提供；无需显式安装。
    </Note>

    <Steps>
      <Step title="验证 CAMSS 模块">
        IMX412 和 CAMSS 模块默认加载。运行以下 lsmod 命令，验证 qcom\_camss 和 IMX412 模块是否已加载：

        ```bash Verify Modules theme={null}
        # lsmod | grep qcom_camss
        # lsmod | grep imx412
        ```
      </Step>

      <Step title="删除 uncalibrated.yaml">
        <Note>
          请先运行 `mount -o remount rw /usr`，否则会因 `Read-only file system` 错误而失败。
        </Note>

        ```bash Delete YAML theme={null}
        # rm -rf /usr/share/libcamera/ipa/simple/uncalibrated.yaml
        ```
      </Step>

      <Step title="运行 cam 实用工具">
        ```bash Run cam Utility theme={null}
        # cam -c 1 --capture=10 --file='frame-#.raw'
        ```

        这将运行该实用工具，在根目录中捕获 10 个原始帧并保存为文件。

        请查看控制台日志消息，了解转储图像的分辨率和格式信息。

        ```text Log Output theme={null}
        Using camera /base/soc@0/cci@ac4b000/i2c-bus@1/camera@1a as cam0 [0:15:01.067615799] [2155] INFO Camera camera.cpp:945 configuring streams:
        (0) 4056x3040-SRGGB10_CSI2P
        cam0: Capture 10 frames
        ```
      </Step>
    </Steps>
  </Tab>
</Tabs>

## **USB 摄像头**

Qualcomm Linux 设备为符合 USB 视频类（UVC）标准的 USB 网络摄像头提供驱动支持。UVC 视频驱动将这些摄像头公开为 V4L2 视频设备，可通过 /dev/videoX 等字符设备节点访问。有关 USB 摄像头的使用，请参阅 [USB 摄像头配置](https://dragonwingdocs.qualcomm.com/System/Interfaces/usb)。示例应用程序 [gst-usb-single-camera-app](https://imsdkdocs.qualcomm.com/sample-application/ai-sample-applications#ai-usb-camera) 可用于 USB 摄像头验证。

## **网络摄像头**

可以通过开源 GStreamer 插件支持网络摄像头。从网络获取摄像头流取决于 GStreamer 插件支持的网络协议。开发者可以使用开源 GStreamer 插件（例如 rtspsrc）处理来自网络的摄像头流，并根据需要创建流水线。有关插件详情，请参阅 [rtspsrc](https://gstreamer.freedesktop.org/documentation/rtsp/rtspsrc.html?gi-language=c)。

示例应用程序 [gst-ai-multistream-inference](https://imsdkdocs.qualcomm.com/sample-application/ai-sample-applications#multistream-inference) 也可用于网络摄像头验证。有关设置以太网网络连接的说明，请参阅[启用以太网](https://dragonwingdocs.qualcomm.com/Technologies/Ethernet/bring-up-ethernet)。

有关在 Qualcomm 平台上开发 GStreamer 应用程序的信息，请参阅 [Qualcomm Intelligent Multimedia SDK](https://imsdkdocs.qualcomm.com/)。
