8. 100ASK_V853-PRO开发板支持MPP媒体处理平台

0.前言 ​ mpp 系统控制模块,根据芯片特性,完成硬件各个部件的复位、基本初始化工作,同时负责完成 mpp(media process platform 媒体处理平台)系统各个业务模块的初始化、去初始化以及管理 mpp 系统各个业务模块的工作状态、提供当前 mpp 系统的版本信息等功能。 应用程序启动 mpp 业务前,必须完成 mpp 系统初始化工作。同理,应用程序退出 mpp 业务后,也要完成 mpp 系统去初始化工作,释放资源。
​ 本章主要讲述如何在tina sdk中增加mpp补丁包和如何编译使用,该补丁包含有mpp部分的源码。具体mpp如何开发可以参考位于百度网盘中的100ask_v853-pro开发板的资料光盘中01_学习手册/《100ask-v853_pro系统开发手册》,该手册中的第四篇 基础组件开发中的第七章 tina linux 多媒体mpp 开发指南,此章节详细说明了100ask_v853-pro开发板针对mpp 系统控制模块的开发指导。
100ask_v853-pro开发板的资料光盘:
链接:https://pan.baidu.com/s/1tx742vfede9bmld9irwwqa?pwd=sp6a
提取码:sp6a
全志mpp_sample_使用说明:https://tina.100ask.net/sdkmodule/linux_mpp_sample_instructions-01/
100ask_v853-pro开发板资料汇总:
链接:100ask_100ask-pro 资料汇总 - allwinner / v853-pro - 嵌入式开发问答社区
100ask_v853-pro开发板购买链接:100ask_v853-pro开发板
1.增加mpp扩展包 mpp扩展包:
下载完成后,将sunxi-mpp.tar.gz压缩包放入虚拟机的任意目录,假设放在/home/book/workspaces目录下,
例如:
ook@100ask:~/workspaces$ ls100ask_v853-pro_tinasdk sunxi-mpp.tar.gz tina-v853-open 解压sunxi-mpp.tar.gz压缩包,输入
tar -xzvf sunxi-mpp.tar.gz 例如:
book@100ask:~/workspaces$ tar -xzvf sunxi-mpp.tar.gz sunxi-mpp/sunxi-mpp/cmake/sunxi-mpp/cmake/sunxi_mpp_lib.cmakesunxi-mpp/cmake/sunxi_mpp_include.cmake... 等待解压完成后进入sunxi-mpp目录下,即可查看当前目录下的文件
book@100ask:~/workspaces$ cd sunxi-mpp/book@100ask:~/workspaces/sunxi-mpp$ lscmake cmakelists.txt include lib readme.md sample staging_dir.sh toolchain 下面对各文件夹进行说明
cmake:设置mpp各文件的头文件和依赖目录cmakelists.txt:设置编译文件、交叉编译工具链位置、依赖等位置和规则信息include:包含mpp扩展包所需的头文件lib:包含mpp扩展包所需的依赖文件sample:包含mpp个应用示例源码staging_dir.sh:设置环境变量toolchain:包含v853交叉编译工具链 2.编译mpp扩展包 添加交叉编译环境变量,这里仅需要增加sunxi-mpp的位置的环境变量,输入
book@100ask:~/workspaces/sunxi-mpp$ export cmake_current_source_dir=~/workspaces/sunxi-mpp 激活环境变量,输入
book@100ask:~/workspaces/sunxi-mpp$ source staging_dir.sh 创建build目录,用于编译和存储编译后的应用程序
book@100ask:~/workspaces/sunxi-mpp$ mkdir build 进入build目录下,执行cmake .. ,配置工具链、暂存目录和编译规则
book@100ask:~/workspaces/sunxi-mpp$ cd build/book@100ask:~/workspaces/sunxi-mpp/build$ cmake ..-- the c compiler identification is gnu 7.5.0-- the cxx compiler identification is gnu 7.5.0-- check for working c compiler: /usr/bin/cc-- check for working c compiler: /usr/bin/cc -- works-- detecting c compiler abi info-- detecting c compiler abi info - done-- detecting c compile features-- detecting c compile features - done-- check for working cxx compiler: /usr/bin/c++-- check for working cxx compiler: /usr/bin/c++ -- works-- detecting cxx compiler abi info-- detecting cxx compiler abi info - done-- detecting cxx compile features-- detecting cxx compile features - done-- staging_dir: build-- configuring done-- generating done-- build files have been written to: /home/book/workspaces/sunxi-mpp/build 执行完成后会在build目录下生成以下文件,其中bin目录用于存储生成后的二进制应用程序。
book@100ask:~/workspaces/sunxi-mpp/build$ lsbin cmakecache.txt cmakefiles cmake_install.cmake makefile sample staging_dir.sh 编译mpp应用程序,输入
book@100ask:~/workspaces/sunxi-mpp/build$ makescanning dependencies of target sample_virvi2vo[ 1%] building c object sample/sample_virvi2vo/cmakefiles/sample_virvi2vo.dir/sample_virvi2vo.c.o[ 2%] linking c executable ../../bin/sample_virvi2vo[ 2%] built target sample_virvi2vo...scanning dependencies of target sample_demux2adec2ao[ 99%] building c object sample/sample_demux2adec2ao/cmakefiles/sample_demux2adec2ao.dir/sample_demux2adec2ao.c.o[100%] linking c executable ../../bin/sample_demux2adec2ao[100%] built target sample_demux2adec2ao 编译完成后可以进入bin目录下查看编译生成的二进制文件。
book@100ask:~/workspaces/sunxi-mpp/build$ cd bin/book@100ask:~/workspaces/sunxi-mpp/build/bin$ lssample_adec sample_codecparallel sample_motiondetect sample_uvc2vo sample_virvi2vencsample_aec sample_demux2adec sample_multi_vi2venc2muxer sample_uvcout sample_virvi2venc2muxersample_aenc sample_demux2adec2ao sample_rtsp sample_uvc_vo sample_virvi2vosample_ai sample_demux2vdec sample_smartipc_demo sample_venc sample_virvi2vo_zoomsample_ai2aenc sample_demux2vdec2vo sample_smartpreview_demo sample_venc2muxer sample_vosample_ai2aenc2muxer sample_demux2vdec_saveframe sample_timelapse sample_vi_g2d yuv420ptobmpsample_ao sample_drivervipp sample_uilayer sample_vin_isp_testsample_ao_resample_mixer sample_g2d sample_uvc2vdec_vo sample_vi_resetsample_aosync sample_glog sample_uvc2vdenc2vo sample_virvi 关于如何测试使用mpp应用程序,请一定要参考:
全志mpp_sample_使用说明:https://tina.100ask.net/sdkmodule/linux_mpp_sample_instructions-01/
如果《全志mpp_sample_使用说明》中没有测试说明,可查看每个示例程序中的readme.txt。例如,假设我需要sample_drivervipp程序,需要进入该源码目录下,输入
book@100ask:~/workspaces/sunxi-mpp$ cd sample/sample_drivervipp/book@100ask:~/workspaces/sunxi-mpp/sample/sample_drivervipp$ lscmakelists.txt readme.txt sample_drivervipp.c sample_drivervipp.h 可以看到源码目录中有一个readme.txt文件,该文件详细说明了如何进行测试。
book@100ask:~/workspaces/sunxi-mpp/sample/sample_drivervipp$ cat readme.txt sample_drivervipp: 该sample演示直接调用linux内核驱动获取frame。按下ctrl+c,终止测试。 每隔若干帧保存一帧到指定的目录。读取测试参数的流程: sample只支持命令行模式输入参数。如果不输入参数,会提示输入。 从命令行启动sample_drivervipp的指令: ./sample_drivervipp 或 ./sample_drivervipp 0 1920 1080 8 60 0 10 60 /mnt/extsd测试参数的说明:(1)video device: 0~3 (vipp0~vipp3)(2)capture_width:指定camera采集的图像宽度(3)capture_height:指定camera采集的图像高度(4)pixel_format:指定camera采集的图像格式(5)fps:指定camera采集的帧率(6)test frame count:指定测试采集的frame总数,0表示无限。(7)store count: 指定保存的图像数量。(8)store interval: 指定保存图像的周期,即每n帧图像保存1帧。(9)frame saving path: 指定保存图像的目录,该目录要确保存在。 ​ 如果您想使用mpp进行开发,编写自己的应用程序,请阅读位于百度网盘资料中的100ask_v853-pro开发板的资料光盘中01_学习手册/《100ask-v853_pro系统开发手册》,该手册中的第四篇 基础组件开发中的第七章 tina linux 多媒体mpp 开发指南,此章节详细说明了100ask_v853-pro开发板针对mpp 系统控制模块的开发指导。
3.测试mpp应用程序 测试mpp应用程序需要增加开发板的依赖文件,该依赖文件位于sunxi-mpp/lib目录下,如下图所示
将该目录下的全部文件拷贝到开发板的lib目录下,假设我使用tf卡将其拷贝到开发板上,将lib文件夹拷贝到tf卡中,在将tf插入100ask_v853-pro开发板上,挂载tf卡,输入
root@tinalinux:/# mount /dev/mmcblk1p1 /mnt/extsd/ 挂载完成后进入tf目录下
root@tinalinux:/# cd /mnt/extsd/root@tinalinux:/mnt/extsd# lssystem volume information lib 可以看到lib文件夹,将lib目录下的全部文件拷贝到开发板的lib目录下,输入
root@tinalinux:/mnt/extsd# cp lib/* /lib/ 等待拷贝完成即可。
3.1 测试lcd上实时预览摄像头数据应用程序 ​ 硬件要求:100ask_v853-pro开发板、4寸mipi显示屏、mipi摄像头。
​ 示例名称为:sample_virvi2vo
​ 源码路径:sunxi-mpp/sample/sample_virvi2vo/
​ 该示例演示了通过摄像头获取数据并实时显示在lcd屏幕上,下面演示如何将编译好的应用程序在100ask_v853-pro开发板上运行。
​ 编译mpp扩展包后,会在sunxi-mpp/build/bin目录下生成sample_virvi2vo文件,将生成的文件拷贝到tf卡上备用。
​ 将sunxi-mpp/sample/sample_virvi2vo目录下的sample_virvi2vo.conf拷贝到tf卡下备用。
​ 将sunxi-mpp/lib整个目录拷贝到tf卡备用。
拷贝完成后,将tf卡插入100ask_v853-pro开发板后,将tf卡挂载到开发板上,输入mount /dev/mmcblk1p1 /mnt/extsd/
root@tinalinux:/# mount /dev/mmcblk1p1 /mnt/extsd/[ 168.601231] fat-fs (mmcblk1p1): volume was not properly unmounted. some data may be corrupt. please run fsck. 进入挂载目录/mnt/extsd/
root@tinalinux:/# cd /mnt/extsd/ 查看对应文件是否存在
root@tinalinux:/mnt/extsd# lssystem volume information sample_virvi2vosample_virvi2vo.conf 运行测试程序,输入./sample_virvi2vo -path ./sample_virvi2vo.conf
root@tinalinux:/mnt/extsd# ./sample_virvi2vo -path ./sample_virvi2vo.conf 执行完后,会在mipi屏上实时显示摄像头获取的图像数据。
应用程序执行设定时间后会自动结束,也可以通过按下crtl+c提前结束测试。
3.2 测试实时预览人脸识别和人形识别应用程序 ​ 硬件要求:100ask_v853-pro开发板、4寸mipi显示屏、mipi摄像头。
​ 示例名称为:sample_smartpreview_demo
​ 源码路径:sunxi-mpp/sample/sample_smartpreview_demo
​ 该示例演示了通过摄像头获取图像数据后使用人脸模型或人形模型进行处理后,将打框后的结果实时显示在lcd屏幕上,下面演示如何将编译好的应用程序在100ask_v853-pro开发板上运行。
​ 编译mpp扩展包后,会在sunxi-mpp/build/bin目录下生成sample_smartpreview_demo文件,将生成的文件拷贝到tf卡上备用。
​ 将sunxi-mpp/sample/sample_smartpreview_demo/models/fdet目录下的face.nb人脸模型拷贝到tf卡中备用。
​ 将sunxi-mpp/sample/sample_smartpreview_demo/models/pdet目录下的2.0.0_gamma.nb人形模型文件拷贝到tf卡中备用。
​ 将sunxi-mpp/sample/sample_smartpreview_demo目录下的sample_smartpreview_demo.conf参数文件拷贝到tf卡中备用。
拷贝完成后,将tf卡插入100ask_v853-pro开发板后,将tf卡挂载到开发板上,输入mount /dev/mmcblk1p1 /mnt/extsd/
root@tinalinux:/# mount /dev/mmcblk1p1 /mnt/extsd/[ 168.601231] fat-fs (mmcblk1p1): volume was not properly unmounted. some data may be corrupt. please run fsck. 进入挂载目录/mnt/extsd/
root@tinalinux:/# cd /mnt/extsd/ 查看对应文件是否存在
root@tinalinux:/mnt/extsd# ls2.0.0_gamma.nb sample_smartpreview_demosystem volume information sample_smartpreview_demo.confface.nb 修改sample_smartpreview_demo.conf文件,假设我这里使用的是百问网的4寸mipi屏和2line mipi摄像头,需要测试的是人脸识别模型,需要修改该文件为:
########### paramter (ref to tulip_cedarx.conf)############[parameter]main_isp_dev = 0main_vipp_dev = 0main_capture_width = 360main_capture_height = 640main_layer_num = 0main_display_x = 0main_display_y = 0main_display_width = 480main_display_height = 800main_nn_nbg_type = 1 #-1:disable, 0:human, 1:facemain_nn_isp = 0main_nn_vipp = 8main_nn_vi_buf_num = 3main_nn_src_frame_rate = 20 #fpsmain_nn_nbg_file_path = face.nbmain_nn_draw_orl_enable = 1sub_isp_dev = 1sub_vipp_dev = 1sub_capture_width = 1920sub_capture_height = 1080sub_layer_num = 1sub_display_x = 0sub_display_y = 00sub_display_width = 480sub_display_height = 800sub_nn_nbg_type = 1 #-1:disable, 0:human, 1:facesub_nn_isp = 1sub_nn_vipp = 9sub_nn_vi_buf_num = 3sub_nn_src_frame_rate = 20 #fpssub_nn_nbg_file_path = face.nbsub_nn_draw_orl_enable = 1disp_type = lcd #disp_type is lcd, hdmi, cvbspic_format = nv21 #pic_format is yu12, yv12, nv21, nv12frame_rate = 20 #fpsorl_thick=200test_duration = 0 #unit:s, 0:infinite duration. 如果需要测试人形检测,也需要修改sample_smartpreview_demo.conf文件中的,将main_nn_nbg_type设置为0、main_nn_nbg_file_path设置为人形模型的路径名称,例如:
main_nn_nbg_type = 1 main_nn_nbg_file_path = 2.0.0_gamma.nb 运行测试程序:
root@tinalinux:/mnt/extsd# ./sample_smartpreview_demo -path sample_smartpreview_demo.conf 执行后,显示屏端会接收摄像头的数据,但一开始会丢弃部分图像数据,可能会导致一开始的画面卡顿。测试成功后会在显示屏上实时显示摄像头的数据,并可以对摄像头的图像中的人脸进行打框。
4.总结 ​ 对于其他应用程序这里就不逐一去演示,大家可以参考每个示例的程序的readme.txt或《全志mpp_sample_使用说明》进行测试体验,参考《tina linux 多媒体mpp 开发指南》进行开发。mpp媒体处理平台的可玩性和公开程度都适合大家去开发自己的应用程序,希望通过这章节可以让大家了解mpp的使用。

浅谈贴片电子元器件的特点
并联电容串联电抗为啥能抑制谐波
国内首个L4级自动驾驶开放测试基地项目落地 项目总投资达10亿元
cmos与ccd哪个成像好?
PSRAM完全解读
8. 100ASK_V853-PRO开发板支持MPP媒体处理平台
教你快速理解嵌入式和单片机的区别和联系
iPhone8的面世将会带来那些惊喜
EDA和FPGA厂商布局IP市场,半导体产业链影响几何?
关于VS Code实现远程开发的配置方法详细教程
在家办公有如神助?智能会议平板多的是你不知道的事
POC管理和漏洞扫描小工具
最新研发的纳米材料或可杀死新冠病毒,未来用处广泛
中国芯高速发展警醒缺芯之痛 好多芯加速产业布局实现弯道超车
一文详解存储器的类型
美国海上风电项目未来十年对海底电缆的需求或超过13500公里
几种CAN总线抗干扰解决方案盘点
Windows Phone对WhatsApp的支持终止了
小米6已投产 三大版本将搭载不同处理器并有陶瓷版
超鸟C号卫星参数表