Android 多媒體系統集成的復雜性
集成的細微差異
本文引用地址:http://www.104case.com/article/275076.htm基于與Android設備制造商的長期密切合作,ARM經歷了大量常見的集成挑戰,尤其是在“零拷貝zero-copy”多媒體管線(media pipeline)方面。盡管面臨的挑戰非常多,但依然有一些潛在的解決方案可以應對。傳統的零拷貝多媒體管線主要目的是消除復制開銷,然而當兩個或多個多媒體處理硬件設備在內存中共享同一緩沖區空間時,就會出現問題,并且也會以一些非常不同的方式進行通信。軟件驅動程序需要選擇數據在緩沖區中的存儲方式,如像素格式,并確保在GPU完成寫入之前,顯示器不會讀取緩沖區。與組件相互通信的潛在集成問題有關的關鍵領域包括內存分配協商、像素格式協商和同步。
●內存分配協商對于系統集成設計商來說是一個關鍵的領域,它可以決定系統圖形緩沖區的內存分配位置和方式。分配內存時需要考慮到訪問內存的底層硬件具備的多項限制。有多個重要問題有待解決,例如,所有組件是否都帶有系統MMU(內存管理單元)?如果不是,那么執行某些分配時需要將部分內存分配為連續的物理內存,以確保所有組件均可以讀取該內存。適用于所有目標組件的理想內存對齊方式是指什么?例如,不同的硬件對于它想要如何在內存中對齊該內存的像素有不同的限制。如果缺乏對系統中每個組件的這種了解,在處理圖形緩沖區時則可能會出現部分內存訪問非常低效?;A物理地址寬度是另一個問題,即系統集成設計商可能擁有傳統的32位內部顯示管線,不能處理較大的內存塊(例如,可以通過ARMv8 64位架構處理的內存塊)。
是否存在某些組件無法訪問的特定內存區域?或者它們必須訪問的特定區域?Gralloc模塊由Android的編譯引擎用來分配和管理適用于2D和3D圖形用途的內存。ARM提供的Gralloc庫可以理解ARM多媒體處理器的所有系統限制,并且能夠與Android內核的ION分配程序(一個統一的共享內存系統)配合運行,確??梢葬槍ο到y中的每個處理器執行最合適且高效的內存分配。軟件驅動程序由ARM多媒體處理器用于實施標準Linux DMA緩沖區內存共享功能。如果所有驅動程序使用同一接口,則同一分配可以由一個處理器寫入并由另一個處理器讀取,從而為平臺上的所有圖形和視頻內容提供零拷貝路徑,確保仍能夠維持盡可能低的內存帶寬開銷。
●像素格式協商是需要在系統集成期間關注的第二個領域。務必確保多媒體IP解決方案中的每個組件(不論是視頻、GPU還是顯示)實際上均能夠理解來自其他組件的圖形輸出格式,以及確保每個組件生成的內容均能夠以某種格式被其他組件讀取。例如,盡管視頻處理器可能能夠以五種不同的YUV格式寫出視頻幀,如果顯示處理器不支持其中的任何格式,則只能使用GPU功能在顯示器上合成視頻?;蛘?,如果顯示處理器不理解帶有預乘Alpha值(大多數Android用戶界面所使用的)的像素格式,則顯示處理器將成為美化過的幀緩沖區控制器。最后,即便組件能夠完全理解32位RGBA像素格式,出于某些未知的原因,顯示的應用程序仍將出現反轉的顏色。這會導致在開發過程中浪費大量時間,因為不僅需要追蹤哪個組件在排序方面(比如32位像素格式的紅色和藍色組分)與其他一切不一致,而且還需要研究如何對它們進行反轉。
●同步是第三個領域,此處旨在盡可能異步運行以減少排隊和延遲。主要問題在于,當系統中存在零拷貝路徑、并且兩個或多個設備正在直接使用同一個內存時,這些組件之間的同步將變得極為重要。例如,如果顯示處理器在GPU或視頻處理器完成寫入之前便開始從緩沖區中進行讀取,則會導致屏幕出現奇怪的偽像。在較早的Android版本(Jellybean之前)中,渲染流水線中的每個組件通過執行以下一系列步驟處理和控制Android用戶空間的同步:處理軟件驅動程序中的命令;在硬件中執行其任務;等待任務在驅動程序中完成;以及將責任傳遞給管線的下一階段。盡管這會使組件之間的同步方法變得簡單容易,但也會造成管線出現暫停間隙,從而使流暢視覺內容之間出現差異并且中斷最終用戶體驗。但是,一種全新同步化方法Android Fences已添加至平臺;只要軟件驅動程序支持它們,則允許在管線的每個階段針對其組件執行CPU端處理和排隊工作,即便前一階段尚未在硬件中完成。這將大幅縮短一個硬件完成與下一個硬件開始之間的間隔。然而,要充分利用Android Fences的優勢,還需要渲染管線中的每個組件均支持它們。如果所有組件均支持Android Fences,但其中一個組件出現漏洞,則會出現問題。如果三個或更多個不同供應商提供的軟件驅動程序均支持 Android Fences,但其中一個出現漏洞,則很難進行追蹤、并且需要與多個供應商一起執行三項單獨的調查。同時還有可能出現此種情況:只有當某個供應商的組件使用標準接口與其他供應商的組件進行通信時,該漏洞才會顯現出來。
評論