zoukankan      html  css  js  c++  java
  • android中OpenMax的实现【2】AwesomePlayer中openmax的入口

    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);  
  • 相关阅读:
    DOS批处理中%cd%和%~dp0的区别
    DIH处理包含回车符换行符html标签内容的文本
    国内可用免费语料库(已经整理过,凡没有标注不可用的链接均可用)
    TextRank算法提取关键词的Java实现
    贝叶斯推断及其互联网应用(三):拼写检查
    朴素贝叶斯分类器的应用
    TF-IDF与余弦相似性的应用(三):自动摘要
    TF-IDF与余弦相似性的应用(二):找出相似文章
    TF-IDF与余弦相似性的应用(一):自动提取关键词
    搜索引擎与网页文本分词的原理
  • 原文地址:https://www.cnblogs.com/nsnow/p/3808049.html
Copyright © 2011-2022 走看看