完善资料让更多小伙伴认识你,还能领取20积分哦, 立即完善>
电子发烧友论坛|
本帖最后由 xble 于 2021-8-23 08:12 编辑 一、VPU模块简介 1.VPU概念 VPU:Video Processing Unit,是一种全新的视频处理平台核心引擎,具有硬解码功能以及减少CPU负荷的能力。另外,VPU可以减少服务器负载和网络带宽的消耗。 VPU由Ati提出,用于区别于传统GPU(Graph Process Unit,图形处理单元)。图形处理单元又包括视频处理单元、外视频模块和后处理模块这三个主要模块。 目前VPU的概念非常广泛,上面是百科出来的总结,我所在的上家公司也有VPU的概念,它是并行计算处理单元。 我们这里所说的VPU简单来说就是Decoder和Encoder,支持的协议有多有少,嵌入式一般会少一些,PC上的显卡会多一些。目前比较主流的是H.26、JPEG和VP系列,不过我觉得后面AV1是一个不错的方向,毕竟Google的免费是绝对的王道。 2.视频编解码 这里的视频编解码就是decoder和encoder,为了简化后面会省略encoder部分,encoder和decoder从哪个方面都可以认为两者是完全对称的。 decoder功能要细说起来是一个非常庞大的概念,这里只做泛泛的介绍。 2.1视频编解码意义 为啥需要视频,因为视频是记录人们日常生活最重要的手段之一,当然能还可以用文字和语音来记录,不过视频最吸引人,比如某音,虽然是音字标题,但是实际还是是视频吸引人,假如只有声音她就不那么火了。 2.2视频编解码理论基础 对于有意义的事情当然值得花费精力去研究,视频编解码首先要明确视频的表示方法,计算机中视频可以抽象成一个一个的图片,二图片表示则涉及到两种颜色空间RGB和YUV,具体内容不在一一细说。
视频虽然非常好,但是要在计算机上存储显示,却需要很大的空间,这还只是本地保存,想通过网络传输则更需要压缩。科学家发现,每帧视频虽然都很大(也跟分辨率有关系),但是很短的时间内相邻的两帧或者几帧视频之间差距很小。这样也就有了视频压缩的可能性。 当然视频压缩,然后解压后的效果也很重要。 2.3视频编解码协议 有了视频编解码的理论,很多人就开始这方面的研究,最终多数人都失败了,只有那些找对了方向的公司和组织活了下来,比如ITU、ISO、VSI等等。 编解码的标准协议H.264/VP8,最新的H.266和AV1等等,有兴趣可以自己搜索一下。下图是视频编解码标准历史图解,是在网友成果的基础上加上自己的理解。
2.4VPU解码芯片原厂 2.4.1 verisilicon 的 hantro G1 G2 H1 H2 国内的公司,有问题可以使用中文咨询,我推测国内多数公司都是使用这家的IP,包括某思,某chip,IMX8mm也同样使用这家IP的。 2.4.2ARM的mali V76 arm9的vpu,arm-a5的vpu,目前arm-a53的vpu好像都没有用arm自己的IP,从技术来讲应该不会差太多,收费可能是最大的问题。 2.4.3chipsnmedia 的wave5 这是个韩国公司,现在干手机电视,除了中国,也就剩韩国了。他们的视频处理做了15年以上,算是很有积累的。比起其他公司,他们只做视频相关的玩意,所以即便看着公司不大,但是专业度高。 2.4.4amphion的 malone 这个是英国一公司,曾经是科胜讯 飞利浦NXP 泰鼎的多媒体团队的那些人,也具备很长时间的技术积累,做出的模块面积很小。 3.VPU、V4L2、DMA-BUF、VAAPI和FFMPEG 3.1VPU与V4L2 V4L2是camera处理相关框架,camera采集的视频一般是YUV格式,如果可以跟VPU的encode功能联合起来,就可以很方便将采集的视频进行压缩,这里面也就涉及到DMA-BUF的功能。 3.2VPU和DMA-BUF dam-buf首先明确她不一定是使用DMA方式进行数据拷贝,她主要提供了一种机制,进行数据共享,说白了就是提供内存共享buffer的一种机制。有了这个机制就可以将VPU与camera,VPU和GPU,VPU和DRM各个视频处理模块有机地统一在一起处理,不需要上层应用程序再次转发相关数据。--尚未完全明白DMA-BUF的处理机制。 3.3VPU和VAAPI VAAPI (视频加速API,Video Acceleration API)包含一套开源的库(LibVA) 以及API规范, 用于硬件加速下的视频编解码以及处理,只有Linux上的驱动提供支持。主要是PC上intel提供的解决方案,当然只能用在intel的显卡上。微软和nivdia也有自己的解决方案,amd好像对这个支持不太好。 对于嵌入式厂商来说,有的已经支持,但是很多尚未支持,有点鸡肋的感觉。 3.4VPU和FFMPEG FFmpeg是一套可以用来记录、转换数字音频、视频,并能将其转化为流的开源计算机程序。采用LGPL或GPL许可证。它提供了录制、转换以及流化音视频的完整解决方案。它包含了非常先进的音频/视频编解码库libavcodec,为了保证高可移植性和编解码质量,libavcodec里很多code都是从头开发的。 与VPU和GPU的关系见下图:
二、VPU驱动简要分析 1.VPU-IP原厂 这个应该算个国内公司,已经运营了超过15年,专门搞设计服务。 但是他的视频编解码器,也是接收的鬼子的遗产,先是一个芬兰公司卖给美国公司on2,然后卖给google,然后又卖给了芯原,现在应该是自己在继续开发。对于他们来说,最大优势,就是vp8 vp9这些协议都是google制定的,所以对于这些的编解码,应该没有其他公司比他们做的更好。 从第一次接触VSI-VPU代码,时间过去很久,但是代码几乎都没有变过,看看dwl和ewl的函数名就可以知道是VSI的IP。 2.G1、G2和hantro 当然还有H1和H2等等,其实它只是IC的模块有差异,寄存器有稍微改动而已。 imx8mm使用的应该是hantro,g1版本。 3.驱动分析 3.1驱动代码 3.1.1编译config
3.1.2Device Tree 为啥相同的名字呢?
3.2设备节点 hantrodec_845s.c文件中 #define DEVICE_NAME "mxc_hantro" 正好与开发板上的设备节点呼应
三、几类应用程序简要分析 1.gstreamer gstreamer跟ffmpeg一样,也是一个媒体框架,可以实现采集,编码,解码,渲染,滤镜等一条龙的媒体解决方案。不过接触实在不多,而且看代码函数封装的很厉害,有机会在详细了解,这里只是简单的使用一下。 i.MX_VPU_Application_Programming_Interface_Linux_Reference_Manual 文档中有介绍gst使用的是vpuwrap库函数 播放mp4的简单命令: gst-play-1.0 video_640x480.mp4 2.vpu-hantro 2.1代码简要分析
2.2.可执行程序运行分析
解码后的图片质量还不错。
3.libxvpuwrap 3.1相关文档和API i.MX_VPU_Application_Programming_Interface_Linux_Reference_Manual中对VPU Wrapper有了详细的介绍,imx8mm使用的Hantro架构的VPU,而且也提到gst使用的是这个封装库。 这里面列举的API也确实非常漂亮,但是奈何默认配置解码出错。
3.2vpuwrap_dec可执行程序编译,运行 scp test_dec_arm_elinux.c vpu_wrapper.h fb_render.* decode_stream.* root@172.18.8.40:/vpu-wrap-dec gcc -o wrap_dec *.c -lfslvpuwrap
注意:按照原来自己的习惯肯定会将这个错误解决掉,但是这就涉及到yocto编译imx-vpuwrap的问题,算了,后面看机会吧。 3.3代码处理流程简要分析 3.3.1test_dec_arm_elinux.c文件 main函数调用decode_stream 函数 3.3.2decode.c文件 decode_stream函数调用下面的函数
3.3.3codec_h264.c文件中 HantroHwEncOmx_encoder_create_h264函数继续调用
3.3.4上面三个函数非常熟悉了,与驱动部分的关联就在分析 4.libvpuapi2 其实还有libvpuapi1版本,我们只关注最新的版本即可。这个库感觉是跟VAAPI有写关系。 4.1代码准备 包括应用程序本身的代码,还包括它所需要的库文件和头文件
4.2代码处理流程简要分析 4.2.1main.c文件
4.2.2decode-exampe.c 4.2.2.1vpu_api2_init函数
4.2.2.2vpu_api2_run函数
4.2.3 imxvpuapi2_imx8m_hantro_decoder.c
4.2.4 codec_h264.c HantroHwDecOmx_decoder_create_h264函数,调用下面这些函数,是不是很熟悉,驱动部分直接省略。
4.3可执行程序运行 运行log太多,没有全部拷贝。
4.4执行结果分析 不知道是代码的问题,还是运行时log太多,解码后的图像质量比较差,但是整个处理的主题框架时没有问题的。
|
|
相关推荐
|
|
只有小组成员才能发言,加入小组>>
【米尔RK3506国产开发板评测】3、实时补丁以及EtherCAT IGH移植
1135 浏览 0 评论
10241 浏览 0 评论
35576 浏览 0 评论
【米尔NXP i.MX 91开发板评测】基于RS485接口实现modbus从机
1685 浏览 0 评论
【米尔NXP i.MX 91开发板评测】移植运行IGH EtherCAT主站
1985 浏览 0 评论
【米尔-瑞米派兼容树莓派扩展模块-试用体验】基于ROS系统的三麦轮小车自主导航
4537浏览 2评论
【米尔NXP i.MX 93开发板试用评测】5、安装Debian和排除启动故障
1467浏览 2评论
【米尔NXP i.MX 93开发板试用评测】2、异构通信环境搭建和源码编译
1669浏览 2评论
【米尔-瑞米派兼容树莓派扩展模块-试用体验】Free RTOS应用开发环境部署
2109浏览 1评论
【米尔-Xilinx XC7A100T FPGA开发板试用】+03.SFP光口测试(zmj)
2185浏览 1评论
/9
小黑屋| 手机版| Archiver| 电子发烧友 ( 湘ICP备2023018690号 )
GMT+8, 2025-12-1 22:50 , Processed in 0.629006 second(s), Total 53, Slave 38 queries .
Powered by 电子发烧友网
© 2015 bbs.elecfans.com
关注我们的微信
下载发烧友APP
电子发烧友观察
版权所有 © 湖南华秋数字科技有限公司
电子发烧友 (电路图) 湘公网安备 43011202000918 号 电信与信息服务业务经营许可证:合字B2-20210191

淘帖
2239
