宏块预测函数,x264_macroblock_analyse
帧内预测代码部分:

mb_analyse_intra 帧内预测部分,上次代码分析过。
帧内rdo分三步1 预测i_type和i_mode, 计算i_cost
2 根据1预测的结果,进行帧内编码,然后解码,将残差加到预测块上,然后重新计算i_cost
3 如果rdo强度较大,再枚举一次i_mode, 重新计算一次i_cost.

上面函数的做的是在不改变imode的情况下通过重建块重新计算整个块的i_cost。
因为帧内预测的时候,还没有重建块,智能通过周围的像素预测当前块的值。
现在以及得到i_type 了,就先按照这个type编码看看,然后再解码得到重建后的画面,然后把残差加在之前的预测块的值上面。

以macroblock_encode_p8x8_internal为例,它先按照模式编码,然后再解码,构造重建块。然后在ssd_md()中通过刚才得到的重建块,再计算一次cost, 这个cost肯定比前面预测块的cost精确。

如果mbrd的值更大,就需要重新枚举一下所有的i_mode, 尝试编码,然后重建块,再比较得到一个最佳的rd_cost,然后选定为i_mode。
本文探讨了x264编码器中的宏块预测函数,重点聚焦于帧内预测阶段的RDO过程,包括i_type和i_mode的选择、重建块成本计算及模式优化策略。通过实例剖析macroblock_encode_p8x8_internal中的i_cost重估,揭示了如何在精度提升与编码效率间寻求平衡。
736





