x264模式选择算法

H264运动搜索和模式选择主要在函数x264_macroblock_analyse() 中执行。这个函数执行对一个宏块的分析,确定一个宏块的编码模式和运动矢量。这个函数占到了编码时间的60%以上。

这个函数的主要流程如下:(引用自雷宵骅的博客)

 

(1)如果当前是I Slice,调用x264_mb_analyse_intra()进行Intra宏块的帧内预测模式分析。
(2)如果当前是P Slice,则进行下面流程的分析:

a)调用x264_macroblock_probe_pskip()分析是否为Skip宏块,如果是的话则不再进行下面分析。

b)调用x264_mb_analyse_inter_p16x16()分析P16x16帧间预测的代价。

c)调用x264_mb_analyse_inter_p8x8()分析P8x8帧间预测的代价。

d)如果P8x8代价值小于P16x16,则依次对4个8x8的子宏块分割进行判断:

i.调用x264_mb_analyse_inter_p4x4()分析P4x4帧间预测的代价。

ii.如果P4x4代价值小于P8x8,则调用 x264_mb_analyse_inter_p8x4()和x264_mb_analyse_inter_p4x8()分析P8x4和P4x8帧间预测的代价。

e)如果P8x8代价值小于P16x16,调用x264_mb_analyse_inter_p16x8()和x264_mb_analyse_inter_p8x16()分析P16x8和P8x16帧间预测的代价。

扫描二维码关注公众号,回复: 3575858 查看本文章

f)此外还要调用x264_mb_analyse_intra(),检查当前宏块作为Intra宏块编码的代价是否小于作为P宏块编码的代价(P Slice中也允许有Intra宏块)。

(3)如果当前是B Slice,则进行和P Slice类似的处理。

 

我们提取P帧时的流程,用流程图归纳它的主要算法:

流程中一些部分是由参数i_mbrd控制开或者关,这里隐去这些细节。

一些不太重要的流程也被隐去。

模式选择过程

图一 宏块分析流程

猜你喜欢

转载自blog.csdn.net/soulmate_scut/article/details/82895058