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

# 摄像头

IQ8-EVK 通过三个 MIPI CSI 接口支持摄像头传感器连接,同时支持 C-PHY 和 D-PHY 模式。

## 硬件架构

### CSI 接口映射

| CSI 接口 | 模拟开关              | 摄像头连接器 | B2B 连接器          |
| ------ | ----------------- | ------ | ---------------- |
| CSI0   | U45 (TMUX646ZECR) | JCAM0  | JEXP4,引脚 111–120 |
| CSI1   | U42 (TMUX646ZECR) | JCAM1  | JEXP4,引脚 51–60   |
| CSI2   | U44 (TMUX646ZECR) | JCAM2  | JEXP4,引脚 40–49   |

<img src="https://mintcdn.com/qualcomm-staging/TEuuywLWbysJVmUv/Linux/images/peripheral-interfaces/camera_mipi_rb4.png?fit=max&auto=format&n=TEuuywLWbysJVmUv&q=85&s=4260c291135f1f684b561e7d21d3e9c0" width="581" height="624" data-path="Linux/images/peripheral-interfaces/camera_mipi_rb4.png" />

<img src="https://mintcdn.com/qualcomm-staging/TEuuywLWbysJVmUv/Linux/images/peripheral-interfaces/iq8275_camera_interface.png?fit=max&auto=format&n=TEuuywLWbysJVmUv&q=85&s=c882f1e25ff88d87444a18198cf18933" width="796" height="710" data-path="Linux/images/peripheral-interfaces/iq8275_camera_interface.png" />

### DIP 开关配置

<img src="https://mintcdn.com/qualcomm-staging/TEuuywLWbysJVmUv/Linux/images/peripheral-interfaces/Camera_dipswitch.png?fit=max&auto=format&n=TEuuywLWbysJVmUv&q=85&s=f79947220ba381309e239d4cebac8dcd" width="416" height="145" data-path="Linux/images/peripheral-interfaces/Camera_dipswitch.png" />

| 开关    | ON                    | OFF(默认)   |
| ----- | --------------------- | --------- |
| SW1-5 | CSI0 → GMSL mezzanine | CSI0 → 主板 |
| SW1-6 | CSI1 → GMSL mezzanine | CSI1 → 主板 |
| SW1-7 | CSI2 → GMSL mezzanine | CSI2 → 主板 |

## 支持的 MIPI CSI 摄像头传感器

### ov9282 摄像头传感器

<img src="https://mintcdn.com/qualcomm-staging/TEuuywLWbysJVmUv/Linux/images/peripheral-interfaces/ov9282_camera_sensor.png?fit=max&auto=format&n=TEuuywLWbysJVmUv&q=85&s=3b64358d796346b8bb3b92748d9d8640" width="292" height="184" data-path="Linux/images/peripheral-interfaces/ov9282_camera_sensor.png" />

### Arducam imx577 摄像头传感器

<img src="https://mintcdn.com/qualcomm-staging/TEuuywLWbysJVmUv/Linux/images/peripheral-interfaces/Rasberrypi_imx577_camera_sensor.png?fit=max&auto=format&n=TEuuywLWbysJVmUv&q=85&s=cd0abfc700e168571037acae6cab786b" width="388" height="315" data-path="Linux/images/peripheral-interfaces/Rasberrypi_imx577_camera_sensor.png" />

**Arducam 传感器需要额外的转接板(Arducam 22 针转 Qualcomm 30 针 CSI 适配器)**

<img src="https://mintcdn.com/qualcomm-staging/TEuuywLWbysJVmUv/Linux/images/peripheral-interfaces/BoardSide_Flexi_cable_converter_for_RasberryPi_based_Camera.png?fit=max&auto=format&n=TEuuywLWbysJVmUv&q=85&s=5929bde4d3969426d699320b662a659e" width="656" height="253" data-path="Linux/images/peripheral-interfaces/BoardSide_Flexi_cable_converter_for_RasberryPi_based_Camera.png" />

<img src="https://mintcdn.com/qualcomm-staging/TEuuywLWbysJVmUv/Linux/images/peripheral-interfaces/Cameraside_Flexi_cable_converter_for_RasberryPi_based_Camera.png?fit=max&auto=format&n=TEuuywLWbysJVmUv&q=85&s=f345fdda8ef5f4987196adaeef9b083b" width="874" height="354" data-path="Linux/images/peripheral-interfaces/Cameraside_Flexi_cable_converter_for_RasberryPi_based_Camera.png" />

**Arducam imx577 传感器 + 22 针排线 + 转接板**

<img src="https://mintcdn.com/qualcomm-staging/TEuuywLWbysJVmUv/Linux/images/peripheral-interfaces/arducam_flexcable_frontside.png?fit=max&auto=format&n=TEuuywLWbysJVmUv&q=85&s=b61e497aa4a5c26058e46617ff80093a" width="1164" height="308" data-path="Linux/images/peripheral-interfaces/arducam_flexcable_frontside.png" />

<img src="https://mintcdn.com/qualcomm-staging/TEuuywLWbysJVmUv/Linux/images/peripheral-interfaces/arducam_flexcable_backside.png?fit=max&auto=format&n=TEuuywLWbysJVmUv&q=85&s=5ca292ada2a719ac1c54733f1d0edc53" width="1197" height="382" data-path="Linux/images/peripheral-interfaces/arducam_flexcable_backside.png" />

### Arducam imx577 摄像头传感器连接到 iq8275

<img src="https://mintcdn.com/qualcomm-staging/TEuuywLWbysJVmUv/Linux/images/peripheral-interfaces/rb4_with_arducam_imx577.png?fit=max&auto=format&n=TEuuywLWbysJVmUv&q=85&s=4cc95f913085b2a7bd7fcca0542efb09" width="678" height="873" data-path="Linux/images/peripheral-interfaces/rb4_with_arducam_imx577.png" />

### ov9282 摄像头传感器连接到 iq8275

<img src="https://mintcdn.com/qualcomm-staging/TEuuywLWbysJVmUv/Linux/images/peripheral-interfaces/rb4_with_arducam_ov9282.png?fit=max&auto=format&n=TEuuywLWbysJVmUv&q=85&s=a6b8efa726260c6c78ce5235a3f1a58b" width="668" height="794" data-path="Linux/images/peripheral-interfaces/rb4_with_arducam_ov9282.png" />

## 支持的分辨率

| 分辨率         | 宽高比  | IMX577 | OV9282 |
| ----------- | ---- | ------ | ------ |
| 4000 × 3000 | 4:3  | 是      | 否      |
| 3840 × 2160 | 16:9 | 是      | 否      |
| 1920 × 1080 | 16:9 | 是      | 否      |
| 1280 × 720  | 16:9 | 是      | 是      |
| 1024 × 768  | 4:3  | 是      | 是      |
| 800 × 600   | 4:3  | 是      | 是      |
| 640 × 480   | 4:3  | 是      | 是      |
| 320 × 240   | 4:3  | 是      | 是      |

<Note>
  * IQ-8275 不支持 SHDR、LDC 和 EIS 等高级功能。
  * 没有硬件 JPEG 编码器 — 快照使用运行在 CPU 上的软件编码器。
</Note>

## 摄像头串流

### 运行摄像头的先决条件

* 启用摄像头功能

在 Qualcomm Linux 2.0 上,qcom-multimedia-proprietary-image 默认包含下游摄像头软件包,但摄像头功能不会自动启用。
在设备 shell 中运行以下命令,在 qcom-multimedia-proprietary-image 上启用摄像头支持:

```bash theme={null}
echo -n "camx" > /var/data
efivar -n 882f8c2b-9646-435f-8de5-f208ff80c1bd-VendorDtbOverlays -w -f /var/data
efivar -n 882f8c2b-9646-435f-8de5-f208ff80c1bd-VendorDtbOverlays -p
sync
reboot
```

* 清除 GStreamer 注册表(如有需要)

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

```bash theme={null}
rm ~/.cache/gstreamer-1.0/registry.aarch64.bin
```

### 单摄像头串流

```bash theme={null}
gst-launch-1.0 -e qticamsrc name=camsrc camera=0 ! 'video/x-raw,format=NV12,\
width=1280,height=720,framerate=30/1' ! fakesink
```

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

```bash 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
```

### 视频编码

```bash theme={null}
gst-launch-1.0 -e qticamsrc 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。
设备上会生成 /opt/mux\_avc.mp4。可在主机 PC 上运行以下 scp 命令从设备拉取录制的内容:

```bash theme={null}
scp -r root@[ip-addr]:/opt/mux_avc.mp4 .
```

### 视频编码 + 快照

<Steps>
  <Step title="启动管线">
    ```bash theme={null}
    gst-pipeline-app -e qticamsrc 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="拍摄快照">
    在交互式菜单中:**(1) Ready → (3) Playing → (p) Plugin Mode → (11) camerasrc → (37) capture-image → (1) Snapshot → 输入数量**
  </Step>

  <Step title="停止并获取文件">
    按 Enter → `b`(返回)→ `q`(退出)。

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

## 使用 Offline IFE 的多摄像头

<img src="https://mintcdn.com/qualcomm-staging/TEuuywLWbysJVmUv/Linux/images/peripheral-interfaces/camera_offline_IFE.png?fit=max&auto=format&n=TEuuywLWbysJVmUv&q=85&s=8884027adc8ad29418ddeec4ff1d9c5f" width="709" height="361" data-path="Linux/images/peripheral-interfaces/camera_offline_IFE.png" />

IQ-8275 摄像头子系统包含两个完整的 Image Front End (IFE) 硬件块,能够实时执行 Bayer 到 YUV 的图像处理。
在传统的实时摄像头管线中,每个 Bayer 摄像头都需要一个 IFE 用于去 Bayer 化和图像信号处理,这将 Bayer 摄像头的并发串流限制为两个摄像头。
**Offline IFE** 功能通过将图像采集与图像处理分离来扩展这一能力。
在此模式下,每个摄像头传感器都连接到一个 IFE-Lite 实例,该实例通过 RDI 路径捕获传入的 RAW Bayer 数据,并将其直接写入 DDR 内存,而不执行任何图像处理。
存储的 RAW 帧随后由 SFE Lite 取数引擎从 DDR 中获取,并提供给 IFE 进行离线 Bayer 到 YUV 处理。
由于输入帧来自内存而非直接来自传感器接口,单个 IFE 可以在多个摄像头之间分时复用其处理资源。
因此,两个可用的 IFE 各自可以处理来自两个不同摄像头的 RAW 帧,从而支持最多四个 Bayer 摄像头的并发串流。

### 验证多摄像头运行

将三个 MIPI 摄像头(OV9282 或 IMX577)连接到 MIPI CSI 插槽(0、1 和 2)

为每个摄像头运行带 **multicamera-hint=true** 的 GST 命令以启用此功能。例如:

```bash theme={null}
gst-launch-1.0 -e qticamsrc name=camsrc camera=0 multicamera-hint=true ! \
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 功能已启用**

```
CamX: [CORE_CFG]3509 3556 [CORE   ] camxpipeline.h:4222 SetPipelineStatus() RealTimeFeatureZSLPreviewRawOfflineIFE_0_cam_0 status is now PipelineStatus::STREAM_ON

```

## 故障排除

<AccordionGroup>
  <Accordion title="摄像头应用无法工作">
    <Steps>
      <Step title="检查摄像头模块连接和 DIP 开关设置" />

      <Step title="重启 cam-server">
        ```bash theme={null}
        systemctl restart cam-server
        # or
        pkill cam-server
        ```
      </Step>

      <Step title="运行单路串流测试">
        ```bash theme={null}
        gst-launch-1.0 -e qticamsrc name=camsrc camera=0 ! 'video/x-raw,format=NV12,\
        width=1280,height=720,framerate=30/1' ! fakesink
        ```
      </Step>
    </Steps>
  </Accordion>

  <Accordion title="摄像头传感器未能探测">
    收集日志并搜索 `probe success`:

    ```bash theme={null}
    journalctl -f > /opt/user_log.txt
    ```

    **预期的探测成功日志:**

    ```
    CAM_INFO: CAM-SENSOR: Probe success, slot:0, slave_addr: 0x34, sensor_id:0x577
    ```

    如果未出现探测成功日志,请检查排线连接或摄像头模块。
  </Accordion>

  <Accordion title="摄像头无法串流">
    启用 CSI 调试日志并收集 dmesg:

    ```bash theme={null}
    echo 3 > /sys/kernel/debug/camera/ife/ife_csid_debug
    dmesg -w > /opt/kernel_log.txt
    ```

    启动摄像头,并在日志中检查 SOF/EOF IRQ 消息。
    **预期日志:**

    ```
    CAM_INFO: CAM-ISP: cam_ife_csid_irq: 5288 CSID:1 IPP SOF received
    CAM_INFO: CAM-ISP: cam_ife_csid_irq: 5300 CSID:1 IPP EOF received
    CAM_INFO: CAM-ISP: cam_ife_csid_irq: 5288 CSID:1 IPP SOF received
    CAM_INFO: CAM-ISP: cam_ife_csid_irq: 5300 CSID:1 IPP EOF received
    ```
  </Accordion>
</AccordionGroup>

### 收集调试日志

```bash theme={null}
journalctl -f > /opt/user_log.txt   # User space logs
dmesg -w > /opt/kernel_log.txt      # Kernel logs
```

## 资源

| 主题          | 链接                                                                                                                                      |
| ----------- | --------------------------------------------------------------------------------------------------------------------------------------- |
| 摄像头架构       | [Camera Architecture](https://docs.qualcomm.com/doc/80-70023-17A/topic/camera-architecture.html)                                        |
| 摄像头传感器驱动开发  | [Camera Sensor Driver Development](https://docs.qualcomm.com/doc/80-70023-17A/topic/camera-sensor-driver-development.html)              |
| 自定义摄像头用例和管线 | [Customize Camera Use Case and Pipeline](https://docs.qualcomm.com/doc/80-70023-17A/topic/customize-camera-use-case-and-pipelines.html) |
| 自定义高级摄像头功能  | [Customize Advanced Camera Features](https://docs.qualcomm.com/doc/80-70023-17A/topic/customize-advanced-camera-features.html)          |
