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

第一我认为解码视频有三个层次:硬解,部分硬件加速(暂时把前两者都视为硬解),软解。针对我说的,先举个例子(当然只 是示例说明下大概的量级,并不太准确,因为乘 累加已经是很多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,效率上的差异,导致消耗电量的差异。

转载于:https://www.cnblogs.com/tonybright/archive/2012/05/14/2500762.html

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

  1. PLDroidPlayer 是 Pili 直播 SDK 的安卓播放器。支持所有直播常用的格式,如:RTMP、HLS、FLV。拥有优秀的功能和特性,如:首屏秒开、追帧优化、丰富的数据和状态回调、硬解软解

    PLDroidPlayer 是 Pili 直播 SDK 的安卓播放器.支持所有直播常用的格式,如:RTMP.HLS.FLV.拥有优秀的功能和特性,如:首屏秒开.追帧优化.丰富的数据和状态回调.硬解软解 ...

  2. VLC和WebRTC等开源库关于硬解软解的策略

    一.移动端OS角度硬解能力支持情况 Android 4.1.2以前:    不支持 4.1.2-5.0     Java侧MediaCodec 5.0以上    Java侧MediaCodec,C侧n ...

  3. 【干货】关于软解(ffmpeg)和硬解(MediaCodec、MediaPlayer)以及底层(OpenMax)的那点事

    现在各种视频软件上都有硬解软解这两个选择,但它们有什么区别呢?用哪个好呢?今天就跟随小编一起了解了解吧. 首先,了解下播放视频的基本流程: 解封装:就是将输入的封装格式的数据,分离成为音频流压缩编码数 ...

  4. 视频解码硬解和软解的区别及如何选择

    视频解码硬解和软解的区别及如何选择 硬解 字面上理解就是用硬件解码.通过显卡的视频加速功能对高清视频进行解码.可以理解为有一个专门的电路板来进行视频的解码工作,是依靠GPU. 调用GPU的专门模块编码 ...

  5. Android视频播放软解与硬解的区别

    https://blog.csdn.net/u010072711/article/details/52413766 硬解,用自带播放器播放,android中的VideoView 软解,使用音视频解码库 ...

  6. [转]video视频解码硬解和软解的区别及如何选择

    如果你认为本系列文章对你有所帮助,请大家有钱的捧个钱场,点击此处赞助,赞助额0.1元起步,多少随意 声明:本文只用于个人学习交流,若不慎造成侵权,请及时联系我,立即予以改正 锋影 email:1741 ...

  7. android播放器和视频拍摄中的硬解和软解以及硬编和软编的区别

    转载 原文地址:https://blog.csdn.net/ltym2014/article/details/82354606 https://blog.csdn.net/lipengshiwo/ar ...

  8. 转 Android视频播放软解与硬解的区别

    硬解,用自带播放器播放,android中的VideoView 软解,使用音视频解码库,比如FFmpeg 一.硬解码 硬解:就是调用GPU的专门模块编码来解,减少CPU运算,对CPU等硬件要求也相对低点 ...

  9. 【视频编码】软解与硬解

    视频解码分为软解和硬解. 软解,即软件解码:即通过软件让CPU来对视频进行解码处理: 硬解,即硬件解码:是将原来全部交由CPU来处理的视频数据的部分交由GPU来做. 所谓"软解"就 ...

  10. 【XBMC教程/kodi】有关XBMC软解、硬解以及外挂播放的详细解答

    来自http://www.hdpfans.com/forum-801-1.html 最近自己打算要做一个带庞大电影库的NAS局域网,配上带安卓系统的投影仪供客人观看无卡顿的高清电影,所以开始研究XBM ...

最新文章

  1. 关肇直 automation lingjunrenwu
  2. gulp-autoprefixer报Promise is not defined错误
  3. @EnableAutoConfiguration注解的实现原理
  4. html native code is rendered from xml configuration
  5. [博客..配置?]博客园美化
  6. linux修改grub权限,linux下肿么修改grub.cfg
  7. 字符设备驱动高级篇2——字符设备驱动注册代码分析
  8. iOS开发中用到的第三方库概览
  9. npm常用命令(扩展中...)
  10. Office12的新文件格式
  11. Spring框架学习笔记06:Spring JdbcTemplate入门
  12. C#AutoResetEvent和ManualResetEvent的区别
  13. pandas读取csv文件数据并对数据分类使用matplotlib画出折线图
  14. vue前端信息详情页模板梳理
  15. win7扫雷逆向调试
  16. Qt使用libvips处理超大图片(GB以上图片)
  17. 南京大学2020计算机考研分数线,南京大学2020考研复试分数线已公布
  18. 关于我国计算机软件著作权保护的调研报告,我国计算机软件著作权保护问题研究...
  19. Altium Designer生成Gerber文件的设置(嘉立创建议 )
  20. 数据通信基础 - 信道特性(奈奎斯特定理、香农定理 )

热门文章

  1. Linux capability详解
  2. 空气质量指数,主要污染物PM10、PM2.5、CO、NO2、SO2详解
  3. MQX4.0:MK60DZ10.h头文件GPIO模块…
  4. 运筹学4个人完成三项工作_【用人话讲运筹学】十一、指派问题
  5. Springmvc 控制器的作用
  6. xp计算机u盘重装系统,u启动一键u盘安装原版XP系统教程_u启动
  7. 花生壳配置代理域名访问内网API服务
  8. SAP中一次性客户及供应商的应用浅晰
  9. APISpace 行驶证OCR API
  10. ThinkPHP5在线问答系统