基于异构多核的全高清H264解码系统设计

最新更新时间:2015-03-29来源: 互联网关键字:异构多核  H264  解码系统设计 手机看文章 扫描二维码
随时随地手机看文章
移动互联网时代的到来,高清多媒体视频的普及,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.3 IVA-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所示:

 

 

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软解码器在性能上提升了一倍,达到实时性要求。具有解码速度快、解码过程由硬件加速器完成无需消耗主核运算资源、核间通信效率高、功耗小等优点。

关键字:异构多核  H264  解码系统设计 编辑:探路者 引用地址:基于异构多核的全高清H264解码系统设计

上一篇:开发高可靠性嵌入式系统的7个技巧
下一篇:手机高清摄像头OTP技术详解

推荐阅读最新更新时间:2023-10-12 22:54

多核异构ARM架构实现智能触控用户界面
对实时过程控制的多样化需求必须包括一套支持触屏的用户界面——从智能家电到销售终端到医用监视器都是如此。根据飞思卡尔半导体公司的看法,异构多核处理器是最好的解决方案,该公司在DESIGN West 2012发布了新的Vybrid微控制器系列。 飞思卡尔工业MCU解决方案全球业务主管John Weil认为:“智能手机用户现在期望自己的家电也有智能触控人机界面,但适合运行Android等高级操作系统的微控制器很难同时完成实时确定性控制。我们全新的Vybrid系列通过异构ARM架构解决了这问题——Cortex-A5内核负责两个系统的人机界面、Cortex-M4内核负责实施控制”。 Vybrid处理器是业界第一个款能够同时运行高
[单片机]
Arteris推出NCore cache一致性互连IP用于异构多核SoC的高效率设计
美国加利福尼亚州坎贝尔 2016年5月24日 Arteris公司今天宣布推出1.5版本NCore cache一致性互连IP。Arteris公司是从事系统级芯片(SoC)互连IP的创新性供应商,它的商用系统级芯片NoC互连IP已经广泛被采用。NCore IP是分散式异构cache一致性互连解决方案,系统设计师可以用它高效率地设计出cache一致性的系统,它的优点是具有多个可配置的Snoop Filter和嵌入式高速缓存(cache)。在今天的SoC设计中通常使用传统固定式或集中式cache一致性式互连,与之相比,NCore IP更加灵活。. 由于可以同时实施不同的cache一致性协议、高速缓存状态模型和缓存组织,NCore互连IP
[手机便携]
高性能计算:走向多核异构 面临能耗挑战
日前,2008年全国高性能计算学术年会在无锡举行。从本次年会上我们能了解到高性能计算技术的哪些流行和发展趋势?在高性能计算中又面临哪些障碍和挑战呢?本报记者对此进行了深度报道。 多核异构大势所趋编程模式是关键 多核和多核异构系统越来越受到超大规模计算机的青睐,如前不久发布的全球高性能计算TOP500排名第一的IBM的Roadrunner就是把自己的Cell和AMD的皓龙处理器混合在了一起;在芯片层面,包括英特尔、AMD和nVIDIA等都在研制异构多核或众核芯片。例如AMD提出的CPU+GPU的Fusion,nVIDIA的Tesla等。 众所周知,在当前的高性能计算系统和应用中,绝大多数是x
[嵌入式]
数字机顶盒字幕解码显示系统设计
3.1 字幕数据提取模块   字幕数据提取模块包括两部分:字幕控制信息的提取和字幕数据包的提取。   用户控制模块发送字幕启动请求时,提取模块就启动SI 引擎。首先,启动本节目的PMT 表滤波工作,获取PMT 数据并进行分析。若当前节目没有字幕信息,则发送无字幕消息至用户模块;若当前节目带有字幕信息,则根据PMT 中的私有数据段和字幕描述符,获取字幕数据对应的PID、字幕的语言代码、字幕类型、合成页及可选的辅助页,并存放到字幕索引信息表中。其次,根据字幕索引信息表启动字幕有效数据的PES 滤波,提取对应字幕数据包。字幕数据提取总体流程如图3 所示。      图3 字幕数据提取流程   当获得字
[模拟电子]
数字机顶盒字幕<font color='red'>解码</font>显示<font color='red'>系统设计</font>
数字机顶盒字幕解码显示系统设计
3.3 字幕图层显示模块   当用户在收看节目,启动字幕功能时,用户看到的是节目画面和字幕画面的叠加,OSD 界面显示技术是指在图像画面上叠加图文显示,使屏幕提供更多附加信息。   为了控制字幕在屏幕上的正常显示,需要利用OSD 驱动模块提供的区域操作功能。在该字幕显示实现中主要用到的OSD 函数接口有OSD 初始化函数、区域清除函数、OSD 区域创建函数、OSD 区域显示函数和OSD 区域隐藏函数,在该系统中以回调函数的形式利用这些接口函数。在系统初始化中,必须先初始化字幕OSD 区域,获取OSD 层的设备id,注册字幕区域创建回调函数、字幕区域显示回调函数、字幕清屏回调函数和字幕区域隐藏回调函数。把这些函数的地址加
[模拟电子]
数字机顶盒字幕<font color='red'>解码</font>显示<font color='red'>系统设计</font>
H264解码器中CABAC硬件加速器的实现
引言 H.264是由国际电信联盟(ITU)和国际标准化组织(ISO)共同制定的新一代视频编码标准,该标准采用一系列先进的编码技术,在编码效率、网络适应性等诸多方面都超越了以往的视频标准。H.264有两种熵编码方案:一种是从可变长编码方案发展而来的基于上下文的自适应可变长编码CAVLC;另一种是从算术编码发展而来的基于上下文的自适应二进制算术编码CABAC。与CAVLC相比,CABAC可以节省约7%的码流,但增加了10%的计算时间。在解高清码流时,用软件来做CABAC这样复杂的熵解码,无法完成实时解码的任务,因此,设计硬件加速器是非常必要的。 CABAC解码算法 在H.264解码器的输入码流中,数据的基本单位是句法元素(
[应用]
小广播
最新电源管理文章
电子工程世界版权所有 京B2-20211791 京ICP备10001474号-1 电信业务审批[2006]字第258号函 京公网安备 11010802033920号 Copyright © 2005-2024 EEWORLD.com.cn, Inc. All rights reserved