=====================================================
H.264/H.265 官方源代码分析文章:
H.264官方软件JM源代码简单分析-编码器lencod
H.264官方软件JM源代码简单分析-解码器ldecod
HEVC官方软件HM源代码简单分析-编码器TAppEncoder
HEVC官方软件HM源代码简单分析-解码器TAppDecoder
=====================================================
上一篇文章总结了H.264官方参考软件JM中的视频解码器ldecod的结构,本文继续分析JM中的视频编码器lencod。
JM中的H.264视频编码器lencod的函数调用关系图如下所示。
函数背景色
函数在图中以方框的形式表现出来。不同的背景色标志了该函数不同的作用:
白色背景的函数:不加区分的普通内部函数。
黄色背景函数:滤波函数(Filter)。用于环路滤波,半像素插值,SSIM/PSNR的计算。
绿色背景的函数:宏块编码函数(Encode)。通过对残差的DCT变换、量化等方式对宏块进行编码。
紫色背景的函数:熵编码函数(Entropy Coding)。对宏块编码后的数据进行CABAC或者CAVLC熵编码。
浅蓝色背景函数:码率控制函数(Rate Control)。对码率进行控制的函数。
箭头线
箭头线标志了函数的调用关系:
黑色箭头线:不加区别的调用关系。
黄色的箭头线:滤波函数(Filter)之间的调用关系。
绿色箭头线:宏块编码函数(Encode)之间的调用关系。
紫色箭头线:熵编码函数(Entropy Coding)之间的调用关系。
函数所在的文件
每个函数标识了它所在的文件路径。
下文记录结构图中几个关键的部分。
编码器的main()函数中调用的参数配置函数Configure()、初始化编码器函数init_encoder()、编码函数encode_sequence()、释放编码器函数free_encoder()等。
编码器主要编码函数encode_one_frame()逐层调用的函数perform_encode_frame()、frame_picture()、code_a_picture()、code_a_plane()等。
EPZS_motion_estimation():EPZS算法;亚像素的运动估计可以使用下面的方法:
full_search_motion_estimation():全搜索算法;
UMHEXIntegerPelBlockMotionSearch():UMHEX算法;
EPZS_sub_pel_motion_estimation():EPZS算法;
full_sub_pel_motion_estimation():全搜索算法;
UMHEXSubPelBlockME():UMHEX算法;