DirectFB的架構介紹


一:DirectFB簡介

      DirectFB是一個輕量級的提供硬件圖形加速,輸入設備處理和抽象的圖形庫,它集成了支持半透明的視窗系統以及在LinuxFramebuffer驅動之上的多層顯示。它是一個用軟件封裝當前硬件無法支持的圖形算法來完成硬件加速的層。DirectFB是為嵌入式系統而設計。它是以最小的資源開銷來實現最高的硬件加速性能。

      DirectFB是圖形API存在於Frame Buffer層之上與高級圖形管理層如GTK+等之下的。它可以以很小的系統資源占用來提供圖形硬件加速功能,提供類如多路a通道渲染模型等高級圖像操作。它不修改Linux內核,除了標准C庫沒有其他庫的依賴。應用在了基於Linux系統的DTV顯示系統的研發和其他有關Linux顯示界面的項目上。支持市面上絕大多數顯示卡,支持鍵盤、鼠標、遙控器、游戲手柄、觸摸屏等輸入設備。支持JPEG、PNG、GIF、mpeg1/2、AVI、MOV、Flash、Video4Linux、DirectFB bitmap font和TrueType等音視頻文件和字體。

 

二:DirectFB在系統的位置
      從GUI整個系統架構來講,對於一般的MMP,DTV和STB來說,下面圖中是比較經典的結構。 DirectFB都處於QT,GTK+這樣的高級GUI框架的下面,Linux系統驅動的上面。如下圖所示:

   從功能上面來講,下面圖中比較形象的說明了DirectFB的主要作用:圖形,文字的處理(DirectFB把TS經過Decoder處理之后的碼流,再加上圖形和文字,一起傳給視頻的芯片),如下圖所示:

 

 

三:DirectFB GUI的架構

     對於上層的GUI高級框架來說,DirectFB是透明的,下圖是一個更加細化的DirectFB的結構圖:

       對於底層的驅動來說,DirectFB里面負責和硬件打交道的顯卡的驅動(gfxdriver)和顯示系統(system),這里面gfxdriver是和各個硬件平台相關的,有可能需要自己寫。 為了更易於理解DirectFB,需要先介紹幾個DirectFB里面的概念:

  • Layers:代表互相獨立的圖形緩存。大多數嵌入式設備都有多個layer。多個layer根據對應的alpha值混合 在一起,從而顯示出來。 
  • Surface:代表一塊預留的內存,來保存像素數據。DirectFB中的Drawing,Bilitting操作就是基於 surface的。Surface的內存根據設定,可以從系統中分配,也可以從顯卡的內存中分配。
  • Primary Surface:代表一個特殊layer的特殊surface。如果primary surface是單緩沖的,任何對於 primary surface的操作都會直接反應到顯示屏上。
  • Subsurface:是一個surfac的子集,但是自身並不占有任何內存。
  • Window/Windowstack:控制一個layer中的surface該顯示什么。Window屬於某個背景可以設定的layer。 每個window有自己的surface,window用這個surface來組合圖像。 

       比如說下圖中有三個Layer,最下面的Layer是一幅背景圖,中間的Layer是一個透明的帶有一個“igel”的Layer,最上面是一個透明的帶有subtitle的Layer,最后我們在顯示器中看到的就是各個Layer的混合。

        再比如說下面這幅圖,Lower Layer是一個全屏模式的Layer,它的背景圖片渲染在自己的SurFace上面。Video area是一個SurFace,用來顯示video。Upper Layer通過window stack/window 來顯示應用程序的內容,而且Upper Layer是一個透明的Layer,這樣混合之后,可以透過上面的Layer看到下面的video。

 


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM