多视点立体视频解码算法的研究 摘要多视点视频是针对交互式多媒体应用提出的,其所涵盖的双目立体视频与多视点视频播放将在未来几年中实用化,它将解决3D交互视频的表现、交互、存储和传输等问题。多视点立体视频同平面视频相比,其数据量巨大,对存储、传输过程产生了一定的困难,这也成为多视点立体视频技术实现产业化应用的一个瓶颈。是新一代的视频编解码标准,它不但具有更高的压缩比以及对于传输环境更好的适应性,它的应用场景也非常广泛。因而研究基于标准的视频编解码技术具有非常重要的实用价值。虽然标准在压缩效率上有很优秀的表现,但其测试模型在解码具体实现上的速率并不是很理想,因而对解码速度以及播放的流畅与否影响很大。本文首先对多视点视频的熵解码中CAVLC算法、并行解码算法等解码算法进行了研究。然后针对解码的相关算法,对各自优化算法进行了总结。 关键词:多视点视频;解码器;并行解码;熵解码;优化算法 Research on multi-view stereoscopic video decoding algorithm Abstract Multi-view video is proposed for interactive multimedia applications ,it covers binocular stereo video and multi-view video playback practical in the coming years , it will solve performance 3D interactive video , interactive , storage and transmission problems . Multi-view stereoscopic video with flat video compared to the huge amount of data on the storage, that transmission process produces a certain amount of difficulty , which has become a bottle neck in multi-view stereo video technology for industrial applications. And is the next generation video decode standard , it not only has a compression and transmission environment for a better adaptability , its application is very extensive than the scene . Thus based on the standard video codec technology has a very important practical value . While a compression efficiency standards in a very good performance , but rate on the test model decoder implementation is not very satisfactory, thus decoding speed and smooth playback of whether or not a significant influence. Firstly, the entropy decoding multi-view video of the CAVLC algorithm, parallel decoding algorithm decoding algorithm are studied . Then for decoding algorithms, optimization has algorithms for each are summarized . Keywords: multi-view video; decoder; parallel decoding; entropy decoding; optimization algorithm 1 引言 随着数字通信技术和网络技术的迅猛发展,人们对于传输内容的要求早已从语音、数据到了图像视频。视频通信和多媒体通信成了当前国内外研究的热点。与视频相关的应用也越来越广泛,如可视电视、VOD、视频会议、IP视频服务、数字图像监控、数字电视等。而这些都与视频的核心内容-视频的压缩编码有密切的联系。如何设计出一个高效的视频编解码器一直是近二十年来人们研究的重点。现有对于H.264解码算法实现和优化方案相继推出,具体实现的方-1
- 好好学习,天天向上
法也比较多,但基本可分为如下几类:1、针对解码定制或者半定制平台实现:研究分析算法或某些模块,如熵解码,插值运算,块滤波,此方式一般用于支持main和extended高档次,应用于高端领域,如高清电视等,要求较高,但是具体实现难度较大;2、通用PC全软件实现:如现在的有些商用播放器就已经支持普通图像的实时解码,PC通用处理器平台的处理能力强大,正往并行多核趋势发展,完成一路或者若干普通分辨率的实时解码,不存在多大问题;3、DSP实现DSP+ARM实现。而本文以研究现有的几种常用解码算法为目标,主要从CAVLC的解码算法和并行解码算法以及相关算法的优化两个方面进行研究。首先介绍了多视点视频解码的基本原理以及AVC 解码器的主要功能模块。接着对解码的几种相关算法进行研究。 2 解码器的解码原理及模块结构 只定义了码流格式和句法语义,并没有像其他标准那样规定了解码器的实现。但总体来说,解码器结构大致相同,框架类似,是编码的逆过程。解码器的功能组成如图所示。 帧内预测 + Fn1参考 MC 帧间 F重建 'n滤波 uFn' 'Dn + T1 D1重排列 图2-1 解码器的结构 可以看出和基于以前的标准(如、MPEG-2、MPEG-4)中的解码器的组成并没有什么很大的区别,主要的不同在于各功能块的细节。首先输出的码流经过熵解码后得到量化后的一组变换系数X,再经过反量化、反变换,得到残差见。从比特流中解码出头信息之后,解码器就产生一个预测块数据PRED,它和编码器中的原始PRED是相同的。将PRED与残差Dn相加后,就产生uFn,再经过滤波后,最后就得到重建值Fn,这个就是最后的解码图像的输出。 自适应可变长编码(CAVLC)解码算法 AVC 编解码标准[1]并没有明确规定基于上下文的自适应可变长编码(Context-based Adaptive Variable Length Coding, CAVLC)如何实现,而是仅规定了解码后视频比特流的句法,因此,现有文献多致力于CAVLC 变长码表的分析与优化,而涉及CAVLC 熵解码器整体实现方案的研究尚不多见。 CAVLC基本原理 CAVLC 在传统变码长理论基础上,充分利用相邻块之间的相关性,引入上下文自适应模型,进一步降低了数据间的冗余度,有效地提高了解码效率。自适应的选择主要体现在2个方面: (1)解析非零系数TotalCoeffs和拖尾系数Trailing Ones 时NC值的更新; -2
''' - 好好学习,天天向上
(2)解析除拖尾系数之外的非零系数幅值Levels时变量SuffixLength的更新。CAVLC解码过程具体包括以下5个句法元素: (1)解析coeff_token 根据变量当前块值(NC)选择表格(4个变长表格和一个定长表格),查表求得非零系数个数和拖尾系数个数。在解析coeff_token句法元素之前,首先要计算变量NC。 除色度的直流系数外,其他系数的NC 值由当前块左边4×4块的非零系数的数目(NA)和当前块上面4×4块的非零系数数目(NB)计算求得。具体求取过程如图2所示,其中符号“√”表示可用;“×”表示不可用[4]。 表2-1 NC值求取过程 NA √ √ × × 色度直流系数为1 色度直流系数为2 色度直流系数为3 NB √ × √ × NC (NANB)/2 NA NB 0 -1 -2 0 (2)解析拖尾系数的符号根据输入的比特码流解析每个拖尾系数的符号(0 表示+,1表示–),输出trailing_sign[7..0]。 (3)解析除拖尾系数之外的非零系数的幅值Levels 非零系数的幅值由前缀(level_prefix)和后缀(level_suffix)2个部分组成,并在解码过程中引入2个变量:LevelSuffixsSize和SuffixLength,其中,LevelSuffixsSize 表示后缀的长度。 通常情况下,2个变量值相等,以下2种情况例外: 1)当level_prefix=14且SuffixLength=0时,则LevelSuffixsSize=4。 2)当level_prefix=15,则LevelSuffixsSize=level_prefix–3。其中,变量SuffixLength 值的更新与当前SuffixLength 值和已解析好的非零系数值Level有关。变量SuffixLength 的初始化及更新过程如下: 1)SuffixLength初始化:当块中ToalCoeffs>10且TrailingOnes<3时,SuffixLength=1,否则SuffixLength=0。 2)SuffixLength 更新:若当前已解析好的Level 值大于预定阈值,则SuffixLength=SuffixLength+1。 (4)解析最后一个非零系数前零的数目TotalZeros。 (5)解析每个非零系数前零的个数Run_Before[i]。非零系数前0的数目按反序进行解析的,由最高频的非零系数开始。Run_Before在以下2种情况时无需查表解析: -3
- 好好学习,天天向上
1)低频位置上最后一个非零系数前0的个数。 2)当[RunBefore]TotalZeros 时,即没有剩余的0需要解析。 如上所述,在CAVLC中,正是由于相邻的已编码符号之间存在的相关性,才可以为待编码符号选择合适的上下文模型,以此来达到降低符号间冗余度的目的。在CAVLC中,非零系数编解码查表过程和拖尾系数后缀长度查表过程最能体现CAVLC方法上下文模型的选择。 CAVLC解码的基本过程 CAVLC解码过程的主要工作就是进行查表判断,翻译出相应码字,不同的解码系数对应于不同的多个码表,这些码表包括:coeff-token到TotalCoeff并ffTrailingOnes映射码表、level prefix码表、TotalCoeff 4×4块的total zeros表、色度DC 2×2块的total zeros表、rtln before表。 由于要解码的系数有很多个,而每个系数对应的码表又可能不止一个,因此整体看来,码表数量很多,在CAVLC中,正是由于相邻的已编码符号之间存在的相关性,才可以为待编码符号选择合适的上下文模型,导致查表判断的过程相当耗时。也就是说CAVLC的解码过程需要从连续的码流里截断出不同长度的码字,在CAVLC中,正是由于相邻的已编码符号之间存在的相关性,才可以为待编码符号选择合适的上下文模型,此外,CAVLC方法采用变长编码,在解码时,读取的码流长度是不固定的,也就是说CAVLC的解码过程需要从连续的码流里截断出不同长度的码字,解码器按位依次从码流中读取数据直到找到一个码值和码长都完全一致的码字,即找到匹配码字为止停止搜索,这是一个不断搜索和判断的过程。 解码时优先判断码长最短的码字,在CAVLC中,非零系数编解码查表过程和拖尾系数后缀长度查表过程最能体现CAVLC方法上下文模型的选择。如果不匹配再逐渐增加码长继续搜索判断,在解码时,读取的码流长度是不固定的,由于要解码的系数有很多个,而每个系数对应的码表又可能不止一个,因此整体看来,码表数量很多,在CAVLC中,正是由于相邻的已编码符号之间存在的相关性,也就是说CAVLC的解码过程需要从连续的码流里截断出不同长度的码字,在CAVLC中,正是由于相邻的已编码符号之间存在的相关性,才可以为待编码符号选择合适的上下文模型,导致查表判断的过程相当耗时对于相当一部分码字而言,需要多次读取、匹配才能得到正确的信息,可以想象变长码解码是相当消耗计算资源和存储资源的。 图2-2、2-3以及图2-4展示了CAVLC解码过程的程序流程。图2-2为CAVLC解码程序的流程图,图2-3所示为解析除拖尾系数的非零系数幅值的流程,图2-4所示为解析每个非零系数前零的个数(Run_Before[i])的流程。 否 -4 初始化Kinect 彩色、骨骼数据流到来 - 好好学习,天天向上
是 初始化数据流,并 将数据流存储起来 运动捕捉 左手盖脸部手势识别、判断 变脸 两次盖脸 恢复原脸 图2-2 解码程序流程图 在图2-3的解码程序流程中,首先进行初始化,得到输入数据的个数以及数据块的类型;其变脸 右手盖脸部 次,求出变量NC的值,NC的值可用来选择所要查的码表。 图中的入口参数是Coeff token,以这个参数进入表中,并通过查表过程可以求得非零系数(TotalCoeffs)的个数以及拖尾系数(TrailingOnes)的个数。此外,TotalZeros的值也是用TotalCoeff作为入口参数,通过查表的方式进行编码的。 -5 初始化 TotalCoeff﹥10&& TrailingOnes﹤3 是 K=TotalCoeff- 否 - 好好学习,天天向上
图2-3 解析拖尾系数之外的非零系数幅值流程图 在图2-4中,由TotalCoeff与TrailingOnes的限制条件初始化suffixLength,然后根据K值的限制条件进行循环求解,最终得到非零系数的幅值。 在图2-4中可以看到levelCode是一个中间变量,根据levelCode的奇偶性选择用不同的公式求解得到非零系数的幅值。求解非零系数幅值的循环中,还要对变量suffixLength的值进行更新,如图中所示,若已经求得的非零系数的幅值比域值大,则增加suffixLength的值:否则维持suffixLength的值不变。 开始 结束 -6 Zeroleft=Totalzeros i= TotalCoeff-1 Zeroleft﹥0&& i﹥0 否 - 好好学习,天天向上
图2-5 解析每个非零系数前零的个数的流程图 图2-5为每个非零系数前零(Run_Before[i])的个数的流程图,通过查表可以求解得到图中的变量Run_before。图中变量Zeroleft作为表格的入口参数,它表示当前非零系数左侧零的个数。从图中可以看到,求解Run_Before[i]的整个流程中,以解码到最后一个非零系数和ZeroLeft等于零,这两个条件为终止条件结束流程。 基于前缀零分组子表算法的熵编码优化分析 基于上下文自适应的变长编码的解码算法需要不断的读取码流,判断,直到在码表中找到该码字,如此反复直至解码整个块。由此可见该过程的时间空间复杂度都是相当高的。由于变长码为霍夫曼前缀码,所以可以根据码表的特性,按照码字长度将原来的一个码表,按照码字长度对原码表进行分割,以Coeff_token 码表为例,原码表如表2-2所示,表中NC= - 1。 表2-2 Coeff_token 到TotalCoeff 和Trailing Ones 非零系数数目 0 1 2 -7
结束 ±1个数 0 1 2 3 10 — — — 000101 01 — — 00000111 000100 001 — - 好好学习,天天向上
3 4 0000000111 00000110 0000101 00011 00000000111 000000110 000000101 0000011 在参考模型中,搜索码表算法过程如下: (1)从最短码长开始,读出该长度二进制的数据流对应的码字; (2)遍历码表,如找到该码字进行步骤(4),否则进入(3) , (3)码字长度加1,重定位指针位置,重复步骤(2) ; (4)读取该码字对应值,更新指针位置。 从上面过程中不难发现,码字长度的不确定性使得在读取字节流时只能一次次的试探,导致了效率的下降。如果可以将变长码的读取采取固定的策略,一次读取固定的长度,之后再做判断,再读取一定长度,这样将判断的次数也固定,从理论上可以降低不断搜索和重定位指针带来的时间和空间复杂性。利用可以利用码表中码字前缀零数目的不同,将表1 拆分为两个子表,如表2,表3所示NC 为- 1。 表2-3 前缀零个数小于3的Coeff_token 非零系数数目 2,2 0,0 1,1 二进制串 码值范围 码长 001 1 3 01x 2-3 2 1xx 4-7 1 改进后的码表搜索算法如下: ( 1) 读取最大码字长度的二进制流; ( 2) 根据不同的前缀零位数、右移位、判零以确定码字所在子表; ( 3) 直接根据码值读取对应值,更新指针位置。新的搜索过程不但避免了不确定性,而且无需遍历码表,这样可以在一定程度上提高变长解码的效率。 表2-4 前缀零个数大雨3的Coeff_token ±1个数,非零系数数目 3,4 2,4 1,4 2,3 1,3 0,4 0,3 0,3 二进制串 0000000x 00000010 00000011 0000010x 0000011x 0000010x 0000011x 000100xx 码值范围 0-1 2 3 4-5 6-7 8-11 12-15 14-15 码长 7 8 8 7 7 6 6 6 -8
- 好好学习,天天向上
3,6 2,4 1,3 000101xx 000110xx 000111xx 16-19 20-23 24-27 6 6 6 按照改进的算法步骤,解码时,首先从字节流中读取8位码字,由于前缀零个数分为大于3 和小于3的两种情形,所以右移5位,若为零,则查找表2-4,否则查找表2-3,根据码值直接解码出+1个非零系数的数目。此外在设计代码时,还可利用二叉搜索树的特性,设计搜索过程,提高解码效率。 从时间复杂度来讲,由于添加了子表选择过程,比较次数略有增加。但在确定子表之后,非零系数和拖尾系数查表过程中的比较次数明显减少,缩短了查表时间。综合来看,整体视频序列的解码速度有一定程度的提升。从空间复杂度来讲,优化算法在原有码表的基础上,只是额外创建了一个四维数组来存储子表的边界值,没有占用其他的额外内存,以极少量的空问最大限度的换取解码速度的提升。 基于二叉树子表混合法的熵编码优化分析 拆分成子表后建立的数组中存在冗余现象。如当0 子表数而减少子表中的码字结点数,可以进一步提高查找效率。从以上分析可见,二叉树的查找效率是最高的。因此可以将二叉树应用到子表法中, 对每一张子表分别建树。对于二叉树来说,查找时间与树的深度有关。观察子表中的码字,发现它们都有不同长度的连零作为前缀, 如果直接建树将导致树的不平衡并增加了树的深度。为了解决这个问题,可以考虑在同一张子表中为每个码字去除相同个数的连零前缀,然后建立二叉树。在解码时,先忽略这些连零的个数,再进行树的查找。在最理想情况下,这种查找方法的一次查找的平均比较次数为: MAXs10g2(n/s)4log220 基于模块的并行解码算法 利用CMP 处理视频解码需要对解码过程进行并行化,并行划分可以有两种划分方案,功能并行和数据并行。功能并行是指将一帧的解码分成多个步骤,每个处理器分别处理其中的一个步骤。而数据并行是指将一帧数据分为多个数据块,每个处理器分别处理一个数据块。解码过程在功能域有多个功能模块,如运动补偿、帧间预测、帧内预测、反离散余弦变换、反量化、变长编码等。功能划分需要任务间的通信, 适合硬件实现,数据流依次通过一组功能部件,分别完成相应的计算,但不太适合通用多处理器结构。而在数据域进行并行,则有扩展性好,易于软件实现的优点,适合于通用的片上多处理器。数据并行可以有不同的并行层次,在中一个视频序列由许多的图片组(GOP)组成,每个GOP又包含很多帧,每帧又可分成几个相互独立的slice,slice又能进一步分解成许多作为运动估计和熵编码基本单元的宏块,而宏块又可以再被分成更小的块。所有这些都有可能进行不同级别的并行运算。 并行解码算法的基本原理 文献[5]提出一种基于功能的可变划分解码算法,该算法主要从以下两方面进行探讨:如何平衡并行模块间的运算量,以较小的代价完成模块间同步,如何降低存储器间的数据竞争,减少数据竞争引起的时间消耗。针对上述问题,文献[5]提出一种由4个ARM11核构成的功能模块运算量可变的解码器划分方法,该方法在每个核内部集成多个解码器功能模块,利于运动补偿模块的独立性,通过动态调整4个核内运动补偿模块的运算量来平衡总运算量,使四核在帧间预测模块前同步完成当前运动补偿模块,提高整体同步性。同时通过预载运动补偿模块数据的方式减少存储器间的数据竞争。基于解码功能模块的可变划分解码器将 解码器按照功能划分为VLD(熵解码)、MC(运动补偿) 、IP(intra _pred) 、LF( 滤波)等4个功能模块。 下图为一帧图像解码过程以及功能模块在四核间划分。VLD 模块需要连续的数据,必须在同一个核内完成,同时其运算量较大。通过动态分配适当大小的MC模块运算量到core1的方式保证core1和其他3个核可以同步启动IP模块,减少core1空置时间。 Core 1 -10 VLD MC IP 下一次VLD - 好好学习,天天向上 Core 2 Core 3 Core 4 前一次LF MC IP LF 前一次LF MC IP LF 前一次LF MC IP LF 图2-6 并行解码过程 利用VTUNE 性能分析工具对解码过程中各函数占计算量比例进行分析,测试结果表明占用周期最长的是mb_decode函数,它包含了运动补偿, 反变换,反量化等大计算量的工作;其次是deblock_frame函数,两个函数加起来占执行周期总数的80%。并行化的关键就是并行化这两个部分。 其次占用计算周期较长的是熵解码过程,但由于熵编码中编码长度不是定长的,因此不能预测出一帧中某个位置处的数据位于输入码流的哪一部分,在熵解码阶段我们并不能进行数据块的划分。因此熵解码的过程不能进行并行,必须放在一个处理器上做。而经过熵解码之后,每帧的数据已经可以分成n个数据块,即可以进行并行处理了。 由于decode 过程运算量最大,所以我们的实验主要集中在对这一过程的并行化上。在对解码过程并行化时,必须十分注意解码过程中的数据依赖关系。在T264 解码中,如下图所示,每一个宏块的解码需要之前的4个宏块的数据(位于当前宏块上一行的三个和前一列的一个)。因此对一帧图像中的所有宏块,解码的顺序是有一定限制的。在的并行化过程中,最重要的就是数据依赖关系的处理和顺序的分配。 除了以宏块为单位进行并行划分,还可以将几个宏块组合成一个宏块组,作为为划分单元进行并行划分,宏块组的形状如上图右侧所示。在这种情况下每个宏块组只依赖于相邻三个宏块组的解码完成,且能够更好的利用数据局部性,因此成为了我们选定的划分方式。在这种划分方式下,对一帧中数据块按行列进行编号如下: i=[x/2] j=[y/2]+x%2 其中i,j为数据块坐标;x,y为宏块坐标 根据数据块间的依赖关系可见,编号为(i,j)的数据块要进行decode,则要求编号为(i-1,j)、(i-1,j+1)、(i,j-1)的三个数据块(一般情况下)的decode完成和坐标为(2i,2j-1),(2i,2j),(2i+1,2j- 1),(2i+1,2j-2)的宏块的熵解码完成。 在deblock的过程中,我们同样需要注意数据的依赖关系这个问题。一个宏块的deblock本身需要左边宏块和上边宏块的数据,因此在这两块数据尚未准备好之前并不能进行deblock,另外,由于deblock过程会修改相关宏块的数据,而decode过程则需要deblock之前的数据, 因此一个宏块只有当需要用它的数据进行预测解码的所有宏块都解码完毕之后,才能进行deblock过程。对-11 - 好好学习,天天向上 应编号为(i,j)的数据块要进行deblock,除了要求之前三个数据块decode完成和本数据块所包含宏块熵解码完成外,还需要(i+1,j),(i,j+1),(i+1,j-1)数据块的解码完成。 并行解码的基本过程 为了实现解码顺序的动态分配,我们的系统需要维护一个二维矩阵(条件矩阵),其中每个元素代表一帧中相应坐标中的数据块。元素的值代表这一个数据块解码需要的未达到的先决条件的个数,每当一个条件达到要求,这个元素就要减一。当矩阵中某一个元素被减到0之后,该元素的坐标就被放入解码队列中。负责解码的进程则不断检测这个队列,发现队列非空的时候就从队列中取出一个坐标,对该坐标对应的数据块进行解码。而当矩阵中某一个元素被减到某一负值(对于非边界情况是- 3),该元素的坐标就被放入deblock队列中。负责deblock的进程则不断检测这个队列,发现队列非空的时候就从队列中取出一个坐标,对该坐标对应的数据块进行deblock。条件矩阵,解码队列,deblock 队列都是各个线程共享的。 每当处理器完成一个数据块的处理,它将同时修改条件矩阵中与之相关的值, 并确定是否有新的数据块达到处理所需的条件。过程如下:(注:边界条件另做处理) (1)处理器完成了对宏块(x,y)的熵解码,则将条件矩阵中的元素(i,j)减一(i,j,x,y符合*式)。 (2)处理器完成了对数据块(i,j)的解码,则将矩阵中的元素(i+1,j),(i,j+1),(i+1,j-1),(i-1,j),(i-1,j+1),(i,j-1)减一。 (3)完成修改后,如果某个元素减到0,则将坐标放入解码队列中,如果某个元素的值到达可以deblock的要求值(一个负数),则将坐标放入deblock 队列中。 为了使处理器能够公平对待需要deblock和decode的数据块,我们将解码队列和deblock 队列合并为一个队,在队列中每个元素附加一个变量代表工作类型:0 表示decode,1表示deblock,则处理器的处理流程如下: 队列空 否 熵解码 -12 - 好好学习,天天向上 取出一个数据块 是 Job 解码当前数据块 Deblock数据块 图2-7 并行解码流程图 基于功能模块的解码器减少了基于功能的可变划分解码器中所需的数据预载等操作,同时避免了运动补偿模块划分时产生的数据搬运,整体数据搬运效率得到进一步提高。 基于模块的数据划分并行解码算法的优化分析 首先,针对核间运算量不均衡情况,根据解码模块计算过程,除了熵解码需要连续的数据、只能在单核上连续计算外,其他各个功能模块都能够被分解进行。例如MC功能模块,可以按照宏块类型划分成MC16x16、MC16x8、MC8x16、MC8x8 及以下;按照YUV亮度色度划分成MC_Y、MC_U、MC_V;由于是行级并行,MC模块中宏块都是帧间预测,所以宏块间没有相互依赖关系,可以并行分段划分。 在分析各功能模块的相互关系和效率情况后,对模块划分做出优化调整,将M模块和帧内预测模块都按数据划分成MC1/2、MC2/2,PredIntra1/2、PredIntra2并行执行;IQ和IDCT模块合并一个核执行;LPF模块拆分成LPF_Y和LPF_UV 两部分,LPF_UV 和BS 计算模块合并一个核执行;LPF_Y单独执行。由于当前行进行去块滤波操作时,会改变前一行宏块的个别像素点,所以为了确保解码图像正确性,排布流水线时,LPF 模块与IQ和IDCT 模块不能相邻排布,必须错开一级。 表2-5 六核任务划分 任务 Task1 Task2 Task3 Task4 Task5 Task6 功能模块 码流解析+熵解码 MC1/2|PredIntral1/2 MC2/2|PredIntral2/2 IQ+IDCT LPF_UV+BS LPF_Y 在众多核(大于5核)情况下,相比于普通的四核以下的并行程序,流水线排布的启动和结束阶段,并行度较低的情况,对整体效率影响较大。如表2-5所示功能划分后的流水线,在流水线启动和结束阶段,并行效率低。 -13 - 好好学习,天天向上 在前5个流水线启动周期里,都有核是处理空闲等待阶段,如表2-5所示功模块进行二次划分,充分利用这些空闲等待的核进行流水线优化,提高整体并行效率,优化后的流水线排布如表2-6。 表2-6 六核任务二次划分 原任务 二次划分优化任务 Task7 Task8 Task7+Task8 Task9 Task10 Task11 Task12 Task7+Task8 Task13 Task14 Task4 Task15 Task16 Task17 Task18 功能模块 MC1/5|PredIntral1/5 MC2/5|PredIntral2/5 MC3/5|PredIntral3/5 MC4/5|PredIntral4/5 MC5/5|PredIntral5/5 MC1/3|PredIntral1/3 MC2/3|PredIntral2/3 MC3/3|PredIntral3/3 IQ IDCT BS LPF_Y Task5 并行加速比的变化趋势,文献[12]的并行算法,在六核配置时的并行加速比是,而本文算法在1920x1080 分辨率、8M 码率的情况下,并行加速比达到了,算法提高了25%,解码算法的并行程度和算法得到有效提高。另外,在大分辨率和高码率情况下,文献[14]的并行算法,会因为熵解码计算复杂度增加而导致并行加速性能下降。本文算法由于采用了功能和数据混合划分的方法,如上表所示,随着分辨率的增加和码率的增大,并行加速比性能相应提高。 在这里提出的基于功能和数据混合划分的并行解码算法,并根据 算法各个模块间的相互关系,提出一种功能和数据相结合的划分方式和流水线排布。本文提出的并行解码算法并行加速比高,同时更适合于大分辨率和高码率的 解码。 3 总结 在本文中,首先对解码的原理及相应的功能模块进行了简要介绍,阐述了基于标准的立体视频解码技术的基本工作流程,并介绍了立体视频编解码的几种基本方法及它们的相应优化方法。然后重点对立体视频解码过程中基本解码进行了研究,并采用JMVC测试模型作为对立体视频进行解码的工具。 然后本文的研究重点主要针对立体视频的解码方法及方法对于的相应优化方法,然后设计并采用高效的CAVLC查表算法和并行解码算法对多视点立体视频进行解码,在确保解码效率和图像质量的前提下,达到了解码方法得到的目的。 当然,本文所做的研究工作仍然有很多需要改进的地方。首先,对于立体视频的解码可以更-14 - 好好学习,天天向上 多的借鉴其他优化算法,通过对比与分析,找到更适合多视点立视频的解码优化方法;此外,本文也可以在硬件优化的实现上多做一些研究,并将软硬件的优化工作进行结合,相信可以达到更好的优化效果;最后,在JMVC测试模型的代码实现细节上还需要仔细研究,从而进行更多的优化操作。 参考文献 [1]Wie gand T,Sullivan G,Bjontegaard G.Overview of the AVC video coding standard[J].IEEE Transactions on Circuits and Systems for Video Technology,2003,13(7):560—576. [2] Horowitz M,Joch A,Kossentini F,et a1.H.264/AVC baseline profile decoder complexity analysis[J].IEEE Transactions on Circuits and Systems for Video Technology,2003。13(7):704~716. [3] Lee Juyup,Sung Moon.Sung Won yong.H.264 decoder optimization exploiting SIMD -15 - 好好学习,天天向上 Instructions[A].In:Proceedings of the 2004 IEEE Asia-Pacific Conference on Circuits and Systems[C],Tainan,Taiwan,China,2004:1149—1152. [4]Y.Wang and 0.Zhu.Error control and concealment for video communication:a review. Proceedings of the IEEE,v01.86,pp.974-997.May 1998 [5]D.W.Red mill and N.G Kingsbury.The EREC:An error resilient technique for codingvariablelength blocks of data.IEEE Trans.Image Proc,v015,no.4,PP.565-574,Apr.1996S.Wenger.Video redundancy coding in H.263+.Proc“VSPN,Sept.1997. [6] Zhang z,Berger L New results in binary multiple descriptions,IEEE Trans.Inform.Theory,v01.33,no.4,PP 502·521,July 1987 [7]A.Tamhankar and ICR.Rao,An overview of H.264/MPEG4-Part 10,EC.VIP.MC 2003.EURASIP Conference focused OU Video/Image Processing and Multimedia Communications,2-5 July 2003,Zagred,Croatia [8] ThomasWiegand,Gary J.Sullivan,Gisle Bj Ontegaard,and Ajay Luthr.Overview of the /AVC Video decoding Standard[J].Circuits and Systems for Video Technology,2003,13:560-576 [10]Joint Video Team of ITU- T and ISO/IEC JTC 1. Draft ITU- TRecommendation and Final Draft International Standard of Joint Video Specification (ITU- T Rec. |ISO/IEC 14496- 10 AVC) .Joint Video Team of ISO/IEC MPEG and ITU- T VCEG. JVTG050[S].2003- 03 [11]Chen Yenkuang. Towards Efficient Multi- level Threading of Encoder on Intel Hyper - threading Architectures [C] .International Parallel and Distributed Processing Symposium,2004- 04. [12]Schafer Ralf,Wiegand Thomas,Schwarz Heiko. The emerging AVC Standard EBU Technical Review, [13] der Tol, and . of Decoding on a Multiprocessor Architecture.[C],SPIE Conf. on Image and Video Communications andProcessing,Jan. 2003. [14]张杰.视频编解码新标准 AVC中的重要技术[ J].现代电子技术, 2004, 27( 6) : 101- 103. [15]毕厚杰.新一代视频压缩编码标准H .264/ AVC [M].北京:人民邮电出版社,2005. [16]张颖,刘济林.H. 264中CAVLC解码的分组优化[J].信号处理,2005( 1) :17- 21. [17],,,.基于的多视点立体视频解码器优化算法研究[J].计算机应用研究.2012(02) [18]刘灿.解码算法优化及在ARM上的移[D].武汉理工大学2009 [19],,.一种多视点立体视频分布式压缩感知编解码模型[J].天津大学学报.2012(10) [20],.基于功能和数据划分的并行解码算法[J].计算机工程.2012(06) [21],.基于功能模块的并行解码算法[J].计算机工程.2012(10) [22]郑秀英.中CAVLC解码算法的改进[J].电视技术.2006(S1) [24],,,.多视点立体音视频压缩编解码同步研究[J].计算机技术与发展.2012(01) [25]余俊,石旭刚.基于的全高清解码器解决方案的研究[J].中国有线电视.2009(07) [26],.一种适用于标准的新型CAVLC解码器设计[J].北京大学学报(自然科学版).2007(05) [27]艾孟奇. 标准视频解码优化及DsP 程序设计[J].成都.电子科技大学.2007 -16 - 好好学习,天天向上 [28]姚莹琳. 大尺寸解码器的实现与优化[J]北京,北京邮电大学.一10 [29]张颖,刘济林.中CAVLC 解码的分组优化[J].信号处理,2005,21(1):20 [30]龚建锋,金文光,季爱明. 基于 解码中CAVLC 的优化[J].微电子学与计算机,2007,24( 1) : 87-90. -17 因篇幅问题不能全部显示,请点此查看更多更全内容