基于AVS 3D实时解码器在 FPGA/SoC平台上的设计与实现

电子说

1.3w人已加入

描述

0 引言

AVS[1](audio video coding standard)是《信息技术 先进音视频编码》系列标准的简称,是我国具有自主知识产权的第二代信息编解码标准。2008年底,AVS标准工作组开始起草双目立体编解码方案[2]。该方案采用双目拼接算法,所用视频序列由基线相互平行的两摄像机采集,将左、右视点信息合成为一个码流进行传输;而在解码端恢复出左、右两路图像数据。

但目前,尚没有针对AVS 3D标准的FPGA/SoC软硬协同平台实现。本文以Xilinx公司的ZYNQ 7020开发板为平台,它是内部具有两个M9处理(Processing System,PS)硬核核心的片上系统芯片,该平台具有芯片集成度高、控制能力强、软件通用性好的优点。本文采用一个主PS作为顶层控制,完成3D ES流的外部接口通信和解码图像显示控制;另一个从PS以及部分硬件加速模块(包括ES流的语法解析、算术码解码、变长码解码等硬件加速模块)共同完成AVS双目拼接解码算法。两个PS协同工作,在FPGA/SoC平台上实现了AVS 3D实时解码器。

1 AVS 3D解码器的算法流程

AVS 3D解码器采用双目拼接算法。AVS 3D ES流同时含有左、右视点的两路信息。3D解码器的算法设计流程图如图1所示。读入3D ES流,以帧为单位解码,其解码原理与AVS单路解码器相似。

CABAC

视点分离得到的左、右视点基本层图像存在水平维度的分辨率减半。由于基本层图像和增强层图像存在很强的空间相关性,故对基本层图像进行水平维度的上采样插值滤波,预测得到分辨率提升的增强层图像。为保证增强层图像质量,需要对上采样滤波器核向量进行设置[3],其原理如式(1)所示:

CABAC

视点分离得到的基本层图像分辨率为M/2×N,需要在水平维度上进行上采样插值滤波。在具有水平关系的两个基本层像素点xi,j和xi,j+1之间插入半像素点vi。通过水平插值,从分辨率为M/2×N的基本层图像预测得到分辨率为M×N的增强层图像。

2 语法元素解析的CABAC和CAVLC硬件加速模块的设计

本文通过硬件加速模块实现拼接码流的语法解析工作,AVS标准中的熵解码主要采用CABAC[4]和CALVC[5]两种方式实现。语法元素解析模块的硬件加速模块设计框图如图2所示。

CABAC

码流输入管理模块的主要任务是读入ES原始码流。其中indata[7:0]存储原始ES流的8 bit数据;avail_n检测输入数据的可得字节数;strobe表示输入码流有效性;当读入的数据解析完成后,req通知ES流继续读入。

语法元素输出模块主要控制熵解码后语法元素的数据输出。其中n_bits表示请求读取语法数据的bit数;req为请求读取语法信息;req_type为当前语法元素所需采用的熵解码方式,根据req_type的不同,对当前元素采用CABAC或CAVLC解析算法;outdata[31:0]为熵解码后的数据;del_ready指示当前语法解析模块是否准备好接受外部请求;strobe为当前请求输出语法信息有效性。

核心语法解析单元运行CABAC或CAVLC的解析算法,涉及模型索引号产生、模型自适应更新、反二进制化等过程。在AVS标准中,CABAC主要用于解析宏块类型、亮度色度预测模式、变换系数等数据;CAVLC主要用于解析亮度和色度残差数据。

AVS的码流数据结构及层次关系从高到低依次为:序列、图像、条带、宏块和块,在解码过程中,需要从高到低依次解析出每一层次中的语法元素数据。将硬件加速模块解析得到的数据赋值给相应的语法元素变量,利用得到的语法元素变量在,恢复出左、右视点的重建图像。

3 AVS 3D实时解码器在SoC片上系统的设计与实现

本文采用Xilinx公司ZYNQ 7020开发板,ZYNQ 7020采用双核设计,拥有两片Cortex-M9芯片,一片用作主处理系统,一片用作核心AVS算法解码,两片M9可以共享内存和外围设备。针对AVS 3D解码器,本文采用Master-Slave主从控制设计模式。采用MASTER M9作为顶层控制,完成ES 3D码流的外部接口通信、解码图像显示控制等功能;SLAVE M9及语法解析硬件加速模块共同完成AVS 3D核心解码算法; MASTER M9和 SLAVE M9协同工作,最终实现AVS 3D实时解码器SoC片上系统设计[6]。

3.1 AVS 3D解码器在ZYNQ 7020的启动过程

在启动AVS双目解码器的SoC片上系统时,首先在ZYNQ 7020上进行时钟配置,之后在MASTER M9上执行BootROM启动代码。BootROM是整个SoC系统上最先运行的程序,当SLAVE M9等待解码启动指令时,BootROM已经在MASTER M9上运行。BootROM的主要功能是配置整个双目解码器的SoC系统的串口信息,并将第一阶启动程序(First Stage Boot Loader,FSBL)从启动设备复制到MASTER M9的片上内存。

由FSBL初始化SLAVE M9的Xilinx硬件配置信息,并通过读入BootHeader头文件通知MASTER M9是否启动运行。在FBSL运行的过程中,BootROM会先将SLAVE M9设置为事件等待模式,MASTER M9启动后,由MASTER M9通知SLAVE M9是否启动AVS双目立体解码程序。整个启动流程如图3所示。

CABAC

3.2 AVS 3D解码器在ZYNQ 7020的设计原理

AVS双目立体解码器在SoC片上系统的整体方案设计如图4所示。在各个模块的交互过程中,通过AXI LITE传送信息量较小的数据;通过AXI VDMA传递解码图像数据等信息量较大的数据;通过AXI CON传送交互频繁的数据。

CABAC

MASTER M9是整个AVS 3D解码器在SoC片上系统的顶层控制单元。其功能主要包括:

(1)从以太层获取用于网络传输的3D TS码流;

(2)与TS码流语法解析模块进行信息交互,通知SLAVE M9启动解码过程。SLAVE M9根据码流中解析标志位的不同,调用硬件加速模块采用CALVC或是CABAC的熵解码方式对码流中的语法元素进行解析,并与状态信息模块交互,将熵解码方式标志位、缓存大小、解析完成标志位等信息返回给MASTER M9;

(3)管理解码图像数据及参考帧的位置指针,并将相应数据送往DDR MEMORY不同存储位置。

SLAVE M9运行AVS 3D解码器的核心算法。解码算法包括AVS双目拼接算法和AVS单路解码算法两部分。AVS双目拼接算法如第1节所述。单路解码器算法主要包括:起始码检测、序列及图像头读取、熵解码、宏块数据获取、反变换、反量化、帧内及帧间预测、1/4像素运动向量插值、图像残差恢复、环路滤波等模块。将实现AVS 3D解码功能的C语言代码写至相应的软件开发平台,由硬件加速模块将语法元素解析模块得到的语法元素数值输入各个层级的解码函数,从而通过SLAVE M9上实现AVS 3D解码算法。最终将解码得到的拼接图像序列和左、右视点图像序列写入DDR MEMORY的不同地址空间。

解码图像信息交换模块是MASTER M9和SLAVE M9在解码过程中图像信息交互的中介。在SLAVE M9解码过程中会产生3种图像指针类型:

(1)参考帧指针(针对I、P帧图像),该指针指向的图像作为帧间预测的参考值,并不会立即显示;

(2)显示帧指针(针对B帧图像),该指针指向的图像在解码后直接放入显示序列中;

(3)写入位置指针,SLAVE M9解码一帧图像后,将解码数据写入在该指针指向的DDR MEMORY地址中。通过该模块,SLAVE M9将图像指针的状态和数值传送给MASTER M9,MASTER M9又与DDR MEMORY交互,保证正确的图像解码顺序和显示顺序。

在DDR MEMORY中采用乒乓存储设计,设置两块数据缓存区,每块数据缓存区为拼接图像、左视点图像、右视点图像各分配5帧内存空间。当缓存区1向HDMI接口传输数据时,缓存区2从SLAVE M9接收数据;当缓存区1从SLAVE M9接收数据时,缓存区2向HDMI接口传输数据;如此循环工作,通过两块缓存区的交替工作,提高DDR MEMORY的工作效率。其中每块缓存区中的数据读写位置均由MASTER M9管理,保证DDR MEMORY以正确的显示顺序将图像内容送往HDMI接口。

4 实验结果及分析

本文中,AVS 3D解码器的SoC片上系统设计在Xilinx ZYNQ 7020开发板上实现。通过在AVS单路软件解码器RM52k上增加视点分离模块、层间上采样滤波模块实现AVS 3D解码算法,将代码改写至Xilinx SDK 2014.2嵌入式软件平台,并加载FreeRTOS操作系统用于内存分配和外围设备初始化。AVS双目立体解码参数配置如表1所示。

CABAC

将AVS 3D ES流打包成为用于网络传输的TS流,根据Xilinx的LWIP准则进行TCP连接,经IP QAM调制器最终从以太层将码流输入ZYNQ 7020的MASTER M9模块。通过硬件加速模块实现语法元素解析,结合SoC片上系统进行AVS双目立体解码算法处理,最终通过HDMI接口将视频数据输出到三维电视,在三维电视上可以得到左、右视点信息的拼接视频,通过视点分离和层间上采样插值,恢复出左、右视点的增强层图像。经视点交织处理后,得到最终的3D视频,可以观察到解码得到的3D视频具有明显的深度信息,AVS 3D解码器的效果如图5所示。这说明了AVS 3D实时解码器在FPGA/SoC平台的有效性。

5 结束语

本文通过在AVS原有单路解码器的基础上进行功能的扩充,实现了基于AVS标准的3D解码器的设计。结合语法元素解析的硬件加速模块,在Xilinx ZYNQ 7020开发板上创新性地实现了AVS 3D实时解码器的FPGA/SoC协同平台实现。将解码后的视频输入三维显示设备,通过视点交织观察到3D视频的视点差异和深度信息,验证了该AVS 3D实时解码器在FPGA/SoC平台设计的有效性。

参考文献

[1] 侯金亭,马思伟,高文.AVS标准综述[J]。计算机工程,2009,35(8):247-249,252.

[2] 马茜,李栋,汪启扉,等.AVS立体视频编码标准[J]。上海大学学报(自然科学版),2013,19(3):225-228.

[3] 王樟,柳健,严国萍。简单高效地用于SVC标准中的层间上采样滤波方案[J]。通信学报,2008,29(4):8-12.

[4] MARPE D,SCHWARZ H,WIEGAND T.Context-based adaptive binary arithmetic coding in the H.264/AVC video compression standard[J].IEEE Transactions on Circuits and Systems for Video Technology,2003,13(7):620-636.

[5] ALLE M,BISWAS J,NANDY S K.High performance VLSI architecture design for H.264 CAVLC decoder[C].ASAP 2006:11-13.

[6] 郭炜,郭筝,谢憬,等.SOC设计方法与实现[M]。北京:电子工业出版社,2007.

编辑:jq

打开APP阅读更多精彩内容
声明:本文内容及配图由入驻作者撰写或者入驻合作网站授权转载。文章观点仅代表作者本人,不代表电子发烧友网立场。文章及其配图仅供工程师学习之用,如有内容侵权或者其他违规问题,请联系本站处理。 举报投诉

全部0条评论

快来发表一下你的评论吧 !

×
20
完善资料,
赚取积分