论文部分内容阅读
2001年,ISO的运动图像专家组(MPEG)和ITU/VCEG成立了联合视频组(JVT)共同发展和研究H.26L标准,并将研究草案纳入ITU-T视频技术建议H.264和ISO/MPEG组织制定的MPEG-4标准的Part 10(即AVC)中。H.264/AVC作为新一代视频编码算法吸收了以往编码方案的优点,在视频压缩性能和网络接口友好性上得到了很大的提高,但是这些优点都是以引入复杂度为前提的。分析H.264编码器的结构可知,其高复杂度的计算量主要来源于两个方面,一是帧间编码的1/4像素精度运动搜索,多种可变大小的块模式及多参考帧的运动估计;二是帧内编码的多种预测模式。如何快速的实现编、解码成了H.264目前急需解决的问题。目前几乎所有的CPU架构都在向多核化方向发展,例如Intel、AMD的X86、IBM的PowerPC等。跟传统的单核CPU相比,多核CPU带来了更强的并行处理能力和更高的计算密度。可以预见,多核CPU必将成为未来处理器市场上的主流产品。针对H.264编码的复杂性,人们提出了很多并行优化的方法。一种是基于指令级的并行(ILP),例如很多DSP平台提供的单指令多数据流(SIMD)指令;另一种是基于线程级的并行(TLP),这种方法需要和多核技术相互配合来实现。试验证明,单纯使用任何一种方法都不能实现编码的最大并行化。考虑到X264本身已经实现了X86平台下的指令级并行,因此本文使用X264编码器作为研究对象,并在其SIMD指令级并行优化的基础上进行线程级并行优化,配合Intel的双核处理器平台,在Linux Fedora Core 5操作系统下获得了较高的编码加速比提升。X264当前采用基于Fork-Join模型的Slice级并行算法。测试结果表明:该模型开销较大,在低分辨率的编码应用中严重限制了Slice级并行算法所获得的编码加速比。为了避免Fork-Join模型带来的开销,本文在传统线程池的基础上提出了自适应线程池模型,并使用该模型对X264进行优化。对码流质量要求严格的非实时编码的应用场景,本文选取GOP级并行对X264编码器进行并行优化并获得接近线性的加速比。对码流质量要求严格的实时编码的应用场景,本文使用Frame级并行和Slice级并行相结合的方法,该算法避免了单纯使用Frame级并行获得的加速比低以及Slice并行会降低目标码流质量的缺点,在几乎不影响目标码流质量的前提下,获得了较高的加速比。