码迷,mamicode.com
首页 > 移动开发 > 详细

android中OpenMax的实现【2】AwesomePlayer中openmax的入口

时间:2014-06-26 21:38:45      阅读:283      评论:0      收藏:0      [点我收藏+]

标签:android   class   blog   code   http   tar   

AwesomePlayer 中有个变量 

[cpp] view plaincopy
 
  1. OMXClient mClient;  
让我们看看   OMXClient 
[cpp] view plaincopy
 
  1. class OMXClient {  
  2. public:  
  3.     OMXClient();  
  4.   
  5.     status_t connect();  
  6.     void disconnect();  
  7.   
  8.     sp<IOMX> interface() {  
  9.         return mOMX;  
  10.     }  
  11.   
  12. private:  
  13.     sp<IOMX> mOMX;  
  14.   
  15.     OMXClient(const OMXClient &);  
  16.     OMXClient &operator=(const OMXClient &);  
  17. };  
OMXClient 有个IOMX 的变量 mOMX ,这个就是和OMX服务进行binder通讯的。
在 AwesomePlayer 的构造函数中会调用 
[cpp] view plaincopy
 
  1. CHECK_EQ(mClient.connect(), (status_t)OK);  
[cpp] view plaincopy
 
  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.   
  6.     CHECK(service.get() != NULL);  
  7.   
  8.     mOMX = service->getOMX();  
  9.     CHECK(mOMX.get() != NULL);  
  10.   
  11.     if (!mOMX->livesLocally(NULL /* node */, getpid())) {  
  12.         ALOGI("Using client-side OMX mux.");  
  13.         mOMX = new MuxOMX(mOMX);  
  14.     }  
  15.   
  16.     return OK;  
  17. }  
[cpp] view plaincopy
 
  1. sp<IOMX> MediaPlayerService::getOMX() {  
  2.     Mutex::Autolock autoLock(mLock);  
  3.   
  4.     if (mOMX.get() == NULL) {  
  5.         mOMX = new OMX;  
  6.     }  
  7.   
  8.     return mOMX;  
  9. }  
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服务。
[cpp] view plaincopy
 
  1. sp<IOMX> interface() {  
  2.       return mOMX;  
  3.   }  
[cpp] view plaincopy
 
  1. mAudioSource = OMXCodec::Create(  
  2.                 mClient.interface(), mAudioTrack->getFormat(),  
  3.                 false, // createEncoder  
  4.                 mAudioTrack);  
[cpp] view plaincopy
 
  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的入口,布布扣,bubuko.com

android中OpenMax的实现【2】AwesomePlayer中openmax的入口

标签:android   class   blog   code   http   tar   

原文地址:http://www.cnblogs.com/nsnow/p/3808049.html

(0)
(0)
   
举报
评论 一句话评论(0
登录后才能评论!
© 2014 mamicode.com 版权所有  联系我们:gaon5@hotmail.com
迷上了代码!