编码数据流(从左到右编码,从右到左重建)
(一)编码
1.以宏块(16*16亮度区域和相应的色度区域)为单位,对输入视频帧Fn进行编码;
2.运动估计函数从参考帧(如重建帧F‘n-1或子采样后的F'n-1)中寻找当前宏块的匹配区域(相似区域),该区域和当前宏块的位置偏移即为运动矢量MV;
3.根据MV生成运动补偿的预测P(16*16区域);
4.用当前宏块减去P生成残差宏块D;
5.将D划分成8*8或4*4的子块,分别进行DCT变换;
6.子块量化(X);
7.子块的DCT系数重新排序,再进行run-level游戏编码;
8.编码后的系数、运动矢量和相关的宏块头信息经过熵编码后生成压缩比特流;
(二)重建数据流如下
1.每个量化后的宏块X经过尺度变换、反DCT变换生成解码后的残差D'.由于量化过程是不可逆的,所以D'和D并不相同(有失真);
2.残差D'与运动补偿预测P相加得到重建宏块,所有重建宏块一起得到重建帧F'n.
Fn编码结束后,其重建帧F'n可以用来作为参考帧并用于Fn+1的编码。
解码数据流
1.熵解码器从压缩比特流中解码除变换系数、运动矢量和宏块头信息;
2.反向run-level编码并重排序之后,得到量化的变换域宏块X;
3.X经过尺度变换。反DCT变换生成解码后的残差D';
4.根据解码后的运动矢量,在解码器重建的图像F'n-1中找到16*16的匹配区域,作为运动补偿的预测P;
5.残差D'与P相加得到重建宏块,所有重建宏块一起得到重建帧F'n;
F'n解码后可以用来显示或作为下一帧的参图像存储。