6. GFBG接口说明

GFBG的API主要分为文件操作类(open、close等)、显存映射类(mmap、munmap等)、显存控制和状态查询类(像素格式、颜色深度等)和层间效果控制和状态查询类(显示原点、显示状态等)四大类。每一类的函数都具有特定的功能和用途,开发者可以根据实际需求选择合适的函数进行调用。 其中第一类和第二类是Linux提供的常用标准接口,本小节不会赘述,主要介绍第三类和第四类的接口函数。

6.1. ioctl函数

GFBG 的用户态接口以 ioctl 形式体现,其形式如下:

int ioctl(int fd, unsigned long cmd, ...);

GFBG只需要3个参数,即形式为:

int ioctl(int fd, unsigned long cmd, CMD_DATA_TYPE *cmd_data);

该功能模块为用户提供以下API:

6.1.1. FBIOGET_VSCREENINFO

【描述】

获取屏幕的可变信息。

【语法】

int ioctl (int fd, FBIOGET_VSCREENINFO, struct fb_var_screeninfo *var);

【参数】

参数名称

描述

输入/输出

fd

Framebuffer 设备文件描述符

输入

FBIOGET_VSCREENINFO

ioctl 号

输入

var

可变信息结构体指针

输出

【返回值】

返回值

描述

0

成功。

-1

失败。

【需求】

  • 头文件:cvi_comm_fb.h

【注意】

【举例】

struct fb_var_screeninfo vinfo;
if (ioctl(fd, FBIOGET_VSCREENINFO, &vinfo) < 0) {
    return -1;
}

【相关主题】

FBIOPUT_VSCREENINFO

6.1.2. FBIOPUT_VSCREENINFO

【描述】

设置 Framebuffer 的屏幕分辨率和像素格式等。

【语法】

int ioctl (int fd, FBIOPUT_VSCREENINFO, struct fb_var_screeninfo *var);

【参数】

参数名称

描述

输入/输出

fd

Framebuffer 设备文件描述符

输入

FBIOPUT_VSCREENINFO

ioctl 号

输入

var

可变信息结构体指针

输入

【返回值】

返回值

描述

0

成功。

-1

失败。

【需求】

  • 头文件:cvi_comm_fb.h

【注意】

  • 分辨率的大小必须在各叠加层支持的分辨率范围内。

  • 必须保证实际分辨率与偏移的和在虚拟分辨率范围内,否则系统会自动调整实际分辨率的大小让其在虚拟分辨率范围内。

  • 对于隔行显示设备,要求分辨率的高度必须为偶数。

  • 如果图形层支持缩放,可以设置显示分辨率大于设备分辨率,这时候显示图像的一部分。

【举例】

struct fb_var_screeninfo vinfo;
vinfo.xres = 1920;
vinfo.yres = 1080;
vinfo.bits_per_pixel = 32;
vinfo.xres_virtual = 1920;
     vinfo.yres_virtual = 2160;

if (ioctl(fd, FBIOPUT_VSCREENINFO, &vinfo) < 0) {
    return -1;
}

【相关主题】

FBIOGET_VSCREENINFO

6.1.3. FBIOGET_FSCREENINFO

【描述】

获取 Framebuffer 的固定信息。

【语法】

int ioctl (int fd, FBIOGET_FSCREENINFO, struct fb_fix_screeninfo *fix);

【参数】

参数名称

描述

输入/输出

fd

Framebuffer 设备文件描述符

输入

FBIOGET_FSCREENINFO

ioctl 号

输入

fix

固定信息结构体指针

输出

【返回值】

返回值

描述

0

成功。

-1

失败。

【需求】

  • 头文件:cvi_comm_fb.h

【注意】

无。

【举例】

无。

【相关主题】

无。

6.1.4. FBIOPAN_DISPLAY

【描述】

设置从虚拟分辨率中的不同偏移处开始显示。

【语法】

int ioctl (int fd, FBIOPAN_DISPLAY, struct fb_var_screeninfo *var);

【参数】

参数名称

描述

输入/输出

fd

Framebuffer 设备文件描述符

输入

FBIOPAN_DISPLAY

ioctl 号

输入

var

可变信息结构体指针

输入

【返回值】

返回值

描述

0

成功。

-1

失败。

【需求】

  • 头文件:cvi_comm_fb.h

【注意】

  • 此接口只应在 FB 标准模式中使用。

  • 必须保证实际分辨率与偏移的和在虚拟分辨率范围内,否则设置不成功。

  • 最好保证 xoffset 与 yoffset 形成的偏移地址是 16byte 对齐的,否则会将 xoffset 的值减少到能使偏移地址是 16byte 对齐的位置。

  • 对于隔行显示设备,要求分辨率的高度必须为偶数。

  • 使用此接口设置从虚拟分辨率中的不同偏移处开始显示,实际的分辨率不变。如下图所示:(xres_virtual, yres_virtual)是虚拟分辨率,(xres, yres)是实际显示的分辨率,(xoffset, yoffset)是显示的偏移。

_images/image6-1.png

图 6.1 FBIOPAN_DISPLAY示意图

【举例】 无。

【相关主题】

无。

6.1.5. FBIOGET_SCREEN_ORIGIN_GFBG

【描述】

获取叠加层在屏幕上显示的起始点坐标。

【语法】

int ioctl (int fd, FBIOGET_SCREEN_ORIGIN_GFBG, cvi_fb_point *point);

【参数】

参数名称

描述

输入/输出

fd

Framebuffer 设备文件描述符

输入

FBIOGET_SCREEN_ORIGIN_GFBG

ioctl 号

输入

point

坐标原点结构体指针

输出

【返回值】

返回值

描述

0

成功。

-1

失败。

【需求】

  • 头文件:cvi_comm_gfbg.h

【注意】

【举例】

无。

【相关主题】

FBIOPUT_SCREEN_ORIGIN_GFBG

6.1.6. FBIOPUT_SCREEN_ORIGIN_GFBG

【描述】

设置叠加层在屏幕上显示的起始点坐标。

【语法】

int ioctl (int fd, FBIOPUT_SCREEN_ORIGIN_GFBG, cvi_fb_point *point);

【参数】

参数名称

描述

输入/输出

fd

Framebuffer 设备文件描述符

输入

FBIOPUT_SCREEN_ORIGIN_GFBG

ioctl 号

输入

point

坐标原点结构体指针

输入

【返回值】

返回值

描述

0

成功。

-1

失败。

【需求】

  • 头文件:cvi_comm_gfbg.h

【注意】

  • 如果叠加层坐标原点超出了范围(x_pos > (max_width-min_width) 或 y_pos > (max_height-min_height)),默认将坐标原点设置为(max_width-min_width,max_height-min_height),其中 max_width 和 max_height 的值是设备时序定义的最大宽高;min_width 和 min_height 分别表示可加载的最小图像的宽和高,可通过 FBIOGET_CAPABILITY_GFBG 接口中的 min_width 和 min_height 成员获取。

  • 对于隔行显示设备,要求坐标原点的纵坐标值为偶数。

【举例】

无。

【相关主题】

FBIOGET_SCREEN_ORIGIN_GFBG

6.1.7. FBIOGET_SHOW_GFBG

【描述】

获取当前叠加层的显示状态。

【语法】

int ioctl (int fd, FBIOGET_SHOW_GFBG, CVI_BOOL *show);

【参数】

参数名称

描述

输入/输出

fd

Framebuffer 设备文件描述符

输入

FBIOGET_SHOW_GFBG

ioctl 号

输入

show

该叠加层的显示状态: - * show = CVI_TRUE: 显示当前叠加层 - * show = CVI_FALSE: 隐藏当前叠加层

输出

【返回值】

返回值

描述

0

成功。

-1

失败。

【需求】

  • 头文件:cvi_comm_gfbg.h

【注意】

  • 对软鼠标不适用。

【举例】

无。

【相关主题】

FBIOPUT_SHOW_GFBG

6.1.8. FBIOPUT_SHOW_GFBG

【描述】

显示或隐藏该叠加层。

【语法】

int ioctl (int fd, FBIOPUT_SHOW_GFBG, CVI_BOOL *show);

【参数】

参数名称

描述

输入/输出

fd

Framebuffer 设备文件描述符

输入

FBIOPUT_SHOW_GFBG

ioctl 号

输入

show

该叠加层的显示状态: - * show = CVI_TRUE: 显示当前叠加层 - * show = CVI_FALSE: 隐藏当前叠加层

输入

【返回值】

返回值

描述

0

成功。

-1

失败。

【需求】

  • 头文件:cvi_comm_gfbg.h

【注意】

  • 为正常显示,在显示之前,应将 show 的值设为 CVI_TRUE 调用 ioctl(fd, FBIOPUT_SHOW_GFBG, &show)。

  • 显示时应保证图形层的分辨率不超出设备分辨率。

  • 保证显示设备的能力支持所要显示的分辨率。

【举例】

无。

【相关主题】

FBIOGET_SHOW_GFBG

6.1.9. FBIOGET_COLORKEY_GFBG

【描述】

获取叠加层的 colorkey。

【语法】

int ioctl (int fd, FBIOGET_COLORKEY_GFBG, cvi_fb_colorkey *colorkey);

【参数】

参数名称

描述

输入/输出

fd

Framebuffer 设备文件描述符

输入

FBIOGET_COLORKEY_GFBG

ioctl 号

输入

colorkey

colorkey 结构体指针

输出

【返回值】

返回值

描述

0

成功。

-1

失败。

【需求】

  • 头文件:cvi_comm_gfbg.h

【注意】

【举例】

无。

【相关主题】

FBIOPUT_COLORKEY_GFBG

6.1.10. FBIOPUT_COLORKEY_GFBG

【描述】

设置叠加层的 colorkey。

【语法】

int ioctl (int fd, FBIOPUT_COLORKEY_GFBG, cvi_fb_colorkey *colorkey);

【参数】

参数名称

描述

输入/输出

fd

Framebuffer 设备文件描述符

输入

FBIOPUT_COLORKEY_GFBG

ioctl 号

输入

colorkey

colorkey 结构体指针

输入

【返回值】

返回值

描述

0

成功。

-1

失败。

【需求】

  • 头文件:cvi_comm_gfbg.h

【注意】

【举例】

cvi_fb_colorkey colorkey;
colorkey.enable = CVI_TRUE;
colorkey.value = 0xFFFF0000;
if (ioctl(fd, FBIOPUT_COLORKEY_GFBG, &colorkey) < 0) {
    return -1;
}

【相关主题】

FBIOGET_COLORKEY_GFBG

6.1.11. FBIOGET_VER_BLANK_GFBG

【描述】

为了操作显存时不引起撕裂现象,建议在该叠加层的消隐区对显存进行操作,通过该接口可以等待该叠加层消隐区的到来,底层原理是等待vo的下一个中断到来。

【语法】

int ioctl (int fd, FBIOGET_VER_BLANK_GFBG);

【参数】

参数名称

描述

输入/输出

fd

Framebuffer 设备文件描述符

输入

FBIOGET_VER_BLANK_GFBG

ioctl 号

输入

【返回值】

返回值

描述

0

成功。

-1

失败。

【需求】

  • 头文件:cvi_comm_gfbg.h

【注意】

  • 垂直消隐间隔较短,一般在几十毫秒,建议操作时间尽量短,以保证在垂直消隐区结束前完成。

【举例】

无。

【相关主题】

无。

6.1.12. FBIOPUT_LAYER_INFO

【描述】

设置图层信息,用于完成从 FB 的标准模式到 FB 的扩展模式切换或是 FB 的扩展模式之间的切换,同时能设置扩展模式下的刷新信息。

【语法】

int ioctl (int fd, FBIOPUT_LAYER_INFO, cvi_fb_layer_info *layer_info);

【参数】

参数名称

描述

输入/输出

fd

Framebuffer 设备文件描述符

输入

FBIOPUT_LAYER_INFO

ioctl 号

输入

layer_info

图层信息结构体指针

输入

【返回值】

返回值

描述

0

成功。

-1

失败。

【需求】

  • 头文件:cvi_comm_gfbg.h

【注意】

  • 在设置完某项属性后,必须通过设置 layer_info 的 mask 设置相应的掩码,否则该项设置不会生效。

  • 对于隔行显示设备,要求显存分辨率与屏幕显示分辨率的高度都必须为偶数。

  • 芯片中图层自带的缩放功能可以参考 FBIOPUT_SCREEN_SIZE。

【举例】

cvi_fb_layer_info layer_info = {0};
layer_info.buf_mode = CVI_FB_LAYER_BUF_NONE;
layer_info.mask = CVI_FB_LAYER_MASK_BUF_MODE;
ret = ioctl(s32Fd, FBIOPUT_LAYER_INFO, &layer_info);

【相关主题】

无。

6.1.13. FBIOGET_LAYER_INFO

【描述】

获取图层信息,包括刷新模式屏幕起始点位置、画布分辨率、显存分辨率、屏幕显示分辨率。

【语法】

int ioctl (int fd, FBIOGET_LAYER_INFO, cvi_fb_layer_info *layer_info);

【参数】

参数名称

描述

输入/输出

fd

Framebuffer 设备文件描述符

输入

FBIOGET_LAYER_INFO

ioctl 号

输入

layer_info

图层信息结构体指针

输出

【返回值】

返回值

描述

0

成功。

-1

失败。

【需求】

  • 头文件:cvi_comm_gfbg.h

【注意】

  • 该接口获取到的接口数据 cvi_fb_layer_info 中,mask 成员是没有意义的,始终被填充为 CVI_FB_LAYER_MASK_BUTT。

【举例】

无。

【相关主题】

无。

6.1.14. FBIOGET_CANVAS_BUF

【描述】

获取画布信息。

【语法】

int ioctl (int fd, FBIOGET_CANVAS_BUF, cvi_fb_buf *canvas_buf);

【参数】

参数名称

描述

输入/输出

fd

Framebuffer 设备文件描述符

输入

FBIOGET_CANVAS_BUF

ioctl 号

输入

canvas_buf

画布信息结构体指针

输出

【返回值】

返回值

描述

0

成功。

-1

失败。

【需求】

  • 头文件:cvi_comm_gfbg.h

【注意】

【举例】

无。

【相关主题】

无。

6.1.15. FBIO_REFRESH

【描述】

扩展模式下,启动刷新操作。

【语法】

int ioctl (int fd, FBIO_REFRESH, cvi_fb_buf *buf_info);

【参数】

参数名称

描述

输入/输出

fd

Framebuffer 设备文件描述符

输入

FBIO_REFRESH

ioctl 号

输入

buf_info

cvi_fb_buf 结构体指针

输入

【返回值】

返回值

描述

0

成功。

-1

失败。

【需求】

  • 头文件:cvi_comm_gfbg.h

【注意】 无。

【举例】

无。

【相关主题】

无。

6.1.16. FBIOPUT_SCREEN_SIZE

【描述】

设置图层在屏幕上的显示大小。

【语法】

int ioctl (int fd, FBIOPUT_SCREEN_SIZE, cvi_fb_size *cvi_fb_size);

【参数】

参数名称

描述

输入/输出

fd

Framebuffer 设备文件描述符

输入

FBIOPUT_SCREEN_SIZE

ioctl 号

输入

cvi_fb_size

cvi_fb_size 类型指针,宽高要求 2 对齐。

输入

【返回值】

返回值

描述

0

成功。

-1

失败。

【需求】

  • 头文件:cvi_comm_gfbg.h

【注意】

  • 通过设置屏幕显示分辨率,可以对图像进行缩放。如图像大小为 800x600,则设置屏幕显示大小为 1280x720 可将图像放大到 1280x720 显示。

  • 图形层缩放限制:输入分辨率超过 1920x1080,不支持放大。

  • 支持缩放倍数 1~15 倍。

【举例】

无。

【相关主题】

FBIOGET_SCREEN_SIZE

6.1.17. FBIOGET_SCREEN_SIZE

【描述】

获取图层在屏幕上的显示大小。

【语法】

int ioctl (int fd, FBIOGET_SCREEN_SIZE, cvi_fb_size *cvi_fb_size);

【参数】

参数名称

描述

输入/输出

fd

Framebuffer 设备文件描述符

输入

FBIOGET_SCREEN_SIZE

ioctl 号

输入

cvi_fb_size

cvi_fb_size 类型指针

输出

【返回值】

返回值

描述

0

成功。

-1

失败。

【需求】

  • 头文件:cvi_comm_gfbg.h

【注意】

无。

【举例】

无。

【相关主题】

FBIOPUT_SCREEN_SIZE