全部博文(668)
分类:
2009-08-14 10:52:34
③ Intra宏块变换、量化/反量化、反变换
图像Intra块的变换与量化一般是放置在一起的。变换采用离散余弦变换(DCT),量化采用H.263的均匀量化。并且量化采取的是查表、移位的方式,从而避免了除法。实现该功能的函数是MBTransQuantIntra(),其代码如下。
上述程序实现宏块(包括一个16 16的亮度块,两个8 8的色度块)的变换与量化处理。首先扩展图像为16位,为DCT做数据源,接着做变换和量化。最后为保证与解码图像一致,做反DCT和反量化,将这些重建值更新到编码图像。
④ Inter宏块变换、量化/反量化、反变换
Inter块的处理与Intra块基本相同,只是根据CBP编码模式决定哪些块的重建值更新编码图像。实现函数为MBTransQuantInter(),其代码实现如下。
上述代码实现Inter宏块的变换与量化处理,需特别注意CBP的获取与应用。
⑤ 变换、量化后的系数做VLC熵编码
对于Inter宏块编码,首先写mcbpc、cbpy、MV,最后写宏块系数。对于Intra宏块编码,首先写mcbpc、AC预测方向、cbpy,最后写宏块系数。对于图像或图像差值做变换、量化/反量化、反变换、编码等底层核心模块,为了提高效率,一般要汇编优化、改写。在后面的两节中,分别介绍采用MMX/SSE 2和DM642两个平台优化核心模块。这也符合视频编码算法开发应用的思路:框架用C语言编程、核心模块用汇编优化。
3)XviD 销毁编码器
销毁编码器实例对应于创建编码器实例的工作,即把所有申请的内存释放。