適用於Android的PowerVR影像架構
2015/08/21-李佳玲
在建置低功耗的電腦視覺演算法時,記憶體頻寬是主要面臨的瓶頸。幸運的是,Imagination開發了一套創新的解決方案,可解決行動和嵌入式裝置的常見問題 ─ 這套解決方案稱為 PowerVR Imaging Framework (PowerVR影像架構)。
適用於Android的PowerVR影像架構包含一組OpenCL和EGL應用程式介面(API)的延伸程式,可使在PowerVR GPU上執行的軟體能與CPU、ISP和VDE等其他元件有效的互通。這些延伸程式能在橫跨多個硬體元件上實現共享的記憶體分配與軟體的管線建置,而且無需冗餘的記憶體複製(稱為零複製;zero-copy)
此外,延伸程式能實現YUV影像的直接操作,這是許多電腦視覺演算法所需要的,同時,還能讓GPU原生地讀取YUV影像,並在資料從記憶體讀取到硬體暫存器時直接轉換到RGB 格式,因此可避免頻寬成本,與其它必須在轉換時先在記憶體中以RGB格式建立影像複本的方式不同。
圖一所示為在Android中的影像處理軟體管線的前端,它在ISP和GPU之間建置了零複製流程。ISP會擷取預先處理好的影像感測器資料,然後寫入到系統記憶體中的Android Gralloc(繪圖配置)緩衝器。在此範例中,ISP會產生YUV NV12格式的影像資料,其亮度和色度資料是儲存在兩個不同的平面中。然後,GPU讀取此影像資料,並各別在Y和UV平面上運算。
PowerVR影像架構是以此方式來配置系統:首先,它被用來實例化(instantiate)兩個EGL影像指標(屬於EGLImageKHR類型),指標會被映射到Y和UV平面上;為了實現OpenCL在GPU上的處理,兩個OpenCL影像指標(屬於image2d_t類型)之後會從EGL影像產生出來。
為了獲得此架構的零複製效益,OpenCL核心軟體會被寫入,所以它能取得兩個影像參數和一個取樣器。PowerVR GPU會利用專屬的硬體模塊(稱為紋理處理單元,TPU)來執行讀取(或取樣)這些型態的變數運算。取樣的第一個影像會傳回亮度(y)值,然後取樣的第二個影像會傳回包含色度(u, v)對的向量。
在取樣影像時,TPU還可被配置以用來建置影像的內插和邊界畫素的處理等特性。PowerVR Series6 GPU是以純量架構為基礎,這表示,當運算向量的個別分量時,不會有效率的損失。
圖二所示的是如何將PowerVR影像架構整合至Android中,並以圖例說明零複製流程。此架構是整合在Android軟體堆疊的程式庫層,能在不同API之間有效互通,包括OpenCL、OpenGL ES、以及OpenVX等新興的API。寫在這些API中的程式碼能在ISP、GPU、CPU和 VDE等底層硬體上通訊並有效地共享資料。
在此範例中,來自ISP的資料訊框會放在記憶體中,然後直接串流到GPU進行處理,例如,利用上述解釋的零複製建置方式。針對每個輸入訊框,GPU會產生一個輸出訊框,它會映射到一個EGL_GL_TEXTURE_2D的物件,以便在螢幕上渲染。
在Android中,ISP硬體的存取是由相機的硬體抽象層(HAL)來提供,而VDE硬體的存取是由視訊的HAL提供。因為此架構是整合在程式庫層,因此設計人員能以更客製化、差異化的軟體解決方案來擴展或取代既有的相機和媒體播放器的應用程式。
讀者能從目前已整合於多款行動裝置中的PowerVR影像架構中找到多個延伸程式,包括華碩ZenFone 2 ZE551ML 智慧型手機 (Intel Atom Z3680處理器、PowerVR G6430 GPU)。
DIGITIMES中文網 原文網址: 適用於Android的PowerVR影像架構 http://www.digitimes.com.tw/tw/dt/n/shwnws.asp?cnlid=13&cat=10&id=0000439856_LWN7G1SN6M924E5H0WQXL#ixzz3jPIDSk5T