海思新出的HI3559A和Hi3519A自带了DSP,对于我们这种做图形图像处理及加速的太有用了。拿到开发板后,才发现海思只提供了一个膨胀和腐蚀的例子。更坑的是,居然没有源代码,关键算法被封装成库了。
经过几番折腾,在某宝上买到了廉价的xtensa xplorer开发工具(官方的太贵了,哈哈),终于把海思的DSP用了起来。使用步骤简单描述一下吧:
1. 首先得有xplorer的编译工具,这个工具不是免费的,要有license才能用,包括开发和性能调优。
2. 买一个海思的开发板,一般某宝上的几千块的就行,不过只能接一个摄像头。例子中我是使用了自己做的开发板,直接接入了4路3G-SDI摄像头做输入源了,开发板我就不多说了,免得被误解是打广告的 。
3. 使用海思自带的svp/dsp例子,在里面加入一个自己的算法(反正就是依葫芦画瓢,理解一下dsp的调度),难点主要是算法的优化,海思SDK给的膨胀和腐蚀两个例子都是没有源码的,这个比较坑。我也是自己用xplorer工具一点一点的理解加优化,实现了一个边沿检测算法(sobel和candy两种算法都实现了)。代码这种东西,这里我就不分享了哈。
4. 运行并显示画面,vio和dsp两个程序是相互独立的,所以我单独开dsp程序就能看到处理后效果,不开的话就是处理前原始画面。
4.2. 使用dsp处理画面:
另外看一下dsp的调试信息:
~ # cat /proc/umap/dsp
[DSP] Version: [Hi3559AV100_MPP_V2.0.2.0 B060 Release], Build Time[Dec 21 2018, 17:05:06]
——————————-MODULE PARAM————————————–
max_node_num
30
——————————-DSP CORE STATUS————————————–
CoreId Enable
0 Yes
1 Yes
2 Yes
3 Yes
——————————-DSP PRI STATUS————————————–
CoreId Pri Create
0 0 Yes
0 1 No
0 2 No
1 0 Yes
1 1 No
1 2 No
2 0 Yes
2 1 No
2 2 No
3 0 Yes
3 1 No
3 2 No
——————————–DSP TASK INFO————————————
CoreId Pri Hnd TaskFsh HndWrap FreeNum WorkNum
0 0 4403 4403 0 30 0
0 1 0 0 0 30 0
0 2 0 0 0 30 0
1 0 4395 4395 0 30 0
1 1 0 0 0 30 0
1 2 0 0 0 30 0
2 0 4388 4388 0 30 0
2 1 0 0 0 30 0
2 2 0 0 0 30 0
3 0 4380 4380 0 30 0
3 1 0 0 0 30 0
3 2 0 0 0 30 0
———————————–DSP RUN-TIME INFO—————————–
CoreId Pri CntPerSec MaxCntPerSec TotalIntCntLastSec TotalIntCnt QTCnt CostTm MCostTm CostTmPerSec MCostTmPerSec TotalIntCostTm RunTm
0 0 31 33 4381 4402 0 3 11 97 167 17079 1049
0 1 0 0 0 0 0 0 0 0 0 0 1049
0 2 0 0 0 0 0 0 0 0 0 0 1049
1 0 31 32 4377 4394 0 4 17 91 148 14916 1049
1 1 0 0 0 0 0 0 0 0 0 0 1049
1 2 0 0 0 0 0 0 0 0 0 0 1049
2 0 31 32 4376 4387 0 3 12 89 169 15492 1049
2 1 0 0 0 0 0 0 0 0 0 0 1049
2 2 0 0 0 0 0 0 0 0 0 0 1049
3 0 31 32 4373 4379 0 3 15 116 162 16776 1049
3 1 0 0 0 0 0 0 0 0 0 0 1049
3 2 0 0 0 0 0 0 0 0 0 0 1049
———————————-DSP INVOKE INFO——————————–
CoreId Pri RPC
0 0 4402
0 1 0
0 2 0
1 0 4394
1 1 0
1 2 0
2 0 4387
2 1 0
2 2 0
3 0 4379
3 1 0
3 2 0
可以看到,4个DSP核每个核都是按照30帧来处理视频的。测试极限是1080P的画面,单核DSP可以每秒处理200帧左右。性能相当的强悍。难点就是怎么优化,怎么去使用啦,后续继续研究新的算法。包括图像的增强、锐化、白平衡、融合、跟踪等等,都可以在DSP上加速使用。