1 DFB 关键术语基础

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

DirectFB中的重要术语

1、Blitting

Blitting是在拷贝图像数据的进程中所引用。举一个最简单的例子就是当两个Surface有相同的大,颜色深度和像素格式时Blitting其中一个Surface到另一个Surface。在这个过程中内存只被复制而没有被处理(就像复制其他任何类型的数据一样)。alpha通道的传输,或者从一种像素格式到另一种像素格式的传输。许多图形显卡包含了一个硬件Blitting来完成多种格式的传输。

2、Surface

Surface是内存中一个图像以一种具体的像素格式被保存的一块保留区域。一个Surface可以位于视频和/或系统内存中。可以在一个Surface上进行画图操作或者把一个Surface Blitting到另一个。(见1.21节)
在全屏模式下时,屏幕中的可视区表示为”主Surface”,所以可以直接在屏幕的可视区完成图形操作。
每个Surface都可以选择双缓冲,图形操作将首先在辅助缓冲区中执行然后在Flip()被调用之后变得合法。在许多情况下建议在主Surface中使用双缓冲来防止闪烁。

3、SubSurface

SubSurface使用和正规Surface相同的接口。它代表父类Surface的一个部分并且没有为自己分配任何系统或视频存储空间。

4、Layer

依靠于图形硬件可以有一个或者多个显示层。一个标准的PC显卡只有一个层,但是,就像机顶盒就可能支持2个或更多的层。不同的层在显存中占据着不同的区域,通常通过alpha混合来组合,这由显示硬件自动完成。如果最底层的内容发生了改变将不会被重绘,上一层的内容保持不变。今天,许多PC显卡也支持额外的可以缩放可以从YUV转为RGB的层(视频层)。这个层不能进行颜色混合和设置成保持完全的不透明。variosDirectFB图形驱动支持视频层。

5、Window / Windowstack

通常一个层的surface的内容受控于集成的窗体系统,这意味着属于这个层的窗体在一个可配置的背景上。每个窗体有它自己的一个surface,这个surface 被窗体系统用来生成构成重叠窗体的图像。

DirectFB的组成

1、基本库函数

这部分代码在lib目录下,它分为三个部分:

direct: 里面是一些公共函数,其中包括哈希表、链表、线程、调试信息、signal处理、优化过的memcpy和平台相关的一些函数。 fusion:它有两个版本,一个是针对单进程的,要求所有应用程序在一个进程中运行,这相对来说比较简单。另外一个是针对多进程的,应用程序可以在多个进程中运行。它实现了一些进程间通信机 制,其中包括互斥、共享内存、共享内存中的vector实现、带引用计数的内核对象和reactor等。多进程版本还需要一个内核模块linux-fusion的支持。 voodoo: 不清楚(若那位高手知道,请补充一下,谢谢)。

2、对第三方组件库的包装

这部分代码在interfaces目录下。Interfaces可能会引起别人的误解,因为它并不是DFB对外提供的接口,而是把第三方组件纳入DFB的接口。它包括三类:

字体:字体有点阵字体和矢量字体之分,矢量字体又有诸如truetype之类几种格式。前者可能比较简单,而后者的处理相当复杂,要借助如freetype等第三方程序库来实现。

DFB定义了IDirectFBFont接口来处理字体,在第三方字体程序库上加上一个adapter就可以在DFB中使用了。 图片:图片格式的种类很多,像BMP之类的位图处理可能比较简单,而像JPG和PNG等的图片,采用了高级的压缩技术,解压算法比较复杂,通常需要第三方程序库的支持。

DFB定义了IDirectFBImageProvider接口来处理图片,在第三方图片程序库上加上一个adapter就可以在DFB中使用了。 视频:视频格式更多,解压算法也更复杂,自然也要借助第三方库来实现。

DFB定义了IDirectFBVideoProvider接口来处理视频,在第三方视频程序库上加上一个adapter就可以在DFB中使用了。

3、核心代码

这部分代码在src目录下。它可以分为两大类:
核心组件。DFB的core由多个部分组成,每个部分称为一个core_part,都实现同一个接口CorePart。这个接口并不描述它们的功能,而是用于管理的。初看这些函数时,可能会感到有些奇怪。最好要先了解DFB采用的master/slave模型:第一个运行应用程序是master进程,后来运行的应用程序是slave进程。master进程负责初始化和~初始化arena,它只能在所有slave退出之后才能退出。而slave进程则可以随时加入arena,也可以随时退出arena。

核心组件包括下面几个组件:

dfb_core_clipboard: 剪切板。 dfb_core_colorhash:调色板。 dfb_core_gfxcard:图形卡,主要完成基本的绘图功能,如绘直线、填充等等。 dfb_core_input:输入设备。 dfb_core_layers:分层功能,好像要硬件支持,通常都只有一个层。 dfb_core_screens:逻辑屏幕(可能像X一样支持多个屏幕吧,不太清楚,有时间再研究)。 dfb_core_system:显示输出,把gfxcard绘制后的图形数据输出到屏幕上,即可以通过fbdev输出到本机屏幕上,也可以通过sdl/x11/vnc输出到远程主机的屏幕上。对于像sdl/x11等,也包括对输入事件的处理。 dfb_core_wm:窗口管理器。以上这些core_part,有的是直接实现的,比如clipboard。有的只是一层包装,具体的实现在一个独立的共享库中,在运行时通过参数来控制加载具体的实现,如system。

对外接口。这主要是给上层应用程序使用的。其中包括

IDirectFBInputDevice: 输入设备 IDirectFBScreen: 屏幕。 IDirectFBSurface: 绘图表面。 IDirectFBPalette: 调色板。 IDirectFBFont: 字体 IDirectFBImageProvider:图片 IDirectFBVideoProvider:视频 IDirectFBWindow:窗口 DirectFBEventBuffer: 事件缓冲

4、窗口管理器

这部分代码在wm目录下。DFB实现了两个窗口管理器。

default:实现了基本的窗口管理功能,支持一些快捷键。 unique:功能也很弱,不过架构还可以,加入自己的功能很方便。

5、 输入设备

这部分代码在inputdrivers目录下。其实这些代码并不是真正的驱动,只是一个adapter层,它把从linux设备文件读到的事件,转换成DFB自己的事件格式,然后调用dfb_input_dispatch把事件分发出去。

6、输出设备

这部分代码在system目录下。这也是一个adapter层,主要对显示设备的抽象,有的也包括对输入事件的处理。其中包括:

fbdev: 输出到frame buffer。 osx: 输出到mac os上。 vnc: 输出到Virtual Network Computing(类似于微软远程桌面的一个协议)。 x11: 输出到X Window上,在0.9.24仍然有问题,建议使用SDL。 sdl: 输出到Simple DirectMedia Layer。

1 directfb的tar包下载节点,记录一下

http://pkgs.fedoraproject.org/repo/pkgs/directfb/

2 DirectFB 源码解读之初始化-1

http://blog.sina.com.cn/s/blog_5d9051c00100d6ny.html

3 系列,DFB源码

http://blog.sina.com.cn/s/articlelist_1569739200_1_1.html

4 官方文档 DFB的移植

http://elinux.org/Porting_DirectFB

5 DFB的框架介绍

http://elinux.org/DirectFB

6

DFB [02] 基础和相关的非常用的几个链接相关推荐

  1. 考试备战系列--软考--02基础知识复习

    这部分主要是计算机基础知识的概念介绍,相关系列文章如下所示. 考试备战系列--软考--01基础架构概念 考试备战系列--软考--02基础知识复习 考试备战系列--软考--03综合知识复习 考试备战系列 ...

  2. DCSS是利用微型计算机,关于计算机相关毕业论文致谢,关于大学计算机基础试题相关论文范文集...

    关于计算机相关毕业论文致谢,关于大学计算机基础试题相关论文范文集 本文关于计算机及操作系统及计算机网络方面的免费优秀学术论文范文,关于计算机相关论文范文集,与大学计算机基础试题相关电大毕业论文范文,对 ...

  3. 图像处理-线性滤波-1 基础(相关算子、卷积算子、边缘效应)

    图像处理-线性滤波-1 基础(相关算子.卷积算子.边缘效应) 这里讨论利用输入图像中像素的小邻域来产生输出图像的方法,在信号处理中这种方法称为滤波(filtering).其中,最常用的是线性滤波:输出 ...

  4. Mybatis 02 基础应用

    Mybatis 02 基础应用 一.代码开发demo 1.基于mapper代码开发 1.1.开发方式 ​ 只需要开发Mapper接口和对应的Mapper映射文件,接口定义声明,文件定义sql. 1.2 ...

  5. 独家 | 机器学习基础知识梳理,新手必备!(附链接)

    翻译:吴金笛 校对:丁楠雅 本文约4000字,建议阅读16分钟. 本文介绍了机器学习以及几个易与其混淆的术语,并给出了几个机器学习的应用. 介绍 在过去的几年里,人们对机器学习重新产生了兴趣. 这种复 ...

  6. 从微博搜索相关话题下的所有热门博文链接

    从微博搜索相关话题下的所有热门博文链接 感谢eastmountyxz的思路指导,中国必胜!原github链接: https://github.com/eastmountyxz/Wuhan-data-a ...

  7. 补充提交“ARM架构与指令集” ,“内存管理架构” 等相关学习的有道云分享链接

    注:来源http://blog.csdn.net/forever_2015/article/details/51582118 补充提交"ARM架构与指令集" ,"内存管理 ...

  8. 基于SKF基础学习相关知识梳理(一)

    基于SKF基础学习知识梳理 (一)对称密码算法 1.PKCS填充方式 2.PKCS填充分类 (一)对称密码算法 // 分组密码参数 typedef struct Struct_BLOCKCIPHERP ...

  9. ElasticSearch学习笔记-02集群相关操作_cat参数

    _cat参数允许你查看集群的一些相关信息,如集群是否健康,有哪些节点,以及索引的情况等的. 检测集群是否健康 curl localhost:9200/_cat/health?v 说明: curl 是一 ...

最新文章

  1. 测试发现equals和hashCode与书上描述的不一样
  2. 简述一下生成对抗网络GAN(Generative adversarial nets)模型?
  3. 交换机端口与mac_address的绑定
  4. 使用MFC进行编程,绘制直线椭圆以及样条曲线
  5. 硬件:关于ARM的22个常用概念!
  6. python创建一个包,如何从python包创建一个osx应用程序/ dmg?
  7. sqlite3_get_table()
  8. 房间混响时间的计算与测量
  9. 机器学习中的矩阵分析与应用
  10. NOIP2016普及组复赛 解题分析
  11. TFIDF的原理及实现
  12. Oracle数据库查询语句去重,Oracle数据库之SQL---select查询
  13. 输出图片任意点的像素坐标
  14. linux查看分区命令
  15. [极客大挑战 2019]Http1(BUCTF在线评测)
  16. QT 绘图工具-QCustomPlot
  17. 轨迹动画(屏幕线条环绕)
  18. iMeta | 叶茂/时玉等综述环境微生物组中胞内与胞外基因的动态穿梭与生态功能...
  19. jquery在线引用网址
  20. 智能语音交互,声纹识别 、音频采集 校准模组

热门文章

  1. 五种编程语言解释数据结构与算法——顺序表3(JavaScript与Python语言实现)
  2. php 字符串混合分割并存入数组
  3. C语言 结构体练习之投票
  4. 【JAVA 第三章 流程控制语句】课后习题 编写判断从键盘输入的字符串是否为回文
  5. C#LeetCode刷题之#283-移动零(Move Zeroes)
  6. git基本概念与核心命令_Git:了解核心版本控制概念的初学者指南
  7. hexo博客添加暗色模式_我如何将暗模式添加到我的网站
  8. git 初始化git存储库_什么不保存到Git存储库中
  9. js求两圆交点_利用二项式通项公式求系数及综合运用(2)
  10. redis主从复制和哨兵机制