opencore android,stagefright与opencore对比 - Android - 韵寒书香

news/2024/7/4 8:25:45

以mp4decoder为例,大概流程如下:

1 AwesomePlayer::initVideoDecoder()

mVideoSource = OMXCodec::Create(...)

2 OMXCodec::Create()

实际会执行下面代码

#if BUILD_WITH_FULL_STAGEFRIGHT

sp softwareCodec =

InstantiateSoftwareCodec(componentName, source);

#endif

FACTORY_CREATE(MP3Decoder)

FACTORY_CREATE(AMRNBDecoder)

FACTORY_CREATE(AMRWBDecoder)

FACTORY_CREATE(AACDecoder)

FACTORY_CREATE(AVCDecoder)

FACTORY_CREATE(M4vH263Decoder)

FACTORY_CREATE(VorbisDecoder)

FACTORY_CREATE(AMRNBEncoder)

上述decoder里找不到时,会执行如下部分,下面代码才是调到opencore的omx部分

status_t err = omx->allocateNode(componentName, observer, &node);

if (err == OK) {

LOGV("Successfully allocated OMX node '%s'", componentName);

sp codec = new OMXCodec(

omx, node, getComponentQuirks(componentName),

createEncoder, mime, componentName,

source);

observer->setCodec(codec);

err = codec->configureCodec(meta);

if (err == OK) {

return codec;

}

LOGV("Failed to configure codec '%s'", componentName);

}

3 关于read函数

实际read时,先读取数据再调用解码,这一点是与opencore处理机制不同的,如果系统采用软解码,要考虑read加decode作为一个原子执行是否会影响效率,如果decode部分有硬解码则到无妨。

status_t M4vH263Decoder::read(MediaBuffer **out, const ReadOptions *options) {

...

status_t err = mSource->read(&inputBuffer, options);

...

if (PVDecodeVideoFrame(

mHandle, &bitstream, &timestamp, &bufferSize,

&useExtTimestamp,

(uint8_t *)mFrames[mNumSamplesOutput & 0x01]->data())

!= PV_TRUE) {

LOGE("failed to decode video frame.");

inputBuffer->release();

inputBuffer = NULL;

return UNKNOWN_ERROR;

}

...

}


http://www.niftyadmin.cn/n/3575472.html

相关文章

【听】植物知道生命的答案,生命的奇迹探索

植物知道啥生命的答案,一本关于植物探索的书籍,你会发现很多十万个为什么关于植物的秘密都在这里进行了解密,这些都是生命奇迹的探索。达尔文的生物进化论的出现无疑震撼了人们的眼球以及认知,而关于植物的研究,人们也…

安装MySQL和Navicat,并与MyEclipse连接

1.下载安装MySQL 1)到http://dev.mysql.com/downloads/下载MySQL社区版Server,和用于JDBC的Connector。一路默认安装就可以,须要注意的是记住MySQL数据库的username和password。 2)默认安装到C:\Program Files\MySQL或C:\Program …

HarmonyOS内核源码分析,鸿蒙内核源码分析(异常接管篇) | | 中文注解HarmonyOS源码...

为何要有异常接管?拿小孩成长打比方,大人总希望孩子能健康成长,但在成长过程中总会遇到各种各样的问题,树欲静而风不止,成长路上有危险,有时是自己的问题有时是外在环境问题.就像抖音最近的流行口水歌一样,社会很单纯,复杂的是人啊,每次听到都想站起来扭几下.哎!老衲到底做错什…

【听】另一种选择,面对不辛与现实如何脱困

人生不如意,事常八九,而某些重大变故或者事件可能会伴随人的一生,永远走不出的阴影,那么这种情况,我们需要如何脱困,如何才能走出阴影,回归正常的生活,另一种选择,这本书…

vs发布项目webconfig替换语法

关于vs发布项目时webconfig替换语法也是最近才学到的东西,写这篇文章就当是作个备忘录吧,如果能帮助别人能够学习到webconfig如何替换那就再好不过了。 1.认识一下web项目下的web.Debug.config和web.release.config的作用 刚开始学习的时候就没听说过这两…

VS2010读取txt文件在控制台输出中文时出现乱码解决办法

有时我们直接创建的txt文件是以UTF-8的格式存储的, 但是我们的控制台exe程序默认的是ANSI编码模式,于是不适配出现中文乱码的问题 这个时候我们就得该txt的编码方式为ANIS: 在运行在控制台就没出现读取txt中的中文乱码问题了:…

用户登录之后查询id android,Android客户端和服务端如何使用Token和Session

对于初学者来说,对Token和Session的使用难免会限于困境,开发过程中知道有这个东西,但却不知道为什么要用他?更不知道其原理,今天我就带大家一起分析分析这东西。一、我们先解释一下他的含义:1、Token的引入…

【听】离经叛道,如何激发创新能力

离经叛道,找正如书名一样,一些观点看似不合理,又在情理之中,尤其是在作者的阐述之下,教你如何激发创新能力。毫无疑问,规规矩矩,一层不变,这是完全没有创新的可能的,而关…