首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >Framebuffer文档

Framebuffer文档
EN

Stack Overflow用户
提问于 2010-03-24 05:53:34
回答 5查看 7.5K关注 0票数 16

有没有关于如何在Linux中编写使用帧缓冲设备的软件的文档?我见过几个简单的例子,基本上是这样的:“打开它,映射它,将像素写入映射区域。”但是没有全面的文档说明如何使用不同的IOCTLS。我已经看到了“平移”和其他功能的引用,但“谷歌搜索”给出了太多无用的信息。

编辑:从编程的角度来看,是不是唯一的文档,而不是“用户如何配置您的系统以使用fb”的文档?

EN

回答 5

Stack Overflow用户

发布于 2010-06-18 23:09:58

您可以查看fbi的源代码,这是一个使用linux帧缓冲区的图像查看器。你可以在这里获得它:http://linux.bytesex.org/fbida/

票数 5
EN

Stack Overflow用户

发布于 2011-05-08 14:33:53

--除了您提到的之外,似乎没有太多的选项可以从桌面上的用户空间使用fb进行编程。这可能是一些文档如此陈旧的原因之一。请看设备驱动程序编写人员的这篇指南,它参考了一些官方的linux文档: www.linux-fbdev.org slash howto slash index.html。它没有引用太多的接口..尽管查看linux源代码树确实提供了更大的代码示例。

-- opentom.org斜杠Hardware_Framebuffer不适用于桌面环境。它强化了主要的方法,但它似乎避免解释它提到的“快速”双缓冲切换所需的所有成分。另一种针对不同设备的方法是wiki.gp2x.org斜杠wiki斜杠Writing_to_the_framebuffer_device,它省略了一些关键的缓冲细节,尽管它至少建议您可以使用fb1和fb0来进行双缓冲(在此设备上)。虽然对于桌面,fb1可能是不可能的,或者它可能访问不同的硬件),使用volatile关键字可能是合适的,并且我们应该注意vsync。

-- asm.sourceforge.net斜杠文章斜杠fb.html汇编语言例程也出现(?)只做一些基本的查询,打开,设置一些基础,mmap,绘制像素值到存储,以及复制到fb内存(我想一定要使用短的stosb循环,而不是更长的方法)。

--在googling Linux frame buffer时要注意16bpp的注释:我在X会话中使用了fbgrab和fb2png,但都没有用。它们各自呈现了一张我的桌面屏幕的快照,就好像桌面的照片是用非常糟糕的相机在水下拍摄的,然后在黑暗的房间里过度曝光。这张图片在颜色、大小和许多细节上都是完全不完整的(到处都是不属于的像素颜色)。似乎我使用的计算机上的/proc /sys (新内核最多只做了一些小的修改..声称fb0使用16bpp,我在谷歌上搜索的大多数东西都是这样描述的,但实验让我得出了一个非常不同的结论。除了这两个来自标准帧缓冲抓取工具的失败的结果(对于这个发行版持有的版本),可能假设了16位,我有一个不同的成功测试结果,将帧缓冲像素数据处理为32位。我从cat /dev/fb0获取的数据创建了一个文件。该文件的大小最终为1920000。然后,我编写了一个小的C程序来尝试和操作这些数据(假设它是某种编码或其他编码的像素数据)。我最终解决了它,像素格式与我在查询时从X得到的完全匹配(TrueColor RGB8位,没有alpha,但填充到32位)。请注意另一条线索:我的屏幕分辨率为800x600乘以4字节,精确到1920000。我最初尝试的16位方法都产生了类似于fbgrap的损坏图像,所以我可能没有查看正确的数据。如果你想要我用来测试数据的代码,请告诉我。基本上,我只是读入整个fb0转储文件,然后将其输出到文件中,在添加了一个头文件"P6\n800 600\n255\n“以创建合适的ppm文件之后,同时循环所有像素操作它们的顺序或展开它们,..对我来说,最终的成功结果是每4个字节丢弃一次,并以每4字节为单位交换第一个和第三个字节。简而言之,我将明显的BGRA fb0转储文件转换为ppm RGB文件。在Linux上可以用许多图片查看器来查看ppm。

--您可能希望重新考虑使用fb0编程的原因(这可能也解释了为什么很少有示例)。在放弃使用X的好处的同时,您可能无法获得任何有价值的性能提升(这是我的经验,如果有限的话)。这个原因也解释了为什么很少有代码示例存在。

--请注意DirectFB不是fb。DirectFB最近得到了比老款fb更多的喜爱,因为它更专注于更性感的3d hw accel。如果你想在不使用3d硬件加速(甚至2d硬件加速)的情况下尽可能快地渲染到桌面屏幕上,那么fb可能没问题,但不会给你提供X所不能提供的任何东西。X显然使用了fb,与你的程序可能会有的其他开销相比,它的开销可能是微不足道的(不要在任何紧凑的循环中调用X,而是在设置完帧的所有像素后再调用X)。另一方面,可以很好地使用fb,如下面的评论所述:Paint Pixels to Screen via Linux FrameBuffer

票数 3
EN

Stack Overflow用户

发布于 2011-06-18 17:46:02

检查MPlayer源代码。

在/libvo目录下,有很多Mplayer用来显示多媒体的视频输出插件。在那里你可以找到使用vo_fbdev*帧缓冲的fbdev (Linux源)插件。

有很多ioctl调用,代码如下:

  • FBIOGET_VSCREENINFO
  • FBIOPUT_VSCREENINFO
  • FBIOGET_FSCREENINFO
  • FBIOGETCMAP
  • FBIOPUTCMAP
  • FBIOPAN_DISPLAY

它不像一个很好的文档,但这确实是一个很好的应用程序实现。

票数 3
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/2503904

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档