科普硬解,软解,gpu,dsp等等的关系

时间:2023-01-31 21:38:44

看了一篇不错的文章,对多媒体解码进行了科普,见下文:

第一我认为解码视频有三个层次:硬解,部分硬件加速(暂时把前两者都视为硬解),软解。针对我说的,先举个例子(当然只 是示例说明下大概的量级,并不太准确,因为乘 累加已经是很多CPU的基本指令了,而且实际的 编解码算法操作也完全不同)

比如某种视频解码算法,每次的运算是: OUT = ((A*B+C)*D+E)*F+G

假设一个没有乘法指令的CPU要执行这个算法, 一般会 1.程序会写一个循环,不停的移位,然后做加法 ,实现A*B 2.结果加C 3.重复上面的完成后面的乘法和加法 没有乘法的CPU执行第一步,需要执行几十 条指令,优化乘法算法之后会好一些,但还是很 慢。 你可以理解这种方式是所谓最慢的“软解”

假设某个CPU内部加了多媒体加速单元,里面的 乘法器可以执行乘法指令,则 1.直接算A*B 2.结果加C 3.重复上面的完成后面的乘法和加法 假设这条是单周期乘法,第一步只需要一条指令 一个时钟周期,那么这个示例算法就比第一种快 一个数量级了

再假设,有一个DSP,支持乘累加指令,可以直 接算A*B+C这种操作 1.直接算A*B+C 2.重复上面的完成后面的乘累加 可以看到,用这种方式,只需要三条指令就能做 完示例算法,比上面只有乘法的方法快一倍

再假设,有一个硬件电路,能够直接接受ABCDE FG输入,一步算出OUT = ((A*B+C)*D+E)*F+G 1.算出结果,然后,没有然后了 这种方式是最快的,这个是理论上的硬件解码

之前说了,理论上的硬件解码速度快,面积和功 耗成本也最少,可是灵活性太差 如果某一天,一种新的编码诞生了,需要算OUT = (A*B+C)*(D*E+F)+G 对于DSP来说,只需要换一下指令的源操作数, 还是可以通过三条成累加实现,但上述最后一种 方法的硬件电路就废了。

SOC层面上的任何一件事情,都需要做到软硬件配合
—硬件上选择性能合适成本合适的DSP<-这里的P指 的是processor,是一个处理器,有自己的指令 集 
—软件上,把常用的解码算法程序,编译成DSP支 持的指令,并优化得到最好的性能和code density(高端应用不太关注后者) 这样就可以发挥出“硬解”的真正性能了

我们手机上说的硬解,应该是以下两种 
1.ARM/MIPS在CPU里面附带多媒体加速单元, 或协处理器 这个比较典型的就是arm v7架构里面的neon, 能够支持高级SIMD和浮点运算指令(选配的,te gra2就没有),这个可以理解伪部分硬件加速
或者
2.TI/NV/高通等等厂商在做soc的时候,集成的GPU或者DSP或者其它什么多媒体加速单元 支持通用的或者各家自己的指令集或者接口,这个可以理解为真正的硬解。

视频解码任务的特点是,它没有明显的先后关系,也没有条件判断,比如处 理一帧的画面,这么多像素点,可以一起解码,不同 的像素点之间没有先后关系。具有这种特点的任务一 般是科学计算、信号处理或者多媒体。执行多媒体任 务,处理器需要有强大的并行能力。硬件上可以专门 针对某种解码算法写单独的硬件ASIC逻辑,不需要将 解码算法分解成加减乘除等运算,速度最快代价最小 ,但是没有通用性。

常用方法是采用数字信号处理器(DSP)。DSP和CP U一样,执行接收到的指令,但相比于偏向于控制的 CPU的指令,DSP指令更偏重于算术运算,支持的数 据宽度更大,运算更复杂。软件将常见的编解码算法 分解成DSP支持的运算,然后通过DSP执行。DSP的 常用技术有SIMD(单指令多数据,比如“一次加16个 数据的加法”,这样就可以一次处理16个像素点), VLIW(超长指令字,一条指令包含可以并行执行的 多次运算)等等。GPU就是一种典型的DSP,比如N V的GPU内置了几十上百个处理单元,能够并行处理 大量的图形图像数据,在这种任务上的性能要高于C PU。

为了增强CPU对于大数据量的并行任务的处理能力, 现在流行在处理器里面增加协处理器接口,可以理解 为内部的一个协助CPU的小单元。协处理器执行浮点 计算和SIMD计算指令,能够部分增强多媒体的性能 。这个接口是CPU内部的接口,不在外部总线上,因 此协处理器算CPU内部单元。ARM的NEON就是协处 理器。 

至于软件方面,官方为了用户更好的体验,一 般都做了很多限制。 而用户可以下载很多第三方播放器,这些播放器 听朋友说大都是调用系统的解码方案,所以播放 方面没有啥突破,基本和官方播放器差不多。 而少数播放器,开发者貌似重新写了驱动,调用自 己的解码方案,可以做到突破官方播放器的限制 ,达到硬件能支持什么就能播放什么的程度。

解码芯片方面拿galaxy s举例,不是每台蜂鸟都能1080P,Galaxy S系列使用的硬解码模块叫VX D370,苹果3GS当时也用的和Galaxy S一样构架 的处理器,只是经过苹果自己改造,硬解码模块 也改成了VXD375。 记得当时苹果3GS官方对视频限制很大,但有人 越狱用第三方软件测试1080P 30mbps High@4.1 流畅播放。 Galaxy S系各种马甲产品,还存在有的能放10 80P有的不能放,可能是因为C110、C111里面 的VXD型号不同。拆机发现任何采用c110的蜂鸟不能支持到1080p最高的HP L5.1。

PowerVR VXD370 supports up to 1080i/1080p and 2048x1024 resolutions and may be config ured to support either single streams or up to four multiple streams. The decoder supports t he wide range of decode standards including: H.264 (to High Profile), WMV9 (to Main profile) , VC1 (to Advanced profile), MPEG-2 (Main prof ile), MPEG-4 (to Advanced simple profile), and JPEG. VXD370 can be configured with any subs et of these standards, enabling effective mana gement of codec royalty costs.

 

软件优化提提diceplayer,可以说发挥了硬解最大的潜力,特别针对主流机型写了驱动
Supported devices 
* Honeycomb tables(TF101,GT10.1,Iconia500) : 720p High@4.1 ( no weighted prediction ) * Samsung Galaxy S2 : 1080p H.264 high@5.1/MPEG-4,1080i AVCHD MTS 
* Samsung Galaxy S and variants : 720p H.264 High@5.1 
* Samsung Galaxy Tab(7') : 1080p H.264 High @5.1. 1080i have interlace artifacts. 
* Samsung Galaxy Player (YP-GB1) : 720p H.26 4 High@5.1 
* HTC Nexus-1,Desire and QSD8250 baesd dev ices : 720p H.264 High@3.1 => May need libOmxVdec.so patch.
* HTC Sensation,Evo 4G+.Evo 3D : 720p High@ 5.1/1080p High@5.1(some 1080p files have sh uttering) 
* HTC Desire HD,ThunderBolt : 720p High@3.1 /4.0(some Level 4.0 file have shutter problem) 
* Toshiba TG-03 and many japaneses vendors' QSD8250 baed devices : 720p H.264 High@3.1 => May need libOmxVdec.so patch. 
* Dell Streak,Venue : 720p H.264 High@3.1 => May need libOmxVdec.so patch.
* SonyErricson Xperia Arc,Acro : 720p High@3. 1/4.0(some Level 4.0 file have shutter problem ) 
* Motolora Defy : 720p capable but Gingerbre ad required. 
* LG Optimus 2x,Moto Atrix : video capability depends on your firmware. Limitations
* Video capability depends on your devices H W video decodes' capability. 
* Some devices(Moto Defy, Galaxy S/Tab) need gingerbread update.
* Tegra 2 based devices : H.264 High@4.1 ( no weighted prediction )

 

硬解的部分误区:
1,不是系统播放器支持播放rmvb就叫硬解。比如盖世兔的国行版本。华为的c8650部分rom支持rmvb硬解。
2,有些名义上的硬解利用到了部分硬件加速特性。比如联想的神秘力量,个人判断是工程师特别针对dsp写了驱动并内置于system分区,位于/system/lib部分。

而软解,我们可以列举rmvb,目前还没有哪款手机特配单独解码芯片支持rmvb硬解(寨板不一样),所以解码rmvb可以采用两种方式,一种是利用到部分硬件加速,条件有二:一是处理器支持neon加速,二是软件编写驱动(最优算法),调用硬件加速。常见的diceplayer对rmvb支持极差,mobo最好!
另一种方式是纯粹靠cpu去运算,可能有算法优化,但是没利用到neon,效率上的差异,导致消耗电量的差异。