DirectFB學習筆記

來源:互聯網
上載者:User
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等音視頻檔案和字型。

 

上層API支援DirectFB的有:

XDirectFB、DirectFBGL、GTK+、DFBTerm、DFBSee、DFBPoint、MythTV、Qt on DirectFB、SDL(Simple Directmedia Layer)。

 

DirectFB官方宣稱支援的作業系統:

Linux、FreeBSD/NetBSD/OpenBSD、Mac OS X。

 

uCLinux、CELinux均能找到一個不完整的移植案例。

比較了一下,相對gtk+、miniGUI等來說,DirectFB的推廣沒有對方做得好,起碼沒有見到移植到Windows系列平台上去的Roadmap。

關於DirectFB的layer問題

和石可箴討論了一下DPF系統顯示的layer數量的問題,總結出layer支援數量的多少要靠晶片和驅動的共同支援才能實現。以前DTV系統中就有若干個OSD層、Video層、Cursor層等。網上查了一下DirectFB能支援的layer層數,發現對於DirectFB的layer來說有兩個層面上的理解:

1.作為硬體層面:硬體層面中layer的多寡取決於晶片的硬體資源。在DirectFB中使用的是IDirectFBDisplayLayer介面。其內容將直接顯示在螢幕上。

2.作為軟體層面:DirectFB沒有專門的介面,但是可以利用IDirectFBWindow介面自己建立起多layer結構。如使用IDirectFBWindow->SetOpacity(IDirectFBWindow *thiz, __u8 opacity)來實現這樣的結構。

> IDirectFBWindow  OSD         <--highest window

> IDirectFBWindow  video with video Provider

> IDirectFBWindow  mpegstill

> IDirectFBWindow  background  with image Provider<--lowest window

通過設定其opacity來實現一個硬體layer上的4個不同的layer。

根據這個實現方法,以及DirectFB直接將FrameBuffer的memory mapping到application的memory中的工作原理,突然聯想到了RAMDAC,猜想我們DPF中可能也有這種器件。隨即先查詢了RAMDAC的相關資料,RAMDAC的作用是把數位影像資料轉換成電腦顯示需要的類比資料。顯示器收到的是RAMDAC處理過後的類比型號。RAMDAC經曆了與GPU分開放置——合并在一顆晶片——又分開放置的變遷過程,主要是成本與效能上的考量所致。然後查了一下DPF中是否也有類似的器件,沒有發現,作罷。

DirectFB的安裝流程

1.       解壓DirectFB-1.0.0.tar.gz包

2.       入此目錄執行

# ./configure

# make

# make install

 

一切正常。

DirectFB Sample的編譯

先拿官方例子玩玩,第一次直接用#gcc draw_linc.c –o draw,報錯,No such file or directory ‘directfb.h’

解決方案是include上DirectFB的安裝目錄,# gcc –I/usr/local/directfb draw_linc.c –o draw

 

這次是在link的時候報錯,很多undefined reference to ’xxxx’

補上lib目錄,# gcc -L/usr/local/lib -I/usr/local/include/directfb draw_line.c -o draw

 

但發現還是報錯,根據提示,查看了/usr/local/lib/pkgconfig的directfb.pc檔案,發現裡面有編譯參數資訊

prefix=/usr/local

exec_prefix=${prefix}

libdir=${exec_prefix}/lib

includedir=${prefix}/include

 

Name: DirectFB

Description: Graphics and windowing library for the Linux frame buffer device

Version: 1.0.0

Requires: fusion direct

Libs: -L${libdir} -ldirectfb -lpthread -ldl -lz

Cflags: -D_REENTRANT -I${prefix}/include/directfb

 

顯然還要加上參數。

解決方案如下,# gcc -L/usr/local/lib -I/usr/local/include/directfb -ldirectfb -lpthread -ldl -lz draw_line.c -o draw

編譯通過。

 

當然,最方便的方法是pkg-config,因為DirectFB安裝時已經自動設定好。

# gcc `pkg-config --cflags --libs directfb` draw_line.c -o draw

編譯通過。

 

DirectFB Sample的運行

直接運行./draw,在開啟framebuffer的時候報錯。

查詢結果是framebuffer也需要配置一下。

在/boot/grub/menu.lst中增加vga=0x317這個參數。

重啟後,再次運行./draw,framebuffer錯誤已經解決,但又出現找不到shared libraries的問題。

添加# export LD_LIBRARY_PATH=/usr/DirectFB25/lib後,執行檔案時又回到了framebuffer出錯時的狀態“/dev/fb0: No such file or directory”。暈倒了。周一繼續查底層的framebuffer哪裡有問題。

感謝上帝終於調通了,果然是底層FrameBuffer的問題。方法是在/boot/grub/menu.lst中的kernel這行後面加上vga=0x317,reboot後,啟動畫面中出現了兩隻可愛的小企鵝,這下我確信FrameBuffer開啟了。運行程式後一切正常。

但是有一點要注意,在新開啟一個終端後,為了運行DirectFB程式,必須要先設定一個環境變數,export LD_LIBRARY_PATH=/usr/local/lib。將這句話放在/root/.bashrc中,有效。明天的任務就是load一個圖片出來。

一切ok,完成了剩餘三個sample後,總結了一下,官方的五個sample提供了畫線、畫圖片、畫文字、圖片按照鍵盤響應上下移動,圖片按照鍵盤響應隨機移動。

Sample中圖片對象的建立都是用CreateImageProvider來實現的,經過實測,可以支援的映像格式為:jpg、png、gif,不支援的映像格式為:bmp、tif。

 

DirectFB的重新總結

經過多方面資料驗證,DirectFB是將FrameBuffer重新封裝,提供新的、功能較強大的圖形API介面供上層GTK+、QT等調用。但自身並不提供控制項,如果要實現下拉式功能表等效果,必須使用GTK+等進階圖形庫調用DirectFB來實現。

DirectFB的學習

Today I learn the global settings of DirecFB: /etc/directfbrc, Every DirectFB application will read that setting file at first. And the parameter shows below can also be transmitted by the prefix --dfb behind the ./filename.

I’ve tried the parameters as below.

聯繫我們

該頁面正文內容均來源於網絡整理,並不代表阿里雲官方的觀點,該頁面所提到的產品和服務也與阿里云無關,如果該頁面內容對您造成了困擾,歡迎寫郵件給我們,收到郵件我們將在5個工作日內處理。

如果您發現本社區中有涉嫌抄襲的內容,歡迎發送郵件至: info-contact@alibabacloud.com 進行舉報並提供相關證據,工作人員會在 5 個工作天內聯絡您,一經查實,本站將立刻刪除涉嫌侵權內容。

A Free Trial That Lets You Build Big!

Start building with 50+ products and up to 12 months usage for Elastic Compute Service

  • Sales Support

    1 on 1 presale consultation

  • After-Sales Support

    24/7 Technical Support 6 Free Tickets per Quarter Faster Response

  • Alibaba Cloud offers highly flexible support services tailored to meet your exact needs.