|
而在H.264中,e,g,p和r采用下面公式计算。
e = ( b + h + 1 ) >> 1
g = ( b + m + 1 ) >> 1
p = ( h + t + 1 ) >> 1
r = ( m + t + 1 ) >> 1
2.1.1.6. 变换和反变换
AVS-M和H.264使用了类似的整数DCT变换,需要注意的是色度方面。在AVS-M中,色度使用了和亮度相同的变换方法,而H.264中对色度的DC分量又进行了一次变换。
1.1.2.1 量化和反量化
AVS-M和H.264使用了类似的量化方法,都是使用了查表、乘法和移位,而避免了除法。需要注意的是AVS-M中要对量度量化参数做一次映射来做为色度的量化参数。
2.1.1.7. 变长编码
AVS-M使用了基于上下文的多阶哥仑布码,而H.264有专门的CAVLC或CABAC编码方式。需要注意的是在AVS-M中对帧内预测增加了一种“直接”模式,即所有4x4块都使用预测模式。所以我们在变长编码时,要先判断“直接”模式是否出现,然后再进行相应的处理。
2.1.1.8. 环路滤波
AVS-M和H.264中都有环路滤波,这可以显著减少块效应,提高视觉质量。它们的具体实现是不同的,总体来说AVS-M要比H.264简化。
2.1.1.9. 调试
在调试过程中,我们使用了比较法。就是从编码器端将每帧的预测值和残差存到一个文件中,然后使用标准的解码器进行解码,并在解码的同时比较预测值和残差,然后确定出错的宏块,进行调试。这样通过比较编码器端的重建图像和解码器端的输出图像,从而保证的编码器的正确性。
2.1.2. 优化
视频编码需要消耗大量的计算资源,如果不针对特殊平台进行优化就很难满足实时编码的要求。本项目采用的硬件平台是Intel的Xeon系列,它具有MMX,SSE,SSE2等加速指令集。x264本身已经针对MMX和SSE指令集进行了优化,鉴于AVS-M与H.264的相似性,针对H.264的优化策略应该多数多能应用于AVS-M标准上。因为在相同的输入下优化和不优化的编码器所产生的码流应该二进制相等,因此在开发过程中采用了在相同输入的前提下,比较不优化与优化两个版本输出的码流是否是二进制相等,以确定的那些优化模块是AVS-M与H.264能共用的。具体比较时采用二分法以加快比较的速度——先屏蔽一半的优化模块,然后比较开启优化模块与关闭优化模块时产生的码流是否相等,如果相等则当前开启的优化模块为AVS-M与H.264能共用的,如果不等则缩小范围继续比较,直道能确定每一个优化模块。经过上述比较之后,最终确定只有四个优化模块二者不能共用,其他的模块两者都能共用,其中两个不能共用的模块可以通过修改C代码解决,另两个需要修改MMX/SSE汇编代码。
2.1.3. 测试
对音视频的编解码效果的对比分析主要基于两个方面——客观指标和主观感受。当前,已经有不少针对AVS-M与H.264的基于客观指标(PSNR)的对比测试了,本文没有必要再次重复进行这些测试,本文将就二者在实时编码条件下的观众主观感受进行对比测试。测试主要以观众在观看经过实时编码处理后的音视频时是否能感觉到有明显的失真现象为依据。考察分四个方面,即视频的清晰程度和连贯程度及音频的清晰程度和连贯程度,每个方面根据观众的实际感受进行评分,评分的标准如下表所示:
|