3.4.2 参考示例(C++)
本章节介绍多媒体库开发的多种功能示例,包括摄像头图像采集、视频编解码、视频显示、算法推理等功能。
摄像头图像采集和显示
本示例vio2display
示例实现了MIPI
摄像头图像采集功能,并通过HDMI
接口输出,用户可通过显示器预览画面。
示例流程框图如下:
-
环境准备:
- 开发板断电状态下,将
MIPI
摄像头接入开发板,连接方法可参考-硬件简介-MIPI接口 - 通过HDMI线缆连接开发板和显示器
- 开发板上电,并通过命令行登录
- 开发板断电状态下,将
-
运行方式: 示例代码以源码形式提供,需要使用
make
命令进行编译后运行,步骤如下:sunrise@ubuntu:~$ cd /app/cdev_demo/vio2display
sunrise@ubuntu:/app/cdev_demo/vio2display$ sudo make
sunrise@ubuntu:/app/cdev_demo/vio2display$ sudo ./vio2display -w 1920 -h 1080参数说明:
- -w: sensor输出宽度
- -h: sensor输出高度
-
预期效果: 程序正确运行后,开发板会通过显示器输出
MIPI
摄像头采集的实时画面。运行log如下:sunrise@ubuntu:/tmp/nfs/sp_cdev/cdev_demo/vio2display$ ./vio2display -w 1920 -h 1080
disp_w=1920, disp_h=1080
2023/03/28 02:08:03.359 !INFO [x3_cam_init_param][0099]Enable mipi host0 mclk
2023/03/28 02:08:03.359 !INFO [x3_cam_init_param][0099]Enable mipi host1 mclk
Camera: gpio_num=114, active=low, i2c_bus=3, mipi_host=0
Camera: gpio_num=114, active=low, i2c_bus=1, mipi_host=1
Camera: gpio_num=114, active=low, i2c_bus=0, mipi_host=2
Camera 0:
enable: 1
i2c_bus: 3
mipi_host: 0
Camera 1:
enable: 1
i2c_bus: 1
mipi_host: 1
Camera 2:
enable: 1
i2c_bus: 0
mipi_host: 2
cmd=i2ctransfer -y -f 3 w2@0x10 0x0 0x0 r1 2>&1, result=0x02
Found sensor:imx219 on i2c bus 3, use mipi host 0
Setting VPS channel-2: src_w:1920, src_h:1080; dst_w:1920, dst_h:1080;
Setting VPS channel-1: src_w:1920, src_h:1080; dst_w:1920, dst_h:1080;
sp_open_camera success!
libiar: hb_disp_set_timing done!
Press 'q' to Exit !
摄像头图像本地保存 (RDK X3)
本示例vio_capture
示例实现了MIPI
摄像头图像采集,并将RAW
和YUV
两种格式的图像本地保存的功能。示例流程框图如下:
-
环境准备:
- 开发板断电状态下,将
MIPI
摄像头接入开发板,连接方法可参考-硬件简介-MIPI接口 - 通过HDMI线缆连接开发板和显示器
- 开发板上电,并通过命令行登录
- 开发板断电状态下,将
-
运行方式: 示例代码以源码形式提供,需要使用
make
命令进行编译后运行,步骤如下:sunrise@ubuntu:~$ cd /app/cdev_demo/vio_capture/
sunrise@ubuntu:/app/cdev_demo/vio_capture$ sudo make
sunrise@ubuntu:/app/cdev_demo/vio_capture$ sudo ./capture -b 12 -c 10 -h 1080 -w 1920参数说明:
- -b: RAW图bit数,IMX477:12,others:10
- -c: 保存图像的数量
- -w: 保存图像的宽度
- -h: 保存图像的高度
-
预期效果: 程序正确运行后,当前目录保存指定数量的图片文件,
RAW
格式以raw_*.raw
方式命名,YUV
格式以yuv_*.yuv
方式命名。运行log如下:sunrise@ubuntu:/app/cdev_demo/vio_capture$ sudo ./capture -b 12 -c 10 -h 1080 -w 1920
Setting VPS channel-2: src_w:1920, src_h:1080; dst_w:1920, dst_h:1080;
Setting VPS channel-1: src_w:1920, src_h:1080; dst_w:1920, dst_h:1080;
jiale:start streaming...
capture time :0
capture time :1
capture time :2
capture time :3
capture time :4
capture time :5
capture time :6
capture time :7
capture time :8
capture time :9
sensor_name imx477, setting_size = 1
[ 701.213210]hb_isp_algo_stop@main_user.c:389 GENERIC(ERR) :g_mutex destroy.
摄像头图像本地保存 (RDK X5)
本示例vio_capture
示例实现了MIPI
摄像头图像采集,并将RAW
和YUV
两种格式的图像本地保存的功能。示例流程框图如下:
-
环境准备:
- 开发板断电状态下,将
MIPI
摄像头接入开发板,连接方法可参考 -硬件简介-MIPI接口 - 通过 HDMI 线缆连接开发板和显示器
- 开发板上电,并通过命令行登录
- 开发板断电状态下,将
-
运行方式: 示例代码以源码形式提供,需要使用
make
命令进行编译后运行,步骤如下:sunrise@ubuntu:~$ cd /app/cdev_demo/vio_capture/
sunrise@ubuntu:/app/cdev_demo/vio_capture$ sudo make
sunrise@ubuntu:/app/cdev_demo/vio_capture$ sudo ./capture -b 16 -c 10 -h 1080 -w 1920参数说明:
- -b: RAW图bit数,IMX219 / IMX477 / OV5647 都设置为 16,只有极少数 Camera Sensor 需要设置为 8
- -c: 保存图像的数量
- -w: 保存图像的宽度
- -h: 保存图像的高度
-
预期效果: 程序正确运行后,当前 目录保存指定数量的图片文件,
RAW
格式以raw_*.raw
方式命名,YUV
格式以yuv_*.yuv
方式命名。运行log如下:sunrise@ubuntu:/app/cdev_demo/vio_capture$ sudo ./capture -b 16 -c 10 -h 1080 -w 1920
[INFO] board_id is 301, not need skip sci1.
Searching camera sensor on device: /proc/device-tree/soc/cam/vcon@0 i2c bus: 6 mipi rx phy: 0
INFO: Found sensor name:ov5647 on mipi rx csi 0, i2c addr 0x36, config_file:linear_1920x1080_raw10_30fps_2lane.c
2000/01/01 08:18:54.877 !INFO [CamInitParam][0139]Setting VSE channel-0: input_width:1920, input_height:1080, dst_w:1920, dst_h:1080
2000/01/01 08:18:54.877 !INFO [CamInitParam][0139]Setting VSE channel-1: input_width:1920, input_height:1080, dst_w:1920, dst_h:1080
... 省略 ...
capture time :0
temp_ptr.data_size[0]:4147200
capture time :1
temp_ptr.data_size[0]:4147200
capture time :2
temp_ptr.data_size[0]:4147200
... 省略 ...
capture time :8
temp_ptr.data_size[0]:4147200
capture time :9
temp_ptr.data_size[0]:4147200
ov5647 sensor stop