精华内容
下载资源
问答
  • DirectFB-1.6.3.tar directfb - 下载 - 搜珍网
    2021-05-28 10:16:29

    DirectFB-1.6.3/

    DirectFB-1.6.3/directfb.pc.in

    DirectFB-1.6.3/systems/

    DirectFB-1.6.3/systems/pvr2d/

    DirectFB-1.6.3/systems/pvr2d/pvr2d_surface_pool.c

    DirectFB-1.6.3/systems/pvr2d/Makefile.am

    DirectFB-1.6.3/systems/pvr2d/pvr2d_system.h

    DirectFB-1.6.3/systems/pvr2d/pvr2d_primary.h

    DirectFB-1.6.3/systems/pvr2d/Makefile.in

    DirectFB-1.6.3/systems/pvr2d/pvr2d_primary.c

    DirectFB-1.6.3/systems/pvr2d/pvr2d_system.c

    DirectFB-1.6.3/systems/x11vdpau/

    DirectFB-1.6.3/systems/x11vdpau/x11types.h

    DirectFB-1.6.3/systems/x11vdpau/x11.c

    DirectFB-1.6.3/systems/x11vdpau/x11input.c

    DirectFB-1.6.3/systems/x11vdpau/Makefile.am

    DirectFB-1.6.3/systems/x11vdpau/primary.c

    DirectFB-1.6.3/systems/x11vdpau/x11.h

    DirectFB-1.6.3/systems/x11vdpau/primary.h

    DirectFB-1.6.3/systems/x11vdpau/README

    DirectFB-1.6.3/systems/x11vdpau/Makefile.in

    DirectFB-1.6.3/systems/x11vdpau/x11vdpau_surface_pool.c

    DirectFB-1.6.3/systems/x11vdpau/x11vdpau_surface_pool.h

    DirectFB-1.6.3/systems/mesa/

    DirectFB-1.6.3/systems/mesa/mesa_layer.c

    DirectFB-1.6.3/systems/mesa/mesa_surface_pool.c

    DirectFB-1.6.3/systems/mesa/vt.h

    DirectFB-1.6.3/systems/mesa/idirectfbgl2context.c

    DirectFB-1.6.3/systems/mesa/Makefile.am

    DirectFB-1.6.3/systems/mesa/mesa_system.c

    DirectFB-1.6.3/systems/mesa/mesa_system.h

    DirectFB-1.6.3/systems/mesa/Makefile.in

    DirectFB-1.6.3/systems/mesa/vt.c

    DirectFB-1.6.3/systems/mesa/mesa_screen.c

    DirectFB-1.6.3/systems/mesa/idirectfbgl2.c

    DirectFB-1.6.3/systems/sdl/

    DirectFB-1.6.3/systems/sdl/sdl.h

    DirectFB-1.6.3/systems/sdl/sdlgfx.c

    DirectFB-1.6.3/systems/sdl/sdl_surface_pool.c

    DirectFB-1.6.3/systems/sdl/Makefile.am

    DirectFB-1.6.3/systems/sdl/primary.c

    DirectFB-1.6.3/systems/sdl/primary.h

    DirectFB-1.6.3/systems/sdl/sdlinput.c

    DirectFB-1.6.3/systems/sdl/sdl.c

    DirectFB-1.6.3/systems/sdl/Makefile.in

    DirectFB-1.6.3/systems/x11/

    DirectFB-1.6.3/systems/x11/glx_surface_pool.c

    DirectFB-1.6.3/systems/x11/xwindow.h

    DirectFB-1.6.3/systems/x11/x11image.h

    DirectFB-1.6.3/systems/x11/vpsmem_surface_pool.h

    DirectFB-1.6.3/systems/x11/idirectfbgl.c

    DirectFB-1.6.3/systems/x11/surfacemanager.c

    DirectFB-1.6.3/systems/x11/x11_surface_pool.h

    DirectFB-1.6.3/systems/x11/x11_surface_pool_bridge.h

    DirectFB-1.6.3/systems/x11/x11types.h

    DirectFB-1.6.3/systems/x11/x11.c

    DirectFB-1.6.3/systems/x11/surfacemanager.h

    DirectFB-1.6.3/systems/x11/x11input.c

    DirectFB-1.6.3/systems/x11/Makefile.am

    DirectFB-1.6.3/systems/x11/primary.c

    DirectFB-1.6.3/systems/x11/x11.h

    DirectFB-1.6.3/systems/x11/x11image.c

    DirectFB-1.6.3/systems/x11/primary.h

    DirectFB-1.6.3/systems/x11/x11_surface_pool.c

    DirectFB-1.6.3/systems/x11/README

    DirectFB-1.6.3/systems/x11/xwindow.c

    DirectFB-1.6.3/systems/x11/Makefile.in

    DirectFB-1.6.3/systems/x11/x11_surface_pool_bridge.c

    DirectFB-1.6.3/systems/x11/vpsmem_surface_pool.c

    DirectFB-1.6.3/systems/x11/glx_surface_pool.h

    DirectFB-1.6.3/systems/osx/

    DirectFB-1.6.3/systems/osx/osx.c

    DirectFB-1.6.3/systems/osx/osxinput.c

    DirectFB-1.6.3/systems/osx/osx.h

    DirectFB-1.6.3/systems/osx/Makefile.am

    DirectFB-1.6.3/systems/osx/primary.c

    DirectFB-1.6.3/systems/osx/primary.h

    DirectFB-1.6.3/systems/osx/Makefile.in

    DirectFB-1.6.3/systems/Makefile.am

    DirectFB-1.6.3/systems/devmem/

    DirectFB-1.6.3/systems/devmem/surfacemanager.c

    DirectFB-1.6.3/systems/devmem/devmem_surface_pool.c

    DirectFB-1.6.3/systems/devmem/surfacemanager.h

    DirectFB-1.6.3/systems/devmem/Makefile.am

    DirectFB-1.6.3/systems/devmem/devmem.h

    DirectFB-1.6.3/systems/devmem/Makefile.in

    DirectFB-1.6.3/systems/devmem/devmem.c

    DirectFB-1.6.3/systems/fbdev/

    DirectFB-1.6.3/systems/fbdev/fbdev_surface_pool.c

    DirectFB-1.6.3/systems/fbdev/fbdev.c

    DirectFB-1.6.3/systems/fbdev/vt.h

    DirectFB-1.6.3/systems/fbdev/surfacemanager.c

    DirectFB-1.6.3/systems/fbdev/surfacemanager.h

    DirectFB-1.6.3/systems/fbdev/Makefile.am

    DirectFB-1.6.3/systems/fbdev/fbdev.h

    DirectFB-1.6.3/systems/fbdev/Makefile.in

    DirectFB-1.6.3/systems/fbdev/agp.h

    DirectFB-1.6.3/systems/fbdev/fb.h

    DirectFB-1.6.3/systems/fbdev/vt.c

    DirectFB-1.6.3/systems/fbdev/agp.c

    DirectFB-1.6.3/systems/dummy/

    DirectFB-1.6.3/systems/dummy/dummy.h

    DirectFB-1.6.3/systems/dummy/dummy.c

    DirectFB-1.6.3/systems/dummy/Makefile.am

    DirectFB-1.6.3/systems/dummy/Makefile.in

    DirectFB-1.6.3/systems/Makefile.in

    DirectFB-1.6.3/systems/vnc/

    DirectFB-1.6.3/systems/vnc/vnc.h

    DirectFB-1.6.3/systems/vnc/vncinput.c

    DirectFB-1.6.3/systems/vnc/Makefile.am

    DirectFB-1.6.3/systems/vnc/primary.c

    DirectFB-1.6.3/systems/vnc/primary.h

    DirectFB-1.6.3/systems/vnc/vnc.c

    DirectFB-1.6.3/systems/vnc/Makefile.in

    DirectFB-1.6.3/systems/egl/

    DirectFB-1.6.3/systems/egl/egl_system.c

    DirectFB-1.6.3/systems/egl/egl_surface_pool.c

    DirectFB-1.6.3/systems/egl/egl_primary.h

    DirectFB-1.6.3/systems/egl/Makefile.am

    DirectFB-1.6.3/systems/egl/egl_primary.c

    DirectFB-1.6.3/systems/egl/Makefile.in

    DirectFB-1.6.3/systems/egl/egl_system.h

    DirectFB-1.6.3/systems/android/

    DirectFB-1.6.3/systems/android/android_system.c

    DirectFB-1.6.3/systems/android/android_layer.c

    DirectFB-1.6.3/systems/android/idirectfbgl2context.c

    DirectFB-1.6.3/systems/android/idirectfbimageprovider_android.c

    DirectFB-1.6.3/systems/android/Makefile.am

    DirectFB-1.6.3/systems/android/android_input.c

    DirectFB-

    更多相关内容
  •  DirectFB是一个提供硬件图形加速、输入设备处理抽象并集成了透明功能窗体系统和多显示层处理的开源库。通过对底层硬件不支持的图形操作以回调函数实现,DirectFB实现硬件设备的完全抽象。另外DirectFB在设计之初就...
  • 引言  在“软件变服务”的背景下,通过网络提供服务,即...具体方案是通过Directvnc 的移植来实现的,由于Directvnc 与其它Unix 系统不同的是它通过轻量级图形库DirectFB 使用Linux 帧缓冲设备。DirectFB 在FrameBu
  • directfb

    2018-09-06 11:11:54
    directfb库,官方网站已经关闭(剩下一下羞羞的文字),这是最新版本。MD5:f5bdacde77fc653279819796ae11341e
  • 本文首先对DirectFB进行了详细的介绍,接着提出了一种宽松的、可分解的嵌入式播放器设计方案。该方案资源消耗少、可移植性强、系统各个模块间依赖度小,使得用户能够根据自己的系统需求快速设计满足自己要求的播放器...
  • 本文就如何实现DirectFB的图形加速功能做了详细的介绍,并将实现之后在性能上得到的改进与实现之前做比较,说明DirectFB在优化嵌入式系统GUI上的作用。
  • Ubuntu 上配置DirectFB环境(亲测可用)Ubuntu 上配置DirectFB环境(亲测可用)
  • DirectFB-1.6.1.tar.gz

    2016-10-26 17:14:40
    directfb1.6.1
  • 引 言  图形用户界面(Graphical User Interface,简称 GUI,又称图形用户接口)是指采用图形方式显示的计算机操作用户界面。与早期计算机使用的命令行界面相比,图形界面对于用户来说在视觉上更易于接受。...
  • DirectFB-1.4.0.tar.gz

    2020-08-28 17:54:52
    适合深挖directfb界面的人士使用,里面源码内容齐全,还有各种例子实现,有助于了解源码结构实现,增强对接口的使用
  • DirectFB-examples-1.5.2.tar.gz
  • DirectFB-1.7.7

    2017-04-18 16:29:56
    DirectFB-1.7.7源码,官网源码下载,无任何修改。可惜现在Directfb官网已关闭,故给大家分享关闭前下载的最新源码,谢谢。
  • Tina平台使用DirectFB

    2021-09-23 16:57:33
    Tina SDK支持DirectFB通过FrameBuffer进行图显示,这篇文章介绍一下使用过程 1.开启Tina DirectFB支持: make menuconfig 打开DirectFB支持,如下图所示: 2. 编译,烧录: 可以看到关于显示的两个节点,/dev/...

    Tina SDK支持DirectFB通过FrameBuffer进行图显示,这篇文章介绍一下使用过程

    1.开启Tina DirectFB支持:

    make menuconfig 打开DirectFB支持,如下图所示:

    2. 编译,烧录:

    可以看到关于显示的两个节点,/dev/fb0即是传统意义上的framebuffer,而/dev/disp则是AW为了兼容自己的显示框架和显示方案,开放的display engine设备节点,用户层可以通过/dev/disp节点直接控制视频或者图像的显示。DirectFB不依赖这个节点。

    3.FrameBuffer 与Display模块的关系

    以Sunxi V831平台为例,Display的原理如下,DE可以支持3个channel,每个channel支持4个可以做overlay叠加的图层, 其中channel 0,1是视频channel,支持YUV格式的数据输入并且可以做scaler.而channel 2 是RGB channel,支持RGB格式数据,不支持scaler,我们的framebuffer本质上就是将/dev/fb0 和 DE的某个UI 图层关联起来,确切的说是将/dev/fb0和channel 2 ,layer 0的UI图层关联起来。

     4.测试DirectFB用例:

    前面我们配置编译单的时候,选中了directFB本体和directfb的测试用例,则烧录后,文件系统中已经包括了测试用例的可执行程序。

    我们随便执行一个df_andi

    另一个用例:

     测试效果:

    经测试,其它可运行的用例包括df_flip, df_neo, df_knuckles.

    strace调试:

    strace调试与系统之间的交互行为,可以看到,显示的时候,调用热点是FBIO_WAITFORVSYNC和FBIOPAN_DISPLAY两个调用。

    root@(none):/# strace -e trace=ioctl df_andi
    (*) Direct/Thread: Started 'SigHandler' (920) [CRITICAL - OTHER/0] <85292>...
    
       ~~~~~~~~~~~~~~~~~~~~~~~~~| DirectFB 1.7.7 |~~~~~~~~~~~~~~~~~~~~~~~~~~
            (c) 2012-2015  DirectFB integrated media GmbH
            (c) 2001-2015  The world wide DirectFB Open Source Community
            (c) 2000-2004  Convergence (integrated media) GmbH
          ----------------------------------------------------------------
    
    (*) DirectFB/Core: Single Application Core. (2021-09-22 03:09)
    (*) Direct/Memcpy: Using libc memcpy()
    (*) Direct/Thread: Started 'Fusion Dispatch' (921) [MESSAGING - OTHER/0] <85292>...
    ioctl(5, VT_GETSTATE, 0xbed31a20)       = 0
    ioctl(5, VT_OPENQRY, 0x125ad8)          = 0
    ioctl(4, FBIOGET_CON2FBMAP, 0xbed31a10) = 0
    ioctl(4, FBIOPUT_CON2FBMAP, 0xbed31998) = 0
    ioctl(5, VT_ACTIVATE, 0x2)              = 0
    ioctl(5, VT_WAITACTIVE, 0x2)            = 0
    ioctl(6, TIOCSCTTY, 0)                  = 0
    ioctl(6, KDSKBMODE, 0x2)                = 0
    ioctl(6, TCGETS, {B38400 opost isig icanon echo ...}) = 0
    ioctl(6, SNDCTL_TMR_CONTINUE or TCSETSF, {B38400 opost -isig -icanon -echo ...}) = 0
    ioctl(6, KDSETMODE, 0x1)                = 0
    ioctl(6, VT_SETMODE, 0xbed31900)        = 0
    (*) Direct/Thread: Started 'VT Switcher' (922) [CRITICAL - OTHER/0] <85292>...
    (*) Direct/Thread: Started 'VT Flusher' (923) [DEFAULT - OTHER/0] <85292>...
    ioctl(4, FBIOGET_FSCREENINFO, 0x1257f0) = 0
    (*) DirectFB/FBDev: Found '' (ID 0) with frame buffer at 0x00000000, 2400k (MMIO 0x00000000, 0k)
    ioctl(4, FBIOGET_VSCREENINFO, 0x125928) = 0
    ioctl(4, FBIOPUT_VSCREENINFO, 0x125888) = 0
    ioctl(4, FBIOGETCMAP, 0x1259d4)         = 0
    ioctl(7, EVIOCGNAME(31), "axp2101-pek\0") = 12
    ioctl(7, EVIOCGBIT(0, 4), [EV_SYN, EV_KEY, EV_REP]) = 4
    ioctl(7, EVIOCGBIT(EV_KEY, 96), [KEY_POWER]) = 96
    ioctl(7, EVIOCGID, {ID_BUS=0, ID_VENDOR=0, ID_PRODUCT=0, ID_VERSION=0}) = 0
    ioctl(7, EVIOCGNAME(31), "sunxi-gpadc0\0") = 13
    ioctl(7, EVIOCGBIT(0, 4), [EV_SYN, EV_KEY, EV_REP]) = 4
    ioctl(7, EVIOCGBIT(EV_KEY, 96), [KEY_ENTER, KEY_HOME, KEY_VOLUMEDOWN, KEY_VOLUMEUP, ...]) = 96
    ioctl(7, EVIOCGID, {ID_BUS=25, ID_VENDOR=1, ID_PRODUCT=1, ID_VERSION=256}) = 0
    ioctl(7, EVIOCGNAME(31), "sunxi-gpadc0\0") = 13
    ioctl(7, EVIOCGBIT(0, 4), [EV_SYN, EV_KEY, EV_REP]) = 4
    ioctl(7, EVIOCGBIT(EV_KEY, 96), [KEY_ENTER, KEY_HOME, KEY_VOLUMEDOWN, KEY_VOLUMEUP, ...]) = 96
    ioctl(7, EVIOCGID, {ID_BUS=25, ID_VENDOR=1, ID_PRODUCT=1, ID_VERSION=256}) = 0
    ioctl(7, EVIOCGBIT(EV_LED, 4), [ 0 ])   = 4
    (*) Direct/Thread: Started 'Linux Input' (924) [INPUT - OTHER/0] <85292>...
    (*) DirectFB/Input: sunxi-gpadc0 0.1 (directfb.org)
    ioctl(7, EVIOCGBIT(EV_ABS, 8), [ 0 ])   = 8
    (*) Direct/Thread: Started 'Hotplug with Linux Input' (925) [INPUT - OTHER/0] <85292>...
    (*) DirectFB/Input: Hot-plug detection enabled with Linux Input Driver
    (*) DirectFB/Graphics: Generic Software Rasterizer 0.7 (directfb.org)
    ioctl(4, FBIOPUT_VSCREENINFO, 0xbed31850) = 0
    (*) DirectFB/Core/WM: Default 0.3 (directfb.org)
    (*) Direct/Thread: Started 'Genefx' (926) [DEFAULT - OTHER/0] <85292>...
    ioctl(4, FBIOPUT_VSCREENINFO, 0xbed318c8) = 0
    ioctl(4, FBIOPUT_VSCREENINFO, 0xbed318b8) = 0
    ioctl(4, FBIOPUT_VSCREENINFO, 0xbed31828) = 0
    (*) FBDev/Mode: Setting 640x480 RGB32
    ioctl(4, FBIOPUT_VSCREENINFO, 0xbed31680) = 0
    ioctl(4, FBIOGET_VSCREENINFO, 0xbed31720) = 0
    ioctl(4, FBIOGET_FSCREENINFO, 0x1257f0) = 0
    (*) FBDev/Mode: Switched to 640x480 (virtual 640x480) at 32 bit (RGB32), pitch 2560
    ioctl(4, FBIOPUTCMAP, 0x1259ec)         = 0
    ioctl(4, FBIOPUT_VSCREENINFO, 0xbed31928) = 0
    ioctl(4, FBIOPUT_VSCREENINFO, 0xbed31918) = 0
    ioctl(4, FBIOPUT_VSCREENINFO, 0xbed31888) = 0
    ioctl(4, FBIOPUT_VSCREENINFO, 0xbed31878) = 0
    (*) FBDev/Mode: Setting 640x480 RGB32
    ioctl(4, FBIOPUT_VSCREENINFO, 0xbed31668) = 0
    ioctl(4, FBIOGET_VSCREENINFO, 0xbed31708) = 0
    ioctl(4, FBIOGET_FSCREENINFO, 0x1257f0) = 0
    (*) FBDev/Mode: Switched to 640x480 (virtual 640x480) at 32 bit (RGB32), pitch 2560
    ioctl(4, FBIOPUTCMAP, 0x1259ec)         = 0
    ioctl(4, FBIOPUT_VSCREENINFO, 0xbed31928) = 0
    ioctl(4, FBIOPUT_VSCREENINFO, 0xbed31908) = 0
    ioctl(4, FBIOPUT_VSCREENINFO, 0xbed318f8) = 0
    ioctl(4, FBIOPUT_VSCREENINFO, 0xbed31868) = 0
    (*) Direct/Interface: Loaded 'FT2' implementation of 'IDirectFBFont'.
    (*) Direct/Interface: Loaded 'PNG' implementation of 'IDirectFBImageProvider'.
    (*) Direct/Interface: Using 'JPEG' implementation of 'IDirectFBImageProvider'.
    (*) FBDev/Mode: Setting 640x480 RGB32
    ioctl(4, FBIOPUT_VSCREENINFO, 0xbed31840) = 0
    ioctl(4, FBIOGET_VSCREENINFO, 0xbed318e0) = 0
    ioctl(4, FBIOGET_FSCREENINFO, 0x1257f0) = 0
    (*) FBDev/Mode: Switched to 640x480 (virtual 640x960) at 32 bit (RGB32), pitch 2560
    ioctl(4, FBIOPUTCMAP, 0x1259ec)         = 0
    ioctl(4, FBIO_WAITFORVSYNC, 0xb6c03b6c) = 0
    ioctl(4, FBIOPAN_DISPLAY, 0x125888)     = 0
    ioctl(4, FBIO_WAITFORVSYNC, 0xb6c03b6c) = 0
    ioctl(4, FBIOPAN_DISPLAY, 0x125888)     = 0
    ioctl(4, FBIO_WAITFORVSYNC, 0xb6c03b6c) = 0
    ioctl(4, FBIOPAN_DISPLAY, 0x125888)     = 0
    ioctl(4, FBIO_WAITFORVSYNC, 0xb6c03b6c) = 0
    ioctl(4, FBIOPAN_DISPLAY, 0x125888)     = 0
    ioctl(4, FBIO_WAITFORVSYNC, 0xb6c03b6c) = 0
    ioctl(4, FBIOPAN_DISPLAY, 0x125888)     = 0
    ioctl(4, FBIO_WAITFORVSYNC, 0xb6c03b6c) = 0
    ioctl(4, FBIOPAN_DISPLAY, 0x125888)     = 0
    ioctl(4, FBIO_WAITFORVSYNC, 0xb6c03b6c) = 0
    ioctl(4, FBIOPAN_DISPLAY, 0x125888)     = 0
    ioctl(4, FBIO_WAITFORVSYNC, 0xb6c03b6c) = 0
    ioctl(4, FBIOPAN_DISPLAY, 0x125888)     = 0
    ioctl(4, FBIO_WAITFORVSYNC, 0xb6c03b6c) = 0
    ioctl(4, FBIOPAN_DISPLAY, 0x125888)     = 0
    ioctl(4, FBIO_WAITFORVSYNC, 0xb6c03b6c) = 0
    ioctl(4, FBIOPAN_DISPLAY, 0x125888)     = 0
    ioctl(4, FBIO_WAITFORVSYNC, 0xb6c03b6c) = 0
    ioctl(4, FBIOPAN_DISPLAY, 0x125888)     = 0
    ioctl(4, FBIO_WAITFORVSYNC, 0xb6c03b6c) = 0
    ioctl(4, FBIOPAN_DISPLAY, 0x125888)     = 0
    ioctl(4, FBIO_WAITFORVSYNC, 0xb6c03b6c) = 0
    ioctl(4, FBIOPAN_DISPLAY, 0x125888)     = 0
    ioctl(4, FBIO_WAITFORVSYNC, 0xb6c03b6c) = 0
    ioctl(4, FBIOPAN_DISPLAY, 0x125888)     = 0
    ioctl(4, FBIO_WAITFORVSYNC, 0xb6c03b6c) = 0
    ioctl(4, FBIOPAN_DISPLAY, 0x125888)     = 0
    ioctl(4, FBIO_WAITFORVSYNC, 0xb6c03b6c) = 0
    ioctl(4, FBIOPAN_DISPLAY, 0x125888)     = 0
    ioctl(4, FBIO_WAITFORVSYNC, 0xb6c03b6c) = 0
    ioctl(4, FBIOPAN_DISPLAY, 0x125888)     = 0
    ioctl(4, FBIO_WAITFORVSYNC, 0xb6c03b6c) = 0
    ioctl(4, FBIOPAN_DISPLAY, 0x125888)     = 0
    ioctl(4, FBIO_WAITFORVSYNC, 0xb6c03b6c) = 0
    ioctl(4, FBIOPAN_DISPLAY, 0x125888)     = 0
    ioctl(4, FBIO_WAITFORVSYNC, 0xb6c03b6c) = 0
    ioctl(4, FBIOPAN_DISPLAY, 0x125888)     = 0
    ioctl(4, FBIO_WAITFORVSYNC, 0xb6c03b6c) = 0
    ioctl(4, FBIOPAN_DISPLAY, 0x125888)     = 0
    ioctl(4, FBIO_WAITFORVSYNC, 0xb6c03b6c) = 0
    ioctl(4, FBIOPAN_DISPLAY, 0x125888)     = 0
    ioctl(4, FBIO_WAITFORVSYNC, 0xb6c03b6c) = 0
    ioctl(4, FBIOPAN_DISPLAY, 0x125888)     = 0
    ioctl(4, FBIO_WAITFORVSYNC, 0xb6c03b6c) = 0
    ioctl(4, FBIOPAN_DISPLAY, 0x125888)     = 0
    ioctl(4, FBIO_WAITFORVSYNC, 0xb6c03b6c) = 0
    ioctl(4, FBIOPAN_DISPLAY, 0x125888)     = 0
    ioctl(4, FBIO_WAITFORVSYNC, 0xb6c03b6c) = 0
    ioctl(4, FBIOPAN_DISPLAY, 0x125888)     = 0
    

    在directfb画面上添加文字:

    执行cout进入编译目录,删除掉旧的编译环境:

     然后进入dl目录,解压

    修改df_andi的的实现,增加一条字符串打印,并调整之前打印的坐标,使之能在屏幕上显示出来,之后,重新编译整个Tina工程。

    可以看到"Zilong lover"字符串已经清晰的显示在画面底部

    究竟写英文需要不需要字库呢? pidof df_andi得到进程PID,进入到proc PID目录下看每个线程的文件打开情况,发现没有打开字库文件的线程存在.

    root@(none):/proc/909/task# ls -l */fd
    909/fd:
    lrwx------    1 root     root            64 Jan  2 10:33 0 -> /dev/console
    lrwx------    1 root     root            64 Jan  2 10:33 1 -> /dev/console
    lr-x------    1 root     root            64 Jan  2 10:33 10 -> pipe:[1552]
    l-wx------    1 root     root            64 Jan  2 10:33 11 -> pipe:[1552]
    lrwx------    1 root     root            64 Jan  2 10:33 14 -> socket:[1553]
    lrwx------    1 root     root            64 Jan  2 10:33 2 -> /dev/console
    lrwx------    1 root     root            64 Jan  2 10:33 3 -> /dev/console
    lrwx------    1 root     root            64 Jan  2 10:33 4 -> /dev/fb0
    lr-x------    1 root     root            64 Jan  2 10:33 5 -> /dev/tty0
    lrwx------    1 root     root            64 Jan  2 10:33 6 -> /dev/tty2
    lrwx------    1 root     root            64 Jan  2 10:33 7 -> /dev/input/event1
    lr-x------    1 root     root            64 Jan  2 10:33 8 -> pipe:[1551]
    l-wx------    1 root     root            64 Jan  2 10:33 9 -> pipe:[1551]
    
    910/fd:
    lrwx------    1 root     root            64 Jan  2 10:32 0 -> /dev/console
    lrwx------    1 root     root            64 Jan  2 10:32 1 -> /dev/console
    lr-x------    1 root     root            64 Jan  2 10:32 10 -> pipe:[1552]
    l-wx------    1 root     root            64 Jan  2 10:32 11 -> pipe:[1552]
    lrwx------    1 root     root            64 Jan  2 10:32 14 -> socket:[1553]
    lrwx------    1 root     root            64 Jan  2 10:32 2 -> /dev/console
    lrwx------    1 root     root            64 Jan  2 10:32 3 -> /dev/console
    lrwx------    1 root     root            64 Jan  2 10:32 4 -> /dev/fb0
    lr-x------    1 root     root            64 Jan  2 10:32 5 -> /dev/tty0
    lrwx------    1 root     root            64 Jan  2 10:32 6 -> /dev/tty2
    lrwx------    1 root     root            64 Jan  2 10:32 7 -> /dev/input/event1
    lr-x------    1 root     root            64 Jan  2 10:32 8 -> pipe:[1551]
    l-wx------    1 root     root            64 Jan  2 10:32 9 -> pipe:[1551]
    
    911/fd:
    lrwx------    1 root     root            64 Jan  2 10:33 0 -> /dev/console
    lrwx------    1 root     root            64 Jan  2 10:33 1 -> /dev/console
    lr-x------    1 root     root            64 Jan  2 10:33 10 -> pipe:[1552]
    l-wx------    1 root     root            64 Jan  2 10:33 11 -> pipe:[1552]
    lrwx------    1 root     root            64 Jan  2 10:33 14 -> socket:[1553]
    lrwx------    1 root     root            64 Jan  2 10:33 2 -> /dev/console
    lrwx------    1 root     root            64 Jan  2 10:33 3 -> /dev/console
    lrwx------    1 root     root            64 Jan  2 10:33 4 -> /dev/fb0
    lr-x------    1 root     root            64 Jan  2 10:33 5 -> /dev/tty0
    lrwx------    1 root     root            64 Jan  2 10:33 6 -> /dev/tty2
    lrwx------    1 root     root            64 Jan  2 10:33 7 -> /dev/input/event1
    lr-x------    1 root     root            64 Jan  2 10:33 8 -> pipe:[1551]
    l-wx------    1 root     root            64 Jan  2 10:33 9 -> pipe:[1551]
    
    912/fd:
    lrwx------    1 root     root            64 Jan  2 10:33 0 -> /dev/console
    lrwx------    1 root     root            64 Jan  2 10:33 1 -> /dev/console
    lr-x------    1 root     root            64 Jan  2 10:33 10 -> pipe:[1552]
    l-wx------    1 root     root            64 Jan  2 10:33 11 -> pipe:[1552]
    lrwx------    1 root     root            64 Jan  2 10:33 14 -> socket:[1553]
    lrwx------    1 root     root            64 Jan  2 10:33 2 -> /dev/console
    lrwx------    1 root     root            64 Jan  2 10:33 3 -> /dev/console
    lrwx------    1 root     root            64 Jan  2 10:33 4 -> /dev/fb0
    lr-x------    1 root     root            64 Jan  2 10:33 5 -> /dev/tty0
    lrwx------    1 root     root            64 Jan  2 10:33 6 -> /dev/tty2
    lrwx------    1 root     root            64 Jan  2 10:33 7 -> /dev/input/event1
    lr-x------    1 root     root            64 Jan  2 10:33 8 -> pipe:[1551]
    l-wx------    1 root     root            64 Jan  2 10:33 9 -> pipe:[1551]
    
    913/fd:
    lrwx------    1 root     root            64 Jan  2 10:33 0 -> /dev/console
    lrwx------    1 root     root            64 Jan  2 10:33 1 -> /dev/console
    lr-x------    1 root     root            64 Jan  2 10:33 10 -> pipe:[1552]
    l-wx------    1 root     root            64 Jan  2 10:33 11 -> pipe:[1552]
    lrwx------    1 root     root            64 Jan  2 10:33 14 -> socket:[1553]
    lrwx------    1 root     root            64 Jan  2 10:33 2 -> /dev/console
    lrwx------    1 root     root            64 Jan  2 10:33 3 -> /dev/console
    lrwx------    1 root     root            64 Jan  2 10:33 4 -> /dev/fb0
    lr-x------    1 root     root            64 Jan  2 10:33 5 -> /dev/tty0
    lrwx------    1 root     root            64 Jan  2 10:33 6 -> /dev/tty2
    lrwx------    1 root     root            64 Jan  2 10:33 7 -> /dev/input/event1
    lr-x------    1 root     root            64 Jan  2 10:33 8 -> pipe:[1551]
    l-wx------    1 root     root            64 Jan  2 10:33 9 -> pipe:[1551]
    
    914/fd:
    lrwx------    1 root     root            64 Jan  2 10:33 0 -> /dev/console
    lrwx------    1 root     root            64 Jan  2 10:33 1 -> /dev/console
    lr-x------    1 root     root            64 Jan  2 10:33 10 -> pipe:[1552]
    l-wx------    1 root     root            64 Jan  2 10:33 11 -> pipe:[1552]
    lrwx------    1 root     root            64 Jan  2 10:33 14 -> socket:[1553]
    lrwx------    1 root     root            64 Jan  2 10:33 2 -> /dev/console
    lrwx------    1 root     root            64 Jan  2 10:33 3 -> /dev/console
    lrwx------    1 root     root            64 Jan  2 10:33 4 -> /dev/fb0
    lr-x------    1 root     root            64 Jan  2 10:33 5 -> /dev/tty0
    lrwx------    1 root     root            64 Jan  2 10:33 6 -> /dev/tty2
    lrwx------    1 root     root            64 Jan  2 10:33 7 -> /dev/input/event1
    lr-x------    1 root     root            64 Jan  2 10:33 8 -> pipe:[1551]
    l-wx------    1 root     root            64 Jan  2 10:33 9 -> pipe:[1551]
    
    915/fd:
    lrwx------    1 root     root            64 Jan  2 10:33 0 -> /dev/console
    lrwx------    1 root     root            64 Jan  2 10:33 1 -> /dev/console
    lr-x------    1 root     root            64 Jan  2 10:33 10 -> pipe:[1552]
    l-wx------    1 root     root            64 Jan  2 10:33 11 -> pipe:[1552]
    lrwx------    1 root     root            64 Jan  2 10:33 14 -> socket:[1553]
    lrwx------    1 root     root            64 Jan  2 10:33 2 -> /dev/console
    lrwx------    1 root     root            64 Jan  2 10:33 3 -> /dev/console
    lrwx------    1 root     root            64 Jan  2 10:33 4 -> /dev/fb0
    lr-x------    1 root     root            64 Jan  2 10:33 5 -> /dev/tty0
    lrwx------    1 root     root            64 Jan  2 10:33 6 -> /dev/tty2
    lrwx------    1 root     root            64 Jan  2 10:33 7 -> /dev/input/event1
    lr-x------    1 root     root            64 Jan  2 10:33 8 -> pipe:[1551]
    l-wx------    1 root     root            64 Jan  2 10:33 9 -> pipe:[1551]
    
    916/fd:
    lrwx------    1 root     root            64 Jan  2 10:33 0 -> /dev/console
    lrwx------    1 root     root            64 Jan  2 10:33 1 -> /dev/console
    lr-x------    1 root     root            64 Jan  2 10:33 10 -> pipe:[1552]
    l-wx------    1 root     root            64 Jan  2 10:33 11 -> pipe:[1552]
    lrwx------    1 root     root            64 Jan  2 10:33 14 -> socket:[1553]
    lrwx------    1 root     root            64 Jan  2 10:33 2 -> /dev/console
    lrwx------    1 root     root            64 Jan  2 10:33 3 -> /dev/console
    lrwx------    1 root     root            64 Jan  2 10:33 4 -> /dev/fb0
    lr-x------    1 root     root            64 Jan  2 10:33 5 -> /dev/tty0
    lrwx------    1 root     root            64 Jan  2 10:33 6 -> /dev/tty2
    lrwx------    1 root     root            64 Jan  2 10:33 7 -> /dev/input/event1
    lr-x------    1 root     root            64 Jan  2 10:33 8 -> pipe:[1551]
    l-wx------    1 root     root            64 Jan  2 10:33 9 -> pipe:[1551]
    root@(none):/proc/909/task#

    关于字库的判断有个错误,df_andi代码中是有初始化字库文件的,如下的FONT宏定义

    它的定义如下:

    strace跟踪任务打开的文件

    可以看到确实有打开,只是后来又把对应的fd关闭了,所以才无法通过proc文件系统追踪的到。 

    而且我们有个意外的收获,就是cpu_idle的来源也找到了,就是/proc/stat节点.

    常见问题:

    执行用例df_andi后,终端输出failure后退出。

     根据提示信息,directfb貌似依赖/dev/tty0或者/dev/vc/*设备节点,根据提示,打开/dev/vt/*使能配置

     CONFIG_VT选项将会打开内核对Virtual Terminal的支持,CONFIG_VT 打开后,内核才会支持带显示和键盘的终端设备,由于这类终端设备上通常可以打开多个virtual termial,类似于gnome console,所以叫做virtual terminal,配置上讲:

    for example one virtual terminal can collect system messages and warnings, another one can be used for a text-mode user session, and a third could run an X session, all in parallel. Switching between virtual terminals is done with certain key combinations, usually Alt-<function key>.

     x-server即是运行于virtual console之上的,所以支持图形界面地化一定要支持VT,或许linux上chvt命令和它有关吧。

    打开后,重新编译内核,接口正确执行df_andi命令。

    结束 

    展开全文
  • DirectFrameBuffer技术介绍官方版本。包括DirectFrameBuffer技术架构,接口API,sample,描述等等
  • DirectFB-1_7_4 代码

    2018-03-01 13:12:10
    DirectFB是一个轻量级的提供硬件图形加速,输入设备处理特性和抽象的图形库
  • 本文首先对DirectFB进行了介绍,接着提出了一种新的基于DirectFB的嵌入式播放器设计方案。该方案相比于其他嵌入式GUI开发的播放器能够有效地降低资源的消耗,适用于各种中低端的场合,同时具备良好的可移植性。  1...
  • dump Directfb数据工具

    2016-05-28 17:04:29
    程序运行时执行,此工具可以把Directfb数据从画布dump到本地,并保存成PPM格式图片,很好很强大
  • 本文首先对DirectFB进行了介绍,接着提出了一种新的基于DirectFB的嵌入式播放器设计方案。该方案相比于其他嵌入式GUI开发的播放器能够有效地降低资源的消耗,适用于各种中低端的场合,同时具备良好的可移植性。  1...
  • Directfb 帮助手册

    2014-07-28 16:50:31
    帮助开发directfb 程序,提供完善接口函数,方便!
  • directfb中文API

    2014-11-29 19:45:44
    directfb中文API 版本不高 DirectFB中文社区的
  • DirectFB 开源库的源代码,好不容易从国外的资源网站找到的。。。。绝对的好用
  • 关于如何在Tina平台上使用DirectFB,请参考: Tina平台使用DirectFB_tugouxp的专栏-CSDN博客Tina SDK支持DirectFB通过FrameBuffer进行图显示,这篇文章介绍一下使用过程1.开启Tina DirectFB支持:make menuconfig ...

    关于如何在Tina平台上使用DirectFB,请参考:

    Tina平台使用DirectFB_tugouxp的专栏-CSDN博客Tina SDK支持DirectFB通过FrameBuffer进行图显示,这篇文章介绍一下使用过程1.开启Tina DirectFB支持:make menuconfig 打开DirectFB支持,如下图所示:2. 编译,烧录:可以看到关于显示的两个节点,/dev/fb0即是传统意义上的framebuffer,而/dev/disp则是AW为了兼容自己的显示框架和显示方案,开放的display engine设备节点,用户层可以通过/dev/disp节点直接控制视频或者图像的显示。Directhttps://blog.csdn.net/tugouxp/article/details/120438649人形检测功能最终的检测结果通过绘矩形框输出,由于VIPP硬件支持绘框操作,所以实现起来比较容易。但是想要给框增加字符描述信息就比较困难了,原因是VIPP硬件只支持画框,不支持贴图贴水印的操作,如果想直接通过VIPP在图像上增加描述字符串信息,通过非OMX非 tunnel模式抓取YUV图,然后直接在图像上修改,比如利用FFMPEG等库实现在固定位置加水印。方法可行,但不够优雅。

    失之东榆,收之桑榆,东方不亮西方亮,活人不能让尿憋死,VIPP虽然不给力,但我们还有VPU(VE), VE支持支持画框和贴水印的操作,画框VIPP已经干了,就不劳VE动手了,贴水印的活儿只有VE能干,所以自然当仁不让,方法就是将字符转换为RGB图,然后通过VE贴在图像上。

    无论VIPP画框还是VE贴图,都是硬件在一张YUV图像上修改像素实现的,对应的的是DE的一个显示图层,有没有别的办法,可以不用修改原像素,实现贴图操作呢?

    答案是有的,方法就是额外的图层,tina平台上,除了视频图层,还有一个县城的图层可用,他就是framebuffer对应的图层,设备节点是/dev/fb0,关于如何使用,可以参考下面这篇文章:

    Sunxi Framebuffer框架_tugouxp的专栏-CSDN博客

    Tina平台使用DirectFB_tugouxp的专栏-CSDN博客

    V831平台上,支持的图层的分布关系如下,Framebuffer对应了channel 2的第一个图层,也就是图层8.

    所以,原则上,我们可以用framebuffer来实现画框和画字符的操作,从而避免直接在YUV原始数据上做修改,使用多图层还有一个好处,由于每个图层都和具体的应用相关联,如果有的应用画面变化比较快,而有写应用画面几乎不发生太多变化,这样使用两个图层,每个图层可以各自独立的发生变化,不需要前级做太多的合成操作,直接交给DE去做最终的合成,效率更高。

    那么该如何操作呢?这里我们用到一个库,他就是directfb.

    基于directfb在/dev/fb0上写字

    directfb提供了DrawString方法用来在图层上写字,我们参考df_andi这个用例,它上面已经实现了写字画图的初始化环境,我们就不用自己写了。

    交代完背景,下面回归到本文主题要谈的问题,问题的逻辑如下,上面截图也可以看到我们增加调用的Clear接口。

    看起来是两难选择,怎么样保证既不留残影,GUI图层又不会盖住VIDEO图层让Video图层显示出来呢? 

    发现Z序

    Z序我一开始有注意,我还特地将VIDEO使用的图层layer 4调整为11,本意是11已经足够高了,应该不会被GUI盖住.

    Video图层,channel1的layer 0.

      人算不如天算,不曾想,我错了,实际调试发现,GUI的图层的Z序和视频图层的Z序关系如下:

    可以看到FB上绘制的字符可以正常显示出来,但是video图层被覆盖住了,除了字符区域外整个屏幕一团黑。

    我们看一下原因,执行如下命令,查看当前的图层使用信息:

     cat /sys/class/disp/disp/attr/sys

    输出如下:

    root@(none):/# cat /sys/class/disp/disp/attr/sys
    screen 0:
    de_rate 300000000 hz, ref_fps:59
    mgr0: 480x640 fmt[rgb] cs[0x204] range[full] eotf[0x4] bits[8bits] err[0] force_sync[0] unblank direct_show[false] iommu[1]
    dmabuf: cache[0] cache max[0] umap skip[0] overflow[0]
            lcd output      backlight(150)  fps:58.8         480x 640
            err:0   skip:237        irq:35672       vsync:0 vsync_skip:0
       BUF    enable ch[1] lyr[0] z[11] prem[N] a[pixel 128] fmt[ 77] fb[1080, 720; 540, 360;   0,   0] crop[   0,   0,1080, 720] frame[   0,   0, 480, 640] addr[  b00000,  a80000,       0] flags[0x       0] trd[0,0]
    depth[ 0]    BUF    enable ch[2] lyr[0] z[16] prem[N] a[pixel 255] fmt[  0] fb[ 480, 640; 480, 640; 480, 640] crop[   0,   0, 480, 640] frame[   0,   0, 480, 640] addr[  42c000,       0,       0] flags[0x       0] trd[0,0]
    depth[ 0] root@(none):/#

    可以看到,当前使能了两个图层,channel 1, layer 0,对应的是上面申请的视频图层,而channel 2, layer 0则和framebuffer对应了。

    更令人惊讶的是他们的Z序,视频图层的Z序11是我们设置的,不足为奇,但是framebuffer的Z序i竟然是16,数字越大,代表优先级越大,越在上面,怪不得能把视频盖住。

    调整framebufferZ序列:

    framebuffer 16的Z序到底哪里来的呢?经过一番搜索,终于被我找到了,原来是在framebuffer初始化注册的时候给的。

    接下来我们调整一下framebuffer Z序试试,将其优先级降低,至少,比Video图层的11低一个吧,那就设置为10.    

    修改完毕后重新编译内核,烧录:

     可以看到,视频图层和UI图层都可以正常显示了.

    再看显示信息:

    root@(none):/# cat /sys/class/disp/disp/attr/sys
    screen 0:
    de_rate 300000000 hz, ref_fps:59
    mgr0: 480x640 fmt[rgb] cs[0x204] range[full] eotf[0x4] bits[8bits] err[0] force_sync[0] unblank direct_show[false] iommu[1]
    dmabuf: cache[0] cache max[0] umap skip[0] overflow[0]
            lcd output      backlight(150)  fps:58.8         480x 640
            err:0   skip:225        irq:21821       vsync:0 vsync_skip:0
       BUF    enable ch[1] lyr[0] z[11] prem[N] a[pixel 128] fmt[ 77] fb[1080, 720; 540, 360;   0,   0] crop[   0,   0,1080, 720] frame[   0,   0, 480, 640] addr[  b00000,  a80000,       0] flags[0x       0] trd[0,0]
    depth[ 0]    BUF    enable ch[2] lyr[0] z[10] prem[N] a[pixel 255] fmt[  0] fb[ 480, 640; 480, 640; 480, 640] crop[   0,   0, 480, 640] frame[   0,   0, 480, 640] addr[  300000,       0,       0] flags[0x       0] trd[0,0]
    depth[ 0] root@(none):/#
    

    可以看到,这次enable的两个图层没变,仍然是layer 4和layer 8,但是framebuffer 的Z序变为10,优先级低于Video图层,造成的结果就是,video图层终于可以显示了。

    这里还有一个问题,既然video图层在fb的上面,而字符是画在fb上的,为何还能显示呢?究其原因,很可能是alpha值搞的鬼,我们可以看到,frambuffer 的alpha值是255,完全不透明的,而video图层的alpha值是128,是半透明的,造成的结果就是,如果把framebuffer放在video上面,由于framebuffer完全不透明,导致后面的video显示不出来,但是如果把video调到framebuffer上面,由于video是半透明的,放在后面的framebuffer也可以同时显示出来。

    或许这就是为何降低framebufferZ序有效的真正原因吧,后续可以验证一下,保持原来的Z序不变,将framebuffer的alpha值缩小,或许也可以吧?

    回头过来验证上面的猜测:

    默认情况下,framebuffer初始化时设置的参数如下,Z序前面已经说了,我们知道怎么调整,这里重点关注alpha的设定,默认情况下alpha mode为0, alpha_value为255, alpha value的范围在0-255之间,值越大代表越不透明,alpha mode什么意思呢?

    0:alpha mode为0,表示的是Pixel alpha,点 alpha,即每个像素都有自己单独的 alpha,可以实现部分区域全透,部分区 域半透,部分区域不透的效果

    1:Gloabal alpha:全局 alpha, 也叫面 alpha,即整个图层共用一个 alpha,统一的透明度

    硬件还支持一种Global_pixel alpha,可以是说以上两种效果的叠加,在实现 pixel alpha 的效果的同时,还 可以做到淡入淡出的效果,这里用不到。

    我们的要求是实现OSD字符能够透出来显示,而且视频部分的显示完全不受到影响,所以最好的模式是 pixel alpha.(我试过alpha_mode设置为1,也就是global alpha,发现这个时候如果设置alpha value为透明,我的字符显示不出来,即使在direct fb drawstring调用中设置的alpha是255,这也说明全局alpha会忽略每个ARGB像素自己的alpha设定).

    修改alpha_value设定,让其全透明,这样framebuffer图层的像素alpha值不会对视频图层的透明度产生影响.

    可以发现,通过显示节点得到的图层信息中,alpha value已经变为0了。

    接下来尝试,发现视频图层的显示仍然有朦朦胧胧的感觉,一开始不得其解,后面突然想起来direct fb在清屏的时候调用了Clear函数,其中也有设置alpha值,经过查看,果然设置的不透明。

    我们把它修改为0

    再次验证可以.

    结束

    展开全文
  • DirectFB_EGL_United

    2015-09-01 14:49:42
    The ppt describe the OpenGL and EGL graphic stacks.
  • DirectFB 在嵌入式系统中的应用,充分利用了图像加速功能,减轻了CPU 的数据处理负担,提高了系统性能。随着其广泛的应用,嵌入式GUI 的性能也将得到提高。嵌入式远程桌面控制系统平台性能的优化方面有如下可行的...
  • DirectFB简介以及移植[一]

    千次阅读 2019-05-24 17:10:33
     从功能上面来讲,下面图中比较形象的说明了DirectFB的主要作用:图形,文字的处理(DirectFB把TS经过Decoder处理之后的码流,再加上图形和文字,一起传给视频的芯片),如下图所示:     三:...

    http://www.cnblogs.com/zzb-Dream-90Time/p/7613742.html

    本文转载自‘:http://blog.csdn.net/wavemcu/article/details/39251805

    版权声明:本文为博主原创文章,未经博主允许不得转载。

    ***************************************************************************************************************************
    作者:EasyWave                                       时间:2014.09.13

    类别:开源GUI系统-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。

     

     

    四:DirectFB的移植

     如果要移植DirectFB需要用到以下的第三方库,如下图所示:

    DirectFB需要用到第三方库简介:

     

    • fontconfig-2.10.92:管理系统安装的字体,根据应用程序的字体配置,match(匹配)一种字体,填充match字体的各种属性。
    • freetype-2.5.0:FreeType库是一个完全免费(开源)的、高质量的且可移植的字体引擎,它提供统一的接口来访问多种字体格式文件,包括TrueType, OpenType, Type1, CID, CFF, Windows FON/FNT, X11 PCF等。
    • jpeg-8d:jpeg开源库
    • libpng-1.5.8:PNG 库是用来创立和操作PNG 格式的图像文件,PNG 格式是设计来替代GIF,他对于更小范围的TIFF(标记图象文件格式)来说,有了非常多的进步和拓展并且减少了关于专利权的麻烦。
    • libsigc++-2.2.8:libsigc++是实现类型安全回调的一个C++模板库。libsigc++提供了信号(signal)和槽(slot)的概念,实现了信号机制。slot对应一个回调函数,信号(signal)与槽(slot)相关联(attach),当一个信号被发射(emit)时,相对应的槽被调用。
    • libxml2-2.6.28:包含了对 XPath 表达式使用的支持来检索匹配一个指定准则的结点集。libxml2软件包提供允许用户操控XML文件的函数库,包含有读、修改和写XML和HTML文件支持。

    4.1: jpeg-8d的编译配置

    jpeg-8d的build.sh的脚本配置如下所示:

    [plain] view plain copy

     

     print?

    1. #!/bin/bash  
    2.   
    3. if [ "$1" == "" ]; then  
    4.     INSTALL_PATH=`pwd`/_install  
    5. else  
    6.     if [ -d $1 ]; then  
    7.         INSTALL_PATH=$1  
    8.     else  
    9.         exit 1  
    10.     fi  
    11. fi  
    12.   
    13. mkdir -p $INSTALL_PATH  
    14.   
    15. #autoreconf -ivf  
    16. if [ -f config.log ]; then  
    17.     make distclean  
    18. fi  
    19.   
    20. ./configure --prefix=$INSTALL_PATH \  
    21.             --host=arm-none-linux-gnueabi \  
    22.             --target=arm-none-linux-gnueabi \  
    23.         --build=i486-linux-gnu \  
    24.         --disable-option-checking \  
    25.         --disable-silent-rules \  
    26.         --disable-dependency-tracking \  
    27.         --enable-maintainer-mode \  
    28.         --enable-ld-version-script \  
    29.         --enable-shared=yes \  
    30.         --enable-static=no \  
    31.         --enable-fast-install=yes \  
    32.         --disable-libtool-lock \  
    33.             --with-gnu-ld  
    34.   
    35. if [ $? -eq 0 ]; then  
    36.         make  
    37.         if [ $? -eq 0 ]; then  
    38.                 make install  
    39.                 exit 0  
    40.         fi  
    41. fi  
    42. exit 1  


    编译配置成动态库,如上面的build.sh脚本所示,具体的配置可以通过configure --help命令来查看!

     

    4.2:libpng-1.5.8的编译和配置

    libpng-1.5.8的build.sh的脚本配置如下所示:

    [plain] view plain copy

     

     print?

    1. #!/bin/bash  
    2.   
    3. if [ "$1" == "" ]; then  
    4.     INSTALL_PATH=`pwd`/_install  
    5. else  
    6.     if [ -d $1 ]; then  
    7.         INSTALL_PATH=$1  
    8.     else  
    9.         exit 1  
    10.     fi  
    11. fi  
    12.   
    13. mkdir -p $INSTALL_PATH  
    14.   
    15. #autoreconf -ivf  
    16. if [ -f config.log ]; then  
    17.     make distclean  
    18. fi  
    19.   
    20. ./configure --prefix=$INSTALL_PATH \  
    21.             --host=arm-none-linux-gnueabi \  
    22.             --target=arm-none-linux-gnueabi \  
    23.         --build=i486-linux-gnu \  
    24.         --disable-option-checking \  
    25.         --disable-dependency-tracking \  
    26.         --enable-maintainer-mode \  
    27.         --disable-arm-neon \  
    28.         --enable-shared=yes \  
    29.         --enable-static=no \  
    30.         --enable-fast-install=yes \  
    31.         --disable-libtool-lock \  
    32.             --with-gnu-ld  
    33.   
    34. if [ $? -eq 0 ]; then  
    35.         make  
    36.         if [ $? -eq 0 ]; then  
    37.                 make install  
    38.                 exit 0  
    39.         fi  
    40. fi  
    41. exit 1  

    编译配置成动态库,如上面的build.sh脚本所示,具体的配置可以通过configure --help命令来查看!


    4.3:libxml2-2.6.28的编译和配置

     

    libxml2-2.6.28的build.sh的脚本配置如下所示:

     

    [plain] view plain copy

     

     print?

    1. #!/bin/bash  
    2.   
    3. if [ "$1" == "" ]; then  
    4.     INSTALL_PATH=`pwd`/_install  
    5. else  
    6.     if [ -d $1 ]; then  
    7.         INSTALL_PATH=$1  
    8.     else  
    9.         exit 1  
    10.     fi  
    11. fi  
    12.   
    13. mkdir -p $INSTALL_PATH  
    14.   
    15. #autoreconf -ivf  
    16. if [ -f config.log ]; then  
    17.     make distclean  
    18. fi  
    19.   
    20. ./configure --prefix=$INSTALL_PATH \  
    21.             --host=arm-none-linux-gnueabi \  
    22.         --build=i486-linux-gnu \  
    23.         --disable-option-checking \  
    24.         --disable-dependency-tracking \  
    25.         --enable-maintainer-mode \  
    26.         --disable-silent-rules \  
    27.         --enable-shared=yes \  
    28.         --enable-static=no \  
    29.         --enable-fast-install=yes \  
    30.         --disable-libtool-lock \  
    31.         --disable-documentation \  
    32.         --enable-warnings=min \  
    33.             --with-sax1=yes \  
    34.             --with-catalog=yes \  
    35.             --with-gnu-ld  
    36.   
    37. if [ $? -eq 0 ]; then  
    38.         make  
    39.         if [ $? -eq 0 ]; then  
    40.                 make install  
    41.                 exit 0  
    42.         fi  
    43. fi  
    44. exit 1  

    编译配置成动态库,如上面的build.sh脚本所示,具体的配置可以通过configure --help命令来查看!

     


    4.4:freetype-2.5.0的编译和配置

    freetype-2.5.0的build.sh的脚本配置如下所示:

     

    [plain] view plain copy

     

     print?

    1. #!/bin/bash  
    2.   
    3. if [ "$1" == "" ]; then  
    4.     INSTALL_PATH=`pwd`/_install  
    5. else  
    6.     if [ -d $1 ]; then  
    7.         INSTALL_PATH=$1  
    8.     else  
    9.         exit 1  
    10.     fi  
    11. fi  
    12.   
    13. mkdir -p $INSTALL_PATH  
    14.   
    15. #autoreconf -ivf  
    16. if [ -f config.log ]; then  
    17.     make distclean  
    18. fi  
    19.   
    20. ./configure --prefix=$INSTALL_PATH \  
    21.             --host=arm-none-linux-gnueabi \  
    22.         --build=i486-linux-gnu \  
    23.         --disable-option-checking \  
    24.         --disable-dependency-tracking \  
    25.         --enable-biarch-config \  
    26.         --disable-mmap \  
    27.         --enable-shared=yes \  
    28.         --enable-static=no \  
    29.         --enable-fast-install=yes \  
    30.         --disable-libtool-lock \  
    31.             --without-bzip2 \  
    32.             --without-zlib \  
    33.             --without-png \  
    34.             --with-gnu-ld  
    35.   
    36. if [ $? -eq 0 ]; then  
    37.         make  
    38.         if [ $? -eq 0 ]; then  
    39.                 make install  
    40.                 exit 0  
    41.         fi  
    42. fi  
    43. exit 1  

    编译配置成动态库,如上面的build.sh脚本所示,具体的配置可以通过configure --help命令来查看!

     

     

    4.5:fontconfig-2.10.92的编译和配置

    fontconfig-2.10.92的build.sh的脚本配置如下所示:

    [plain] view plain copy

     

     print?

    1. #!/bin/bash  
    2.   
    3. if [ "$1" == "" ]; then  
    4.     INSTALL_PATH=`pwd`/_install  
    5. else  
    6.     if [ -d $1 ]; then  
    7.         INSTALL_PATH=$1  
    8.     else  
    9.         exit 1  
    10.     fi  
    11. fi  
    12.   
    13. mkdir -p $INSTALL_PATH  
    14.   
    15. export LDFLAGS="-L$INSTALL_PATH/lib"  
    16. export CFLAGS="-I$INSTALL_PATH/include"  
    17. export PKG_CONFIG_PATH="$INSTALL_PATH/lib/pkgconfig"   
    18. export LIBS="-ldl -lpthread -lpng"  
    19.   
    20. if [ -f config.log ]; then  
    21.     make distclean  
    22. fi  
    23.   
    24. ./configure --prefix=$INSTALL_PATH \  
    25.             --host=arm-none-linux-gnueabi \  
    26.         --build=i486-linux-gnu \  
    27.         --disable-option-checking \  
    28.         --disable-dependency-tracking \  
    29.         --disable-silent-rules \  
    30.             --disable-largefile \  
    31.         --enable-shared=yes \  
    32.         --enable-static=no \  
    33.         --enable-fast-install=yes \  
    34.         --disable-libtool-lock \  
    35.         --enable-libxml2 \  
    36.         --disable-iconv \  
    37.             --with-gnu-ld \  
    38.             FREETYPE_CFLAGS="-I$INSTALL_PATH/include/freetype2" \  
    39.             FREETYPE_LIBS="-L$INSTALL_PATH/lib -lfreetype" \  
    40.             LIBXML2_CFLAGS="-I$INSTALL_PATH/include/libxml2" \  
    41.             LIBXML2_LIBS="-L$INSTALL_PATH/lib -lxml2"  
    42.   
    43. if [ $? -eq 0 ]; then  
    44.         make  
    45.         if [ $? -eq 0 ]; then  
    46.                 make install  
    47.                 exit 0  
    48.         fi  
    49. fi  
    50. exit 1  

    编译配置成动态库,如上面的build.sh脚本所示,具体的配置可以通过configure --help命令来查看!


    4.6:libsigc++-2.2.8的编译和配置

    libsigc++-2.2.8的build.sh的脚本配置如下所示:

     

    [plain] view plain copy

     

     print?

    1. #!/bin/bash  
    2.   
    3. if [ "$1" == "" ]; then  
    4.     INSTALL_PATH=`pwd`/_install  
    5. else  
    6.     if [ -d $1 ]; then  
    7.         INSTALL_PATH=$1  
    8.     else  
    9.         exit 1  
    10.     fi  
    11. fi  
    12.   
    13. mkdir -p $INSTALL_PATH  
    14.   
    15. #autoreconf -ivf  
    16. if [ -f config.log ]; then  
    17.     make distclean  
    18. fi  
    19.   
    20. ./configure --prefix=$INSTALL_PATH \  
    21.             --host=arm-none-linux-gnueabi \  
    22.         --build=i486-linux-gnu \  
    23.         --disable-option-checking \  
    24.         --disable-dependency-tracking \  
    25.         --enable-maintainer-mode \  
    26.         --enable-shared=yes \  
    27.         --enable-static=no \  
    28.         --enable-fast-install=yes \  
    29.         --disable-libtool-lock \  
    30.         --enable-ipv6=no \  
    31.             --with-gnu-ld  
    32.   
    33. if [ $? -eq 0 ]; then  
    34.         make  
    35.         if [ $? -eq 0 ]; then  
    36.                 make install  
    37.                 exit 0  
    38.         fi  
    39. fi  
    40. exit 1  

    编译配置成动态库,如上面的build.sh脚本所示,具体的配置可以通过configure --help命令来查看!

     

     

    五:移植总结

         DirectFB的移植留到下一篇来详细介绍,这一篇只详细的介绍DirectFB所需要的第三方库的编译和配置。

    展开全文
  • 嵌入式环境下需要使用directfb做后端,自己一步一步的摸索。这里记录下踩坑过程 准备工作 我选择现在虚拟机里面来个直观感受,故而在ubuntu1604下进行编译测试,首先是编译directfb的开源库了,此处选择的是1.4版本...
  • 本文首先对DirectFB进行了详细的介绍,接着提出了一种宽松的、可分解的嵌入式播放器设计方案。该方案资源消耗少、可移植性强、系统各个模块间依赖度小,使得用户能够根据自己的系统需求快速设计满足自己要求的播放器...
  • 图形运算 视窗系统 资源管理器 输入设备 加载图像 视频回放 字体渲染
  • 本想上传的文件是包含了所有最新依赖包的一个打包文件,但是超过了我能上传的最大文件限制,所以现在只上传教程 2013年8月最新制作,所用的文件版本也是最新

空空如也

空空如也

1 2 3 4 5 ... 20
收藏数 2,444
精华内容 977
关键字:

directfb

友情链接: proj02-AirForce.rar