全志Tina Linux MPP 开发指南

Posted 韦东山

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了全志Tina Linux MPP 开发指南相关的知识,希望对你有一定的参考价值。

全志Tina Linux MPP 开发指南支持百问网T113 D1-H哪吒DongshanPI-D1s V853-Pro等开发板


1 简述
整理 MPP sample 使用说明文档的目的是:使 MPP sample 更好用。

2 简介
MPP sample 一般存放在 MPP Middleware 的 sample 目录下。此外,MPP Framework 的 demo 目录下也有一些 sample。 本文档主要介绍 MPP Middleware 各 sample 的基本使用方法:配置、编译、测试以及 sample 类别、各平台方案上的支持情况和测试方法等。 文末 FAQ 部分对音视频编解码功能的测试方法和测试工具的使用做了详细介绍。

3 配置
本章节主要介绍 MPP sample 的配置方法。目前 Tina 和 Melis 上存在差异。

3.1 Tina 上 MPP sample 的配置方法
Tina V853、V833 和 V536 方案上,MPP sample 支持从 menuconfig 中配置。选中 [*] select mpp sample 之后,当前支持测试的 MPP sample 就会显示出来,默认都是未选中的状态。此时, 可以勾选想要测试的 sample,然后保存配置,重新编译 MPP 即可。

$ make menuconfig
Allwinner —>
eyesee-mpp —>
[*] select mpp sample
Tina 其他方案(如:V316 等)上,目前 MPP sample 不支持从 menuconfig 中配置。若想开启 或关闭 sample,只能修改 tina.mk 文件,然后重新编译 MPP。

各 sample 对组件的依赖关系详情,请参考文件 tina\\package\\allwinner\\eyesee-mpp\\middleware \\Config.in。

因为每个 MPP sample 编译时,依赖的 MPP 组件不一样,所以,只有当支持的 MPP 组 件打开后,相关的 MPP sample 才会显示出来。否则,不可见。

由于在编译 MPP 基础库libaw_mpp.a 或 libmedia_mpp.so 时,mpi region 是默认开启的, 且 mpi region 依赖 mpi_vi 和 mpi_venc,所以 mpi_vi 和 mpi_venc 是运行 MPP sample 的基础组件,需要保持常开。

3.2 Melis 上 MPP sample 的配置方法
Melis 上各方案,目前 MPP sample 不支持从 menuconfig 中配置。若想开启或关闭 sample,只 能修改 Makefile 文件,然后重新编译 MPP。

4 编译
本章节主要介绍 MPP sample 的编译方法。

以下以 tina 为例。

编译命令

cleanmpp && mkmpp
编译后 MPP sample 测试程序和配置文件存放位置

有两个位置:
(1)每个 MPP sample 的源码目录下
tina\\external\\eyesee-mpp\\middleware\\sun8iw21\\sample\\sample_xxx
(2)统一存放到bin目录下
tina\\external\\eyesee-mpp\\middleware\\sun8iw21\\sample\\bin
PS:由于 MPP sample 测试程序个数较多,且每个测试程序大小约 10M 左右,故不方便打包 到文件系统中,测试时需要接 SD 卡,同时把测试程序和配置文件放到 SD 卡中进行测试。

5 测试
本章节主要介绍 MPP sample 的测试方法。

5.1 在板端用串口测试
1.将测试程序和配置拷贝到 SD 卡,然后将 SD 卡接到板端。

2.将 SD 卡 mount 到/mnt/extsd 目录,检查测试程序和配置是否在路径/mnt/extsd 下,然后准备测试。

mkdir -p /mnt/extsd
mount -t vfat /dev/mmcblk0p1 /mnt/extsd
5.2 在 PC 端用 adb shell 测试
前提,需要配置 sdk 支持 adb(一般默认都支持)。

在 PC 端启动 Windows PowerShell 终端,然后切换到测试程序和配置所在路径。

在 Windows PowerShell 终端,使用 adb push 命令将测试程序和配置推送到板端。

adb push .\\sample_virvi2venc\\sample_virvi2venc /mnt/extsd/
.\\sample_virvi2venc\\sample_virvi2venc: 1 file pushed. 3.4 MB/s (8699676 bytes in 2.442s)

adb push .\\sample_virvi2venc\\sample_virvi2venc.conf /mnt/extsd/
.\\sample_virvi2venc\\sample_virvi2venc.conf: 1 file pushed. 0.1 MB/s (693 bytes in 0.005s)
在 Windows PowerShell 终端,使用 adb shell 命令登录到板端,然后准备测试。

5.3 测试指令
以下分别以 sample_driverVipp 和 sample_virvi2venc 为例介绍没有配置文件和有配置文件两 种情况下,MPP sample 的测试指令。 【Tina】

cd /mnt/extsd/

./sample_driverVipp # 需要逐个指定参数。

或者一次性指定所有测试参数

./sample_driverVipp 0 1920 1080 8 60 0 10 60 /mnt/extsd/

【Melis】

Melis上该sample的位置:
melis\\source\\ekernel\\subsys\\avframework\\v4l2\\drivers\\media\\platform\\sunxi-vin
sample_driverVipp
测试方法:
sample_driverVipp 0 1920 1080 8 60 0 10 60 /mnt/E/
【Tina】

cd /mnt/extsd/

./sample_virvi2venc -path ./sample_virvi2venc.conf

【Melis】

sample_virvi2venc -path ./mnt/E/sample_virvi2venc.conf

6 类别
本章节主要介绍 MPP sample 的分类情况。

参考 MPP Middleware sample 目录下的文档 SampleManual.md ,目前主要分成以下几类:

• 视频

• 音频

• ISE 和 EIS

• 视频显示

• G2D

• CE

• UVC 和 UAC

• 多媒体文件

• AI demo

• 其他

【视频】

• sample_driverVipp 演示直接调用 linux 内核驱动获取 frame

• sample_virvi 视频采集

• sample_virvi2vo 演示视频采集预览

• sample_virvi2vo_zoom 演示缩放

• sample_vi_reset 演示 mpi_vi 组件的 reset 流程

• sample_isposd 测试 isp 相关

• sample_vin_isp_test 通过调用 isp 接口抓图的 demo

• sample_region 测试 osd

• sample_venc 视频编码

• sample_venc2muxer 演示视频编码和封装 mp4

• sample_virvi2venc 演示采集到编码

• sample_timelapse 演示缩时录影

• sample_virvi2venc2muxer 演示采集到编码到封装 mp4

• sample_multi_vi2venc2muxer 演示多路编码

• sample_rtsp 演示视频编码后的 rtsp 传输

• sample_CodecParallel 演示同编同解

• sample_vdec 视频解码

• sample_demux2vdec 演示解封装和解码

• sample_demux2vdec_saveFrame 从原始文件中分离出视频数据帧并解码生成 yuv 文件

• sample_demux2vdec2vo 演示解码显示

• sample_vencQpMap 演示视频编码 QPMAP 模式

• sample_OnlineVenc 在线编码

• sample_vencGdcZoom 编码 GDC 数字变焦

• sample_takePicture 演示单拍和连拍

• sample_recorder 演示四路录制编码封装或者预览显示

• sample_vencRecreate 演示动态配置编码格式、帧率、码率等功能

【音频】

• sample_ai 演示音频采集

• sample_ao 演示音频输出

• sample_aoSync 演示采用同步的方式 send pcm frame。而 sample_ao 是采用异步的方式

• sample_ao_resample_mixer 演示读取 pcm 数据,然后播放声音,从耳机口输出声音

• sample_ao2ai_aec 回声消除,初版

• sample_ao2ai_aec_rate_mixer 回声消除,初版基础上测试打开音频输出重采样和混音功能 后,回声消除是否正常

• sample_aec 回声消除,修改版

• sample_aenc 音频编码

• sample_ai2aenc 音频采集和编码

• sample_ai2aenc2muxer 音频采集、编码和封装

• sample_select 演示多路音频编码,用 select() 方式获取编码码流

• sample_adec 音频解码

• sample_adec2ao 音频解码输出

• sample_demux2adec 从原始文件中分离出音频数据帧并解码

• sample_demux2adec2ao 从原始文件中分离出音频数据帧并解码输出音频

【ISE 和 EIS】

• sample_fish 演示单目鱼眼功能

• sample_virvi2fish2venc 演示鱼眼图像畸形校正后做编码

• sample_virvi2fish2vo 演示鱼眼图像畸形校正后预览

• sample_virvi2eis2venc 演示防抖功能

• sample_ise_dzoom 演示 ise 缩放功能

• sample_gdc_dzoom 演示 gdc 缩放功能

【视频显示】

• sample_vo 演示视频 YUV 预览

• sample_UILayer 验证 UILayer 的格式

【G2D】

• sample_g2d 演示直接用 G2D 处理 YUV 文件做透明叠加、旋转和镜像、缩放等

• sample_vi_g2d 演示从 VI 获取视频帧,用 G2D 做旋转、裁剪、缩放等处理后送 VO 显示

【CE】

• sample_twinchn_virvi2venc2ce 两路 ce 加解密测试

• sample_virvi2venc2ce 单路 ce 加解密测试

【UVC 和 UAC】

• sample_uvc2vdec_vo 做主,mjpeg 解码显示

• sample_uvc2vdenc2vo 做主,mjpeg 解码显示

• sample_uvc2vo 做主,yuv 显示

• sample_uvc_vo 做主,yuv 显示

• sample_uvcout 做从,mjpeg 编码输出

• sample_uac 演示 uac 测试

• sample_usbcamera 测试 UVC、UAC 复合设备

【多媒体文件】

• sample_demux 解复用 mp4 文件

• sample_file_repair 修复 mp4 文件

【AI demo】

• sample_odet_demo 目标检测演示示例

• sample_RegionDetect 演示区域检测

【其他】

• sample_glog 演示 glog 库的用法

• sample_hello 演示 MPP helloworld 程序

• sample_pthread_cancel 测试 pthread_cancel()

• sample_motor 电机测试

• sample_sound_controler 语音识别

• sample_ai_Demo_0.9.2 智能算子 demo

• sample_ai_Demo_0.9.6 智能算子 demo

• sample_thumb 缩略图

• sample_nna 人形检测和人脸检测

• sample_MotionDetect 移动侦测

• sample_PersonDetect 人形检测

• sample_directIORead 演示使用 directIO 方式读文件

7 状态
本章节主要介绍当前各 MPP sample 的状态,即:分别在 Tina 和 Melis 各平台方案上的支持情 况。

7.1 Tina 各平台方案上 MPP sample 支持情况
说明

标注 “Y” 则表示该 sample 支持在该平台方案上测试,未标注则表示不支持。

MPP sample V853 V833 V536 V533 V316
总数 61 54 39 45 33
视频 26 19 13 17 11
sample_driverVipp Y Y Y
sample_virvi Y Y Y Y Y
sample_virvi2vo Y Y Y Y Y
sample_virvi2vo_zoom Y Y
sample_vi_reset Y Y Y
sample_isposd Y Y Y
sample_vin_isp_test Y Y Y
sample_region Y Y Y Y Y
sample_venc Y Y Y Y Y
sample_venc2muxer Y Y Y Y Y
sample_virvi2venc Y Y Y Y Y
sample_timelapse Y Y Y Y
sample_virvi2venc2muxer Y Y Y Y Y
sample_multi_vi2venc2muxer Y Y
sample_rtsp Y Y Y Y
sample_CodecParallel Y Y
sample_vdec Y Y Y Y Y
sample_demux2vdec Y Y Y Y Y
sample_demux2vdec_saveFrame Y Y Y Y Y
sample_demux2vdec2vo Y Y Y Y Y
sample_vencQpMap Y
sample_OnlineVenc Y
sample_vencGdcZoom Y
sample_takePicture Y
sample_recorder Y
音频 14 14 9 10 9
sample_ai Y Y Y Y Y
sample_ao Y Y Y Y Y
sample_aoSync Y Y
sample_ao_resample_mixer Y Y
sample_ao2ai_aec Y Y Y
sample_ao2ai_aec_rate_mixer Y Y
sample_aec Y Y
sample_aenc Y Y Y Y Y
sample_ai2aenc Y Y Y Y Y
sample_ai2aenc2muxer Y Y Y Y Y
sample_select Y Y Y Y Y
sample_adec Y Y Y Y Y
sample_demux2adec Y Y Y Y Y
sample_demux2adec2ao Y Y Y Y Y
ISE 和 EIS 0 4 6 4 5
sample_fish Y Y Y Y
sample_virvi2fish2venc Y Y Y Y
sample_virvi2fish2vo Y Y Y Y
sample_virvi2eis2venc Y Y Y Y
sample_ise_dzoom Y
sample_gdc_dzoom Y Y
视频显示 2 2 1 2 1
sample_vo Y Y Y Y Y
sample_UILayer Y Y Y
G2D 2 2 1 1 1
sample_g2d Y Y Y Y Y
sample_vi_g2d Y Y
CE 2 2 0 2 0
sample_twinchn_virvi2venc2ce Y Y Y
sample_virvi2venc2ce Y Y Y
UVC 和 UAC 7 5 5 5 5
sample_uvc2vdec_vo Y Y Y Y Y
sample_uvc2vdenc2vo Y Y Y Y Y
sample_uvc2vo Y Y Y Y Y
sample_uvc_vo Y Y Y Y Y
sample_uvcout Y Y Y Y Y
sample_uac Y
sample_usbcamera Y
多媒体文件 2 2 2 1 1
sample_demux Y Y Y Y Y
sample_file_repair Y Y Y
AI demo 2 0 0 0 0
sample_odet_demo Y
sample_RegionDetect Y
其他 6 3 2 4 0
sample_glog Y Y Y Y
sample_hello Y Y Y Y
sample_pthread_cancel Y Y
sample_motor Y
sample_sound_controler Y
sample_ai_Demo_0.9.2
sample_ai_Demo_0.9.6
sample_thumb
sample_nna
sample_MotionDetect Y
sample_PersonDetect Y
sample_directIORead Y
7.2 Melis 各平台方案上 MPP sample 支持情况
说明

标注 “Y” 则表示该 sample 支持在该平台方案上测试,未标注则表示不支持。

MPP sample V459
总数 21
视频 9
sample_driverVipp Y
sample_virvi Y
sample_virvi2vo Y
sample_virvi2vo_zoom Y
sample_vi_reset
sample_isposd
sample_vin_isp_test
sample_region Y
sample_venc
sample_venc2muxer
sample_virvi2venc Y
sample_timelapse
sample_virvi2venc2muxer Y
sample_multi_vi2venc2muxer Y
sample_rtsp
sample_CodecParallel
sample_vdec
sample_demux2vdec
sample_demux2vdec_saveFrame
sample_demux2vdec2vo Y
音频 9
sample_ai Y
sample_ao Y
sample_ao_resample_mixer
sample_ao2ai_aec Y
sample_ao2ai_aec_rate_mixer
sample_aec Y
sample_aenc Y
sample_ai2aenc
sample_ai2aenc2muxer Y
sample_select
sample_adec Y
sample_demux2adec
sample_demux2adec2ao Y
sample_aoSync Y
ISE 和 EIS 1
sample_fish
sample_virvi2fish2venc
sample_virvi2fish2vo Y
sample_virvi2eis2venc
sample_ise_dzoom
sample_gdc_dzoom
视频显示 0
sample_vo
sample_UILayer
G2D 1
sample_g2d
sample_vi_g2d Y
CE 0
sample_twinchn_virvi2venc2ce
sample_virvi2venc2ce
UVC 0
sample_uvc2vdec_vo
sample_uvc2vdenc2vo
sample_uvc2vo
sample_uvc_vo
sample_uvcout
多媒体文件 00
sample_demux
sample_file_repair
其他 1
sample_glog
sample_hello
sample_pthread_cancel
sample_motor
sample_sound_controler
sample_ai_Demo_0.9.2
sample_ai_Demo_0.9.6
sample_thumb Y
sample_nna
8 正文
本章节具体介绍 MPP 各 sample 的测试方法。主要包括:测试目的、组件依赖、测试通路、源 文件、目标文件、参数配置、测试指令、退出测试、预期结果等。

8.1 视频
8.1.1 sample_driverVipp
测试目的:

演示直接调用vin驱动接口获取视频帧。
该sample没有使用任何mpp组件。
组件依赖:


测试通路:

image-20221120170233258


图 8-1: MPP_sample 测试通路-sample_driverVipp

源文件:


目标文件:

每隔若干帧保存一帧到指定的output目录。
参数配置:

video_device: 指定vipp设备节点,通常取值0、1、2、3(对于V853,通常取值0、4、8、12)。
capture_width: 指定camera采集的图像宽度。
capture_height: 指定camera采集的图像高度。
pixel_format: 指定camera采集的图像格式。
fps: 指定camera采集的帧率。
test_frame_count: 指定测试采集的frame总数,0表示无限。
store_count: 指定保存的图像数量。
store_interval: 指定保存图像的周期,即每n帧图像保存1帧。
frame_saving_path: 指定保存图像的目录,该目录要确保存在。
测试指令:

【Tina】

cd /mnt/extsd/

./sample_driverVipp # 需要逐个指定参数。

或者一次性指定所有测试参数

./sample_driverVipp 0 1920 1080 8 60 0 10 60 /mnt/extsd/

【Melis】

Melis上该sample的位置:
melis\\source\\ekernel\\subsys\\avframework\\v4l2\\drivers\\media\\platform\\sunxi-vin
sample_driverVipp
测试方法:
sample_driverVipp 0 1920 1080 8 60 0 10 60 /mnt/E/
8.1.2 sample_virvi
测试目的:

演示采集图像帧,最多可支持4路vipp采集。
该sample测试mpi_vi组件。
组件依赖:

mpp_vi
测试通路:

image-20221120170355890


图 8-2: MPP_sample 测试通路-sample_virvi

源文件:


目标文件:

  1. 连续YUV文件
    /mnt/extsd/test.yuv
  2. 单帧YUV文件
    存放在指定路径/mnt/extsd 下面
    参数配置:

最多支持4路vipp采集,这4路的参数可单独配置。
第0路vipp的参数配置
dev_num_0: 指定vipp设备ID,通常取值0,表示vipp0(对于V853,通常也取值0,表示vipp0)。
isp_dev_num_0: 指定isp设备ID,通常取值0,表示isp0。
pic_width_0: 指定vipp采集图像的宽度。
pic_height_0: 指定vipp采集图像的高度。
frame_rate_0: 指定vipp采集图像的帧率。
pic_format_0: 指定vipp采集图像的像素格式。
color_space_0: 指定vipp采集图像的颜色空间格式。
enable_wdr_mode_0: 指定vipp采集图像是否开启WDR。
drop_frm_num_0: 指定vipp开始前丢弃的帧数。
第1路vipp的参数配置
dev_num_1: 指定vipp设备ID,通常取值1,表示vipp1(对于V853,通常取值4,表示vipp4)。
isp_dev_num_1: 指定isp设备ID,通常取值0,表示isp0。
pic_width_1: 指定vipp采集图像的宽度。
pic_height_1: 指定vipp采集图像的高度。
frame_rate_1: 指定vipp采集图像的帧率。
pic_format_1: 指定vipp采集图像的像素格式。
color_space_1: 指定vipp采集图像的颜色空间格式。
enable_wdr_mode_1: 指定vipp采集图像是否开启WDR。
drop_frm_num_1: 指定vipp开始前丢弃的帧数。
第2路vipp的参数配置
dev_num_2: 指定vipp设备ID,通常取值2,表示vipp2(对于V853,通常取值8,表示vipp8)。
isp_dev_num_2: 指定isp设备ID,通常取值0,表示isp0。
pic_width_2: 指定vipp采集图像的宽度。
pic_height_2: 指定vipp采集图像的高度。
frame_rate_2: 指定vipp采集图像的帧率。
pic_format_2: 指定vipp采集图像的像素格式。
color_space_2: 指定vipp采集图像的颜色空间格式。
enable_wdr_mode_2: 指定vipp采集图像是否开启WDR。
drop_frm_num_2: 指定vipp开始前丢弃的帧数。
第3路vipp的参数配置
dev_num_3: 指定vipp设备ID,通常取值3,表示vipp3(对于V853,通常取值12,表示vipp12)。
isp_dev_num_3: 指定isp设备ID,通常取值0,表示isp0。
pic_width_3: 指定vipp采集图像的宽度。
pic_height_3: 指定vipp采集图像的高度。
frame_rate_3: 指定vipp采集图像的帧率。
pic_format_3: 指定vipp采集图像的像素格式。
color_space_3: 指定vipp采集图像的颜色空间格式。
enable_wdr_mode_3: 指定vipp采集图像是否开启WDR。
drop_frm_num_3: 指定vipp开始前丢弃的帧数。
指定需要保存哪一路vipp的YUV数据,以及保存的帧数和文件
save_pic_dev: 保存指定vipp的YUV数据。
yuv_frm_count: 指定保存的图像帧数。
yuv_file: 指定保存的路径和文件名。
保存 save_pic_dev 指定vipp的单帧YUV数据的总帧数、间隔和位置
raw_store_count: 指定保存单帧YUV数据的总帧数。
raw_store_interval: 指定保存单帧YUV数据的间隔,单位: 帧。
store_dir: 指定保存单帧YUV数据的位置。
指定保存 YUV 的 buffer 长度和个数
save_pic_buffer_len: 指定保存 YUV 的 buffer 长度,默认值0,表示根据像素格式和分辨率自动换算 buffer 长
度。
save_pic_buffer_num: 指定保存 YUV 的 buffer 个数。
test_duration: 测试时间,单位: s。
测试指令:

【Tina】

cd /mnt/extsd/

# ./sample_virvi -path ./sample_virvi.conf

【Melis】

sample_virvi -path ./mnt/E/sample_virvi.conf

退出测试:

测试达到设定的时间后自动退出测试,或者按 “ctrl + c” 提前结束测试。
预期结果:

1.测试程序运行正常,测试过程没有异常打印。

2.使用 YUView 软件查看测试生成的 YUV 文件正常。
8.1.3 sample_virvi2vo
测试目的:

演示采集+预览。
该sample测试mpi_vi和mpi_vo组件的绑定组合。
创建mpi_vi和mpi_vo,将它们绑定,再分别启动。mpi_vi采集图像,直接传输给mpi_vo显示。
组件依赖:

mpp_vi
mpp_hw_display
mpp_vo
测试通路:

image-20221120170432649


图 8-3: MPP_sample 测试通路-sample_virvi2vo

源文件:


目标文件:


参数配置:

以下配置支持测试:3路vipp采集+vo不同layer同时预览,再加上ui显示。
vipp0采集 + vo layer0预览的配置
capture_width: 指定vipp0采集图像的宽度。
capture_height: 指定vipp0采集图像的高度。
display_x: 指定vo显示输出图像的x坐标。
display_y: 指定vo显示输出图像的y坐标。
display_width: 指定vo显示输出图像的宽度。
display_height: 指定vo显示输出图像的高度。
layer_num: 指定vo显示的层数,通常取值为0,表示vo的layer0。
dev_num: 指定vipp设备号,通常取值为0,表示vipp0(对于V853,通常取值为0,表示vipp0)。
vipp4采集 + vo layer4预览的配置
capture_width2: 指定vipp0采集图像的宽度。
capture_height2: 指定vipp0采集图像的高度。
display_x2: 指定vo显示输出图像的x坐标。
display_y2: 指定vo显示输出图像的y坐标。
display_width2: 指定vo显示输出图像的宽度。
display_height2: 指定vo显示输出图像的高度。
layer_num2: 指定vo显示的层数,通常取值为4,表示vo的layer4。
dev_num2: 指定vipp设备号,通常取值为1,表示vipp1(对于V853,通常取值为4,表示vipp4)。
vipp8采集 + vo layer8预览的配置
capture_width3: 指定vipp0采集图像的宽度。
capture_height3: 指定vipp0采集图像的高度。
display_x3: 指定vo显示输出图像的x坐标。
display_y3: 指定vo显示输出图像的y坐标。
display_width3: 指定vo显示输出图像的宽度。
display_height3: 指定vo显示输出图像的高度。
layer_num3: 指定vo显示的层数,通常取值为8,表示vo的layer8。
dev_num3: 指定vipp设备号,通常取值为2,表示vipp2(对于V853,通常取值为8,表示vipp8)。
add_ui_layer: 是否增加UI层,默认0,表示不增加。
ui_test_layer: 指定UI显示的layer。
ui_display_width: 指定UI显示的宽度。
ui_display_height: 指定UI显示的高度。
disp_type: 指定显示设备类型,比如:lcd、hdmi、cvbs。
pic_format: 指定像素格式。
frame_rate: 指定帧率,单位: fps。
test_duration: 测试时间,单位: s。
测试指令:

【Tina】

cd /mnt/extsd/

./sample_virvi2vo -path ./sample_virvi2vo.conf

【Melis】

sample_virvi2vo -path ./mnt/E/sample_virvi2vo.conf

退出测试:

测试达到设定的时间后自动退出测试,或者按 “ctrl + c” 提前结束测试。
预期结果:

  1. 测试程序运行正常,测试过程没有异常打印。
  2. 屏幕实时显示视频图像正常,无卡顿、花屏等。
    8.1.4 sample_virvi2vo_zoom
    测试目的:

演示直接使用pi_vi和mpi_vo组件实现图像的缩放,可支持4K图像缩放。
该sample测试mpi_vi和mpi_vo组件的非绑定。
mpi_vi采集图像,经过缩放算法处理后,把指定区域送给mpi_vo显示。
组件依赖:

mpp_vi
mpp_hw_display
mpp_vo
测试通路:

image-20221120170458268


图 8-4: MPP_sample 测试通路-sample_virvi2vo_zoom

源文件:


目标文件:


参数配置:

capture_width: 指定camera采集图像的宽度。
capture_height: 指定camera采集图像的高度。
display_width: 指定vo显示输出图像的宽度。
display_height: 指定vo显示输出图像的高度。
dev_num: 指定vipp设备号。
disp_type: 指定vo显示设备类型(hdmi, lcd, cvbs)。
pic_format: 指定camera采集的图像像素格式。
frame_rate: 指定camera采集的帧率,单位: fps。
test_duration: 指定测试时间,单位: s。
zoom_speed: 缩放的速度,一般建议设置为10。值越小,速度越快。
zoom_max_cnt: 缩放的次数。
测试指令:

【Tina】

cd /mnt/extsd/

./sample_virvi2vo_zoom -path ./sample_virvi2vo_zoom.conf

【Melis】

sample_virvi2vo_zoom -path /mnt/E/sample_virvi2vo_zoom.conf

结束测试:

达到缩放次数或指定测试时间后自动退出测试,或者按 “ctrl + c” 提前结束测试
预期结果:

  1. 测试程序运行正常,测试过程没有异常打印。
  2. 屏幕实时显示视频图像缩放效果正常,无卡顿、花屏等。
    8.1.5 sample_vi_reset
    测试目的:

该sample 演示vi 组件的reset 流程。
组件依赖:


测试通路:

image-20221120172327049


图 8-5: MPP_sample 测试通路-sample_vi_reset

源文件:


目标文件:


参数配置:

test_count: 指定测试的次数。
指定测试vipp id的起止范围
vipp_id_start: 指定测试起始的vipp id,通常取值0,表示vipp0(对于V853,表示vipp0)。
vipp_id_end: 指定测试结束的vipp id,通常取值3,表示vipp3(对于V853,表示vipp12)。对于V853,由于当前
vipp12被LDC(直方图均衡)功能占用,无法测试,故实测时取值2。即测试前3个vipp。
注:通过修改isp配置,关闭LDC功能后,可以测试全部4个vipp。
测试指令: 【Tina】

cd /mnt/extsd/

./sample_vi_reset

【Melis】

暂不支持。

退出测试:

到达测试次数后自动退出测试,或者按 “ctrl + c” 提前结束测试。
预期结果:

  1. 测试程序运行正常,测试过程没有异常打印。
    8.1.6 sample_isposd
    测试目的:

该sample测试mpi_vi和mpi_venc组件绑定。
创建mpi_vi和mpi_venc,将它们绑定,再分别启动。mpi_vi采集图像,调用mpi_vi相关接口获取实时的ISP参数添加overlay到VENC通道。
组件依赖:

mpp_vi
mpp_venc
mpp_system_rgb_ctrl
测试通路:

image-20221120172512591


图 8-6: MPP_sample 测试通路-sample_isposd

源文件:


目标文件:

/mnt/extsd/testRegion.h264
参数配置:

capture_width: 指定camera采集图像的宽度。
capture_height: 指定camera采集图像的高度。
pic_format: 指定camera采集图像的像素格式。
frame_rate: 指定camera采集的帧率。
test_duration: 指定测试时间,单位: s。
overlay_x,overlay_y,overlay_w,overlay_h: 指定overlay类型的region参数。
cover_x,cover_y,cover_w,cover_h: 指定cover类型的region参数。
add_venc_channel: 指定是否选择VENC通道,默认0,表示不选择编码通道。
encoder_count: 保存编码视频的帧数。
bit_rate: 指定编码的码率,单位: bps。
encoder_type: 指定编码类型(H.265、H.264、MJPEG)。
output_file_path: 指定编码视频的保存路径。
测试指令:

【Tina】

cd /mnt/extsd/

./sample_isposd -path ./sample_isposd.conf

【Melis】

暂不支持。
退出测试:

到达测试时间后自动退出测试,或者按 “ctrl + c” 提前结束测试。
预期结果:

  1. 测试程序运行正常,测试过程没有异常打印。
  2. 生成的编码文件 testRegion.h264 的osd效果正常,且位置正确。
    8.1.7 sample_vin_isp_test
    测试目的:

该sample 用于测试ISP通路,是通过调用 isp 接口抓图的 demo
组件依赖:


测试通路:

image-20221120172530947


图 8-7: MPP_sample 测试通路-sample_vin_isp_test

源文件:


目标文件:


参数配置:

参数1:选择通道
参数2:分辨率宽
参数3:分辨率高
参数4:保存路径
参数5:保存帧数
参数6:测试次数
参数7:FPS
参数8:WDR开关
测试指令:

【Tina】

cd /mnt/extsd/

./sample_vin_isp_test

【Melis】

暂不支持。
退出测试:

测试达到指定次数后自动退出测试。
预期结果:

  1. 测试程序运行正常,测试过程没有异常打印。
  2. 使用YUView 软件分析生成的YUV文件正常。
    8.1.8 sample_region
    测试目的:

演示vipp和venc的osd功能。对于V459和V833,vipp只支持orl,venc只支持overlay和cover。
该sample测试mpi_vi和mpi_vo组件或者mpi_vi和mpi_venc组件绑定。
创建mpi_vi和mpi_vo,将它们绑定,再分别启动。mpi_vi采集图像,添加overlay和cover不同的region到VI通道,传输给mpi_vo显示。
也可以选择加入mpi_vi和mpi_venc组件绑定,把region添加到VENC通道上,保存编码后的视频数据文件,可以用VLC播放。
组件依赖:


测试通路:

image-20221120172548521


图 8-8: MPP_sample 测试通路-sample_regio

源文件:


目标文件:

/mnt/extsd/testRegion.h264
参数配置:

online_en: 指定是否开启在线编码,默认0,表示不开启在线编码,即当前为离线编码。
online_share_buf_num: 指定在线编码的共享buffer个数(1或2),默认2,表示2个buffer。注意该配置仅当配置在
线模式时才生效。
vipp_dev: 指定vipp设备号,默认0,表示vipp0。
ve_ch_id: 指定编码通道,默认0,表示venc ch0。
rgn_attach_to_vi: 指定是否测试vipp的osd,默认1,表示测试vipp的osd,其实主要是测试vipp orl功能。
add_venc_channel: 指定是否进行编码,默认yes,表示vipp采集后图像后送给venc编码。
rgn_attach_to_ve: 指定是否测试编码osd,默认1,表示测试编码osd。注意该配置仅当配置add_venc_channel=yes
时才生效。
change_disp_attr_enable: 指定开启/关闭改变osd显示位置测试,默认1,表示开启该测试。
以下编码相关参数仅当配置add_venc_channel=yes时生效
encoder_count: 指定编码的总帧数。
bit_rate: 指定编码的码率,单位: bps。
encoder_type: 指定编码格式(H.264、H265)。
output_file_path: 指定编码文件的存放路径。
配置vipp采集参数
capture_width: 指定camera采集图像的宽度。
capture_height: 指定camera采集图像的高度。
pic_format: 指定像素格式(nv21,nv12,yu12,yv12; aw_lbc_2_5x,aw_lbc_2_0x,aw_lbc_1_5x,aw_lbc_1_0x
)。
frame_rate: 指定帧率,单位: fps。
注:当设置以下显示的宽度和高度为0时,表示不显示。
disp_width: 指定显示的宽度。
disp_height: 指定显示的高度。
bitmap_format: 指定位图的格式(ARGB8888、ARGB1555)。
注:当设置以下overlay、cover、orl的宽度和高度为0时,表示不进行该项测试。
overlay_x: 指定overlay的x坐标。
overlay_y: 指定overlay的y坐标。
overlay_w: 指定overlay的宽度。
overlay_h: 指定overlay的高度。
cover_x: 指定cover的x坐标。
cover_y: 指定cover的y坐标。
cover_w: 指定cover的宽度。
cover_h: 指定cover的高度。
orl_x: 指定orl矩形的x坐标。
orl_y: 指定orl矩形的y坐标。
orl_w: 指定orl矩形的宽度。
orl_h: 指定orl矩形的高度。
orl_thick: 指定orl线条的宽度,单位: 像素个数,默认2,表示2个像素的宽度。
test_duration: 指定测试时间,单位: s。
测试指令:

【Tina】

# cd /mnt/extsd/ # ./sample_region -path ./sample_region.conf
【Melis】

sample_region -path ./mnt/E/sample_region.conf

退出测试:

测试达到设定的时间后自动退出测试,或者按 “ctrl + c” 提前结束测试。
预期结果:

  1. 测试程序运行正常,测试过程没有异常打印。
  2. 生成的编码文件 testRegion.h264 的osd效果正常,且位置正确。
  3. 屏幕实时显示Camera 采集的视频图像,同时,显示一个绿色的框。
    8.1.9 sample_venc
    测试目的:

该sample 演示从yuv(sample中格式限定为yuv420p)原始数据文件xxx.yuv中读取视频帧,编码,将取得的编码往输出
文件里面直接写。生成裸码流视频文件。
注意:
如果是h264或h265编码sample会自动在目标文件的开始加上spspps信息,其他格式则不加。
组件依赖:

mpp_venc
测试通路:

image-20221120172626867


图 8-9: MPP_sample 测试通路-sample_venc

源文件:

/mnt/extsd/test.yuv
目标文件:

/mnt/extsd/test.raw
参数配置:

src_file: 指定原始yuv文件的路径。
src_width: 指定原始视频的宽度。
src_height: 指定原始视频的高度。
dst_file: 指定生成的裸码流视频文件路径。
dst_width: 指定生成的裸码流视频的宽度。
dst_height: 指定生成的裸码流视频的高度。
src_pixfmt: 指定像素格式(YUV类型: nv21(yvu420sp), yu12(yuv420p), yv12, nv12。LBC压缩类型:
aw_lbc_2_0x, aw_lbc_2_5x, aw_lbc_1_5x, aw_lbc_1_0x)。
color_space: 指定颜色空间(jpeg, rec709, rec709_part_range)。
encoder: 指定编码格式(H.264、H.265、MJPEG)。
profile: 指定编码质量,对于H264,建议配置High(2),对于H265,建议配置Main(0)。
framerate: 指定帧率,单位: fps。
bitrate: 指定编码的码率,单位: bps。
rotate: 指定编码旋转角度(0, 90, 180, 270),顺时针方向。
rc_mode: 指定码率控制模式(0:CBR, 1:VBR, 2:FIXQP, 3:QPMAP)。
gop_mode: 指定GOP模式(0:NormalP, 1:DualP, 2:SmartP)。
gop_size: 指定GOP大小,当前只针对H265有效,取值范围[1, 63]。
product_mode: 指定产品类型(0:Normal, 1:IPC)。
sensor_type: 指定sensor类型(0:DisWdr, 1:EnWdr)。
key_frame_interval: 指定I帧间隔。
VBR、CBR模式,编码参数。
init_qp: 指定初始QP值,取值范围(0, 51)。
min_i_qp: 指定I帧最小QP值,取值范围(0, 51)。
max_i_qp: 指定I帧最大QP值,取值范围(0, 51)。
min_p_qp: 指定P帧最小QP值,取值范围(0, 51)。
max_p_qp: 指定P帧最大QP值,取值范围(0, 51)。
FIXQP模式,编码参数
i_qp: 指定I帧的QP值,取值范围(0, 51)
p_qp: 指定P帧的QP值,取值范围(0, 51)
VBR模式,编码参数
moving_th:指定mb16x16中MAD的阈值,取值范围[0, 31]。
quality: 指定静态P帧的位系数,取值范围[1, 20]。
p_bits_coef: 指定移动P帧的位系数,取值范围[1, 50]。
i_bits_coef: 指定I帧的位系数,取值范围[1, 20]。
test_duration: 测试时间,单位: s。
测试指令:

【Tina】

cd /mnt/extsd/

./sample_venc -path ./sample_venc.conf

【Melis】

暂不支持。
退出测试:

测试达到设定的时间后自动退出测试。
预期结果:

  1. 测试程序运行正常,测试过程没有异常打印。
  2. 使用VLC 软件播放裸码流文件test.raw正常。
    8.1.10 sample_venc2muxer
    测试目的:

从yuv原始数据文件xxx.yuv中读取视频帧,编码,并由muxer进行封装生成相应的视频输出文件。
组件依赖:

mpp_venc
mpp_muxer
测试通路:

image-20221120172643094


图 8-10: MPP_sample 测试通路-sample_venc2muxer

源文件:

/mnt/extsd/1080p.yuv
目标文件:

/mnt/extsd/1080p.mp4
参数配置:

yuv_src_file: 指定原始yuv文件的路径。
yuv_src_size: 指定原始视频文件的视频大小,如1080p。
视频源的region区域,当设置region_w=0时,不开启该功能。
以下宽高和坐标要求16对齐。
region_x: 指定region区域的x坐标。
region_y: 指定region区域的y坐标。
region_w: 指定region区域的宽度。
region_h: 指定region区域的高度。
yuv_src_pixfmt: 指定像素格式(nv21)。
video_dst_file: 指定生成的视频文件路径。
video_size: 指定生成的视频文件视频大小,如1080p。
video_encoder: 指定视频编码格式(H.264、H.265、MJPEG)。
profile: 指定编码质量,对于H264,建议配置High(2),对于H265,建议配置Main(0)。
rc_mode: 指定码率控制模式(0:CBR, 1:VBR, 2:FIXQP, 3:QPMAP)。
video_framerate: 指定生成视频文件的帧率,单位: fps。
video_bitrate: 指定生成视频文件的码率,单位: bps。
video_duration: 指定生成一个视频文件的最大持续时间(如:每个视频文件长度一分钟),单位: s。
media_file_format: 指定视频文件的封装格式,支持mp4和ts。
test_duration: 指定测试时间,单位: s。
测试指令:

【Tina】

cd /mnt/extsd/

./sample_venc2muxer -path ./sample_venc2muxer.conf

【Melis】

暂不支持。
退出测试:

测试达到设定的时间后自动退出测试。
预期结果:

  1. 测试程序运行正常,测试过程没有异常打印。
  2. 使用VLC 软件播放生成的mp4文件正常。
    8.1.11 sample_virvi2venc
    测试目的:

该sample测试mpi_vi和mpi_venc组件的绑定组合。创建mpi_vi和mpi_venc,将它们绑定,再分别启动。
mpi_vi采集图像,直接传输给mpi_venc进行编码。
组件依赖:

mpp_vi
mpp_venc
测试通路:

image-20221120172701504


图 8-11: MPP_sample 测试通路-sample_virvi2venc

源文件:


目标文件:

/mnt/extsd/test.raw
参数配置:

online_en: 指定是否开启在线编码,默认0,表示不开启在线编码,即当前为离线编码。
online_share_buf_num: 指定在线编码的共享buffer个数(1或2),默认2,表示2个buffer。注意该配置仅当配置在
线模式时才生效。
vipp_id: 指定vipp设备号,默认0,表示vipp0。
wdr_en: 指定是否开启WDR,默认0,表示不开WDR。
drop_frm_num: 指定丢帧个数,对于离线编码是vipp丢帧,对于在线编码是ve编码前丢帧。
src_width: 指定原始视频的宽度。
src_height: 指定原始视频的高度。
vi_buffer_num: 指定VI的buffer个数,仅对离线编码有效。
saturation_change: 指定饱和度改变的值,默认0,表示不调整。取值范围[-256, 512]。
src_pixfmt: 指定像素格式(YUV类型: nv21(yvu420sp), yu12(yuv420p), yv12, nv12。LBC压缩类型:
aw_lbc_2_0x, aw_lbc_2_5x, aw_lbc_1_5x, aw_lbc_1_0x)。
color_space: 指定颜色空间(jpeg, rec709, rec709_part_range)。
venc_ch_id: 指定编码通道,默认0,表示venc ch0。
video_dst_file: 指定编码文件的存放路径。
video_framerate: 指定帧率,单位: fps。
video_bitrate: 指定编码的码率,单位: bps。
video_width: 指定生成的裸码流视频的宽度。
video_height: 指定生成的裸码流视频的高度。
video_encoder: 指定编码格式(H.264、H.265、MJPEG)。
profile: 指定编码质量,对于H264,建议配置High(2),对于H265,建议配置Main(0)。
ve_freq: 指定VE的频率,默认0,表示300MHz,单位: MHz。
product_mode: 指定产品类型(0:Normal, 1:IPC)。
sensor_type: 指定sensor类型(0:DisWdr, 1:EnWdr)。
key_frame_interval: 指定I帧间隔。
enable_gdc: 指定是否开启GDC功能,默认0,表示不开GDC。
rc_mode: 指定码率控制模式(0:CBR, 1:VBR, 2:FIXQP, 3:QPMAP)。
VBR、CBR模式,编码参数
init_qp: 指定初始QP值,取值范围(0, 51)。
min_i_qp: 指定I帧最小QP值,取值范围(0, 51)。FIXQP模式时,取其值为i_qp。
max_i_qp: 指定I帧最大QP值,取值范围(0, 51)。
min_p_qp: 指定P帧最小QP值,取值范围(0, 51)。FIXQP模式时,取其值为p_qp。
max_p_qp: 指定P帧最大QP值,取值范围(0, 51)。
mb_qp_limit_en: 指定是否开启mb qp限制,默认0,表示不开启。
VBR模式,编码参数
moving_th:指定mb16x16中MAD的阈值,取值范围[0, 31]。
quality: 指定静态P帧的位系数,取值范围[1, 20]。
p_bits_coef: 指定移动P帧的位系数,取值范围[1, 50]。
i_bits_coef: 指定I帧的位系数,取值范围[1, 20]。
gop_mode: 指定GOP模式(0:NormalP, 1:DualP, 2:SmartP)。
gop_size: 指定GOP大小,当前只针对H265有效,取值范围[1, 63]。
高级跳帧参数
AdvancedRef_Base: 设置该值大于0表示开启高级跳帧功能,等于0表示关闭高级跳帧功能。
AdvancedRef_Enhance: 设置Enhance为5。
AdvancedRef_RefBaseEn: 设置该值为1表示开启参考帧,等于0表示关闭参考帧。
enable_fast_enc: 指定是否开启快速编码,默认0,表示不开启。
encode_rotate: 指定编码旋转角度(0, 90, 180, 270),顺时针方向。
mirror: 指定编码镜像是否开启,默认0,表示不开启。取值范围[0, 1]。
video_duration: 指定生成一个视频文件的最大持续时间(如:每个视频文件长度一分钟),单位: s。
test_duration: 指定测试时间,单位: s。
color2grey: 指定是否开启彩转灰功能,默认"no",表示不开启。取值范围[“no”, “yes”]。
2D降噪参数配置
2dnr_en: 编码器2DNR使能,默认1,表示开启。取值范围[0, 1]。
2dnr_strength_y: 亮度降噪强度系数。该值越大,滤波强度越高。默认127,取值范围[0, 255]。
2dnr_strength_c: 色度降噪强度系数。该值越大,滤波强度越高。默认127,取值范围[0, 255]。
2dnr_threshold_y: 亮度邻域像素降噪开关阈值。该值越大,越容易触发2d滤波。默认7,取值范围[0, 15]。
2dnr_threshold_c: 色度邻域像素降噪开关阈值。该值越大,越容易触发2d滤波。默认7,取值范围[0, 15]。
3D降噪参数配置
3dnr_en: 编码器3DNR使能,默认1,表示开启。取值范围[0, 1]。
3dnr_pix_level_en: 3d滤波权重系数自适应修正开关。默认0,表示不开启。取值范围[0, 1]。
3dnr_smooth_en: 像素级3x3平滑滤波使能。默认1,表示开启。取值范围[0, 1]。
3dnr_pix_diff_th: 仅当3d_adjust_pix_level_enable为1时生效,自适应修正幅度阈值。该值越大,滤波强度越
高。默认6,取值范围[0, 31]。
3dnr_max_mv_th: 源图像素块运动矢量最大阈值,单个像素块仅当其水平和垂直MV皆小于该阈值,才会进行3d滤波。该值
越大,越容易触发3d滤波。默认2,取值范围[0, 63]。
3dnr_max_mad_th: 源图与参考图之间像素块的MAD最大阈值,单个像素块仅当其MAD值小于该阈值,才会进行3d滤波。该
值越大,越容易触发3d滤波。默认11,取值范围[0, 63]。
3dnr_min_coef: 3d滤波权重系数的最小阈值。该值越小,自适应3d滤波的强度上限越高。默认14,取值范围[0, 3
dnr_max_coef]。
3dnr_max_coef: 3d滤波权重系数的最大阈值。该值越大,自适应3d滤波的强度下限越低。默认16,取值范围[3
dnr_min_coef, 16]。
ROI测试参数配置
roi_num: 指定ROI的个数,默认0,表示不开启ROI测试。取值范围[0, 8]。
roi_qp: 指定ROI区域的QP值,默认50,表示最差质量。取值范围(0, 51)。
roi_BgFrameRateEnable: 指定是否开启非ROI区域低帧率编码,默认0,表示不开启。
roi_BgFrameRateAttenuation: 指定非ROI区域的帧率衰减比例,默认3,表示非ROI区域的帧率是正常帧率的1/3。
IntraRefresh_BlockNum: 指定P帧帧内刷新的block个数,默认0,表示不开启P帧帧内刷新功能。
orl_num: 指定ORL(Object Rectangle Label)的个数,取值范围[0,16]。
配置vbv buffer大小和vbv buffer阈值大小
vbvBufferSize: 指定vbv buffer大小,默认0,表示由mpp middleware自行计算并设置给编码器,大于0,表示由
app设置。
vbvThreshSize: 指定vbv buffer阈值大小,默认0,表示由mpp middleware自行计算并设置给编码器,大于0,表示
由app设置。
裁剪编码参数设置
crop_en: 指定是否开启裁剪编码,默认0,表示不开启。
crop_rect_x: 指定裁剪区域的x坐标。
crop_rect_y: 指定裁剪区域的y坐标。
crop_rect_w: 指定裁剪区域的宽度。
crop_rect_h: 指定裁剪区域的高度。
vui_timing_info_present_flag: 指定是否添加VUI信息,默认0,表示不添加。
encpp_disable: 指定是否禁用encpp新通路,默认0,表示不禁用。
super_frm_mode: 指定超级帧模式,默认0,表示不启用。(0:none, 1:discarded, 2:re-encode)。
测试指令:

【Tina】

cd /mnt/extsd/

./sample_virvi2venc -path ./sample_virvi2venc.conf

【Melis】

sample_virvi2venc -path ./mnt/E/sample_virvi2venc.conf

退出测试:

测试达到设定的时间后自动退出测试。
预期结果:

  1. 测试程序运行正常,测试过程没有异常打印。
  2. 使用VLC 软件播放生成的裸码流文件/mnt/extsd/test.raw正常。
    8.1.12 sample_timelapse
    测试目的:

演示缩时录影。
从camera节点取vi输入数据,对venc组件设置取帧间隔,设置编码帧率,并对数据进行编码封装,生成对应的视频输出文件。
组件依赖:

mpp_vi
mpp_venc
mpp_muxer
测试通路:

image-20221120172720694


图 8-12: MPP_sample 测试通路-sample_timelapse

源文件:


目标文件:

/mnt/extsd/timelapse.mp4
参数配置:

vipp_index: 获取视频数据的VIPP设备号,默认0,表示vipp0。通常取值0/1/2/3,(对于V853,通常取值0/4/8/12)。
vipp_width: vipp输出视频图像的宽度。
vipp_height: vipp输出视频图像的高度。
vipp_frame_rate: vipp的采集帧率,单位: fps。
timelapse: 缩时录影模式下取帧的帧间隔,单位: us。
video_frame_rate: 编码帧率,即设置编码文件的播放帧率。
video_duration: 编码文件的播放时长。
video_bitrate: 编码码率,单位: Mbps。
video_file_path: 编码文件的存储路径。
测试指令:

【Tina】

cd /mnt/extsd/

./sample_timelapse -path ./sample_timelapse.conf

【Melis】

暂不支持。
退出测试:

最终自动退出测试,默认测试时间有点长,可以按“ctrl + c”退出测试。
预期结果:

  1. 测试程序运行正常,测试过程没有异常打印。
  2. 使用VLC 软件播放生成的mp4文件/mnt/extsd/timelapse.mp4正常。
    8.1.13 sample_virvi2venc2muxer
    测试目的:

从camera 节点取vi 输入数据,并对数据进行编码封装,生成对应的视频输出文件。
组件依赖:

mpi_vi
mpp_venc
mpp_muxer
测试通路:

image-20221120172731258


图 8-13: MPP_sample 测试通路-sample_virvi2venc2muxer

源文件:


目标文件:

/mnt/extsd/test.mp4
参数配置:

online_en: 指定是否开启在线编码,默认0,表示不开启在线编码,即当前为离线编码。
online_share_buf_num: 指定在线编码的共享buffer个数(1或2),默认2,表示2个buffer。注意该配置仅当配置在
线模式时才生效。
vipp_id: 指定vipp设备号,默认0,表示vipp0。
wdr_en: 指定是否开启WDR,默认0,表示不开WDR。
drop_frm_num: 指定丢帧个数,对于离线编码是vipp丢帧,对于在线编码是ve编码前丢帧。
src_width: 指定原始视频的宽度。
src_height: 指定原始视频的高度。
vi_buffer_num: 指定VI的buffer个数,仅对离线编码有效。
saturation_change: 指定饱和度改变的值,默认0,表示不调整。取值范围[-256, 512]。
src_pixfmt: 指定像素格式(YUV类型: nv21(yvu420sp), yu12(yuv420p), yv12, nv12。LBC压缩类型:
aw_lbc_2_0x, aw_lbc_2_5x, aw_lbc_1_5x, aw_lbc_1_0x)。
color_space: 指定颜色空间(jpeg, rec709, rec709_part_range)。
venc_ch_id: 指定编码通道,默认0,表示venc ch0。
video_dst_file: 指定编码文件的存放路径。
add_repair_info: 指定是否为mp4文件添加文件修复信息。默认0,表示不添加。
frmsTag_backup_interval: 指定mp4文件修复的frame tag备份的时间间隔,单位:us。
dst_file_max_cnt: 指定muxer封装mp4文件,最多保留的文件个数。默认3,表示最多只允许保留3个mp4文件。
video_framerate: 指定帧率,单位: fps。
video_bitrate: 指定编码的码率,单位: bps。
video_width: 指定生成的裸码流视频的宽度。
video_height: 指定生成的裸码流视频的高度。
video_encoder: 指定编码格式(H.264、H.265、MJPEG)。
profile: 指定编码质量,对于H264,建议配置High(2),对于H265,建议配置Main(0)。
ve_freq: 指定VE的频率,默认0,表示300MHz,单位: MHz。
product_mode: 指定产品类型(0:Normal, 1:IPC)。
sensor_type: 指定sensor类型(0:DisWdr, 1:EnWdr)。
key_frame_interval: 指定I帧间隔。
enable_gdc: 指定是否开启GDC功能,默认0,表示不开GDC。
rc_mode: 指定码率控制模式(0:CBR, 1:VBR, 2:FIXQP, 3:QPMAP)。
VBR、CBR模式,编码参数
init_qp: 指定初始QP值,取值范围(0, 51)。
min_i_qp: 指定I帧最小QP值,取值范围(0, 51)。FIXQP模式时,取其值为i_qp。
max_i_qp: 指定I帧最大QP值,取值范围(0, 51)。
min_p_qp: 指定P帧最小QP值,取值范围(0, 51)。FIXQP模式时,取其值为p_qp。
max_p_qp: 指定P帧最大QP值,取值范围(0, 51)。
mb_qp_limit_en: 指定是否开启mb qp限制,默认0,表示不开启。
VBR模式,编码参数
moving_th:指定mb16x16中MAD的阈值,取值范围[0, 31]。
quality: 指定静态P帧的位系数,取值范围[1, 20]。
p_bits_coef: 指定移动P帧的位系数,取值范围[1, 50]。
i_bits_coef: 指定I帧的位系数,取值范围[1, 20]。
gop_mode: 指定GOP模式(0:NormalP, 1:DualP, 2:SmartP)。
gop_size: 指定GOP大小,当前只针对H265有效,取值范围[1, 63]。
高级跳帧参数
AdvancedRef_Base: 设置该值大于0表示开启高级跳帧功能,等于0表示关闭高级跳帧功能。
AdvancedRef_Enhance: 设置Enhance为5。
AdvancedRef_RefBaseEn: 设置该值为1表示开启参考帧,等于0表示关闭参考帧。
enable_fast_enc: 指定是否开启快速编码,默认0,表示不开启。
encode_rotate: 指定编码旋转角度(0, 90, 180, 270),顺时针方向。
mirror: 指定编码镜像是否开启,默认0,表示不开启。取值范围[0, 1]。
video_duration: 指定生成一个视频文件的最大持续时间(如:每个视频文件长度一分钟),单位: s。
test_duration: 指定测试时间,单位: s。
color2grey: 指定是否开启彩转灰功能,默认"no",表示不开启。取值范围[“no”, “yes”]。
2D降噪参数配置。
2dnr_en: 编码器2DNR使能,默认1,表示开启。取值范围[0, 1]。
2dnr_strength_y: 亮度降噪强度系数。该值越大,滤波强度越高。默认127,取值范围[0, 255]。
2dnr_strength_c: 色度降噪强度系数。该值越大,滤波强度越高。默认127,取值范围[0, 255]。
2dnr_threshold_y: 亮度邻域像素降噪开关阈值。该值越大,越容易触发2d滤波。默认7,取值范围[0, 15]。
2dnr_threshold_c: 色度邻域像素降噪开关阈值。该值越大,越容易触发2d滤波。默认7,取值范围[0, 15]。
3D降噪参数配置
3dnr_en: 编码器3DNR使能,默认1,表示开启。取值范围[0, 1]。
3dnr_pix_level_en: 3d滤波权重系数自适应修正开关。默认0,表示不开启。取值范围[0, 1]。
3dnr_smooth_en: 像素级3x3平滑滤波使能。默认1,表示开启。取值范围[0, 1]。
3dnr_pix_diff_th: 仅当3d_adjust_pix_level_enable为1时生效,自适应修正幅度阈值。该值越大,滤波强度越
高。默认6,取值范围[0, 31]。
3dnr_max_mv_th: 源图像素块运动矢量最大阈值,单个像素块仅当其水平和垂直MV皆小于该阈值,才会进行3d滤波。该值
越大,越容易触发3d滤波。默认2,取值范围[0, 63]。
3dnr_max_mad_th: 源图与参考图之间像素块的MAD最大阈值,单个像素块仅当其MAD值小于该阈值,才会进行3d滤波。该
值越大,越容易触发3d滤波。默认11,取值范围[0, 63]。
3dnr_min_coef: 3d滤波权重系数的最小阈值。该值越小,自适应3d滤波的强度上限越高。默认14,取值范围[0, 3
dnr_max_coef]。
3dnr_max_coef: 3d滤波权重系数的最大阈值。该值越大,自适应3d滤波的强度下限越低。默认16,取值范围[3
dnr_min_coef, 16]。
ROI测试参数配置
roi_num: 指定ROI的个数,默认0,表示不开启ROI测试。取值范围[0, 8]。
roi_qp: 指定ROI区域的QP值,默认50,表示最差质量。取值范围(0, 51)。
roi_BgFrameRateEnable: 指定是否开启非ROI区域低帧率编码,默认0,表示不开启。
roi_BgFrameRateAttenuation: 指定非ROI区域的帧率衰减比例,默认3,表示非ROI区域的帧率是正常帧率的1/3。
IntraRefresh_BlockNum: 指定P帧帧内刷新的block个数,默认0,表示不开启P帧帧内刷新功能。
orl_num: 指定ORL(Object Rectangle Label)的个数,取值范围[0,16]。
配置vbv buffer大小和vbv buffer阈值大小
vbvBufferSize: 指定vbv buffer大小,默认0,表示由mpp middleware自行计算并设置给编码器,大于0,表示由
app设置。
vbvThreshSize: 指定vbv buffer阈值大小,默认0,表示由mpp middleware自行计算并设置给编码器,大于0,表示
由app设置。
裁剪编码参数设置
crop_en: 指定是否开启裁剪编码,默认0,表示不开启。
crop_rect_x: 指定裁剪区域的x坐标。
crop_rect_y: 指定裁剪区域的y坐标。
crop_rect_w: 指定裁剪区域的宽度。
crop_rect_h: 指定裁剪区域的高度。
vui_timing_info_present_flag: 指定是否添加VUI信息,默认0,表示不添加。
encpp_disable: 指定是否禁用encpp新通路,默认0,表示不禁用。
super_frm_mode: 指定超级帧模式,默认0,表示不启用。(0:none, 1:discarded, 2:re-encode)。
测试指令:

【Tina】

cd /mnt/extsd/

./sample_virvi2venc2muxer -path ./sample_virvi2venc2muxer.conf

【Melis】

sample_virvi2venc2muxer -path ./mnt/E/sample_virvi2venc2muxer.conf

退出测试:

测试达到设定的时间后自动退出测试。
预期结果:

  1. 测试程序运行正常,测试过程没有异常打印。
  2. 使用VLC 软件播放生成的mp4文件正常。
    8.1.14 sample_multi_vi2venc2muxer
    测试目的:

最多允许4路编码加1路jpeg拍照。每个编码通道都可以选择vipp,以及timelapse模式等。
默认的配置如下:
VIPP0->venc0->muxerGrp0:bufferNum=5,采集分辨率1920x1080,格式LBC2.5,h264编码帧率30,码率1Mbit/
s,threshSize:wh/10, 普通NormalP编码,vbv缓存1秒。
VIPP1->venc1->muxerGrp1: bufferNum=5,采集分辨率640x480,格式NV21ÿ

以上是关于全志Tina Linux MPP 开发指南的主要内容,如果未能解决你的问题,请参考以下文章

全志Tina Linux MPP (多媒体框架)开发指南支持百问网T113 D1-H哪吒DongshanPI-D1s V853-Pro等开发板

全志 Tina Linux 系统调试 使用指南 GDB gdbserver coredump perf strace valgind

全志 Tina Linux 系统调试 使用指南 GDB gdbserver coredump perf strace valgind

全志 Tina Linux 系统调试 使用指南 GDB gdbserver coredump perf strace valgind

全志 Tina Linux 系统软件 开发指南 sdk源码编译操作 深入理解Tina-sdk编译框架 支持百问网T113 D1-H哪吒 DongshanPI-D1s V853-Pro等开发板

全志 Tina Linux 系统软件 开发指南 sdk源码编译操作 深入理解Tina-sdk编译框架 支持百问网T113 D1-H哪吒 DongshanPI-D1s V853-Pro等开发板