Android中软解码和硬解码的优先级

我们先来看一下Android系统中解码器的命名,软解码器通常是以OMX.google开头的。硬解码器通常是以OMX.[hardware_vendor]开头的,比如TI的解码器是以OMX.TI开头的。当然还有一些不遵守这个命名规范的,不以OMX.开头的,那也会被认为是软解码器。

判断规则见frameworks/av/media/libstagefright/OMXCodec.cpp:

static bool IsSoftwareCodec(const char *componentName) {
if (!strncmp("OMX.google.", componentName, 11)) {
return true;
}

if (!strncmp("OMX.", componentName, 4)) {
return false;
}

return true;
}

实际上系统中存在的解码器可以很多,但能够被应用使用的解码器是根据配置来的,即/system/etc/media_codecc.xml。这个文件一般由硬件或者系统的生产厂家在build整个系统的时候提供,一般是保存在代码的device/[company]/[codename]目录下的,例如device/samsung/tuna/media_codecs.xml。这个文件配置了系统中有哪些可用的codec以及,这些codec对应的媒体文件类型。在这个文件里面,系统里面提供的软硬codec都需要被列出来。

也就是说,如果系统里面实际上包含了某个codec,但是并没有被配置在这个文件里,那么应用程序也无法使用到!

在这里配置文件里面,如果出现多个codec对应同样类型的媒体格式的时候,这些codec都会被保留起来。当系统使用的时候,将后选择第一个匹配的codec。除非是指明了要软解码还是硬解码,但是Android的framework层为上层提供服务的AwesomePlayer中在处理音频和视频的时候,对到底是选择软解还是硬解的参数没有设置。所以虽然底层是支持选择的,但是对于上层使用MediaPlayer的Java程序来说,还是只能接受默认的codec选取规则。

但是Android提供的命令行程序/system/bin/stagefright在播放音频文件的时候,倒是可以根据参数来选择到底使用软解码还是硬解码,但是该工具只支持播放音频,不支持播放视频。

一般来说,如果系统里面有对应媒体的硬件解码器的话,系统开发人员应该是会配置在media_codecs.xml中,所以大多数情况下,如果有硬件解码器,那么我们总是会使用到硬件解码器。极少数情况下,硬件解码器存在,但不配置,我猜测只可能是这个硬解码器还有bug,暂时还不适合发布。

转载自:http://blog.chinaunix.net/xmlrpc.php?r=blog/article&uid=686647&id=3979372

时间: 2025-01-23 22:57:45

Android中软解码和硬解码的优先级的相关文章

Word中软回车和硬回车

一.word中硬回车(enter)与软回车(shift+enter). 在两个硬回车之间的文字自成一个段落,可以对它单独设置段落标记而不用担心其他段落受到影响.这也是我们习惯用硬回车的原因:排版方便.但是硬回车也给我们带来了麻烦.你如果是网页设计者,或者是论坛游侠,一定有这样的经历:当你打算换行时,换出的行却实在不能恭维,行间距太大了!其实这和硬回车的原理是一样的,只不过在word等文本编辑器中没有显示出它的"本来面目".不过这样的排版的确造成了不小的困难,这时我们就得请出硬回车的兄弟

ffmpeg- IOS VideoToolbox硬解码

问题描述 IOS VideoToolbox硬解码 VideoToolbox 硬解码 结合FFMpeg来使用,来做视频实时预览, FFMpeg的库别人已经弄好了,我现在要把它传的H.264的数据进行硬解码来播放出来,求大神指教,在线等 急急急! 解决方案 ios硬解码 解决方案二: 这是一份demo,可以参考一下:http://download.csdn.net/detail/u013346305/9016225 解决方案三: 你好,这份demo你搞懂了么

Android手机万能视频播放器VPlayer发新版支持硬解码

500万,付费用户超过10万.近日,VPlayer时隔6个月发布最新版本,发布最新版本,并推出中文品牌VPlayer,其软解码超强视频播放能力用户已经有目共睹,现在VPlayer又推出了一个杀手级的功能--硬解码.接下来让小编带大家测试一下这款软件.新版本颠覆了原有的UI设计以及操作流程,但是依然保持了它特有的风格:简洁易用的UI界面,强大播放处理能力,国内免费并且场景承诺绝对没有广告.新版中清新的logo 以及 android 4.0风格的UI操作上面设计非常人性化,启动后直接是视频文件夹目录

Gstreamer Android h264硬解码

问题描述 Gstreamer Android h264硬解码 最近在使用Gstreamer来实验Android平台的音视频接收,视频编码格式为H264,但是Gstreamer使用软解码效果不是很有,有马赛克的情况出现,不知道哪位大神知道Gstreamer是否提供Android平台的硬解码呢?如果提供,应该怎么办呢,希望能提供一点思路 解决方案 http://www.rosoo.net/a/201106/14633.htmlhttp://blog.csdn.net/sakulafly/articl

PostgreSQL 用CPU "硬解码" 提升1倍 数值运算能力 助力金融大数据量计算

PostgreSQL 支持的数字类型包括整型,浮点,以及PG自己实现的numeric数据类型. src/backend/utils/adt/numeric.c src/backend/utils/adt/float.c numeric可以存储非常大的数字,超过2^17次方个数字长度.提升了精度的同时,也带来了性能的损耗,不能充分利用CPU 的 "硬解码"能力. typedef struct NumericVar { int ndigits; / # of digits in digit

Android中使用SearchView时软键盘不支持actionSearch的问题

变态问题常有,今年特别多,,, - - # 今天遇到的这个非处理不可,不然没法在HTC One S使用SearchView,其软键盘不支持action设置. 问题设备: HTC One S searchable.xml <searchable xmlns:android="http://schemas.android.com/apk/res/android" android:label="@string/search_label" android:hint=&

PHP中的UNICODE 编码与解码

本篇文章是对PHP中的UNICODE 编码与解码进行了详细的分析介绍,需要的朋友参考下   方法一: 复制代码 代码如下: <?php function unicode_encode($name) { $name = iconv('UTF-8', 'UCS-2', $name); $len = strlen($name); $str = ''; for ($i = 0; $i < $len - 1; $i = $i + 2) { $c = $name[$i]; $c2 = $name[$i +

Android编程中软键盘基本用法分析_Android

本文实例讲述了Android编程中软键盘基本用法.分享给大家供大家参考,具体如下: 调用下面代码:(第一次调用显示,再次调用则隐藏,如此反复),this指activity InputMethodManager imm = (InputMethodManager)this.getSystemService(Context.INPUT_METHOD_SERVICE); imm.toggleSoftInput(0, InputMethodManager.HIDE_NOT_ALWAYS); imm.sh

ios-iOS 视频开发硬编码和硬解码

问题描述 iOS 视频开发硬编码和硬解码 最近在做视频的硬编码和硬解码.就像是视频通话,有经验的朋友请指教一下.本人绝对知恩图报,懂味的谢谢 解决方案 参考这几个资源http://download.csdn.net/detail/linux_vae/9283241http://download.csdn.net/detail/hulianchuangcai/9316961http://download.csdn.net/download/dongdongzh/9004185 解决方案二: htt