# sample_vin 使用说明

## 功能概述

get_vin_data 完成 Camera Sensor 、 MIPI CSI 和 SIF 模块的初始化，实现从 vin 模块获取视频帧数据的功能，支持从 VIN 模块获取 Raw 或者 YUV 格式的图像。

### 软件架构说明

![image-20250110-172641.png](./_static/_images/get_vin_data/image-20250110-172641.png)

### 代码位置及目录结构

- 代码位置 `app/samples/platform_samples/sample_vin/get_vin_data`
- 目录结构

```bash
sample_vin/
└── get_vin_data
    ├── get_vin_data.c
    └── Makefile
```

### API 流程说明

![image-20250110-165856.png](./_static/_images/get_vin_data/image-20250110-165856.png)

## 编译部署

### 编译

- 进入 get_vin_data 目录，执行 `make` 编译
- 输出产物是 get_vin_data 源码目录下的 `get_vin_data`
- 详细程序编译方式请查阅 [ 编译方法 ](overview.html#span-id-sample-build) 章节


### 程序部署

刷写系统软件镜像后 , 本 sample 的可执行文件位于板端 : `/app/platform_samples/sample_vin/get_vin_data`。

## 运行

### 程序运行方法

- 直接执行程序 `./get_vin_data -h` 可以获得帮助信息：

### 程序参数选项说明

```bash
Usage: get_vin_data [OPTIONS]
Options:
  -s <sensor_index>      Specify sensor index
  -t <settle_value>      Specify settle time for debug
  -m <sensor_mode>       Specify sensor mode of camera_config_t
  -h                     Show this help message
index: 0  sensor_name: sc1330t                  config_file:linear_1280x960_raw10_30fps_1lane.c
index: 1  sensor_name: irs2875-tof              config_file:linear_208x1413_raw12_15fps_2lane.c
index: 2  sensor_name: sc230ai-10fps            config_file:linear_1920x1080_raw10_10fps_1lane.c
index: 3  sensor_name: sc230ai-30fps            config_file:linear_1920x1080_raw10_30fps_1lane.c
index: 4  sensor_name: sc132gs-1280p            config_file:linear_1088x1280_raw10_30fps_1lane.c
index: 5  sensor_name: sc035hgs                 config_file:linear_640x480_raw10_30fps_1lane.c
index: 6  sensor_name: sc035hgs_mono            config_file:linear_mono_640x480_raw10_30fps_1lane.c
index: 7  sensor_name: ov5640                   config_file:linear_1920x1080_raw10_30fps_2lane.c
index: 8  sensor_name: f37                      config_file:linear_1920x1080_raw10_30fps_1lane.c
index: 9  sensor_name: imx415-30fps-2lane       config_file:linear_3840x2160_raw10_30fps_2lane.c
index: 10  sensor_name: imx415-30fps-4lane      config_file:linear_3840x2160_raw10_30fps_4lane.c
index: 11  sensor_name: sc202cs-1600x1200       config_file:linear_1600x1200_raw10_30fps_1lane.c
index: 12  sensor_name: irs2381c-tof            config_file:linear_224x1903_raw12_5fps_2lane.c
index: 13  sensor_name: sc035hgs-vc0            config_file:linear_640x480_raw10_30fps_2lane_vc0.c
index: 14  sensor_name: sc035hgs-vc1            config_file:linear_640x480_raw10_30fps_2lane_vc1.c
index: 15  sensor_name: sc231ai-30fps           config_file:linear_1920x1080_raw10_30fps_2lane.c
index: 16  sensor_name: imx586-30fps-4lane      config_file:linear_3840x2160_raw10_30fps_4lane.c
index: 17  sensor_name: os08c10-30fps-2lane     config_file:linear_3840x2160_raw12_30fps_2lane.c
index: 18  sensor_name: ar0233-30fps            config_file:linear_1920x1080_raw12_30fps_2lane.c
index: 19  sensor_name: ar0820std-30fps         config_file:linear_3840x2160_yuv422_30fps_4lane.c
index: 20  sensor_name: sc1336                  config_file:linear_1280x720_raw10_15fps_2lane.c
index: 21  sensor_name: dummy                   config_file:dummy_sensor.c
index: 22  sensor_name: ar0233-30fps            config_file:ar0233_linear_1920x1080_raw12_30fps_2lane_vc0.c
index: 23  sensor_name: ar0233-30fps            config_file:ar0233_linear_1920x1080_raw12_30fps_2lane_vc1.c
index: 24  sensor_name: ov9782-200fps-2lane     config_file:linear_640x360_raw10_200fps_2lane.c
index: 25  sensor_name: ov9782-120fps-2lane     config_file:linear_1280x720_raw10_120fps_2lane.c
index: 26  sensor_name: imx219-640x480-30fps    config_file:linear_640x480_raw10_30fps_2lane.c
index: 27  sensor_name: imx219-1632x1232-30fps  config_file:linear_1632x1232_raw10_30fps_2lane.c
index: 28  sensor_name: imx219-1920x1080-30fps  config_file:linear_1920x1080_raw10_30fps_2lane.c
index: 29  sensor_name: imx219-3264x2464-15fps  config_file:linear_3264x2464_raw10_15fps_2lane.c
index: 30  sensor_name: imx219-3264x2464-21fps  config_file:linear_3264x2464_raw10_21fps_2lane.c
index: 31  sensor_name: ov5647-640x480-60fps    config_file:linear_640x480_raw10_60fps_2lane.c
index: 32  sensor_name: ov5647-1280x960-30fps   config_file:linear_1280x960_raw10_30fps_2lane.c
index: 33  sensor_name: ov5647-1920x1080-30fps  config_file:linear_1920x1080_raw10_30fps_2lane.c
index: 34  sensor_name: ov5647-2592x1944-15fps  config_file:linear_2592x1944_raw10_15fps_2lane.c
index: 35  sensor_name: imx477-1280x960-120fps  config_file:linear_1280x960_raw10_120fps_2lane.c
index: 36  sensor_name: imx477-1920x1080-50fps  config_file:linear_1920x1080_raw12_50fps_2lane.c
index: 37  sensor_name: imx477-2016x1520-40fps  config_file:linear_2016x1520_raw12_40fps_2lane.c
index: 38  sensor_name: imx477-4000x3000-10fps  config_file:linear_4000x3000_raw12_10fps_2lane.c
```

**选项：**

- `s <sensor_index>`: 指定要使用的 camera sensor 索引。
- `t <settle_value>`: MIPI dphy 的 settle 时间配置，报 phy 错时可调整，该选项用于指定调试时的稳定时间（ settle time）。
- `m <sensor_mode>`:  指定 camera sensor 配置中的传感器模式。
- `h`: 显示帮助信息。

**当前支持的传感器以及对应的配置文件列表：**

| Index | Sensor Name                | Configuration File                                      |
|-------|----------------------------|---------------------------------------------------------|
| 0     | sc1330t                    | linear_1280x960_raw10_30fps_1lane.c                     |
| 1     | irs2875-tof                | linear_208x1413_raw12_15fps_2lane.c                     |
| 2     | sc230ai-10fps              | linear_1920x1080_raw10_10fps_1lane.c                    |
| 3     | sc230ai-30fps              | linear_1920x1080_raw10_30fps_1lane.c                    |
| 4     | sc132gs-1280p              | linear_1088x1280_raw10_30fps_1lane.c                    |
| 5     | sc035hgs                   | linear_640x480_raw10_30fps_1lane.c                      |
| 6     | sc035hgs_mono              | linear_mono_640x480_raw10_30fps_1lane.c                 |
| 7     | ov5640                     | linear_1920x1080_raw10_30fps_2lane.c                    |
| 8     | f37                        | linear_1920x1080_raw10_30fps_1lane.c                    |
| 9     | imx415-30fps-2lane         | linear_3840x2160_raw10_30fps_2lane.c                    |
| 10    | imx415-30fps-4lane         | linear_3840x2160_raw10_30fps_4lane.c                    |
| 11    | sc202cs-1600x1200          | linear_1600x1200_raw10_30fps_1lane.c                    |
| 12    | irs2381c-tof               | linear_224x1903_raw12_5fps_2lane.c                      |
| 13    | sc035hgs-vc0               | linear_640x480_raw10_30fps_2lane_vc0.c                  |
| 14    | sc035hgs-vc1               | linear_640x480_raw10_30fps_2lane_vc1.c                  |
| 15    | sc231ai-30fps              | linear_1920x1080_raw10_30fps_2lane.c                    |
| 16    | imx586-30fps-4lane         | linear_3840x2160_raw10_30fps_4lane.c                    |
| 17    | os08c10-30fps-2lane        | linear_3840x2160_raw12_30fps_2lane.c                    |
| 18    | ar0233-30fps               | linear_1920x1080_raw12_30fps_2lane.c                    |
| 19    | ar0820std-30fps            | linear_3840x2160_yuv422_30fps_4lane.c                   |
| 20    | sc1336                     | linear_1280x720_raw10_15fps_2lane.c                     |
| 21    | dummy                      | dummy_sensor.c                                          |
| 22    | ar0233-30fps               | ar0233_linear_1920x1080_raw12_30fps_2lane_vc0.c         |
| 23    | ar0233-30fps               | ar0233_linear_1920x1080_raw12_30fps_2lane_vc1.c         |
| 24    | ov9782-200fps-2lane        | linear_640x360_raw10_200fps_2lane.c                     |
| 25    | ov9782-120fps-2lane        | linear_1280x720_raw10_120fps_2lane.c                    |
| 26    | imx219-640x480-30fps       | linear_640x480_raw10_30fps_2lane.c                      |
| 27    | imx219-1632x1232-30fps     | linear_1632x1232_raw10_30fps_2lane.c                    |
| 28    | imx219-1920x1080-30fps     | linear_1920x1080_raw10_30fps_2lane.c                    |
| 29    | imx219-3264x2464-15fps     | linear_3264x2464_raw10_15fps_2lane.c                    |
| 30    | imx219-3264x2464-21fps     | linear_3264x2464_raw10_21fps_2lane.c                    |
| 31    | ov5647-640x480-60fps       | linear_640x480_raw10_60fps_2lane.c                      |
| 32    | ov5647-1280x960-30fps      | linear_1280x960_raw10_30fps_2lane.c                     |
| 33    | ov5647-1920x1080-30fps     | linear_1920x1080_raw10_30fps_2lane.c                    |
| 34    | ov5647-2592x1944-15fps     | linear_2592x1944_raw10_15fps_2lane.c                    |
| 35    | imx477-1280x960-120fps     | linear_1280x960_raw10_120fps_2lane.c                    |
| 36    | imx477-1920x1080-50fps     | linear_1920x1080_raw12_50fps_2lane.c                    |
| 37    | imx477-2016x1520-40fps     | linear_2016x1520_raw12_40fps_2lane.c                    |
| 38    | imx477-4000x3000-10fps     | linear_4000x3000_raw12_10fps_2lane.c                    |

### 运行效果

1. 根据提示选择当前连接在开发板上的 Sensor 名，以 f37 为例，执行 `./get_vin_data -s 7`。
2. 执行命令后会自动加 f37 载配置文件`linear_1920x1080_raw10_30fps_1lane.c`对 Camera Sensor、MIPI CSI 和 SIF 模块完成初始化。
3. 初始化完成后，系统进入用户交互模式。

执行命令：

```bash
cd sample_vin/get_vin_data
chmod +x get_vin_data
./get_vin_data -s 7
```

运行日志：

- g： 获取一帧图像，支持输入多个 g 来连续获取图像，例如：输入 gggg ​会获取4张图像。

```bash
Using index:7  sensor_name:f37  config_file:linear_1920x1080_raw10_30fps_1lane.c
[INFO] board_id is 0x0202, not need skip sci1.
mipi mclk is configed.
Searching camera sensor on device: /proc/device-tree/soc/cam/vcon@0 i2c bus: 4 mipi rx phy: 0
INFO: Found sensor_name:f37 on mipi rx csi 0, i2c addr 0x40, config_file:linear_1920x1080_raw10_30fps_1lane.c

***************  Command Lists  ***************
 g      -- get single frame
 l      -- get a set frames
 q      -- quit
 h      -- print help message

Command: g
handle 34661 vin dump raw 1920x1080(stride:3840), buffer size: 4147200 frame id: 0, timestamp: 46024411807696
Dump image to file(handle_34661_vin_chn0_1920x1080_stride_3840_frameid_0_ts_46024411807696.raw), size(4147200) succeeded
```

- l： 连续获取 12 帧图像，相当于输入 12 个 g ​

```bash
Command: l
handle 34661 vin dump raw 1920x1080(stride:3840), buffer size: 4147200 frame id: 1, timestamp: 46024435294737
Dump image to file(handle_34661_vin_chn0_1920x1080_stride_3840_frameid_1_ts_46024435294737.raw), size(4147200) succeeded
... ( 省略，总共 Dump 12 帧 ) ...
handle 34661 vin dump raw 1920x1080(stride:3840), buffer size: 4147200 frame id: 424, timestamp: 46038535296244
Dump image to file(handle_34661_vin_chn0_1920x1080_stride_3840_frameid_424_ts_46038535296244.raw), size(4147200) succeeded
```

- q: 退出程序​

```bash
Command: q
quit
```

效果说明：<br>


### 运行效果说明

执行程序后会获取到如 handle_34661_vin_chn0_1920x1080_stride_3840_frameid_424_ts_46038535296244.raw 命名格式的 Raw 图像。

请参考 Hobot player 静态图片章节浏览图像，图像的参数配置说明如下：

- 浏览 RAW 图

按照如下图所示步骤配置选项，其中 file config 里面关注 pic_type 、 raw_type 、 pix_length 、 width 和 height 的配置， sc1330t 配置为（ PIC_RAW、 UNPACKET_RAW、 RAW_MIPI_BIT_10 ， 1920 ， 1080 ）

![image-20250110-195428.png](_static/_images/get_vin_data/image-20250110-195428.png)

## 常见问题

### 1. 显示 No Camera Sensor found

- **原因分析：**

  1. 开发板实际连接 camera 型号和`./get_vin_data -s `时指定的 camera 不匹配。
  2. FPC 线缆接触不良、接口松动导致测试异常。

- **解决方法：**
  1. 确保实际连接的 camera 和`./get_vin_data -s `时指定的 camera 匹配。
  2. 检查 FPC 线缆连接，确保接口稳定连接。
