1、环路滤波 loopfilter.c
DeblockFrame 对一帧进行滤波
DeblockMb422 对宏块滤波 图像格式为4:2:2
DeblockMb 对宏块滤波 图像格式为4:2:0 或者4:0:0
DeblockFrame(ImageParameters *img, pel_t **imgY, pel_t ***imgUV)
ImageParameters 帧的各个参数的结构体
pel_t usigned char
2、 DeblockMb
2.1得到当前宏块的首地址 SrcY,SrcU,SrcV
2.2得到当前宏块的首地址 MbQ
2.3 如果lf_desable 为1,则不滤波
2.4 for (dir=0;dir<2;dir++)先垂直方向,后水平方向
a. 计算EdgeCondition, 如果为图像边界,则其值为0,否则为1
b. 如果不是图像边界,判断是否为slice边界,如果是slice边界,则EdgeCondition 为0,否则为1
for (edge=0;edge<2;edge++) 宏块是16*16的,最小滤波块为8*8
c. 如果是内边界(edge=1)或者EdgeCondition=1,则往下。
d. 得到相邻块P的宏块首地址 MbP
e. 计算QP的平均值
f. 计算边界强度值 GetStrength, 返回值 Strength
g. 如果边界强度 Strength 值不为0,则往下
h. 对边界进行滤波操作 EdgeLoop,输入SrcY
i. 如果imgUV不为空,即图像为4:2:0,否则为4:0:0,且edge为0
j. 计算QPchroma,通过查表得到色度的QP值,并求平均
k. 对当前边界进行滤波 EdgeLoop