> ## 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.

# 摄像头

IQ9-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   |
| CSI3   | U43（TMUX646ZECR） | JCAM3  | JEXP4，引脚 29–38   |

<img src="https://mintcdn.com/qualcomm-prod/tRWO8v_Df_ujnDuD/Ubuntu/images/peripheral-interfaces/Camera_mipi.png?fit=max&auto=format&n=tRWO8v_Df_ujnDuD&q=85&s=af310a2881a9fe31067fcdf8f2c162cd" width="551" height="649" data-path="Ubuntu/images/peripheral-interfaces/Camera_mipi.png" />

<img src="https://mintcdn.com/qualcomm-prod/P0rmO3AZfXx7cgqQ/Ubuntu/images/peripheral-interfaces/IQ9075_camera_interface_configuration.png?fit=max&auto=format&n=P0rmO3AZfXx7cgqQ&q=85&s=16d2f6a8e5d476f017db4042b96ca6ee" width="930" height="1059" data-path="Ubuntu/images/peripheral-interfaces/IQ9075_camera_interface_configuration.png" />

### DIP 开关配置

通过 DIP 开关，四个 CSI PHY 可以路由到 MIPI 摄像头端口或 GMSL 摄像头端口（通过夹层板）。

<img src="https://mintcdn.com/qualcomm-prod/tRWO8v_Df_ujnDuD/Ubuntu/images/peripheral-interfaces/Camera_dipswitch.png?fit=max&auto=format&n=tRWO8v_Df_ujnDuD&q=85&s=94f4c6e39c1dae2cae22dd7741525ce1" width="416" height="145" data-path="Ubuntu/images/peripheral-interfaces/Camera_dipswitch.png" />

<Warning>
  SW1 是上图中左侧的一组开关。
</Warning>

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

## 支持的摄像头传感器

### Raspberry Pi 摄像头传感器

<img src="https://mintcdn.com/qualcomm-prod/P0rmO3AZfXx7cgqQ/Ubuntu/images/peripheral-interfaces/Rasberrypi_imx577_camera_sensor.png?fit=max&auto=format&n=P0rmO3AZfXx7cgqQ&q=85&s=8008fcdf4e8bbaf3f53d3ee1e8e35188" width="388" height="315" data-path="Ubuntu/images/peripheral-interfaces/Rasberrypi_imx577_camera_sensor.png" />

<img src="https://mintcdn.com/qualcomm-prod/P0rmO3AZfXx7cgqQ/Ubuntu/images/peripheral-interfaces/Rasberrypi_ov9282_camera_sensor.png?fit=max&auto=format&n=P0rmO3AZfXx7cgqQ&q=85&s=05cab98379ac6afc58a4d1f1e9c66ac0" width="363" height="378" data-path="Ubuntu/images/peripheral-interfaces/Rasberrypi_ov9282_camera_sensor.png" />

**排线（Arducam 22 针 Raspberry Pi 转 Qualcomm 30 针 CSI 适配器）：**

<img src="https://mintcdn.com/qualcomm-prod/tRWO8v_Df_ujnDuD/Ubuntu/images/peripheral-interfaces/Arducam_CSI_port_FlexiCable.png?fit=max&auto=format&n=tRWO8v_Df_ujnDuD&q=85&s=3a11a3bd84258fdcf3ee022caece0e71" width="951" height="95" data-path="Ubuntu/images/peripheral-interfaces/Arducam_CSI_port_FlexiCable.png" />

<img src="https://mintcdn.com/qualcomm-prod/tRWO8v_Df_ujnDuD/Ubuntu/images/peripheral-interfaces/BoardSide_Flexi_cable_converter_for_RasberryPi_based_Camera.png?fit=max&auto=format&n=tRWO8v_Df_ujnDuD&q=85&s=d1f84333b6e0a9997e222bcf55c6a936" width="656" height="253" data-path="Ubuntu/images/peripheral-interfaces/BoardSide_Flexi_cable_converter_for_RasberryPi_based_Camera.png" />

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

### MIPI CSI 摄像头传感器

<img src="https://mintcdn.com/qualcomm-prod/tRWO8v_Df_ujnDuD/Ubuntu/images/peripheral-interfaces/IMX577_camera_sensor.png?fit=max&auto=format&n=tRWO8v_Df_ujnDuD&q=85&s=a48e8b9904ae32188a3ebe8076e195e3" width="341" height="538" data-path="Ubuntu/images/peripheral-interfaces/IMX577_camera_sensor.png" />

<img src="https://mintcdn.com/qualcomm-prod/tRWO8v_Df_ujnDuD/Ubuntu/images/peripheral-interfaces/IMX577_camera_sensor_connection.png?fit=max&auto=format&n=tRWO8v_Df_ujnDuD&q=85&s=d27853e5bfe062e2726343c9e97f1d63" width="990" height="660" data-path="Ubuntu/images/peripheral-interfaces/IMX577_camera_sensor_connection.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-9075 不支持 SHDR、LDC 和 EIS 等高级特性。没有硬件 JPEG 编码器 — 抓拍使用运行在 CPU 上的软件编码器。
</Note>

## 摄像头流传输

### 单摄像头流

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

如果管道状态变为 `PLAYING`，说明摄像头正在运行。按 `Ctrl+C` 停止。

### 视频编码

```bash 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=/home/ubuntu/mux_avc.mp4
```

获取文件：

```bash theme={null}
scp -r ubuntu@<ip-addr>:/home/ubuntu/mux_avc.mp4 .
```

### 目标检测管道

<img src="https://mintcdn.com/qualcomm-prod/P0rmO3AZfXx7cgqQ/Ubuntu/images/peripheral-interfaces/gst-ai-object-detection_pipeline.png?fit=max&auto=format&n=P0rmO3AZfXx7cgqQ&q=85&s=d7e6adeae778469d38ae3377ff77ef48" width="1708" height="596" data-path="Ubuntu/images/peripheral-interfaces/gst-ai-object-detection_pipeline.png" />

首先下载所需的模型和资源：

```bash theme={null}
cd /home/ubuntu
curl -L -O https://raw.githubusercontent.com/quic/sample-apps-for-qualcomm-linux/refs/heads/main/qualcomm-linux/scripts/download_artifacts.sh
sudo chmod +x download_artifacts.sh && sudo ./download_artifacts.sh
```

然后运行目标检测管道：

```bash theme={null}
gst-launch-1.0 -e qtivcomposer name=mixer \
  sink_0::position="<0, 0>" sink_0::dimensions="<640, 360>" \
  sink_1::position="<640, 0>" sink_1::dimensions="<640, 360>" \
  mixer. ! queue ! waylandsink enable-last-sample=false fullscreen=true \
  qtiqmmfsrc name=camsrc_0 camera=0 multicamera-hint=true ! \
  video/x-raw,format=NV12,width=1280,height=720,framerate=30/1 ! queue ! \
  tee name=split_0 split_0. ! queue ! qtimetamux name=mux_0 ! queue ! \
  qtivoverlay ! queue ! mixer. split_0. ! queue ! qtimlvconverter ! queue ! \
  qtimltflite delegate=external external-delegate-path=libQnnTFLiteDelegate.so \
  external-delegate-options="QNNExternalDelegate,backend_type=htp;" \
  model=/etc/models/yolox_quantized.tflite ! queue ! \
  qtimlpostprocess settings="{\"confidence\": 75.0}" results=10 module=yolov8 \
  labels=/etc/labels/yolox.json ! text/x-raw ! queue ! mux_0.
```

### 视频编码 + 抓拍

<Steps>
  <Step title="启动管道">
    ```bash 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="/home/ubuntu/mux_720_avc.mp4" \
      camsrc.image_1 ! "image/jpeg,width=1280,height=720,framerate=30/1" ! \
      multifilesink location=/home/ubuntu/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 ubuntu@<ip-addr>:/home/ubuntu/<filename> .
    ```
  </Step>
</Steps>

## 使用离线 IFE 的多摄像头

IQ-9075 拥有两个 IFE，用于实时的 bayer 到 YUV 处理。**离线 IFE** 特性允许单个 IFE 以离线模式处理两路摄像头，从而实现四路摄像头的并发流传输。

<img src="https://mintcdn.com/qualcomm-prod/P0rmO3AZfXx7cgqQ/Ubuntu/images/peripheral-interfaces/camera_offline_IFE.png?fit=max&auto=format&n=P0rmO3AZfXx7cgqQ&q=85&s=37704df0003785a5ce4d5ba4730f22df" width="709" height="361" data-path="Ubuntu/images/peripheral-interfaces/camera_offline_IFE.png" />

<img src="https://mintcdn.com/qualcomm-prod/P0rmO3AZfXx7cgqQ/Ubuntu/images/peripheral-interfaces/gst-ai-multistream-inference_pipeline.png?fit=max&auto=format&n=P0rmO3AZfXx7cgqQ&q=85&s=71e13d19919a53413a60d022bfe179fe" width="1716" height="935" data-path="Ubuntu/images/peripheral-interfaces/gst-ai-multistream-inference_pipeline.png" />

<Note>
  使用实时 IFE 最多可同时运行两路摄像头。使用离线 IFE 特性可四路摄像头同时运行。
</Note>

在每个 `qtiqmmfsrc` 源上使用 `multicamera-hint=true` 运行四摄像头 AI 推理管道。参考上文单摄像头目标检测管道的模式 — 分别为 `camera=1`、`camera=2` 和 `camera=3` 进行复制。

### 验证多摄像头运行

**用户日志 — 查找：**

```
RealTimeFeatureZSLPreviewRawOfflineIFE_0_cam_0 status is now PipelineStatus::STREAM_ON
```

**内核日志 — 查找：**

```
Acquired Single IFE[0] SFE[0] OFFLINE: Y with [9 pix] [0 pd] [0 rdi] ports for ctx:1
```

## 故障排查

<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 qtiqmmfsrc 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 > /home/ubuntu/log.txt
    ```

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

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

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

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

    ```bash theme={null}
    sudo su
    echo 3 > /sys/kernel/debug/camera/ife/ife_csid_debug
    dmesg -w > /home/ubuntu/dmesg.txt
    ```

    启动摄像头并在日志中检查 SOF/EOF IRQ 消息。
  </Accordion>
</AccordionGroup>

### 收集调试日志

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

## 资源

| 主题          | 链接                                                                                                           |
| ----------- | ------------------------------------------------------------------------------------------------------------ |
| 摄像头架构       | [摄像头架构](https://docs.qualcomm.com/doc/80-70023-17A/topic/camera-architecture.html)                           |
| 摄像头传感器驱动开发  | [摄像头传感器驱动开发](https://docs.qualcomm.com/doc/80-70023-17A/topic/camera-sensor-driver-development.html)         |
| 自定义摄像头用例和管道 | [自定义摄像头用例和管道](https://docs.qualcomm.com/doc/80-70023-17A/topic/customize-camera-use-case-and-pipelines.html) |
| 自定义高级摄像头特性  | [自定义高级摄像头特性](https://docs.qualcomm.com/doc/80-70023-17A/topic/customize-advanced-camera-features.html)       |
