編輯:關於Android編程
AwesomePlayer 中有個變量
[cpp]
OMXClient mClient;
讓我們看看 OMXClient
[cpp]
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 的構造函數中會調用
[cpp]
CHECK_EQ(mClient.connect(), (status_t)OK);
[cpp]
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;
}
[cpp] view plaincopy
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服務。
[cpp
sp<IOMX> interface() {
return mOMX;
}
[cpp]
mAudioSource = OMXCodec::Create(
mClient.interface(), mAudioTrack->getFormat(),
false, // createEncoder
mAudioTrack);
[cpp]
mVideoSource = OMXCodec::Create(
mClient.interface(), mVideoTrack->getFormat(),
false, // createEncoder
mVideoTrack,
NULL, flags, USE_SURFACE_ALLOC ? mNativeWindow : NULL);
[cpp]
最近公司沒事,研究了下多嵌套滾動組件的事件分發,雖然以前也接觸過,但都是拿網上的用,也是特別簡單的,正好朋友也需要,就研究了下。這個Demo也不是很完善,放上來也是讓各位
Introduction 在Android中, 每個應用程序都運行在自己的進程中,擁有獨立的內存空間。但是有些時候我們的應用程序需要跟其它的應用程序進行通信,這個時候該
這次我們以circular-progress-button開源項目為案例進行分析,這個開源項目裡涉及到Drawable的使用,所以是一個不錯分析案例。一、項目概述這個項目
這是我在 MDCC 上分享的內容(略微改動),也是源碼解析第一期發布時介紹的源碼解析後續會慢慢做的事。從總體設計和原理上對幾個圖片緩存進行對比,沒用到他們的朋友也可以了解