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