OpenMAL IL中一個組件的結(jié)構(gòu)如圖18-5所示。
圖18-5 OpenMAL IL中一個組件的結(jié)構(gòu)
組件的功能和其定義的端口類型密切相關(guān),通常情況下:只有一個輸出端口的,為Source組件;只有一個輸入端口的,為Sink組件;有多個輸入端口,一個輸出端口的為Mux組件;有一個輸入端口,多個輸出端口的為DeMux組件;輸入輸出端口各一個組件的為中間處理環(huán)節(jié),這是最常見的組件。
端口具體支持的數(shù)據(jù)也有不同的類型。例如,對于一個輸入、輸出端口各一個組件,其輸入端口使用MP3格式的數(shù)據(jù),輸出端口使用PCM格式的數(shù)據(jù),那么這個組件就是一個MP3解碼組件。
隧道化(Tunneled)是一個關(guān)于組件連接方式的概念。通過隧道化可以將不同的組件的一個輸入端口和一個輸出端口連接到一起,在這種情況下,兩個組件的處理過程合并,共同處理。尤其對于單輸入和單輸出的組件,兩個組件將作為類似一個使用。
3.Android中OpenMax的使用情況
Android系統(tǒng)的一些部分對OpenMax IL層進行使用,基本使用的是標(biāo)準(zhǔn)OpenMax IL層的接口,只是進行了簡單的封裝。標(biāo)準(zhǔn)的OpenMax IL實現(xiàn)很容易以插件的形式加入到Android系統(tǒng)中。
Android的多媒體引擎OpenCore和StageFright都可以使用OpenMax作為多媒體編解碼的插件,只是沒有直接使用OpenMax IL層提供的純C接口,而是對其進行了一定的封裝。
在Android2.x版本之后,Android的框架層也對OpenMax IL層的接口進行了封裝定義,甚至使用Android中的Binder IPC機制。Stagefright使用了這個層次的接口,OpenCore沒有使用。
提示:OpenCore使用OpenMax IL層作為編解碼插件在前,Android框架層封裝OpenMax接口在后面的版本中才引入。