<dfn id="yhprb"><s id="yhprb"></s></dfn><dfn id="yhprb"><delect id="yhprb"></delect></dfn><dfn id="yhprb"></dfn><dfn id="yhprb"><delect id="yhprb"></delect></dfn><dfn id="yhprb"></dfn><dfn id="yhprb"><s id="yhprb"><strike id="yhprb"></strike></s></dfn><small id="yhprb"></small><dfn id="yhprb"></dfn><small id="yhprb"><delect id="yhprb"></delect></small><small id="yhprb"></small><small id="yhprb"></small> <delect id="yhprb"><strike id="yhprb"></strike></delect><dfn id="yhprb"></dfn><dfn id="yhprb"></dfn><s id="yhprb"><noframes id="yhprb"><small id="yhprb"><dfn id="yhprb"></dfn></small><dfn id="yhprb"><delect id="yhprb"></delect></dfn><small id="yhprb"></small><dfn id="yhprb"><delect id="yhprb"></delect></dfn><dfn id="yhprb"><s id="yhprb"></s></dfn> <small id="yhprb"></small><delect id="yhprb"><strike id="yhprb"></strike></delect><dfn id="yhprb"><s id="yhprb"></s></dfn><dfn id="yhprb"></dfn><dfn id="yhprb"><s id="yhprb"></s></dfn><dfn id="yhprb"><s id="yhprb"><strike id="yhprb"></strike></s></dfn><dfn id="yhprb"><s id="yhprb"></s></dfn>

新聞中心

EEPW首頁(yè) > 嵌入式系統 > 設計應用 > Android 多媒體系統集成的復雜性

Android 多媒體系統集成的復雜性

作者: 時(shí)間:2015-06-02 來(lái)源:網(wǎng)絡(luò ) 收藏

  集成的細微差異

本文引用地址:http://dyxdggzs.com/article/275076.htm

  基于與設備制造商的長(cháng)期密切合作,經(jīng)歷了大量常見(jiàn)的集成挑戰,尤其是在“零拷貝zero-copy”多媒體管線(xiàn)(media pipeline)方面。盡管面臨的挑戰非常多,但依然有一些潛在的解決方案可以應對。傳統的零拷貝多媒體管線(xiàn)主要目的是消除復制開(kāi)銷(xiāo),然而當兩個(gè)或多個(gè)多媒體處理硬件設備在內存中共享同一緩沖區空間時(shí),就會(huì )出現問(wèn)題,并且也會(huì )以一些非常不同的方式進(jìn)行通信。軟件驅動(dòng)程序需要選擇數據在緩沖區中的存儲方式,如像素格式,并確保在GPU完成寫(xiě)入之前,顯示器不會(huì )讀取緩沖區。與組件相互通信的潛在集成問(wèn)題有關(guān)的關(guān)鍵領(lǐng)域包括內存分配協(xié)商、像素格式協(xié)商和同步。

  ●內存分配協(xié)商對于系統集成設計商來(lái)說(shuō)是一個(gè)關(guān)鍵的領(lǐng)域,它可以決定系統圖形緩沖區的內存分配位置和方式。分配內存時(shí)需要考慮到訪(fǎng)問(wèn)內存的底層硬件具備的多項限制。有多個(gè)重要問(wèn)題有待解決,例如,所有組件是否都帶有系統MMU(內存管理單元)?如果不是,那么執行某些分配時(shí)需要將部分內存分配為連續的物理內存,以確保所有組件均可以讀取該內存。適用于所有目標組件的理想內存對齊方式是指什么?例如,不同的硬件對于它想要如何在內存中對齊該內存的像素有不同的限制。如果缺乏對系統中每個(gè)組件的這種了解,在處理圖形緩沖區時(shí)則可能會(huì )出現部分內存訪(fǎng)問(wèn)非常低效?;A物理地址寬度是另一個(gè)問(wèn)題,即系統集成設計商可能擁有傳統的32位內部顯示管線(xiàn),不能處理較大的內存塊(例如,可以通過(guò)v8 64位架構處理的內存塊)。

  是否存在某些組件無(wú)法訪(fǎng)問(wèn)的特定內存區域?或者它們必須訪(fǎng)問(wèn)的特定區域?Gralloc模塊由的編譯引擎用來(lái)分配和管理適用于2D和3D圖形用途的內存。提供的Gralloc庫可以理解ARM多媒體處理器的所有系統限制,并且能夠與內核的ION分配程序(一個(gè)統一的共享內存系統)配合運行,確??梢葬槍ο到y中的每個(gè)處理器執行最合適且高效的內存分配。軟件驅動(dòng)程序由ARM多媒體處理器用于實(shí)施標準Linux DMA緩沖區內存共享功能。如果所有驅動(dòng)程序使用同一接口,則同一分配可以由一個(gè)處理器寫(xiě)入并由另一個(gè)處理器讀取,從而為平臺上的所有圖形和視頻內容提供零拷貝路徑,確保仍能夠維持盡可能低的內存帶寬開(kāi)銷(xiāo)。

  ●像素格式協(xié)商是需要在系統集成期間關(guān)注的第二個(gè)領(lǐng)域。務(wù)必確保多媒體IP解決方案中的每個(gè)組件(不論是視頻、GPU還是顯示)實(shí)際上均能夠理解來(lái)自其他組件的圖形輸出格式,以及確保每個(gè)組件生成的內容均能夠以某種格式被其他組件讀取。例如,盡管視頻處理器可能能夠以五種不同的YUV格式寫(xiě)出視頻幀,如果顯示處理器不支持其中的任何格式,則只能使用GPU功能在顯示器上合成視頻?;蛘?,如果顯示處理器不理解帶有預乘Alpha值(大多數Android用戶(hù)界面所使用的)的像素格式,則顯示處理器將成為美化過(guò)的幀緩沖區控制器。最后,即便組件能夠完全理解32位RGBA像素格式,出于某些未知的原因,顯示的應用程序仍將出現反轉的顏色。這會(huì )導致在開(kāi)發(fā)過(guò)程中浪費大量時(shí)間,因為不僅需要追蹤哪個(gè)組件在排序方面(比如32位像素格式的紅色和藍色組分)與其他一切不一致,而且還需要研究如何對它們進(jìn)行反轉。

  ●同步是第三個(gè)領(lǐng)域,此處旨在盡可能異步運行以減少排隊和延遲。主要問(wèn)題在于,當系統中存在零拷貝路徑、并且兩個(gè)或多個(gè)設備正在直接使用同一個(gè)內存時(shí),這些組件之間的同步將變得極為重要。例如,如果顯示處理器在GPU或視頻處理器完成寫(xiě)入之前便開(kāi)始從緩沖區中進(jìn)行讀取,則會(huì )導致屏幕出現奇怪的偽像。在較早的Android版本(Jellybean之前)中,渲染流水線(xiàn)中的每個(gè)組件通過(guò)執行以下一系列步驟處理和控制Android用戶(hù)空間的同步:處理軟件驅動(dòng)程序中的命令;在硬件中執行其任務(wù);等待任務(wù)在驅動(dòng)程序中完成;以及將責任傳遞給管線(xiàn)的下一階段。盡管這會(huì )使組件之間的同步方法變得簡(jiǎn)單容易,但也會(huì )造成管線(xiàn)出現暫停間隙,從而使流暢視覺(jué)內容之間出現差異并且中斷最終用戶(hù)體驗。但是,一種全新同步化方法Android Fences已添加至平臺;只要軟件驅動(dòng)程序支持它們,則允許在管線(xiàn)的每個(gè)階段針對其組件執行CPU端處理和排隊工作,即便前一階段尚未在硬件中完成。這將大幅縮短一個(gè)硬件完成與下一個(gè)硬件開(kāi)始之間的間隔。然而,要充分利用Android Fences的優(yōu)勢,還需要渲染管線(xiàn)中的每個(gè)組件均支持它們。如果所有組件均支持Android Fences,但其中一個(gè)組件出現漏洞,則會(huì )出現問(wèn)題。如果三個(gè)或更多個(gè)不同供應商提供的軟件驅動(dòng)程序均支持 Android Fences,但其中一個(gè)出現漏洞,則很難進(jìn)行追蹤、并且需要與多個(gè)供應商一起執行三項單獨的調查。同時(shí)還有可能出現此種情況:只有當某個(gè)供應商的組件使用標準接口與其他供應商的組件進(jìn)行通信時(shí),該漏洞才會(huì )顯現出來(lái)。



關(guān)鍵詞: Android ARM

評論


相關(guān)推薦

技術(shù)專(zhuān)區

關(guān)閉
国产精品自在自线亚洲|国产精品无圣光一区二区|国产日产欧洲无码视频|久久久一本精品99久久K精品66|欧美人与动牲交片免费播放
<dfn id="yhprb"><s id="yhprb"></s></dfn><dfn id="yhprb"><delect id="yhprb"></delect></dfn><dfn id="yhprb"></dfn><dfn id="yhprb"><delect id="yhprb"></delect></dfn><dfn id="yhprb"></dfn><dfn id="yhprb"><s id="yhprb"><strike id="yhprb"></strike></s></dfn><small id="yhprb"></small><dfn id="yhprb"></dfn><small id="yhprb"><delect id="yhprb"></delect></small><small id="yhprb"></small><small id="yhprb"></small> <delect id="yhprb"><strike id="yhprb"></strike></delect><dfn id="yhprb"></dfn><dfn id="yhprb"></dfn><s id="yhprb"><noframes id="yhprb"><small id="yhprb"><dfn id="yhprb"></dfn></small><dfn id="yhprb"><delect id="yhprb"></delect></dfn><small id="yhprb"></small><dfn id="yhprb"><delect id="yhprb"></delect></dfn><dfn id="yhprb"><s id="yhprb"></s></dfn> <small id="yhprb"></small><delect id="yhprb"><strike id="yhprb"></strike></delect><dfn id="yhprb"><s id="yhprb"></s></dfn><dfn id="yhprb"></dfn><dfn id="yhprb"><s id="yhprb"></s></dfn><dfn id="yhprb"><s id="yhprb"><strike id="yhprb"></strike></s></dfn><dfn id="yhprb"><s id="yhprb"></s></dfn>