DirectFB学习笔记

directfb研究 <!-- --> <!-- @font-face {font-family:Wingdings} @font-face {font-family:宋体} @font-face {font-family:"\@宋体"} p.MsoNormal, li.M 阅读详情
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.

system=<system>, it could be fbdev, sdl. The fbdev is the default value, means it use the Linux frame buffer. The sdl is the fastest one in refreshing jpeg, but it flashing a lot and can’t run the sprite sample normally. But I found the main difference that if you use fbdev, it creates a full screen field to display picture, and if you use sdl mode, it just creates a window to show it and you can move your mouse out from the display field and to control other application.

mode= <width>x<height>, I tried, and it works. And it seems no limit range to the display field.

fbdev=<device>, the default device is “/dev/fb0”, and if you want to use fb1, fb2, etc, you should create the link in the /dev.

force-windowed, no use with another parameter scaled=800x600.

 

转载自:http://blog.youkuaiyun.com/fatfoolish/archive/2007/08/22/1754016.aspx

 

 
Qt5.5使用directfb做后端的编译过程 嵌入式环境下需要使用directfb做后端,自己一步一步的摸索。这里记录下踩坑过程 准备工作 我选择现在虚拟机里面来个直观感受,故而在ubuntu1604下进行编译测试,首先是编译directfb的开源库了,此处选择的是1.4版本了,编译安装脚本如下: ./autogen.sh ./configure --prefix=/home/skyhigh/WORK/install --enable-static --disable-x11 --enable-fbdev --with-gfxdrivers=vmwar 阅读详情

相关推荐

与afreez一起学习DirectFB之:编译运行第一个DirectFB程序

摘要:本文介绍了如果把一个DirectFB源程序文件编译一个可执行的文件,附带性的介绍了gcc的常见编译选项的应用。---------------------------------------------------------------------------------------------------------------------声明:       此文为原创,欢迎转载

afreez's home 4594

DirectFB的接口详解

1. 概述    ================      本文主要研究DirectFB及其向上向下的接口,顺带讲一下QT搭配DirectFB使用的一些笔记。    其他,如DirectFB的内部结构、Qt的内部结构、及其他GUI系统如android不在本文讨论范围内。    本文会设计一些DirectFB的2D加速函数介绍,3D加速不再本文讨论范围内。    =========

2万+

Qt 中链接Directfb

1. 修改qmake.conf文件, 用如下方法修改: $(call QT_QMAKE_SET,QMAKE_CC,$(TARGET_CC),$(@D)) $(call QT_QMAKE_SET,QMAKE_CXX,$(TARGET_CXX),$(@D)) $(call QT_QMAKE_SET,QMAKE_LINK,$(TARGET_CXX),$(@D)) $(call QT_QM

tinyle的专栏 3588

DirectFB源代码阅读(七)总接口IDirectFB .

IDirectFB_Construct设置总接口IDirectFB,在使用directfb的时候,所有的其它接口都是由它来创建. [cpp] view plaincopyprint? DFBResult IDirectFB_Construct( IDirectFB *thiz, CoreDFB *core )  {       if (dfb_layer_num() //层

2231

Qt+DirectFB开发环境的搭建_2012502

参见:http://apps.hi.baidu.com/share/detail/22897969 1、配置directfb的环境变量 export  PKG_CONFIG_PATH=/home/yanxu/DirectFB-1.4.0:/home/yanxu/DirectFB-1.4.0/lib/fusion:/home/yanxu/DirectFB-1.4.0/lib/direct

yibulianhua的专栏 3790

directfb接口介绍

directfb接口介绍

与afreez一起学习DirectFB之:编译最小的DirectFB

摘要作者:聂飞 afreez@sina.com转载请注名出处,文中不妥之处欢迎赐教本文介绍了怎样生成一个最小(或接近最小)的DirectFB,以及相关的测试用例的安装和测试,对编译中的参数MMX,SSE,SDL,VNC的概念给出了较为详细的介绍实验平台:FC5(Fedora Core5)DirectFB-0.9.24(目前最新版本为0.9.25,为了开发的稳定性,选择0.9

afreez's home 4763

Windows下CMake的下载与安装详解

目录一、CMake介绍二、CMake的下载与安装 一、CMake介绍 CMake是一个跨平台的安装(编译)工具,可以用简单的语句来描述所有平台的安装(编译过程)。它能够输出各种各样的makefile或者project文件,能测试编译器所支持的C++特性,类似UNIX下的automake。 二、CMake的下载与安装 CMake下载链接:https://cmake.org/download/。 下载最新稳定版即可(Latest Release): 下载完成后,单击“Next”按钮,在下图中勾选“I acce

Wendy的博客 8万+

使用 directfb绘制图像(draw image with directfb)

<br />/********************************************************************** <br /> ** Copyright (C) 2010 FreeC ORG.  All rights reserved. <br /> ** Author: Carlson Lee. <br /> ** <br /> ** This file is part of FreeC. <br /> ** <br /> ** This file m

carlsonlee_freec的专栏 739

基于ROS下的安卓手机图像和IMU跑ORB-SLAM3

接之前文章继续,手上没有现成的单目+IMU硬件,但是安卓手机几乎人人都有。因此,本文讲下如何用手机跑ORB-SLAM3的Mono和Mono_Inertial。 1. 手机与PC通信 基于ROS下的信息发布和订阅,手机和PC在一个局域网下进行信息(image和IMU)传输。 手机APK参考了github上的2个开源Android_Camera-IMU和android_ros_sensors,基于ros_java生成安卓APP,下载安装任一个APP到安卓手机,界面分别是这样: 手机和PC连一个无

h_372101的博客 1万+

基于PYNQ-Z2复现yolov2

基于PYNQ-Z2复现Yolo_v2 参考资料:源项目工程 开发板配置 0 使用说明 0.1 简介 本文档主要分为三个部分: [1] 搭建HLS工程生成Yolo_v2的IP。 [2] 在Vivado中使用生成好的IP进行block design,导出bit文件和tcl文件。 [3] 将相关文件导入至PYNQ-Z2板中,在Jupyter Notebook上进行编程实现。 0.2 所需硬件  PYNQ-Z2开发板、USB数据线、网线  SD卡、读卡器 0.3 所需软件  Vivado 2018.3  V

谦豫 1万+

DirectFB学习笔记一

本文记录directfb程序的基本操作流程。 1、首先创建一个directfb对象:DirectFBInit(&argc,&argv)初始化然后创建DirectFBCreate(&dfb)。 2、由directfb对象创建界面surface:dfb->CreateSurface(dfb,&dsc,&primary),primary就是我们的绘图面。...

weixin_30596343的博客 171

51单片机矩阵键盘——LCD1602显示

矩阵键盘扫描(输入扫描) 原理:读取第1行(列)→读取第2行(列) →读取第3行(列) → ……,然后快速循环这个过程,最终实现所有按键同时检测的效果 在键盘中按键数量较多时,为了减少I/O口的占用,通常将按键排列成矩阵形式采用逐行或逐列的“扫描”,就可以读出任何位置按键的状态。

YLG_lin的博客 9853

DirectFB学习笔记三

本篇目的,通过键盘的esc键控制程序退出。学习输入设备产生事件,接收事件,产生反应。 首先获取输入设备 IDirectFBInputDevice *keyboard = NULL; dfb->GetInputDevice(dfb,DIDID_KEYBOARD,&keyboard); 将输入事件连接到事件buffer中 IDirectFBEventBuffer *buffer...

weixin_30610755的博客 134

Sigrity System Explorer Transient Analysis模式进行瞬态仿真分析操作指导-单端信号-串联端接

Sigrity System Explorer Transient Analysis模式可以用于瞬态仿真分析,通过搭建简易拓扑用于前仿真分析通道的时域性能,下面搭建一个简易的单端拓扑并且进行串联端接,以下图为例,准备好发送接收端的IBIS模型, (se_example.ibs,本例发送接收端都使用相同的IBIS模型),以及传输线的S参数模型(W1_welement_se.sp)最上方的图形界面是传输线的模型,本例是一个上下都有参考平面的带状线,右侧的梯形是蚀刻角度,根据W1和W2以及铜厚来确定。

weixin_54787054的博客 338

【以太网硬件六】1000base-T物理层编码究竟是怎么编的?

详述1000base-T物理层4D-PAM5的编码过程

highman110的博客 5323

YOLOv8改进 | 主干篇 | 利用MobileNetV2替换Backbone(轻量化网络结构)

本文给大家带来的改进机制是,其是专为移动和嵌入式视觉应用设计的轻量化网络结构。这些模型基于简化的架构,并利用深度可分离卷积构建轻量级深度神经网络,其引入了两个简单的全局超参数,用于在延迟和准确性之间进行有效的权衡。实验表明,MobileNets在资源和准确性的权衡方面表现出色,并在多种应用(如对象检测、细粒度分类、面部属性识别和大规模地理定位)中展现了其有效性,这个模型非常适合轻量化的读者来使用。适用检测目标:轻量化网络结构适合轻量化的读者⭐⭐⭐⭐。

Snu77的博客 5682

DirectFB学习笔记四

本篇目的,实现按钮的点击事件捕获,也就是鼠标点击,如果点击在方框范围内,则响应,在方框外,则忽略。 由于鼠标移动和点击都会产生事件,因此,我们可以在鼠标移动的时候记录坐标,在点击时比较坐标是否在方框范围内从而判断是否点击的按钮。 首先和上篇一样创建事件buffer,获取事件event。 if(event.type == DIET_AXISMOTION)//如果是鼠标移动事件 {   sw...

weixin_30414635的博客 113

仿真模型简单介绍

同时,各种以伯克利的Spice仿真程序的算法为核心的商用Spice电路仿真工具也随之产生,运行在PC和UNIX平台,许多都是基于原始的SPICE2G6版的源代码,这是一个公开发表的版本,它们都在Spice的基础上做了很多实用化的工作,比较常见的Spice仿真软件有HSpice、Pspice、Spectre、Tspice、SmartSpcie、IsSpice等,虽然它们的核心算法雷同,但仿真速度、精度和收敛性却不一样,其中以Synopsys公司的Hspice和Cadence公司的Pspice最为著名。...

小幽余生不加糖 8001

STM32F407中文手册

STM32f407中文手册 本参考手册面向应用开发人员,提供有关使用 STM32F405xx/07xx、STM32F415xx/17xx、 STM32F42xxx 和 STM32F43xxx 微控制器存储器与外设的完整信息。STM32F405xx/07xx、STM32F415xx/17xx、STM32F42xxx 和 STM32F43xxx 构成一个微 控制器系列,各产品具有不同的存储器大小、封装和外设。有关订购信息以及器件的机械与电气特性,请参见数据手册。有关 ARM Cortex™-M4F 内核的信息,请参见《Cortex™-M4F 技术参考手册》。

Configuring DirectFB

 From "http://www.directfb.eu/wiki/index.php/Configuring_DirectFB"Configuring DirectFBFrom DirectFBWikiDirectFB has a lot of options that can be tuned run-time. Bit-depth, debug output,

howbigdaddy的专栏 1828

NTscan扫描工具

ntscan是一个扫描器,可以扫描没有密码和弱密码的共享,先到配置文件中填写猜测的用户名和密码,扫描过程中右侧出现的是扫描日志。

directfb之diretfbrc详解

directfbrc 是DirectFB的配置文件。它被所有的DirectFB应用程序在启动时读取,有两个这样的文件,一个是存放在/etc/direcfbrc,是个全 局的,另一个是存放在$HOME/.directfbrc,它是个局部的,可以覆盖系统的设置。 需要注意的是,这两个文件都不是默认存在 的,是需要你自己建立的,不要象我一样,刚开始的时候到处找也没有找到,呵呵。 在direc

3165

老版QQ原生表情gif动态

这是老版的QQ表情,不过全是动态的的,Windows照片查看器是不会动的,可以右击用浏览器打开查看,再说一遍是老版的,只是分享给宁愿用老版也要动态的人。

假人有限元模型

假人模型,车辆碰撞假人有限元模型,适合做乘员安全的研究者利用

与afreez一起学习DirectFB之:如何高效的运行DirectFB程序,即Directfbrc文件介绍

摘要:本文主要介绍了directfbrc文件的使用及参数的详细说明,在directfb应用程序启动做初始化阶段,都会去试图读取该文件。---------------------------------------------------------------------------------------------------------------------声明:       此文为原创

afreez's home 6111

DirectFB简介以及移植[一]

DirectFB是一个轻量级的提供硬件图形加速,输入设备处理和抽象的图形库,它集成了支持半透明的视窗系统以及在LinuxFramebuffer驱动之上的多层显示。它是一个用软件封装当前硬件无法支持的图形算法来完成硬件加速的层。DirectFB是为嵌入式系统而设计。它是以最小的资源开销来实现最高的硬件加速性能。

嵌入式与人工智能天地 9669

DirectFB简介

DirectFB 1. DirectFB概述 在嵌入式GUI中需要实现多种图形功能,包括图形绘制以及图形拷贝等。其中的许多功能需要进行大量的数据传递(如图形拷贝)或者需要进行大量的数值计算(如画样条曲线)。如果这些功能都由软件来实现的话,会占用大量的CPU时间且需要传递大量的

GMstart的专栏 1744

编译基于DirectFB的Phoneme(Advance)

导读:   编译基于DirectFB的Phoneme(Advance)   转载时请注明出处和作者联系方式   作者联系方式:李先静   Phoneme其实就是J2ME,SUN公司虽然把JAVA的实现开源了,但仍然保留JAVA这个名字,所以出于法律上的考虑,开源的J2ME实现改名为phoneme。phoneme有两个版本,一个对硬件要求较低,功能也较弱,适用于一般的feature pho

xu的blog 1094
上一篇: 关于FrameBuffer
下一篇: Problem with svg icon 关于svg图标的问题的讨论---来自Nokia论坛
WaveDHW
博客等级 码龄20年 455粉丝 159原创
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

当前余额3.43元 前往充值 >
需支付:10.00元
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付元
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值