K230 SDK EVB Board Demo使用指南
1. 概述
此文档介绍K230 SDK提供的demo功能,使用方法等。其中rt-smart上的可执行程序都默认编译到了小核/sharefs目录下, 测试大核程序时,需要等待小核完全启动,之后在大核的msh中进入/sharefs/app目录内测试。各测试demo用到的音视频资源文件,可到以下链接地址获取
2. Demo介绍
2.1 Display_demo
2.1.1 display_demo简介
VO(Video Output,视频输出)模块主动从内存相应位置读取视频和图形数据,并通过相应的显示设备输出视频和图形。芯片支持的显示/回写设备、视频层和图形层情况。
2.1.2 Feature说明
video ouput 包含了三个用例、一个是dsi 的自测模式、vo 和 vvi 的绑定测试、vo layer 层插入帧的测试
2.1.3 依赖资源
需要屏幕
2.1.4 使用说明
2.1.4.1 编译
软件编译参考release sdk软件包中的README.md
2.1.4.2 执行
dsi 自测模式demo 运行
./sample_vo.elf 2
会在屏幕上显示color bar 的图像,具体如下:
-
vo 和 vvi 绑定demo运行
./sample_vo.elf 9
然后按一次回车vvi 开始发送argb 的数据,在按一次回车,程序退出
显示效果为红绿蓝三原色交替显示,效果如下:
-
vo layer 层插入帧demo运行
./sample_vo.elf 7
执行完命令后、按一次回车用户层插入一张图片、再按一次回车程序退出
显示效果如下:
2.2 Venc_demo
2.2.1 Venc_demo简介
Venc demo实现对vi接收到到图形进行编码,并且可以对输入图像进行画框和OSD叠加。支持编码协议为H.264/H.265/JPEG。编码结果可以存储成文件,导出到本地,使用视频软件播放。
2.2.2 Feature说明
只支持1280x720分辨率 。
2.2.3 依赖资源
摄像头
2.2.4 使用说明
2.2.4.1 mpp_demo执行
执行./sample_venc.elf -h
后,输出demo的使用说明,如下:
Usage : ./sample_venc.elf [index] -sensor [sensor_index] -o [filename]
index:
0) H.265e.
1) JPEG encode.
2) OSD + H.264e.
3) OSD + Border + H.265e.
sensor_index: see vicap doc
sensor_index取值参看k230_docs/zh/01_software/board/mpp/K230_Camera_Sensor适配指南.md
文档中关于k_vicap_sensor_type的描述,默认值为7
举例:
./sample_venc.elf 0 -sensor 7 -o out.265
2.2.4.2 MAPI编码demo
sample_venc默认使用的sensor类型是IMX335_MIPI_2LANE_RAW12_1920X1080_30FPS_LINEAR,目前该demo支持3路编码,可通过命令行传参的方式修改sensor类型以及其他参数,具体说明如下:
启动开发板后:
- 通过
lsmod
检查小核侧是否加载k_ipcm模块,如未加载,执行insmod k_ipcm.ko
加载k_ipcm模块 - 在大核侧启动核间通信进程,执行
./sample_sys_inif.elf
- 在小核侧 /mnt 目录下,执行
./sample_venc
,默认执行1路h264视频编码,分辨率为1280x720,生成的码流文件存放在 /tmp 目录下面,如需传参可参考如下参数说明:
Usage: ./sample_venc -s 0 -n 2 -o /tmp -t 0
-s or --sensor_type [sensor_index],\n");
see vicap doc
-n or --chn_num [number], 1, 2, 3
-t or --type [type_index]
0: h264 type
1: h265 type
2: jpeg type
-o or --out_path [output_path]
-h or --help, will print usage
sensor_index取值参看k230_docs/zh/01_software/board/mpp/K230_Camera_Sensor适配指南.md
文档中关于k_vicap_sensor_type的描述,默认值为7
可通过ctrl+c
停止运行,根据不同的编码类型,会在小核指定的输出目录下生成不同的码流文件,对于h264类型,会生成形如stream_chn0.264
文件,其中 0 代表0通道;对于h265类型,会生成形如 stream_chn0.265
文件,同样 0 代表0通道;对于jpeg类型,会生成形如chn0_0.jpg
的jpg图片,代表0通道第0张图片,默认会生成10张jpg图片。
2.2.4.3 查看结果
输出文件可以导出到本地,用视频播放软件查看。
2.3 Nonai_2d_demo
2.3.1 Nonai_2d_demo简介
Nonai_2d demo对输入文件实现图像叠加的功能。
2.3.2 Feature说明
Nonai_2d通过读取yuv(I420格式)文件,进行图像叠加运算。
2.3.3 依赖资源
无。
2.3.4 使用说明
输入参数如下:
参数名 | 描述 | 默认值 |
---|---|---|
-i | 输入文件名 | - |
-w | 图像宽度 | - |
-h | 图像高度 | - |
-o | 输出文件名 | - |
2.3.4.1 执行
举例:
./sample_nonai_2d.elf -i /sharefs/foreman_128x64_3frames.yuv -w 128 -h 64 -o /sharefs/out_2d.yuv
2.3.4.2 查看结果
输出文件可以导出到本地,用yuv播放软件查看。
2.4 Vdec_demo
2.4.1 Vdec_demo简介
Vdec demo实现视频解码的功能。解码功能支持H.264/H.265/JPEG解码。支持的输入数据格式为.264/.264/.jpeg。
2.4.2 Feature说明
Vdec demo通过读取流文件进行解码。解码输出结果通过屏幕显示。
2.4.3 依赖资源
无。
2.4.4 使用说明
2.4.4.1 执行
执行./sample_vdec.elf -help
,可以看到可配置参数及说明,其默认值如下表所示:
参数名 | 说明 | 默认值 |
---|---|---|
i | 输入文件名,需要后缀名分别为.264/.265/.jpg | - |
type | vo connector type, 参看vo 文档描述 | 0 |
其中type取值参看k230_docs/zh/01_software/board/mpp/K230_视频输出_API参考.md
中关于k_connector_type的描述,设置为0
2.4.4.1.1 VDEC绑定VO解码显示
./sample_vdec.elf -i canaan.264
2.4.4.1.2 MAPI VDEC绑定VO解码显示
./sample_vdec.elf -i canaan.264
2.4.4.2 查看结果
解码结果可以在屏幕上查看。
2.5 Audio_demo
2.5.1 audio_demo简介
audio demo通过调用api接口来实现音频输入和输出功能。音频输入包括i2s和pdm模块,音频输出包括i2s模块。demo中包含了可以单独测试音频输入或音频输出用例,也包含音频输入和输出同时测试的用例。
2.5.2 Feature说明
2.5.2.1 音频输入
音频输入通过采集环境中的声音并将其保存成文件来分析是否正常。
音频输入包括i2s和pdm两个模块的测试,demo中采集15s钟的音频数据,采集到的文件格式为wav,可使用vlc直接播放。i2s 音频输入有2组,demo中默认使用第0组作为音频输入。pdm音频输入一共有4组,demo中默认使用第0组作为音频输入。
2.5.2.2 音频输出
音频输出通过播放wav文件,插上耳机听声音来判断是否正常。
音频输出只包括i2s模块测试,demo中通过播放wav来测试音频输出功能,可上传不同音频格式的wav文件来测试音频输出功能。i2s 音频输出有2组,demo中默认使用第0组作为音频输出。
2.5.2.3 音频输入输出
音频输入和输出可同时测试。
- 测试i2s模块功能,即:通过i2s音频输入实时采集环境中声音并通过i2s音频输出,接上耳机可实时听到环境中的声音。
- 测试pdm模块功能,即:通过pdm音频输入实时采集环境中声音并通过i2s音频输出,接上耳机可实时听到环境中的声音。
2.5.2.4 音频编解码
内置g711a/u 16bit 音频编解码器,用户可以注册其他外置编解码器。
2.5.2.5 数据链路
- audio codec从模拟麦克风接收到的信号,转变为I2S格式的PCM数据后,输入到audio中的I2S中;I2S输出的PCM数据,经过audio codec后,变为模拟信号发出,该模式不使用数字IO,固定使用I2S的sdi0和sdo0接口。
- I2S的直接与片外的数字麦克风和PA连接。共有两组接口可以选择:sdi0、sdo0及sdi1、sdo1。
- 片外的PDM麦克风,输入最多8路PDM数据到audio的4个输入数据接口。
可以使用内置codec或外接设备(音频子板)来测试音频相关功能。使用内置codec可以测试一组I2S音频输入和输出及audio codec相关功能,使用音频子板可以测试2组i2s音频输入输出和4组pdm音频输入功能。
2.5.2.6 注意事项
-
内置codec最大采样精度支持24bit,32bit不支持;因此使用内置codec测试i2s音频输入输出时,只支持16/24 bit采样精度。
-
音频子板i2s收发回环测试,只支持32bit采样精度。原因如下:
音频子板采集使用MSM261S3526Z0CM硅麦克风,为I2S Philips格式;音频子板输出使用codec tm8211,为i2s 右对齐格式,16bit采样。右因 i2s模块收发使用同一个ws,收发同时运行只能配置一种i2s 对齐格式。为正确获取音频数据,需适配MSM261S3526Z0CM硅麦克风,因此i2s收发配置为I2S Philips格式。但是此时输出为右对齐格式,所以输出数据就会损失精度。但使用32bit精度收发时,不受i2s对齐格式显示,因此无影响。
如果单独测试音频输入或者音频输出,不受采样精度影响,16/24/32bit都支持。
-
使用音频子板采集音频时,采样率支持范围(8k~48k).
音频子板采集模块使用MSM261S3526Z0CM硅麦克风,最大时钟为4MHZ。当采样率为96k(6.144MHZ)和192k(12.288MHZ) 时,从音频子板上采集到的声音会异常。
2.5.3 依赖资源
- 音频测试依赖音频子板。
音频子板原理图如下:
当测试i2s输入输出时,音频子板可通过跳线帽如下连接:
pdm音频采集,当采集第0组pdm通道或第1组pdm通道数据时,使用引脚与i2s引脚没有冲突。
当使用第2组和第3组pdm通道时,需要使用跳线帽切换到pdm通道模式,具体如下:
2.5.4 使用说明
2.5.4.1 编译
- 软件编译环境参考SDK中的
README.md
。 - 搭建好sharefs环境,读写文件均依赖sharefs。
2.5.4.2 执行
进入rt-smart系统后,进入/sharefs目录下,sample_audio.elf
为测试demo。
- 可输入
./sample_audio.elf -help
查看demo使用方法。 -type
选项来测试不同模块功能;-samplerate
选项来配置音频输入和输出不同采样率(8k-192k),默认为44.1k;-enablecodec
使用内置codec或者片外的音频子板;-loglevel
打印内核日志等级;-bitwidth
设置音频采样精度(16/24/32);-filename
加载或存储wav/g711文件名称。
2.5.4.2.1 I2S音频输入测试
- 输入
./sample_audio.elf -type 0
来采集15s中的pcm音频数据, -samplerate
选项来选择采集不同采样率的音频,-bitwidth
来来设置不同的采样精度,-enablecodec
设置是否使用内置codec,-filename
保存数据到文件。采集15s数据后,demo自动退出。
demo实现思路:该测试通过循环调用api函数:kd_mpi_ai_get_frame
和kd_mpi_ai_release_frame
来采集数据。注意i2s对应的ai dev号为0。
2.5.4.2.2 pdm音频输入测试
- 输入
./sample_audio.elf -type 1
来采集15s中的pcm音频数据 -samplerate
选项来选择采集不同采样率的音频-bitwidth
来来设置不同的采样精度-enablecodec
设置是否使用内置codec。采集15s数据后,demo自动退出,并保存数据到文件中。
demo实现思路:该测试通过循环调用api函数:kd_mpi_ai_get_frame
和kd_mpi_ai_release_frame
来采集数据。注意pdm对应的ai dev号为1.
2.5.4.2.3 I2S音频输出测试
支持播放wav文件,需将wav文件拷贝到sharefs路径下。该demo会循环播放wav文件(其他任意wav文件也可),用户可以按任意键来退出该功能测试。
demo实现思路:该测试通过循环调用api函数:kd_mpi_ao_send_frame
来实时输出声音。
2.5.4.2.4 I2S音频输入输出api接口测试
输入./sample_audio.elf -type 3 -bitwidth 32
,通过api接口实时测试音频输入输出功能。
通过调用api接口:kd_mpi_ai_get_frame
获取音频数据并调用kd_mpi_ao_send_frame
输出音频数据来测试音频输入和输出整体功能。用户可以按任意键来退出该功能测试。测试过程中会实时输出ai采集到的时间戳信息。
2.5.4.2.5 I2S音频输入和输出模块的系统绑定测试
输入./sample_audio.elf -type 4
,通过ai和ao模块绑定实时测试音频输入输出功能。
通过调用系统绑定api接口:kd_mpi_sys_bind
将ai和ao模块绑定,来测试音频输入和输出整体功能。用户可以按任意键来退出该功能测试。
2.5.4.2.6 pdm音频输入,i2s输出api接口测试
输入./sample_audio.elf -type 5 -bitwidth 32
,通过api接口实时测试音频输入输出功能。
通过调用api接口:kd_mpi_ai_get_frame获取音频数据并调用kd_mpi_ao_send_frame
输出音频数据来测试音频输入和输出整体功能。用户可以按任意键来退出该功能测试。测试过程中会实时输出ai采集到的时间戳信息。
2.5.4.2.7 pdm音频输入,i2s输出系统绑定测试
输入./sample_audio.elf -type 6 -bitwidth 32
,通过ai和ao模块绑定实时测试音频输入输出功能。
通过调用系统绑定api接口:kd_mpi_sys_bind
将ai和ao模块绑定,来测试音频输入和输出整体功能。用户可以按任意键来退出该功能测试。
2.5.4.2.8 编码测试
获取ai数据并编码保存到文件。编解码只支持g711a/u,16bit。
系统绑定方式:./sample_audio.elf -type 7 -bitwidth 16 -enablecodec 1 -filename /sharefs/i2s_codec.g711a
api接口方式:./sample_audio.elf -type 9 -bitwidth 16 -enablecodec 1 -filename /sharefs/i2s_codec.g711a
2.5.4.2.9 解码测试
读取文件数据并解码播放。编解码只支持g711a/u,16bit。
系统绑定方式:./sample_audio.elf -type 8 -filename /sharefs/gyz.g711a -enablecodec 1 -bitwidth 16
api接口方式:./sample_audio.elf -type 10 -filename /sharefs/gyz.g711a -enablecodec 1 -bitwidth 16