现在的位置: 首页 > 综合 > 正文

使用qvfb在X11下开发framebuffer应用程序

2013年10月07日 ⁄ 综合 ⁄ 共 858字 ⁄ 字号 评论关闭

转载请指明出处:http://blog.csdn.net/alenwelkin


qvfb是QT virtual framebuffer的缩写,是QT在X11下的一个framebuffer仿真器,有了它我们就可以利用X11下众多便利的工具来开发基于framebuffer的应用程序了。qvfb的原理很简单,它建立了一个system V共享内存,用户只需将需要显示的图像按像素格式要求放到共享内存里qvfb就可以显示了。

System V共享内存连接的步骤是:

1.通过ftok拿到key
2.使用shmget拿到shmid
3.使用shmat连接到共享内存

这里需要注意的是,key的生成需要向ftok传入一个双方约定好的文件名,对于qvfb屏幕设备,这个文件是/tmp/.qtvfb_mouse-0。

qvfb创建的共享内存包含一个私有的数据头,用于指示像素格式、宽高等信息。这个头结构定义如下:
struct QVFbHeader
{
    int width;
    int height;
    int depth;
    int linestep;
    int dataoffset;
    int update[4];
    char dirty;
    int  numcols;
    unsigned int clut[256];
};

其中dataoffset是virtual framebuffer相对于头结构的偏移位置。向偏移后的地址写入数据就可以反应到qvfb上了。以下是一段示例,

    int key = ftok("/tmp/.qtvfb_mouse-0", 'b');
    int shmid = shmget(key, 0, 0);
    if (shmid !=-1)
    {
        struct QVFbHeader* qvfb_data = shmat(shmid, 0, 0);
        if (qvfb_data != NULL)
            memset((char*)qvfb_data + qvfb_data->dataoffset, 0xff, 65535);
    }

抱歉!评论已关闭.