Android 多媒體系統(tǒng)集成的復(fù)雜性
隨著多媒體內(nèi)容的使用頻次越來越高,消費者對于處理多媒體音頻和視頻流、以及運行基于圖形的高級應(yīng)用程序所具備的成熟技術(shù),也提出高于以往的要求,這些驅(qū)動著智能手機、平板電腦和其他智能移動消費者產(chǎn)品的演進,促使這些設(shè)備不僅要內(nèi)置復(fù)雜程度較高且功能越發(fā)強大的多媒體子系統(tǒng),而且還要不斷地提升能效。
Android 是目前市場上使用最廣泛的移動設(shè)備操作系統(tǒng)。根據(jù)市場分析組織 IDC 在 2014 年底發(fā)布的報告 ,Android 在智能 OS 業(yè)務(wù)方面占據(jù)主導(dǎo)地位,以 2014 年來看,搭載Android平臺的設(shè)備出貨量約為 10 億臺,所占的市場份額大于 80%;而未來幾年,其領(lǐng)先地位將繼續(xù)維持。Android 在平板電腦市場也占據(jù)主導(dǎo)地位,2014 年在全球的出貨量超過 1.5 億臺設(shè)備,所占市場份額大約在 65% - 70% 之間。
基于此,本文將詳述 Android 多媒體系統(tǒng)開發(fā)過程中面臨的一些集成問題,這些問題會給移動設(shè)備制造商和開發(fā)商帶來嚴(yán)峻的挑戰(zhàn),尤其是集成來自多個供應(yīng)商的組件和技術(shù)時,這些挑戰(zhàn)將更加突現(xiàn);另外,并將探討 ARM 知識產(chǎn)權(quán)(IP)和技術(shù)如何大幅簡化 OEM 和系統(tǒng)集成商的流程,進而加快產(chǎn)品開發(fā)速度、顯著降低風(fēng)險。
Android 多媒體系統(tǒng)
Android 及其多媒體系統(tǒng)的發(fā)展是一個復(fù)雜度不斷提高、持續(xù)演變的過程。自從 十年前 Android 被推出以來,迄今已整合了許多新功能和優(yōu)化,如通過 Wi-Fi 傳輸至 TV 的移動顯示器傳輸、新的視頻編解碼器等。上述所有功能的新增對于系統(tǒng)開發(fā)人員意義深遠(yuǎn),因為他們在每次發(fā)布全新 OS 時,需要完成大量軟件驅(qū)動程序的工作。圖 1 顯示了 Android 自 2009 年以來提供的新功能時間線。在此期間,ARM 除了支持將這些驅(qū)動程序部署至數(shù)百種不同的設(shè)備之外,還為九種不同版本的 Android 系統(tǒng)(從 éclair 至 Lollipop)以及八代 ARM Mali 圖形處理器硬件提供了驅(qū)動程序的支持。
圖 1 – Android 多媒體框架的演變
依據(jù)圖 2(此圖實際是簡化示意圖)所示,Android OS 已經(jīng)非常復(fù)雜了。當(dāng)然,Android 的持續(xù)演變帶來了更多的挑戰(zhàn)。圖 2 顯示了 OS 常用用戶空間組件與用于提供 Android 用戶體驗的基礎(chǔ)軟件驅(qū)動程序、內(nèi)核組件和硬件之間的交互。
圖 2 - Android 多媒體子系統(tǒng)概覽
如果使用了來自不同供應(yīng)商的多媒體組件,則會產(chǎn)生額外的復(fù)雜性,導(dǎo)致的結(jié)果是,首先需要將三個或更多個軟件驅(qū)動程序單獨集成至平臺,然后再開始著手相互集成,以便實現(xiàn)較好的系統(tǒng)性能。然而,如果集成的過程不太理想,或者不同的組件無法使用相同標(biāo)準(zhǔn)的接口相互通信,則會導(dǎo)致功能平臺運行較慢、耗費過多的功率,最糟的情況則可能會同時出現(xiàn)這兩者。
集成的細(xì)微差異
基于與 Android 設(shè)備制造商的長期密切合作,ARM 經(jīng)歷了大量常見的集成挑戰(zhàn),尤其是在“零拷貝zero-copy”多媒體管線(media pipeline)方面。盡管面臨的挑戰(zhàn)非常多,但依然有一些潛在的解決方案可以應(yīng)對。傳統(tǒng)的零拷貝多媒體管線主要目的是消除復(fù)制開銷,然而當(dāng)兩個或多個多媒體處理硬件設(shè)備在內(nèi)存中共享同一緩沖區(qū)空間時,就會出現(xiàn)問題,并且也會以一些非常不同的方式進行通信。軟件驅(qū)動程序需要選擇數(shù)據(jù)在緩沖區(qū)中的存儲方式,如像素格式,并確保在 GPU 完成寫入之前,顯示器不會讀取緩沖區(qū)。與組件相互通信的潛在集成問題有關(guān)的關(guān)鍵領(lǐng)域包括內(nèi)存分配協(xié)商、像素格式協(xié)商和同步。
● 內(nèi)存分配協(xié)商對于系統(tǒng)集成設(shè)計商來說是一個關(guān)鍵的領(lǐng)域,它可以決定系統(tǒng)圖形緩沖區(qū)的內(nèi)存分配位置和方式。分配內(nèi)存時需要考慮到訪問內(nèi)存的底層硬件具備的多項限制。有多個重要問題有待解決,例如,所有組件是否都帶有系統(tǒng) MMU(內(nèi)存管理單元)?如果不是,那么執(zhí)行某些分配時需要將部分內(nèi)存分配為連續(xù)的物理內(nèi)存,以確保所有組件均可以讀取該內(nèi)存。適用于所有目標(biāo)組件的理想內(nèi)存對齊方式是指什么?例如,不同的硬件對于它想要如何在內(nèi)存中對齊該內(nèi)存的像素有不同的限制。如果缺乏對系統(tǒng)中每個組件的這種了解,在處理圖形緩沖區(qū)時則可能會出現(xiàn)部分內(nèi)存訪問非常低效?;A(chǔ)物理地址寬度是另一個問題,即系統(tǒng)集成設(shè)計商可能擁有傳統(tǒng)的 32 位內(nèi)部顯示管線,不能處理較大的內(nèi)存塊(例如,可以通過 ARMv8 64 位架構(gòu)處理的內(nèi)存塊)。
是否存在某些組件無法訪問的特定內(nèi)存區(qū)域?或者它們必須訪問的特定區(qū)域?Gralloc 模塊由 Android 的編譯引擎用來分配和管理適用于 2D 和 3D 圖形用途的內(nèi)存。ARM 提供的 Gralloc 庫可以理解 ARM 多媒體處理器的所有系統(tǒng)限制,并且能夠與 Android 內(nèi)核的 ION 分配程序(一個統(tǒng)一的共享內(nèi)存系統(tǒng))配合運行,確保可以針對系統(tǒng)中的每個處理器執(zhí)行最合適且高效的內(nèi)存分配。軟件驅(qū)動程序由 ARM 多媒體處理器用于實施標(biāo)準(zhǔn) Linux DMA 緩沖區(qū)內(nèi)存共享功能。如果所有驅(qū)動程序使用同一接口,則同一分配可以由一個處理器寫入并由另一個處理器讀取,從而為平臺上的所有圖形和視頻內(nèi)容提供零拷貝路徑,確保仍能夠維持盡可能低的內(nèi)存帶寬開銷。
● 像素格式協(xié)商是需要在系統(tǒng)集成期間關(guān)注的第二個領(lǐng)域。務(wù)必確保多媒體 IP 解決方案中的每個組件(不論是視頻、GPU 還是顯示)實際上均能夠理解來自其他組件的圖形輸出格式,以及確保每個組件生成的內(nèi)容均能夠以某種格式被其他組件讀取。例如,盡管視頻處理器可能能夠以五種不同的 YUV 格式寫出視頻幀,如果顯示處理器不支持其中的任何格式,則只能使用 GPU 功能在顯示器上合成視頻。或者,如果顯示處理器不理解帶有預(yù)乘 Alpha 值(大多數(shù) Android 用戶界面所使用的)的像素格式,則顯示處理器將成為美化過的幀緩沖區(qū)控制器。最后,即便組件能夠完全理解 32 位 RGBA 像素格式,出于某些未知的原因,顯示的應(yīng)用程序仍將出現(xiàn)反轉(zhuǎn)的顏色。這會導(dǎo)致在開發(fā)過程中浪費大量時間,因為不僅需要追蹤哪個組件在排序方面(比如 32 位像素格式的紅色和藍(lán)色組分)與其他一切不一致,而且還需要研究如何對它們進行反轉(zhuǎn)。
● 同步是第三個領(lǐng)域,此處旨在盡可能異步運行以減少排隊和延遲。主要問題在于,當(dāng)系統(tǒng)中存在零拷貝路徑、并且兩個或多個設(shè)備正在直接使用同一個內(nèi)存時,這些組件之間的同步將變得極為重要。例如,如果顯示處理器在 GPU 或視頻處理器完成寫入之前便開始從緩沖區(qū)中進行讀取,則會導(dǎo)致屏幕出現(xiàn)奇怪的偽像。在較早的 Android 版本(Jellybean 之前)中,渲染流水線中的每個組件通過執(zhí)行以下一系列步驟處理和控制 Android 用戶空間的同步:處理軟件驅(qū)動程序中的命令;在硬件中執(zhí)行其任務(wù);等待任務(wù)在驅(qū)動程序中完成;以及將責(zé)任傳遞給管線的下一階段。盡管這會使組件之間的同步方法變得簡單容易,但也會造成管線出現(xiàn)暫停間隙,從而使流暢視覺內(nèi)容之間出現(xiàn)差異并且中斷最終用戶體驗。但是,一種全新同步化方法 Android Fences 已添加至平臺;只要軟件驅(qū)動程序支持它們,則允許在管線的每個階段針對其組件執(zhí)行 CPU 端處理和排隊工作,即便前一階段尚未在硬件中完成。這將大幅縮短一個硬件完成與下一個硬件開始之間的間隔。然而,要充分利用 Android Fences 的優(yōu)勢,還需要渲染管線中的每個組件均支持它們。如果所有組件均支持 Android Fences,但其中一個組件出現(xiàn)漏洞,則會出現(xiàn)問題。如果三個或更多個不同供應(yīng)商提供的軟件驅(qū)動程序均支持 Android Fences,但其中一個出現(xiàn)漏洞,則很難進行追蹤、并且需要與多個供應(yīng)商一起執(zhí)行三項單獨的調(diào)查。同時還有可能出現(xiàn)此種情況:只有當(dāng)某個供應(yīng)商的組件使用標(biāo)準(zhǔn)接口與其他供應(yīng)商的組件進行通信時,該漏洞才會顯現(xiàn)出來。
ARM 多媒體技術(shù)
如上所述,Android 多媒體子系統(tǒng)開發(fā)過程中遇到的基本問題是,從多個供應(yīng)商采購組件和解決方案(無論是包含內(nèi)部開發(fā)的部件還是由諸如半導(dǎo)體供應(yīng)商之類的外部公司提供),這意味著將對產(chǎn)品質(zhì)量和/或開發(fā)進度產(chǎn)生影響。而可以向 OEM、系統(tǒng)集成商和硅片供應(yīng)商提供顯著幫助的解決方案即為 ARM 的預(yù)集成多媒體堆棧。自開發(fā)首款移動電話以來,ARM 一直致力于與其合作伙伴合作,一同開發(fā)可以在固定功耗預(yù)算范圍內(nèi)、持續(xù)擴展移動設(shè)備功能的技術(shù)。因此,ARM 在多媒體 IP 以及處理因集成高度復(fù)雜的視頻和圖形技術(shù)而產(chǎn)生的系統(tǒng)級問題方面具有豐富的經(jīng)驗。ARM 產(chǎn)品的核心在于,可以在圖形、視頻和顯示處理器內(nèi)核、系統(tǒng)級 SoC 優(yōu)化技術(shù)領(lǐng)域提供廣泛的多媒體技術(shù)組合。
● ARM Mali GPU 系列是指一系列廣泛的產(chǎn)品,可以進行擴展以便為移動細(xì)分市場內(nèi)外的各類設(shè)備提供豐富的消費者體驗,適合高端和主流市場,包括:
ARM Mali-T820:提供多功能和效率的最佳組合,可以向下一代主流移動設(shè)備交付豐富的用戶界面和卓越的內(nèi)容,并采用盡可能小的硅片面積維持最佳性能的 ARM 特色產(chǎn)品;
ARM Mali-T830:其每個著色器內(nèi)核的計算能力高于 Mali-T820,能夠為主流移動設(shè)備的消費者帶來諸如高級 3D 游戲等更復(fù)雜的內(nèi)容;
ARM Mali-T860:可從一個內(nèi)核擴展至十六個內(nèi)核,經(jīng)過優(yōu)化,能夠為高端移動設(shè)備市場帶來具備卓越性能效率的復(fù)雜圖形和計算內(nèi)容;
全新Mali-T880,旨在為溫度受限的移動和消費者平臺帶來高端復(fù)雜的用例,能效較之前一代提高了 40%。附加的算術(shù)能力和可擴展性支持可支持類似游戲機的高級游戲體驗。
Mali-T860 和 Mali-T880 均本地支持 10 位 YUV,為最佳 4K 內(nèi)容提供令人驚嘆的視覺表現(xiàn),并且與 Mali-V550 視頻處理器和 Mali-DP550 顯示處理器的配置相得益彰。
● ARM Mali-V550 視頻處理器是下一代低帶寬、多核、多重編解碼的編碼器/解碼器,提供 IP 業(yè)界首個適用于 HEVC(高效率視頻編碼)編解碼器(包含 8 位和 10 位 HEVC 解碼和 8 位 HEVC 編碼)的單核視頻編碼/解碼解決方案。它可以在單核上集成編碼和解碼功能,并且能夠在多個編解碼器上最大程度地重復(fù)使用,確保設(shè)備交付高級別的硅晶片面積效率。
● ARM Mali-DP550 顯示處理器是最新一代的 ARM 顯示技術(shù),其增強功能可以將合成、縮放、旋轉(zhuǎn)以及圖像后處理等任務(wù)從 GPU 或 CPU 卸載到專用處理器,省去了寫出到內(nèi)存的必要,進而節(jié)省功率。該設(shè)備的硅片面積非常小、能耗低,額外支持多達七層的合成,同時還集成了 ARM 的節(jié)能技術(shù)。
系統(tǒng)級優(yōu)化技術(shù)
與此同時,有數(shù)項系統(tǒng)級優(yōu)化技術(shù)可供系統(tǒng)集成商使用,并且能夠為 ARM 的多媒體處理器組合提供補充。這些技術(shù)包括ARM 幀緩沖壓縮(ARM Frame Buffer Compression, AFBC)、智能消除(Transaction Elimination)、智能合成(Smart Composition)以及動作搜索消除技術(shù)(Motion Search Elimination)。
● ARM 幀緩沖壓縮(AFBC)是一項無損圖像壓縮協(xié)議和格式,可以解決在移動設(shè)備的散熱限制內(nèi),構(gòu)建愈加復(fù)雜的設(shè)計時所面臨的困難?;旧希畲笙薅鹊販p少了 SoC 內(nèi)不同 IP 塊之間的數(shù)據(jù)傳輸量,并且可以降低在整個系統(tǒng)內(nèi)傳輸空間協(xié)調(diào)圖像數(shù)據(jù)所產(chǎn)生的整體系統(tǒng)級帶寬和電力成本。其無損壓縮率在業(yè)界處于領(lǐng)先地位,典型情況下可高出 50%,而算上限制性的最壞情況比率,通常情況下高出 80%。AFBC 提供低至 4x4 塊級別的細(xì)粒度隨機訪問,該隨機訪問支持在 SoC 設(shè)計內(nèi)的其他 IP 塊中應(yīng)用 AFBC。在 Android 多媒體系統(tǒng)環(huán)境中,AFBC 通過集成至顯示、視頻和 GPU 驅(qū)動程序的私有接口在 ARM Gralloc 驅(qū)動程序中啟用。
AFBC 可用于所有 ARM Mali 視頻處理器、 顯示處理器、以及 Mali-T760 及更高版本的圖形處理器,并且還作為可授權(quán)的單獨 IP 塊與 SoC 中的其他多媒體塊一同使用。
● 智能消除(TE)是 ARM Mali GPU 架構(gòu)一項重要的帶寬節(jié)約功能,可在 SoC 系統(tǒng)級別上顯著節(jié)省能源。在執(zhí)行 TE 時,GPU 將當(dāng)前幀緩沖與之前渲染的幀相比較,僅對改動過的部分進行局部更新,因而大大減少了每一幀需要傳輸?shù)酵獠績?nèi)存的數(shù)據(jù)量。這一比較是在每區(qū)塊基礎(chǔ)上執(zhí)行的,運用循環(huán)冗余檢查(CRC) 簽名來判斷區(qū)塊的改動情況。CRC 簽名一致的區(qū)塊完全相同,因此消除它們對生成的圖像沒有任何影響。無論幀緩沖的精度要求是什么,TE 都可以供各應(yīng)用程序用于 GPU 支持的所有幀緩沖格式。TE 是一項非常有效的技術(shù),即便對于“第一人稱射擊游戲”而言也是如此。然而,由于在用戶界面和休閑游戲等許多其他常用圖形應(yīng)用程序中,兩個連續(xù)幀之間的幀緩沖大部分保持不變,因此 TE 帶來的幀緩沖帶寬節(jié)約最高可達 99%。和 Android 多媒體系統(tǒng)集成中的 AFBC 一樣,“智能消除”可通過 ARM Gralloc 驅(qū)動程序啟用,并且與 GPU 驅(qū)動程序集成。
● 智能合成(SC)是另一項旨在降低帶寬的技術(shù),同時可以在幀合成期間讀入紋理。該技術(shù)可以將標(biāo)準(zhǔn) Android 用戶界面紋理讀取帶寬降低 50% 以上。通過在最后幀合成之前分析幀,SC 將確定是否存在要渲染幀的給定部分原因,或者它是否可以重復(fù)使用之前渲染和合成的部分。如果可以重復(fù)使用這一部分的幀,則無需重新從內(nèi)存中讀取并重新進行合成,因此將節(jié)約更多讀取帶寬和計算量。在 Android 多媒體系統(tǒng)環(huán)境中,“智能合成”將顯示為 EGL 擴展 (EGL_KHR_partial_update),供 Android 內(nèi)的 ‘SurfaceFlinger’ 和 ‘HWUI’ 組件使用(見圖 2)。
● 動作搜索消除技術(shù)(MSE)既是智能消除的擴展,也是一項可在 Mali-DP550 顯示處理器和 Mali-V550 視頻處理器中實施的新功能。該技術(shù)旨在解決一種不斷增長的需求:將音頻/視頻數(shù)據(jù)從移動電話、平板電腦和其他消費者設(shè)備無線傳輸至電視屏等大屏幕。發(fā)送和接收設(shè)備均必須支持使用諸如 H.264 視頻編解碼器等算法執(zhí)行視頻流壓縮。在典型用例下,顯示處理器并不會將幀緩沖傳輸至顯示面板,而是將其寫入內(nèi)存,隨后視頻編解碼器將讀取該內(nèi)存以對幀進行編碼,并通過 Wi-Fi 網(wǎng)絡(luò)發(fā)送壓縮的幀。顯示處理器和視頻處理器均維護每個區(qū)塊的 CRC 簽名,當(dāng)顯示處理器寫出幀緩沖時,視頻處理器可以為簽名匹配的區(qū)塊消除運作搜索。運作估算是視頻管線中最消耗資源的部分,因此跳過所選區(qū)塊的搜索將降低 Wi-Fi 傳輸?shù)难舆t以及帶寬消耗,進而降低 SoC 的整體功耗。同 AFBC 和智能消除一樣,動作搜索消除技術(shù)也通過 ARM Gralloc 啟用,這有利于將 CRC 數(shù)據(jù)從 Mali-V550 視頻處理器的 Android 視頻驅(qū)動程序傳輸至 Mali-DP550 顯示處理器的 HWComposer 驅(qū)動程序。
Android 對于優(yōu)化集成的期望
ARM 提供一整套現(xiàn)有的圖形、顯示和視頻處理器驅(qū)動程序,可以通過預(yù)先集成和優(yōu)化來實現(xiàn)聯(lián)合操作。根據(jù)一致的設(shè)計和驗證方法,如果設(shè)計中實施了基于 ARM Cortex CPU 以及 ARM CoreLinkTM 互連、ARM Mali GPU、視頻和顯示處理器的 SoC,將能夠針對每個處理器使用一同高效運行的 Android 軟件驅(qū)動程序。
圖 3 - ARM 的 Android 多媒體子系統(tǒng)解決方案
適用于 Android 的 ARM 多媒體堆棧(見圖 3)將消除集成和優(yōu)化來自不同供應(yīng)商的處理器時面臨的挑戰(zhàn),并簡化支持常規(guī) Android 更新的任務(wù)。利用 ARM 預(yù)先優(yōu)化的軟件,OEM 和硅片供應(yīng)商可以關(guān)注其解決方案的差異化,并加快產(chǎn)品入市步伐。盡管 Android 多媒體系統(tǒng)集成絕對稱不上簡單,此種方法仍不失為開發(fā)人員面臨諸多問題時的可能解決方案,并且將大幅簡化流程、壓縮開發(fā)時間、降低風(fēng)險以及加速產(chǎn)品上市時程。