AwesomePlayer 中有个变量

  OMXClient mClient;
让我们看看 OMXClient
class OMXClient {public:    OMXClient();    status_t connect();    void disconnect();    sp<IOMX> interface() {        return mOMX;    }private:    sp<IOMX> mOMX;    OMXClient(const OMXClient &);    OMXClient &operator=(const OMXClient &);};
OMXClient 有个IOMX 的变量 mOMX ,这个就是和OMX服务进行binder通讯的。 在AwesomePlayer 的构造函数中会调用
 CHECK_EQ(mClient.connect(), (status_t)OK);
status_t OMXClient::connect() {    sp<IServiceManager> sm = defaultServiceManager();    sp<IBinder> binder = sm->getService(String16("media.player"));    sp<IMediaPlayerService> service = interface_cast<IMediaPlayerService>(binder);    CHECK(service.get() != NULL);    mOMX = service->getOMX();    CHECK(mOMX.get() != NULL);    if (!mOMX->livesLocally(NULL /* node */, getpid())) {        ALOGI("Using client-side OMX mux.");        mOMX = new MuxOMX(mOMX);    }    return OK;}
sp<IOMX> MediaPlayerService::getOMX() {    Mutex::Autolock autoLock(mLock);    if (mOMX.get() == NULL) {        mOMX = new OMX;    }    return mOMX;}

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服务。
  sp<IOMX> interface() {        return mOMX;    }
mAudioSource = OMXCodec::Create(                mClient.interface(), mAudioTrack->getFormat(),                false, // createEncoder                mAudioTrack);
mVideoSource = OMXCodec::Create(            mClient.interface(), mVideoTrack->getFormat(),            false, // createEncoder            mVideoTrack,            NULL, flags, USE_SURFACE_ALLOC ? mNativeWindow : NULL);


更多相关文章

  1. android绘制过程
  2. Android 开机动画源码分析
  3. Android 网络通信框架Volley的简单使用
  4. Android System Server大纲之LightsService
  5. Android startActivityForResult unfortunately 程序名 has stop
  6. Android Binder AIDL解析
  7. Android 使用Ant编译Android 工程
  8. Android Canvas练习(2)自已绘饼图(Pie Chart)

随机推荐

  1. 解决 Android(安卓)模拟器 无法上网问题
  2. Android系统源码极速搜索引擎(OpenGrok)
  3. Android开发环境的安装 Eclipse
  4. Android(安卓)好用插件 / 实用依赖(及时
  5. Android串口开发,基于官方的android-seria
  6. android学习小结2
  7. Android禁止EditText自动弹出软键盘的方
  8. Android(安卓)UI设计的三种常见布局(Linea
  9. Android(安卓)LinearLayout线性布局
  10. content provider