显然,NVIDIA在GeForce8500/8600中加入H264硬件解码功能相当低调。与此同时,AMD方面的Radeon R600/RV600系列 GPU也在声称加入硬件解码H264和VC1编码高清视频的UVD单元。但显然,这个卖点又要被NVIDIA抢先了(但值得注意的是,AMD Radeon的UVD单元官方表示可以提供对VC1编码的硬件解码,而NVIDIA并不完全支持)。
说到“硬件解码”、Purevideo以及Purevideo HD,显然NVIDIA的定义稍显不明确。在Purevideo时代,NVIDIA似乎也默认它就是对高清视频的硬件解码;而在GeForce8800系列推出时,NVIDIA也将它与PurevideoHD对应。但今天看来,GeForce8800系列对高清视频解码功能上与GeForce7系列并无本质区别。而今天,NVIDIA将Purevideo HD再次搭配给GeForce8500/8600,并明确了H264硬件解码的定义。其中,又有怎样的变化呢?
大家看到,GeForce8500/8600系列的核心中,改进了原有的VP(Video P{rocessor),并增加了BSP Engine(BitStream Processing Engine)的处理单元,而它就是为H264服务的。也正是它让H264解码硬件化落到实处。
从上图大家看到的是H264高清视频处理示意图。蓝色部分过程代表无GPU参与,全部由CPU完成,而绿色的则代表GeForce7和GeForce8500时期,显卡完成的工作。大家可以看到,在GeForce7上,Bitstream处理与InverseTransform两相均由CPU完成,而VP单元完成后两步。GeForce8500/8600将上述两部交给BSP Engine处理,而后面则有新的VP处理。
可是为什么Bitstream过程如此重要?它的“硬件化”为何可以带来如此显著的变化。由于我们对H264编码算法没有太深的研究,只能将官方的叙述和我们简单的理解向大家做简单解释。
在H264的编码过程中,熵编码是编码过程的最后一步,也是非常重要的一步。而在这里,对于解码来说则是第一步需要做的。在H264规范中定义了熵编码来提高编码效率,可分为两种CAVLC和CABAC。前者是对所有的待编码的符号采用统一的可变长编码UVLC,Universal VLC。在解码量化后的差值变化系数则使用自适应变长编码(CAVLC),利用特别的算法,提高压缩比。
而CABAC是要进一步提供更好的压缩效果的算法。编码时首先将语法元素的值从简单的变长编码映射成二进制串(bit String),即二进制化(bit化)。随后通过自适应算法对每一位的值(bin Value)进行编码。与CAVLC相比,CABAC将会让比特率减少10%-15%(上图是CABAC编码过程示意图)。
无论是上述哪种编码,都需要有大量的运算,甚至我们可以看到有专门的硬件CABAC编码器产品单独销售。而对它进行单独解码也不足为奇了。而另一方面我们也看到,采用CABAC算法后,码率会相对更低,但解码消耗的资源则会更大。