资料介绍
帧内学习笔记
AVS-M帧内预测部分:
一.分析帧内预测模式决定函数
int Mode_Decision_for_4x4IntraBlocks_luma
1.avs中只使用了4x4一种块划分去进行帧内模式选择,进行帧内预测,没有使用16x16
这种块模式。
4x4有9种亮度预测,16x16有4种帧内预测模式。
2.问题:本程序在帧内预测时对一个宏块中的每个4x4块求其最佳预测模式,求其代价值
。其中intra_cost += cost4x4;这条语句对每个最佳预测模式的代价值进行了累加。
形成了帧内预测的代价值,主要应该时在帧间预测时使用。
3.cost值的计算
AVS的帧内编码模式使用的是SAD模式选择
公式:Cost=SAD+R*λ(QP);
程序中为:
cost = (ipmode == mostProbableMode) ? 0 : (3 * lambda );
此处计算的是R*λ(QP)这部分的值。当当前的预测模式为最有可能的预测模式时,R=0,
所以cost为0,否则cost为3*lambda, lambda=λ(QP),这个值是量化因子QP的指数函数
显然这里使用的系数是3即R=3
程序里面
cost = (ipmode == mostProbableMode) ? 0 : (3 * lambda );
cost+=Intra_sad_4x4(&pgMbData-
>org_luma[block_y][block_x],&pred_sample[0][0],&residual[0][0],16);
显然它是先计算了后面的3*lambda,也就是3*λ(QP)
然后再计算了SAD值,
int Intra_sad_4x4函数中
pred_cur0 = _lo(_amemd8_const(pred ));
pred