OpenMax系統結構和移植內容

轉載自: http://apps.hi.baidu.com/share/detail/32008073

OpenMax是一個多媒體應用程序的框架標準。其中,OpenMax IL(集成層)技術規格定義了媒體組件接口,以便在嵌入式器件的流媒體框架中快速集成加速編解碼器。

Android中,OpenMax IL層,通常可以用於多媒體引擎的插件,Android的多媒體引擎OpenCoreStageFright都可以使用OpenMax作爲插件,主要用於編解碼(Codec)處理。

Android的框架層,也定義了由Android封裝的OpenMax接口,和標準的接口概念基本相同,但是使用C++類型的接口,並且使用了 AndroidBinder IPC機制。Android封裝OpenMax的接口被StageFright使用,OpenCore沒有使用這個接口,而是使用其他形式對OpenMax IL層接口進行封裝。

Android OpenMax的基本層次結構如圖18-1所示。

18-1  AndroidOpenMax的基本層次結構

OpenMax系統的結構

1OpenMax總體層次結構

OpenMax是一個多媒體應用程序的框架標準,由NVIDIA公司和Khronos2006年推出。

OpenMax是無授權費的,跨平臺的應用程序接口API,通過使媒體加速組件能夠在開發、集成和編程環節中實現跨多操作系統和處理器硬件平臺,提供全面的流媒體編解碼器和應用程序便攜化。

OpenMax的官方網站如下所示:

http://www.khronos.org/openmax/

OpenMax實際上分成三個層次,自上而下分別是,OpenMax DL(開發層),OpenMax IL(集成層)和OpenMax AL(應用層)。三個層次的內容分別如下所示。

第一層:OpenMax DLDevelopment Layer,開發層)

OpenMax DL定義了一個API,它是音頻、視頻和圖像功能的集合。硅供應商能夠在一個新的處理器上實現並優化,然後編解碼供應商使用它來編寫更廣泛的編解碼器功能。它包括音頻信號的處理功能,如FFTfilter,圖像原始處理,如顏色空間轉換、視頻原始處理,以實現例如MPEG-4、 H.264MP3AACJPEG等編解碼器的優化。

第二層:OpenMax ILIntegration Layer,集成層)

OpenMax IL作爲音頻、視頻和圖像編解碼器能與多媒體編解碼器交互,並以統一的行爲支持組件(例如,資源和皮膚)。這些編解碼器或許是軟硬件的混合體,對用戶是透明的底層接口應用於嵌入式、移動設備。它提供了應用程序和媒體框架,透明的。S編解碼器供應商必須寫私有的或者封閉的接口,集成進移動設備。IL的主要目的是使用特徵集合爲編解碼器提供一個系統抽象,爲解決多個不同媒體系統之間輕便性的問題。

第三層:OpenMax ALAppliction Layer,應用層)

OpenMax AL API在應用程序和多媒體中間件之間提供了一個標準化接口,多媒體中間件提供服務以實現被期待的API功能。

OpenMax的三個層次如圖18-2所示。

OpenMax API將會與處理器一同提供,以使庫和編解碼器開發者能夠高速有效地利用新器件的完整加速潛能,無須擔心其底層的硬件結構。該標準是針對嵌入式設備和移動設備的多媒體軟件架構。在架構底層上爲多媒體的編解碼和數據處理定義了一套統一的編程接口,對多媒體數據的處理功能進行系統級抽象,爲用戶屏蔽了底層的細節。因此,多媒體應用程序和多媒體框架通過OpenMax IL可以以一種統一的方式來使用編解碼和其他多媒體數據處理功能,具有了跨越軟硬件平臺的移植性。

 提示:在實際的應用中,OpenMax的三個層次中使用較多的是OpenMax IL集成層,由於操作系統到硬件的差異和多媒體應用的差異,OpenMaxDLAL層使用相對較少。

18-2  OpenMax的三個層次

2OpenMax IL層的結構

OpenMax IL目前已經成爲了事實上的多媒體框架標準。嵌入式處理器或者多媒體 編解碼模塊的硬件生產者,通常提供標準的OpenMax IL層的軟件接口,這樣軟件的開發者就可以基於這個層次的標準化接口進行多媒體程序的開發。

OpenMax IL的接口層次結構適中,既不是硬件編解碼的接口,也不是應用程序層的接口,因此比較容易實現標準化。

OpenMax IL的層次結構如圖18-3所示。

18-3  OpenMax IL的層次結構

18-3中的虛線中的內容是OpenMax IL層的內容,其主要實現了OpenMax IL中的各個組件(Component)。對下層,OpenMax IL可以調用OpenMax DL層的接口,也可以直接調用各種Codec實現。對上層,OpenMax IL可以給 OpenMax AL 層等框架層(Middleware)調用,也可以給應用程序直接調用。

OpenMax IL主要內容如下所示。

 客戶端(Client):OpenMax IL的調用者

 組件(Component):OpenMax IL的單元,每一個組件實現一種功能

 端口(Port):組件的輸入輸出接口

 隧道化(Tunneled):讓兩個組件直接連接的方式

OpenMax IL的基本運作過程如圖18-4所示。

18-4  OpenMax IL的基本運作過程

如圖18-4所示,OpenMAL IL的客戶端,通過調用四個OpenMAL IL組件,實現了一個功能。四個組件分別是Source組件、 Host組件、Accelerator組件和Sink組件。Source組件只有一個輸出端口;而Host組件有一個輸入端口和一個輸出端口;Accelerator組件具有一個輸入端口,調用了硬件的編解碼器,加速主要體現在這個環節上。Accelerator組件和Sink組件通過私有通訊方式在內部進行連接,沒有經過明確的組件端口。

OpenMAL IL在使用的時候,其數據流也有不同的處理方式:既可以經由客戶端,也可以不經由客戶端。圖18-4中,Source組件到 Host組件的數據流就是經過客戶端的;而Host組件到Accelerator組件的數據流就沒有經過客戶端,使用了隧道化的方式;Accelerator組件和Sink組件甚至可以使用私有的通訊方式。

OpenMax Core是輔助各個組件運行的部分,它通常需要完成各個組件的初始化等工作,在真正運行過程中,重點的是各個OpenMax IL的組件,OpenMax Core不是重點,也不是標準。

OpenMAL IL的組件是OpenMax IL實現的核心內容,一個組件以輸入、輸出端口爲接口,端口可以被連接到另一個組件上。外部對組件可以發送命令,還進行設置/獲取參數、配置等內容。組件的端口可以包含緩衝區(Buffer)的隊列。

組件的處理的核心內容是:通過輸入端口消耗Buffer,通過輸出端口填充Buffer,由此多組件相聯接可以構成流式的處理。

OpenMAL IL中一個組件的結構如圖18-5所示。

18-5  OpenMAL IL中一個組件的結構

組件的功能和其定義的端口類型密切相關,通常情況下:只有一個輸出端口的,爲Source組件;只有一個輸入端口的,爲Sink組件;有多個輸入端口,一個輸出端口的爲Mux組件;有一個輸入端口,多個輸出端口的爲DeMux組件;輸入輸出端口各一個組件的爲中間處理環節,這是最常見的組件。

端口具體支持的數據也有不同的類型。例如,對於一個輸入、輸出端口各一個組件,其輸入端口使用MP3格式的數據,輸出端口使用PCM格式的數據,那麼這個組件就是一個MP3解碼組件。

隧道化(Tunneled)是一個關於組件連接方式的概念。通過隧道化可以將不同的組件的一個輸入端口和一個輸出端口連接到一起,在這種情況下,兩個組件的處理過程合併,共同處理。尤其對於單輸入和單輸出的組件,兩個組件將作爲類似一個使用。

3AndroidOpenMax的使用情況

Android系統的一些部分對OpenMax IL層進行使用,基本使用的是標準OpenMax IL層的接口,只是進行了簡單的封裝。標準的OpenMax IL實現很容易以插件的形式加入到Android系統中。

Android的多媒體引擎OpenCoreStageFright都可以使用OpenMax作爲多媒體編解碼的插件,只是沒有直接使用OpenMax IL層提供的純C接口,而是對其進行了一定的封裝。

Android2.x版本之後,Android的框架層也對OpenMax IL層的接口進行了封裝定義,甚至使用Android中的Binder IPC機制。Stagefright使用了這個層次的接口,OpenCore沒有使用。

 提示:OpenCore使用OpenMax IL層作爲編解碼插件在前,Android框架層封裝OpenMax接口在後面的版本中才引入。

Android OpenMax實現的內容

Android中使用的主要是OpenMax的編解碼功能。雖然OpenMax也可以生成輸入、輸出、文件解析構建等組件,但是在各個系統(不僅是Android)中使用的最多的還是編解碼組件。媒體的輸入、輸出環節和系統的關係很大,引入OpenMax標準比較麻煩;文件解析構建環節一般不需要使用硬件加速。編解碼組件也是最能體現硬件加速的環節,因此最常使用。

Android中實現OpenMax IL層和標準的OpenMax IL層的方式基本,一般需要實現以下兩個環節。

 編解碼驅動程序:位於Linux內核空間,需要通過Linux內核調用驅動程序,通常使用非標準的驅動程序

  OpenMax IL層:根據OpenMax IL層的標準頭文件實現不同功能的組件

Android中還提供了OpenMax的適配層接口(對OpenMax IL的標準組件進行封裝適配),它作爲Android本地層的接口,可以被Android的多媒體引擎調用。

發佈了60 篇原創文章 · 獲贊 8 · 訪問量 50萬+
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章