2.source 主要是和協議打交道,demux 分解容器部分,大多數的容器格式的分解是不需要通過硬體來支援。只是ts流這種格式最可能用到硬體的支援。因為ts格式比較特殊,單包的大小太小了,只有188位元組。所以也是為什麼現在常見的解碼晶元都會提供硬體ts demux 的支援。
所以openmax 中硬體抽象的編譯碼是最為常用的,也是為什麼android中只用它來抽象code。
2.omxcodec通過iomx 依賴binder機制 獲得 omx服務,omx服務 才是openmax 在android中 實現。
3. omx把軟編譯碼和硬體編譯碼統一看作外掛程式的形式管理起來。
**分析:
awesomeplayer 中有個變數
[cpp]view plain
copy
print?
omxclient mclient;
omxclient mclient;
讓我們看看 omxclient
[cpp]view plain
copy
print?
class omxclient
private:
spmomx;
omxclient(const omxclient &);
omxclient &operator=(const omxclient &);
};
class omxclient
private:
spmomx;
omxclient(const omxclient &);
omxclient &operator=(const omxclient &);
};
omxclient 有個iomx 的變數 momx ,這個就是和omx服務進行binder通訊的。
在 awesomeplayer 的建構函式中會呼叫
[cpp]view plain
copy
print?
check_eq(mclient.connect(), (status_t)ok);
check_eq(mclient.connect(), (status_t)ok);
[cpp]view plain
copy
print?
status_t omxclient::connect()
return ok;
}
status_t omxclient::connect()
return ok;
}
[cpp]view plain
copy
print?
spmediaplayerservice::getomx()
return momx;
}
spmediaplayerservice::getomx()
return momx;
}
omxclient::connect函式是通過binder機制 獲得到mediaplayerservice,然後通過mediaplayerservice來建立omx的例項。這樣omxclient就獲得到了omx的入口,接下來
就可以通過binder機制來獲得omx提供的服務。
也就是說omxclient 是android中 openmax 的入口。
也就是說乙個
awesomeplayer對應著 乙個iomx 變數,
[cpp]view plain
copy
print?
spinte***ce()
spinte***ce()
[cpp]view plain
copy
print?
maudiosource = omxcodec::create(
mclient.inte***ce(), maudiotrack->getformat(),
false, // createencoder
maudiotrack);
maudiosource = omxcodec::create(
mclient.inte***ce(), maudiotrack->getformat(),
false, // createencoder
maudiotrack);
[cpp]view plain
copy
print?
mvideosource = omxcodec::create(
mclient.inte***ce(), mvideotrack->getformat(),
false, // createencoder
mvideotrack,
null, flags, use_su***ce_alloc ? mnativewindow : null);
mvideosource = omxcodec::create(
mclient.inte***ce(), mvideotrack->getformat(),
false, // createencoder
mvideotrack,
null, flags, use_su***ce_alloc ? mnativewindow : null);
[cpp]view plain
copy
print?
OpenMax 資料總結
最近在研究android 上的硬解,主要是了解openmax 的一些介面和呼叫時序,研究的過程中參考了以下資料,醉月的blog中opencore and omx core component interaction 一 二 鏈結,醉月翻譯的比較好,呼叫流程寫的很詳細,雖然寫的是opencore呼叫o...
OpenMax的介面與實現
openmax il層的介面定義由若干個標頭檔案組成,這也是實現它需要實現的內容,它們的基本描述如下所示。omx types.h openmax il的資料型別定義 omx core.h openmax il核心的api omx other.h 其他資料結構 包括a v 同步 omx index.h...
android 中layout weight的作用
layout weight 用於給乙個線性布局中的諸多檢視的重要度賦值。所有的檢視都有乙個layout weight值,預設為零,意思是需要顯示多大的檢視就佔據多大的螢幕空 間。若賦乙個高於零的值,則將父檢視中的可 用空間分割,分割大小具體取決於每乙個檢視layout weight 值以及該值在當前...