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

# 摄像头

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-prod/GfyA_U32cnx0UaZ3/Linux/images/peripheral-interfaces/camera_mipi_rb4.png?fit=max&auto=format&n=GfyA_U32cnx0UaZ3&q=85&s=3d57a6647492719ca1ec57b584a51feb" width="581" height="624" data-path="Linux/images/peripheral-interfaces/camera_mipi_rb4.png" />

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

### DIP 开关配置

<img src="https://mintcdn.com/qualcomm-prod/T1k4QQ7G3l_dE-rX/Linux/images/peripheral-interfaces/Camera_dipswitch.png?fit=max&auto=format&n=T1k4QQ7G3l_dE-rX&q=85&s=1cbfefdb85187a2ee7f3517e77ab9335" 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-prod/Bh7DlgudKfjY_3Wf/Linux/images/peripheral-interfaces/ov9282_camera_sensor.png?fit=max&auto=format&n=Bh7DlgudKfjY_3Wf&q=85&s=251c28f9fe222ee1b2da74313b16b2ad" width="292" height="184" data-path="Linux/images/peripheral-interfaces/ov9282_camera_sensor.png" />

### Arducam imx577 摄像头传感器

<img src="https://mintcdn.com/qualcomm-prod/Bh7DlgudKfjY_3Wf/Linux/images/peripheral-interfaces/Rasberrypi_imx577_camera_sensor.png?fit=max&auto=format&n=Bh7DlgudKfjY_3Wf&q=85&s=fa6ca72957514682ed8864477cc269ff" 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-prod/T1k4QQ7G3l_dE-rX/Linux/images/peripheral-interfaces/BoardSide_Flexi_cable_converter_for_RasberryPi_based_Camera.png?fit=max&auto=format&n=T1k4QQ7G3l_dE-rX&q=85&s=09c089d96a881f224570dbc8ea42dbd9" 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-prod/T1k4QQ7G3l_dE-rX/Linux/images/peripheral-interfaces/Cameraside_Flexi_cable_converter_for_RasberryPi_based_Camera.png?fit=max&auto=format&n=T1k4QQ7G3l_dE-rX&q=85&s=b05b14760cd350bb9c877485ec35c5d1" 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-prod/Bh7DlgudKfjY_3Wf/Linux/images/peripheral-interfaces/arducam_flexcable_frontside.png?fit=max&auto=format&n=Bh7DlgudKfjY_3Wf&q=85&s=af6fc4bf916edbdd9c6b37494472e3c8" width="1164" height="308" data-path="Linux/images/peripheral-interfaces/arducam_flexcable_frontside.png" />

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

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

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

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

<img src="https://mintcdn.com/qualcomm-prod/jy6NQT2Y7J_sAxdX/Linux/images/peripheral-interfaces/rb4_with_arducam_ov9282.png?fit=max&auto=format&n=jy6NQT2Y7J_sAxdX&q=85&s=2c71b4847aa5a09e6e40f3a6c16e099b" 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
```

* 已知问题:
  由于一个已知问题,IQ8 上的摄像头基本用例无法工作
  要解决此问题,请应用以下临时解决方案:
  在运行摄像头用例之前,先运行以下命令:

```bash theme={null}
cp /usr/share/qcom/sa8775p/Qualcomm/SA8775P-RIDE/dsp/cdsp/libbitml_nsp_73nb_skel.so /usr/share/qcom/qcs8300/Qualcomm/IQ8275-EVK/dsp/cdsp/.
```

### 单摄像头流

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

上述命令以 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 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。
设备上会生成 /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 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="拍摄快照">
    在交互式菜单中:**(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>

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

IQ-8275 有两个用于实时 bayer 到 YUV 处理的 IFE。最多两个摄像头可以通过实时 IFE 并发工作。
**离线 IFE** 功能允许单个 IFE 以离线模式处理两个摄像头,从而支持最多四个摄像头并发流传输。

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

每个传感器连接到一个 IFE-Lite 硬件实例,数据通过 RDI 端口转储到 DDR。
使用单个 IFE 硬件通过总线取数引擎 SFE Lite 从两个 IFE-Lite 读取数据,并以离线模式处理数据。
采用这种方式,摄像头帧不是直接送入 IFE,而是从 IFE\_LITE 路由并转储到 DDR。然后通过取数引擎 SFE Lite 提供给 IFE 进行 bayer 到 YUV 处理。

### 验证多摄像头运行

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

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

```bash theme={null}
gst-launch-1.0 -e qtiqmmfsrc 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
```

**在用户日志中检查以下打印以确认离线 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 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 > /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)          |
