AwesomePlayer 中有个变量

  1. OMXClient mClient;

让我们看看   OMXClient

  1. class OMXClient {
  2. public:
  3. OMXClient();
  4. status_t connect();
  5. void disconnect();
  6. sp<IOMX> interface() {
  7. return mOMX;
  8. }
  9. private:
  10. sp<IOMX> mOMX;
  11. OMXClient(const OMXClient &);
  12. OMXClient &operator=(const OMXClient &);
  13. };

OMXClient 有个IOMX 的变量 mOMX ,这个就是和OMX服务进行binder通讯的。

在 AwesomePlayer 的构造函数中会调用 
  1. CHECK_EQ(mClient.connect(), (status_t)OK);
  1. status_t OMXClient::connect() {
  2. sp<IServiceManager> sm = defaultServiceManager();
  3. sp<IBinder> binder = sm->getService(String16("media.player"));
  4. sp<IMediaPlayerService> service = interface_cast<IMediaPlayerService>(binder);
  5. CHECK(service.get() != NULL);
  6. mOMX = service->getOMX();
  7. CHECK(mOMX.get() != NULL);
  8. if (!mOMX->livesLocally(NULL /* node */, getpid())) {
  9. ALOGI("Using client-side OMX mux.");
  10. mOMX = new MuxOMX(mOMX);
  11. }
  12. return OK;
  13. }
  1. sp<IOMX> MediaPlayerService::getOMX() {
  2. Mutex::Autolock autoLock(mLock);
  3. if (mOMX.get() == NULL) {
  4. mOMX = new OMX;
  5. }
  6. return mOMX;
  7. }

OMXClient::connect函数是通过binder机制 获得到MediaPlayerService,然后通过MediaPlayerService来创建OMX的实例。这样OMXClient就获得到了OMX的入口,接下来就可以通过binder机制来获得OMX提供的服务。

也就是说OMXClient 是android中 openmax 的入口。
 
在创建音视频解码mVideoSource、mAudioSource的时候会把OMXClient中的sp<IOMX> mOMX的实例 传给mVideoSource、mAudioSource来共享使用这个OMX的入口。
也就是说一个AwesomePlayer对应着 一个IOMX 变量,AwesomePlayer中的音视频解码器共用这个IOMX变量来获得OMX服务。
  1. sp<IOMX> interface() {
  2. return mOMX;
  3. }
  1. mAudioSource = OMXCodec::Create(
  2. mClient.interface(), mAudioTrack->getFormat(),
  3. false, // createEncoder
  4. mAudioTrack);
  1. mVideoSource = OMXCodec::Create(
  2. mClient.interface(), mVideoTrack->getFormat(),
  3. false, // createEncoder
  4. mVideoTrack,
  5. NULL, flags, USE_SURFACE_ALLOC ? mNativeWindow : NULL);

android中OpenMax的实现【2】AwesomePlayer中openmax的入口的更多相关文章

  1. Android 自定义View及其在布局文件中的使用示例

    前言: 尽管Android已经为我们提供了一套丰富的控件,如:Button,ImageView,TextView,EditText等众多控件,但是,有时候在项目开发过程中,还是需要开发者自定义一些需要 ...

  2. Android应用项目中BaseAdapter、SimpleAdapter和ArrayAdapter中的三种适配器

    一.写在前面: 本次我们来讲解一下Android应用中三个适配器:BaseAdapter.SimpleAdapter和ArrayAdapter.其中常见的是BaseAdapter,也是个人推荐使用的适 ...

  3. Android Studio 2.2.2导入Eclipse中创建的项目

    最近随视频教程学习Android,原本都是用Adt写Android程序,中途教程换成了Android Studio,于是我自己下了android studio 2.2.2安装好,并下载好sdk,也跟着 ...

  4. Android 自定义View及其在布局文件中的使用示例(三):结合Android 4.4.2_r1源码分析onMeasure过程

    转载请注明出处 http://www.cnblogs.com/crashmaker/p/3549365.html From crash_coder linguowu linguowu0622@gami ...

  5. Android 自定义View及其在布局文件中的使用示例(二)

    转载请注明出处 http://www.cnblogs.com/crashmaker/p/3530213.html From crash_coder linguowu linguowu0622@gami ...

  6. Android之使用Volley框架在ListView中加载大量图片

    1.listview 中的条目要用 Volley 中的 NetworkImageView,如果直接用ImageView也可以,但是要在getView方法中使用url地址设置为imageView的tag ...

  7. Android -如何在底部左对齐,中对齐,右对齐三个按钮图片 巧用Relative Layout

    Relative Layout 不仅可以指定同级的元素之间的位置关系(e.g. layout_toLeftOf) 还可以指定子元素与父元素之间的位置关系(e.g. layout_alignParent ...

  8. Android开发UI之在子线程中更新UI

    转自第一行代码-Android Android是不允许在子线程中进行UI操作的.在子线程中去执行耗时操作,然后根据任务的执行结果来更新相应的UI控件,需要用到Android提供的异步消息处理机制. 代 ...

  9. Android : 如何在WebView显示的页面中查找内容

    Android : 如何在WebView显示的页面中查找内容 Author : Aoyousatuo Zhao http://blog.sina.com.cn/aoyousatuo WebView是A ...

随机推荐

  1. TCP基础知识(一)简介与数据包

    TCP详解(1):简介与数据包 TCP(Transmission Control Protocol 传输控制协议)是一种面向连接的.可靠的.基于字节流的传输层通信协议 应用层向TCP层发送用于网间传输 ...

  2. 02_linux常用指令

    [用户管理] 查看当前用户     whoami 新建用户     sudo adduser higginCui 查看新建用户     ls /home 使用新建用户登录     su -l higg ...

  3. 解决MFC对话框类不能建立成功的方法(出现unable to open the files XX for class XX)

    原文:http://blog.163.com/wangqi1973_off/blog/static/131034571201011885546230 为新加的对话框资源添加新类,类名取做CColorV ...

  4. 使用Charles抓包获取API

    在进行程序的开发之前,我们需要获得物流唐山APP的API,在这里我推荐大家使用Charles抓取数据包获得API.以下是Charles说明: Charles 是在 Mac 下常用的网络封包截取工具,在 ...

  5. python wsgi PEP333 中文翻译

    PEP 333 中文翻译 首先说明一下,本人不是专门翻译的,英文水平也不敢拿来献丑.只是这是两年前用python的时候为了自己学习方便而翻译的,记录着笔记自己看看而已.最近翻出来看看觉得还是放出来吧. ...

  6. shell编程报错:“syntax error near unexpected token `”

    今天写了个shell脚本,在自己机器上运行正常,给同事,运行报错syntax error near unexpected token `,左看右看shell脚本没有问题,没有办法google搜索,发现 ...

  7. C# 使用 Invoke 实现函数的白盒 UT 测试

    公有方法可以直接调用,但是一些非公开的方法,在覆盖率测试的时候也需要覆盖,可以使用 Invoke 来调用. 调用方法如下,其中 this 可以改为被调用的方法所属的类名,通过 BindingFlags ...

  8. IIS 无法安装URL重写模块的解决办法 UrlReWrite (.NET`SQL技术交流 群号206656202)

    下载和安装URL Rewrite IIS8默认是没有安装URL重写工具的,必须要自己下载安装. 如果IIS上默认有安装Web平台安装程序,我们可以使用平台自动安装URL Rewrite重写工具,打开I ...

  9. JIAVA知识点整理

    Java具有垃圾回收机制,程序退出之后,使用的所有内存全部都将被释放,如要保存数据你就要建立文件,因为当保存时是保存在运行内存中的. int 有返回值void 不需要返回值 1.判断语句if else ...

  10. 【Leetcode】【Medium】Unique Binary Search Trees

    Given n, how many structurally unique BST's (binary search trees) that store values 1...n? For examp ...