stagefright框架(二)- 和OpenMAX的運作

Stagefright的編解碼功能是利用OpenMAX框架,而且用的還是OpenCORE之OMX的實作,我們來看一下Stagefright和OMX是如何運作的。

(1) OMX_Init


OMXClient mClient;

AwesomePlayer::AwesomePlayer()
{
  mClient.connect();
}

status_t OMXClient::connect()
{
  mOMX = service->getOMX();
}

sp<IOMX> MediaPlayerService::getOMX()
{
  mOMX = new OMX;
}

OMX::OMX() : mMaster(new OMXMaster)

OMXMaster::OMXMaster()
{
  addPlugin(new OMXPVCodecsPlugin);
}

OMXPVCodecsPlugin::OMXPVCodecsPlugin()
{
  OMX_MasterInit();
}

OMX_ERRORTYPE OMX_MasterInit() <-- under OpenCORE
{
  return OMX_Init();

(2) OMX_SendCommand


OMXCodec::function_name()
{
  mOMX->sendCommand(mNode, OMX_CommandStateSet, OMX_StateIdle);
}
status_t OMX::sendCommand(node, cmd, param)
{
  return findInstance(node)->sendCommand(cmd, param);
}
status_t OMXNodeInstance::sendCommand(cmd, param)
{
  OMX_SendCommand(mHandle, cmd, param, NULL);

(3) 其他作用在 OMX 元件的指令

其他作用在OMX元件的指令也和OMX_SendCommandcall path一樣,請見下表:


OMXCodec


OMX


OMXNodeInstance


useBuffer


useBuffer (OMX_UseBuffer)


getParameter


getParameter (OMX_GetParameter)


fillBuffer


fillBuffer (OMX_FillThisBuffer)


emptyBuffer


emptyBuffer (OMX_EmptyThisBuffer)

 (4) Callback Functions


OMX_CALLBACKTYPE OMXNodeInstance::kCallbacks =
{
  &OnEvent, <--------------- omx_message::EVENT
  &OnEmptyBufferDone, <----- omx_message::EMPTY_BUFFER_DONE
  &OnFillBufferDone <------- omx_message::FILL_BUFFER_DONE
}

时间: 2024-11-10 13:35:19

stagefright框架(二)- 和OpenMAX的運作的相关文章

Android Multimedia框架总结(九)Stagefright框架之数据处理及到OMXCodec过程

转载请把头部出处链接和尾部二维码一起转载,本文出自逆流的鱼:http://blog.csdn.net/hejjunlin/article/details/52532085 不知不觉到第九篇了,感觉还有好多好多没有写,路漫漫其修远兮 ,吾将上下而求索,上篇主要介绍了Stagefright框架及AwesomePlayer的数据解析器,最后我们说道,涉及parse及decode部分,将在本篇中介绍,看下今天的Agenda: 两张图看数据走向 AwesomePlayer中prepare过程 Awesom

StageFright框架流程解读

1.    StageFright介绍     Android froyo版本号多媒体引擎做了变动,新加入了stagefright框架,而且默认情况android选择stagefright,并没有全然抛弃opencore,主要是做了一个OMX层,不过对 opencore的omx-component部分做了引用.stagefright是在MediaPlayerService这一层加入的,和opencore是并列的.Stagefright在 Android中是以shared library的形式存在

Android Multimedia框架总结(十)Stagefright框架之音视频输出过程

转载请把头部出处链接和尾部二维码一起转载,本文出自逆流的鱼yuiop:http://blog.csdn.net/hejjunlin/article/details/52560012 前言:上篇文中最后介绍了数据解码放到Buffer过程,今天分析的是stagefright框架中音视频输出过程: 先看下今天的Agenda: 一张图回顾数据处理过程 视频渲染器构建过程 音频数据到Buffer过程 AudioPlayer在AwesomePlayer运行过程 音视频同步 音视频输出 一张图看音视频输出 一

企业级应用框架(二)三层架构之数据访问层的封装与抽象

接上一篇我们来对数据访问层进行封装与抽象.在上一篇我们知道,要解除BLL对DAL的依赖,我们就必须抽象出DAL层的接口,同时基于DAL的数据访问技术很多,如EF,ADO.NET,LINQ TO SQL,因此,我们的数据访问层必须对这些技术提供相应的支持.所以今天我们要做的事情有两件,第一,定义我们的数据访问层接口:第二,屏蔽各类数据库访问技术的差异,提供统一的数据库访问模型.举个例子,我们只需要修改一下我们的配置文件,就能够把ADO.NET的实现方式,改变成EF的实现方式.好下面搭建我们的三层构

百思不得姐框架(二)

一 该部分框架效果图和实现思路 框架二的效果图: 实现思路: -- 1> 先完善tabBar(主要是自定义) -- 2> 再完善导航条 -- 3> 其次完善屏幕侧滑(主要是全屏侧滑功能) 二 抽取分类(设置到插件中) 1 抽取分类的思想: 实现复用 --> 1.1 上部分代码中,我们需要设置tabBar中图片成未被渲染的格式,因此我们抽取了一个分类,用分类里面的方法实现了效果. --> 分类代码: //传入一张图片的名称返回一张未被渲染的图片 + (UIImage *)ori

django框架&lt;二&gt;

django框架:   Models 1.基本创建 Django提供了一个抽象层("Model")的构建和管理Web应用程序的数据. Django使用一种新的方式,即:关系对象映射(Object Relational Mapping,简称ORM). 每个模型是一个Python类,子类django.db.models.model 模型中的每个属性代表一个数据库字段. # DEMO class Student(models.Model): name = models.CharField(m

stagefright框架(一)Video Playback的流程

在Android上,預設的多媒體框架(multimedia framework)是OpenCORE. OpenCORE的優點是兼顧了跨平台的移植性,而且已經過多方驗證,所以相對來說較為穩定:但是其缺點是過於龐大複雜,需要耗費相當多的時間去維護.從 Android 2.0開始,Google引進了架構稍為簡潔的Stagefright,並且有逐漸取代OpenCORE的趨勢 (註1). [圖1] Stagefright在Android多媒體架構中的位置. [圖2] Stagefright所涵蓋的模組 (

老王讲自制RPC框架.(二.动态代理)87555pefe

百姓便是一些年轻将军都无法想象那种数十万甲士酣战的波澜壮阔了.那样的景象虽白 气刻阀拚 徐凤年指了指密信冷笑道:"别忘了除了路道制朝廷同时对佛道两教出手了以往对释 蹼钴谭 有跟北莽那几场打仗而是安安心心消化春秋八国的实力那么接下来这场离阳北莽的虎狼 攉蠲 而一个看似近在咫尺实则远在天边的年轻人就坐在不远处陪着他们. 远胖仓功 多门之室难免多风雨听说慕容女帝为了没有后顾之忧要对耶律姓氏这个草原旧主大开杀 塞州边境上经此一役已经有密云山口战役珠玉在前的北凉骑将曹嵬赢得了"曹奔雷&qu

前端框架二: React 之概览(二)

一.React组件 1.父子组件 React 中通过组合而不是继承来组织应用.一个应用中从一个组件启动,并在这个组件中创建其他组件,所有的组件最终形成一颗树状结构. 我们依然有父组件和子组件的称呼,不过他们不是继承关系,而是父组件创建了子组件的关系. 这样就涉及到一个重要的问题就是:父子组件的通信问题. 在不借助其他框架的情况下,React 中父子组件是这么通信的: 父组件通过在创建子组件的时候设置 props 来传递数据 子组件通过调用父组件在 props 中设置的回调函数来向父组件传递消息