2001年,JVT(Joint Video Team)成立,H.26L和AVC以及H.264是一个东西。
图中,ME/MC(运动估计、运动补偿);暂时不知道T、Q是什么……
下面是白皮书的部分译文,水平有限,大概是这个意思吧~~~~
Encoder (forward path):
输入的Fn帧是当前准备编码的。帧是以宏块为单位处理的,宏块对应原始图像中16x16的像素。宏块编码可以为内部或外部模式。在任意一种情况中,预测宏块P基于重建帧生成。在内部模式中,P从当前帧n的编解码、重建后的样本中生成,图中的uF’n是没有过滤的P的样本。在外部模式中,P是由运动补偿预测从一个或多个相关帧生成的。在图片中,相关帧就是以前编码过的帧,F’n-1。
当前宏块减去预测P来记录差异的宏块Dn。为了得到X,使用一套量化转换系数来转换宏块。这些系数重新排列以及熵编码过。解码宏块时是需要熵编码系数和其他信息(比如压缩码流中宏块预测模式下的量化步长,描述运动补偿后宏块的运动矢量信息等等)。码流在NAL(Network Abstraction Layer)层传输或存储。
Encoder (reconstruction path):
量化宏块参数X是为了从Dn重建Fn’而生成。参数X经过重新缩放的(Q-1)和逆变换的(T-1)来产生一个不同的宏块Dn’。这和原来的区别宏块Dn不一样,量化过程导致失真,所以Dn’是Dn的歪曲版本。
预测宏块P加上Dn’,生成重建宏块uFn’(一个原宏块的歪曲版本)。一个过滤器用来减少块歪曲,最后得到重建的帧。
Decoder:
解码器从NAL收到一个压缩的比特流。基本数据经过熵解码,然后记录生成一套量化的参数X。X经过缩放和逆变换给出Dn’(这和编码器图中的Dn’相同)。用解码比特流的头信息,解码器生成一个预测宏块P,和编码器产生的P一样。P加上Dn’,得到uFn’,再经过过滤器得到宏块Fn’。
必须了解编码器中重建路径的目的,是为了保证编码器和解码器都用同样的帧来创建预测P。如果没有这个过程,预测P在编码器和解码器将不能一致,导致错误的增多或者帧在两者之间漂移。
心得: 白皮书很短,但是非常重要,特别是那个编解码的图。首先要记住编解码的过程,以及内外部模式的区别,还有重建路径的作用。 总体而言,编码的时候不是整张图都要编码,而是编码的帧间的差异部分,内外部模式只是用的P帧不同,考虑代码实现的话,应该是一个需要全局储存上次处理的结果,一个只需要多跑一个流程。 协议只规定了解码器的详细说明,而实际的编码器可以自行定义,但是从编码器应该能生成重建帧,与解码器生成的重建帧应该完全一样,否则就是编码有问题。
现在理解的还不深入,待今后补充。