移动互联网年代的到来,高清多媒体视频的遍及,3D大型手机游戏对的呈现,单核嵌入式硬件渠道现已难以满意杂乱的实践核算需求。而异构多核处理器在视频编解码运算上具有强壮的优势,现已成为了嵌入式处理器架构开展的趋势。现在遍及高清视频编解码都选用异构多核处理器内的DSP进行协同处理,经过片上通讯机制完结核间多媒体数据传输。DSP比较软解码在速度和功用上得到了必定的进步,如DaVinci渠道内置DSP能够完结720P视频实时解码。但DSP运转时需求对信箱以及 DMA 进行装备,占用较多的片上通讯带宽,导致核间通讯功率不高,一起DSP编解码功率和硬编解码器比较仍偏低。为了进一步进步全高清H264编解码功用,本文选用TI Soc OMAP4430异构多核处理器作为处理渠道,其最大不同在于内置双核Cortex-A9微弱处理器、双核Cortex-M3协处理器及IVA-HD多媒体硬编解码加快引擎。IVA-HD引擎内部有7个针对各种视频编解码而规划的加快引擎,每个加快引擎具有独立的数据存储器,能够在最大程度上下降模块间由于读写数据形成的竞赛。一起选用virtio缓存行列和RPMsg 音讯结构来完结依据异步告诉的主处理核A9与协处理核M3间数据通讯,具有大数据通讯功率高、异步告诉、等长处。OMAP4430处理器内部的Cortex-A9双核处理器将运转高档嵌入式操作体系Linux,担任体系作业使命的调度、音频解码、用户界面交互,而其内部的Cortex-M3将充任辅佐处理核,办理IVA-HD加快引擎完结解码使命,最后用实例验证本次规划的正确性。
1 首要技能
1.1 virtio缓存行列
Virtio 是半虚拟化 hypervisor中坐落设备之上的笼统层, 为异构多核间数据通讯供给了最低层的完结。它运用了两个依据异步告诉的缓存行列( 一个用于向协处理核发送数据,一个用于从协处理核接纳数据)和散列表用于与长途异构处理器进行数据通讯。每个缓存行列最多包含有512个缓存,每个缓存的巨细约束在512字节以内,缓冲池里边存放着通讯数据。为了最大程度削减同享内存,选用环形散列表,散列表每个表项包含了缓存的物理地址和缓存的巨细,散列表存放在内存特定地址中,主处理核与协处理核依据互斥机制的同享内存方法进行拜访,如图1所示:
图1 异构多核间拜访virtio缓存池示意图
选用同享环形散列表进行异构处理核间数据通讯的长处首要有几个方面:
1)选用散列表表项表明数据缓存能够减小同享内存区域的巨细,进步体系内存运用率,一起答应变长数据传输。
2)选用中止方法告诉意图处理器散列表的改变,削减了处理器盲目等待时间,进步了处理器的使用率
3)答应一起传输多个缓存数据,进步了体系通讯的吞吐率
1.2 RPMsg音讯结构
RPMsg(Remote processor Messaging) 是一个依据virtio技能的用于处理器核间数据通讯的音讯结构,供给协处理核上电复位办理、音讯通讯等功用。
1.2.1 协处理核复位办理
首要担任加载程序履行体到协处理核的运转内存中、设置担任虚拟地址映射到物理地址MMU单元,当协处理核遇段过错或内部代码反常时,需求输出直观的犯错信息而且供给了康复机制使得协处理核能够从头运用。
1.2.2 音讯通讯
RPMsg音讯结构是依据virtio缓存行列完结的主处理核和协处理核间进行音讯通讯结构,RPMsg向体系注册了一条音讯总线,并为每个M3协处理核创立相应的总线设备,而多个客户端驱动程序也注册在该音讯总线上并分配一个本地地址端口src和长途地址端口dst,当客户端驱动需求发送音讯时,会把音讯封装成virtio缓存并增加到缓存行列中以完结音讯的发送, 当音讯总线接纳到协处理器送到的音讯时会依据音讯地址端口dst合理的派送给客户驱动程序进行处理。其示意图如图2所示:
图2 RPMsg音讯总线作业示意图
1.3IVA-HD加快引擎
H.264/MPEG-4 Part 10 是由ITU-T 视频编码专家组和ISO/IEC 运动图画专家组 (MPEG) 联合提出的高度紧缩数字视频编解码器规范,被广泛使用于网络流媒体资源、HDTV 等方面。与之前MPEG4、H263 等规范比较,H.264 具有低码率、高画质、高紧缩率和高可靠性等特色,适用于搅扰严峻、丢包率高的信道中传输。
H264解码流程如图3所示,解码器从网络笼统层NAL中接纳输入的数据帧,进过熵解码、从头排列后得到量化系数矩阵X,量化系数矩阵在经过反量化和空间改换后得到核算残差Dn,一起经过运动补偿和帧间猜测或帧内猜测得到猜测快Pn, 将Pn和Dn相加成果uFn经过环路滤波得到输出缓存图画Fn。
图3 H264解码器作业流程
IVA-HD引擎是针对嵌入式渠道进行多媒体编解码加快而规划的第三代硬件加快引擎,其支撑H264、MPEG4、MPEG2、H263等常见的视频编解码规范。为了开释CPU,让其更有用的进行数据预备和逻辑功用操控,IVA-HD集成了7个硬件加快引擎,他们和H264解码各个功用模块所对应联络在图3顶用虚线框表明,其间加快引擎称号core1-5所对应的模块功用别离是: 熵解码、反量化和反改换、环路滤波、帧内猜测、运动补偿。
2 体系规划
全高清H264解码使命由主处理器Cortex-A9和帮忙处理器Cortex-M3共同完结,Cortex-A9首要担任从多媒体文件中或网络数据流中进行数据的读取、多媒体数据包过滤别离视频流和音频流、构建RPMsg操控音讯进过virtio缓存封装发送给协处理核Cortex-M3以设置IVA-HD加快引擎的操控参数、向协处理器发送多媒体数据包进行H264解码、在协处理器完结解码使命后接纳图画并经过DRM API及KMS 模块制作到屏幕上。
渠道上有两个Cortex-M3处理核,分为Sys M3和App M3,都运转TI BIOS实时操作体系,其间Sys M3首要担任创立与Cortex-A9通讯的virtio缓存行列,对程序履行流程和CPU负载状况进行记载,接纳A9发过来的缓存数据并进行参数解析,一起依据缓存中dst参数分配缓存到App M3的相应音讯链表中。而App M3协处理器则完结实践的解码作业,App M3将经过运用于嵌入式渠道的Codec Engine来完结对IVA-HD加快引擎的操作。App M3将提取音讯链表中音讯恳求相应设置IVA-HD加快引擎的状况和初始化参数,在进行实践解码时会经过Codec Engine 来调用IVA-HD加快引擎来完结解码使命并将解码成果经过 缓存行列发送回Cortex-A9处理器。整个体系解码的结构图如图4所示:
图4 H264解码器作业结构图
3 体系完结
3.1 Cortex-A9软件完结
Cortex-A9运转Linux操作体系,包含内核模块omapdce.ko和virtio缓存、RPMsg总线驱动程序规划和ffmpeg多媒体库及DRM显现接口调用.
3.1.1 virtio缓存行列完结
Virtio缓存行列以同享散列表的方法和协处理器进行数据通讯,经过中止方法告诉对方散列表的增加,包含以下几个方面:
1)Irq_require()注册中止函数,Register_bus_type(“virtio”)向体系注册virtio总线
2)Regsiter_virtio_driver(virtio_driver)向virtio总线注册一个驱动客户端,用于创立向RPMsg总线注册的设备。
3)体系在发现协处理器后将经过register_virtio_device(virtio_device)向virtio总线注册一个设备,设备内部含有创立virtio缓存行列的函数指针
4)virtio_bus->match(virtio_device,virtio_driver)函数将匹配virtio_driver与virtio_device是否适宜,假如匹配成功,virtio_driver->probe(virtio_device)来创立send_virqueue、recv_virqueue及注册到RPMsg的rpmsg_device,。这样virtio缓存行列就和RPMsg总线联络在一起。
3.1.2 RPMsg音讯结构完结
RPMsg总线将挂载许多rpmsg_driver和rpmsg_device,和rpmsg_driver都有本地端口src和意图端口dst特点,每次发送音讯时会调用rpmsg_send((void*)data,src,dst)将音讯增加到virtio的缓存行列中,而当音讯msg到达RPMsg总线时,总线把msg分配给dst特点和msg->dst相同的rpmsg_driver,并调用rpmsg_driver->callback()进行音讯处理。
3.1.3 omapdce.ko驱动模块的完结
Omapdce.ko模块将作为一个RPMsg driver,其完结了使用程序引擎相关API的内核完结,首要包含ioctl_engine_open()、ioctl_viddec_create(),ioctl_viddec_control()、ioctl_viddec_process(),他们供给了使用API engine_open、viddec_create()、viddec_control()、viddec_process()的驱动完结,这些驱动函数将调用RPMsg总线rpmsg_send()、rpmsg_recv()与协处理器进行音讯通讯以完结作业使命。
3.1.4 解码使用viddectest完结
H264解码使用程序viddectest的作业首要分为以下几个方面
1)Linux显现接口DRM初始化,经过Drmopen()函数翻开/dev/dri/card0设备文件,获取设备资源drmModeGetResources(),创立帧缓存drmModeAddFB2()及设置输出分辨率及形式drmModeSetCrtc()
2)FFmpeg媒体库的调用,经过AVOpenStreamFile()翻开多媒体文件,AVFindStream()别离出音频流和视流,然后顺次经过AVGetPacket()读取视频流数据包送去解码器进行解码。
3)加快引擎初始化和使用音讯总线进行解码数据通讯,经过Engine_open()翻开H264解码引擎,Viddec3_create()创立一个解码实例目标,Viddec3_control()设置解码所需的参数,Viddec3_process()将用RPMsg音讯总线送出解码数据流并接纳解码后的图画缓存数据,其流程图如图5所示:
3.2 Cortex-M3软件完结
双核Cortex-M3运转TI BIOS实时操作体系,担任与主处理核的virtio缓存行列通讯及经过codec engine调用IVA-HD加快引擎完结H264解码,运转流程图如图6所示,首要包含以下内容:
1) virqueue_create(send_queue),virqueue_create(recv_queue)创立与Cortex-A9主处理核通讯的 virtio发送及接纳缓存行列。
2) Message_get_queue(recv_queue)从virtio缓存行列获取主处理核发过来的恳求数据,Message_send_queue派发到App M3的音讯行列中。
3) App M3将获取音讯链表的音讯,设置IVA-HD加快引擎的作业状况并初始化,假如为解码音讯则经过Codec Engine 调用IVA-HD加快引擎来完结解码进程。
4) 将解码后的图画缓存封装成virtio缓存,调用Message_send_queue()经过virtio缓存行列发送回主处理核A9调用DRM进行显现输出。
4 测验
本文在OMAP4430开发渠道上规划完结了依据异构多核的全高清H264解码,为了测验解码器的功用,将针对不同比特率的720P、1080P 的网络视频文件Big_Buck _Bunny_Sunflower 进行解码测验,测验成果如表1所示,一起选用FFmpeg开源库项意图软解码进行测验,其比照图如图7所示
图7 IVA-HD硬解码和软解码功率比照图
从图6能够看出本次规划的H264解码器在解码720P(1280*720)和1080P(1920*1080)视频时别离到达60和34帧每秒,比较FFmpeg开源H264软解码器功率进步了一倍。而遍及全高清流通视频的帧率为30帧每秒,到达实时解码功用需求。
5 结束语
跟着移动互联网年代的到来,在移动终端上流通播映全高清视频成为使命日常需求。为此本文选用移动Soc OMAP4430异构多核处理器为试验渠道,经过依据virtio缓存行列和RPMsg音讯框完结了异构多核间多媒体数据通讯,一起结合IVA-HD多媒体硬件加快引擎规划了一款全高清H264视频硬解码体系。试验成果表明规划的解码体系比开源FFmpeg软解码器在功用上进步了一倍,到达实时性要求。具有解码速度快、解码进程由硬件加快器完结无需耗费主核运算资源、核间通讯功率高、功耗小等长处。