HM编码框架详解:从GOP到LCU的编码流程

1星 需积分: 50 41 下载量 2 浏览量 更新于2024-09-10 1 收藏 277KB PDF 举报
"这篇文档是关于HM编码器的介绍,主要涵盖了环境配置、编码端主函数的调用、GOP与Slice的划分以及LCU的压缩和编码过程。作者是北京工业大学的朱维佳,文档基于HM6.0版本。" 在深入理解HM编码器之前,我们先了解一下HM(HevcMain)是什么。HM是High Efficiency Video Coding (HEVC)标准的参考软件实现,用于演示HEVC编码器和解码器的核心功能。HEVC是一种视频编码标准,旨在提高视频压缩效率,以减少存储和传输视频所需的带宽。 1. **环境配置** HM编码器的运行需要特定的配置文件,如c1.cfg、c2.cfg等,用于设置编码参数。解码端工程TAppDecoder则使用b1.bin和o2.yuv等文件进行解码。用户还可以通过运行可执行文件获取更多帮助信息,以了解额外的配置选项。 2. **编码端主函数调用** 在编码端,主函数会调用create函数,但这个函数在HM中为空,不做任何实际操作。实际的编码工作由encode函数完成,它调用m_cTEncTop的encode函数处理每个Group of Pictures (GOP)。每个GOP中的编码进一步由compressGOP函数处理。 3. **GOP与Slice的划分** GOP是视频编码中的一个基本单元,可以包含多个帧。在HM中,GOP被划分为Slice,有基于raster顺序和tile的方式。每个Slice会调用compressSlice来选择最佳参数,并使用encodeSlice进行熵编码。 4. **Slice到LCU的划分** Slice进一步被划分为固定大小的LCUs(Coding Unit),默认尺寸为64x64像素。每个LCU会通过compressCU和encodeCU进行处理。compressCU决定编码参数,而encodeCU负责实际的编码。这两个函数在compressSlice和encodeSlice中都会被调用,以确保码率计算的精确性。 5. **compressCU详解** compressCU使用四叉树结构来表示LCUs,每个LCU可能被递归地划分为4个子CU。如果满足条件,如基于Rate-Distortion Optimization (RDO)的成本评估,CU会被继续划分。xCompressCU是实现这一过程的关键函数,它会对每个子CU进行递归调用,子CU的尺寸是父CU的四分之一。在xCompressCU中,对于Intra、Merge和Inter模式的测试都会进行,以确定最佳编码策略。 文档中提到的"int"可能是接下来要介绍的内部(Intra)预测模式,这是编码中非常重要的一部分,特别是在初始化和编码I帧时。Intra模式允许编码器仅使用当前帧内的信息进行预测,而Merge和Inter模式则涉及使用相邻帧的预测信息,以提高压缩效率。 HM编码器通过精细的图像结构划分和复杂的编码决策过程,实现了高效的视频压缩。理解这些核心概念有助于优化编码性能,适应不同的视频质量和带宽需求。