HEVC中,帧内模式选择有35种,其中包括33种角度模式,在选择每一个PU的最佳模式时,是一个非常耗时的过程,首先需要经过一个模式粗选过程,然后根据PU的大小选择相应的最佳模式的候选列表,其中候选列表中模式个数的对应关系为,{64,32,16,8,4} 分别对应的个数为{3,3,3,8,8},然后再根据这个候选列表,加上最有可能的三种模式,构成最终的模式候选列表,然后在进行模式细选过程,选出最佳的角度模式,这是一个相当耗时的过程,在帧内预测的过程中,模式选择过程几乎占据了一帧编码时间的20%。
对HM10.0代码进行跟踪到帧内模式选择过程,(1)cTAppEncTop.encode();(2)m_cTEncTop.encode;(3)m_cGOPEncoder.compressGOP;(4)m_pcSliceEncoder->compressSlice;(5)m_pcCuEncoder->compressCU;(6)xCompressCU;(7)xCheckRDCostIntra;(8)m_pcPredSearch ->estIntraPredQT;其中函数estIntraPredQT就是对帧内角度模式进行详细解释说明的函数,包含了上面说的三个过程,先对一个64*64的预测出最佳的角度模式,然后是其中包含的第一32*32,然后是第一个32*32的第一个16*16,依次类推,预测的大小分别是64,32,16,8,4,4,4,4,8,4,4,4,4,8,4,4,4,4,8,4,4,4,4,16,8,4,4,4,4,8,4,4,4,4...,严格按照Z字形的顺序执行。截图如下所示