前言¶
概述
本文档主要介绍GFBG的API和数据类型以及Proc调试信息。
说明:
未有特殊说明,SS528V100、SS625V100、SS524V100、SS522V101与SS626V100内容一致。
未有特殊说明,SS927V100与SS928V100,SS522V100与SS524V100内容完全一致。
产品版本
与本文档相对应的产品版本如下。
产品名称 |
产品版本 |
|---|---|
SS928 |
V100 |
SS626 |
V100 |
SS524 |
V100 |
SS522 |
V101 |
SS522 |
V100 |
SS528 |
V100 |
SS625 |
V100 |
SS927 |
V100 |
读者对象
本文档(本指南)主要适用于以下工程师:
技术支持工程师
软件开发工程师
符号约定
在本文中可能出现下列标志,它们所代表的含义如下。
符号 |
说明 |
|---|---|
|
表示如不避免则将会导致死亡或严重伤害的具有高等级风险的危害。 |
|
表示如不避免则可能导致死亡或严重伤害的具有中等级风险的危害。 |
|
表示如不避免则可能导致轻微或中度伤害的具有低等级风险的危害。 |
|
用于传递设备或环境安全警示信息。如不避免则可能会导致设备损坏、数据丢失、设备性能降低或其它不可预知的结果。 “须知”不涉及人身伤害。 |
|
对正文中重点信息的补充说明。 “说明”不是安全警示信息,不涉及人身、设备及环境伤害信息。 |
修订记录
修订记录累积了每次文档更新的说明。最新版本的文档包含以前所有文档版本的更新内容。
文档版本 |
发布日期 |
修改说明 |
|---|---|---|
00B01 |
2025-09-15 |
第1次临时版本发布。 |
概述¶
概述¶
Graphic Framebuffer Group(以下简称GFBG)是数字媒体处理平台提供的管理图像叠加层的模块,它基于Linux Framebuffer实现,在提供Linux Framebuffer基本功能的基础上,还扩展了一些图形层控制功能,如层间Alpha、设置原点、FB扩展模式等。
参考域说明¶
API参考域¶
本手册使用9个参考域描述API的相关信息,它们的作用如表1所示。
表 1 API参考域说明
参考域 |
含义 |
|---|---|
目的 |
简要描述API的主要功能。 |
语法 |
列出调用API应包括的头文件以及API的原型声明。 |
参数 |
列出API的参数、参数说明及参数属性。 |
描述 |
简要描述API的工作过程。 |
返回值 |
列出API所有可能的返回值及其含义。 |
需求 |
列出API包含的头文件和API编译时要链接的库文件。 |
注意 |
列出使用API时应注意的事项。 |
举例 |
列出使用API的实例。 |
相关接口 |
列出与本API相关联的其他接口。 |
数据类型参考域¶
本手册使用5个参考域描述数据类型的相关信息,它们的作用如表1所示。
表 1 数据类型参考域说明
参考域 |
含义 |
|---|---|
说明 |
简要描述数据类型的主要功能。 |
定义 |
列出数据类型的定义语句。 |
成员 |
列出数据结构的成员及含义。 |
注意事项 |
列出使用数据类型时应注意的事项。 |
相关数据类型和接口 |
列出与本数据类型相关联的其他数据类型和接口。 |
API参考¶
API类别¶
GFBG的API分为以下几类:
文件操作类
提供操作GFBG的接口。通过调用这些接口,可以像操作文件一样操作叠加层。这些接口是Linux本身提供的标准接口,主要有open、close、write、read、lseek等。本文档不对这些标准接口进行描述。
显存映射类
提供将物理显存映射到用户虚拟内存空间的接口。这些接口是Linux本身提供的标准接口,主要有mmap、munmap等。本文档不对这些标准接口进行描述。
显存控制和状态查询类
允许设置像素格式和颜色深度等属性的接口。这些接口是Linux本身提供的标准接口,经常使用。本文档将对其进行简要描述。
层间效果控制和状态查询类
GFBG可以管理多个图形叠加层,每层可以设置Alpha值和原点等。相对于Linux Framebuffer,这些是GFBG的新增功能。本文档将重点描述该部分。
ioctl函数¶
GFBG的用户态接口以ioctl形式体现,其形式如下:
int ioctl(int fd,
unsigned long cmd,
……
);
该函数是Linux标准接口,具备可变参数特性。但在GFBG中,实际只需要3个参数。因此,其语法形式等同于:
int ioctl (int fd,
unsigned long cmd,
CMD_DATA_TYPE *cmd_data);
其中,CMD_DATA_TYPE随参数cmd的变化而变化。这3个参数的详细描述如表1所示。
表 1 ioctl函数的3个参数
参数名称 |
描述 |
输入/输出 |
|---|---|---|
fd |
Framebuffer设备文件描述符,是调用open函数打开Framebuffer设备之后的返回值。 |
输入 |
cmd |
主要的cmd(命令控制字)如下:
|
输入 |
cmd_data |
各cmd对应的数据类型分别是:
|
输入 输出 |
标准功能¶
FBIOGET_VSCREENINFO¶
【目的】
获取屏幕的可变信息。
【语法】
int ioctl (int fd,
FBIOGET_VSCREENINFO,
fb_var_screeninfo *var);
【描述】
使用此接口获取屏幕的可变信息,主要包括分辨率和像素格式。信息的详细描述请参见fb_var_screeninfo。
【参数】
参数名称 |
描述 |
输入/输出 |
|---|---|---|
fd |
Framebuffer设备文件描述符 |
输入 |
FBIOGET_VSCREENINFO |
ioctl号 |
输入 |
var |
可变信息结构体指针 |
输出 |
【返回值】
返回值 |
描述 |
|---|---|
0 |
成功 |
–1 |
失败 |
【需求】
头文件:fb.h
【注意】
高清设备的图形层G0默认分辨率为3840x2160,G1默认分辨率为1920x1080,鼠标层的默认分辨率为256x256,标清设备的图形层的默认分辨率为720x576。
【举例】
struct fb_var_screeninfo vinfo;
if (ioctl(fd, FBIOGET_VSCREENINFO, &vinfo) < 0)
{
return -1;
}
【相关接口】
FBIOPUT_VSCREENINFO¶
【目的】
设置Framebuffer的屏幕分辨率和像素格式等。
【语法】
int ioctl (int fd,
FBIOPUT_VSCREENINFO,
fb_var_screeninfo *var);
【描述】
使用此接口设置屏幕分辨率、像素格式。
【参数】
参数名称 |
描述 |
输入/输出 |
|---|---|---|
fd |
Framebuffer设备文件描述符 |
输入 |
FBIOPUT_VSCREENINFO |
ioctl号 |
输入 |
var |
可变信息结构体指针 |
输入 |
【返回值】
返回值 |
描述 |
|---|---|
0 |
成功 |
–1 |
失败 |
【需求】
头文件:fb.h
【注意】
分辨率的大小必须在各叠加层支持的分辨率范围内,各叠加层支持的最大分辨率和最小分辨率可通过FBIOGET_CAPABILITY_GFBG获取。
必须保证实际分辨率与偏移的和在虚拟分辨率范围内,否则系统会自动调整实际分辨率的大小让其在虚拟分辨率范围内。
对于隔行显示设备,要求分辨率的高度必须为偶数。
如果图形层支持缩放,可以设置显示分辨率大于设备分辨率,这时候显示图像的一部分。
linux5.10版本在FBIOPUT_VSCREENINFO接口中增加了xres和yres最小值的的检查,xres和yres均需要大于等8,否则该接口会返回失败。
【举例】
设置实际分辨率为720x576,虚拟分辨率为720x576,偏移为(0,0),像素格式为ARGB1555的示例代码如下:
struct fb_bitfield r16 = {10, 5, 0};
struct fb_bitfield g16 = {5, 5, 0};
struct fb_bitfield b16 = {0, 5, 0};
struct fb_bitfield a16 = {15, 1, 0};
struct fb_var_screeninfo vinfo;
if (ioctl(fd, FBIOGET_VSCREENINFO, &vinfo) < 0)
{
return -1;
}
vinfo.xres_virtual = 720;
vinfo.yres_virtual = 576;
vinfo.xres = 720;
vinfo.yres = 576;
vinfo.activate = FB_ACTIVATE_NOW;
vinfo.bits_per_pixel = 16;
vinfo.xoffset = 0;
vinfo.yoffset = 0;
vinfo.red = r16;
vinfo.green = g16;
vinfo.blue = b16;
vinfo.transp= a16;
if (ioctl(fd, FBIOPUT_VSCREENINFO, &vinfo) < 0)
{
return -1;
}
【相关接口】
FBIOGET_FSCREENINFO¶
【目的】
获取Framebuffer的固定信息。
【语法】
int ioctl (int fd,
FBIOGET_FSCREENINFO,
fb_fix_screeninfo *fix);
【描述】
使用此接口获取Framebuffer固定信息,包括显存起始物理地址、显存大小和行间距等。信息的详细描述请参见fb_fix_screeninfo。
【参数】
参数名称 |
描述 |
输入/输出 |
|---|---|---|
fd |
Framebuffer设备文件描述符 |
输入 |
FBIOGET_FSCREENINFO |
ioctl号 |
输入 |
fix |
固定信息结构体指针 |
输出 |
【返回值】
返回值 |
描述 |
|---|---|
0 |
成功 |
–1 |
失败 |
【需求】
头文件:fb.h
【注意】
无。
【举例】
无。
【相关接口】
无。
FBIOPAN_DISPLAY¶
【目的】
设置从虚拟分辨率中的不同偏移处开始显示。
【语法】
int ioctl (int fd,
FBIOPAN_DISPLAY,
fb_var_screeninfo *var);
【描述】
使用此接口设置从虚拟分辨率中的不同偏移处开始显示,实际的分辨率不变。如图1所示:(xres_virtual, yres_virtual)是虚拟分辨率,(xres, yres)是实际显示的分辨率,(xoffset, yoffset)是显示的偏移。
图 1 设置从虚拟分辨率中的不同偏移处开始显示

【参数】
参数名称 |
描述 |
输入/输出 |
|---|---|---|
fd |
Framebuffer设备文件描述符 |
输入 |
FBIOPAN_DISPLAY |
ioctl号 |
输入 |
var |
可变信息结构体指针 |
输入 |
【返回值】
返回值 |
描述 |
|---|---|
0 |
成功 |
–1 |
失败 |
【需求】
头文件:fb.h
【注意】
此接口只应在FB标准模式中使用,它能把FB从扩展模式切换到标准模式。
必须保证实际分辨率与偏移的和在虚拟分辨率范围内,否则设置不成功。另外,最好保证xoffset与yoffset形成的偏移地址是16byte对齐的,否则会将xoffset的值减少到能使偏移地址是16byte对齐的位置。
对于隔行显示设备,要求分辨率的高度必须为偶数。
【举例】
设置实际分辨率为300x300,虚拟分辨率为720x576,起始偏移为(50,50),然后偏移到(300,0)处开始显示的PAN设置代码如下:
struct fb_bitfield r32 = {16, 8, 0};
struct fb_bitfield g32 = {8, 8, 0};
struct fb_bitfield b32 = {0, 8, 0};
struct fb_bitfield a32 = {24, 8, 0};
struct fb_var_screeninfo vinfo;
vinfo.xres_virtual = 720;
vinfo.yres_virtual = 576;
vinfo.xres = 300;
vinfo.yres = 300;
vinfo.activate = FB_ACTIVATE_NOW;
vinfo.bits_per_pixel = 32;
vinfo.xoffset = 50;
vinfo.yoffset = 50;
vinfo.red = r32;
vinfo.green = g32;
vinfo.blue = b32;
vinfo.transp= a32;
if (ioctl(fd, FBIOPUT_VSCREENINFO, &vinfo) < 0)
{
return -1;
}
vinfo.xoffset = 300;
vinfo.yoffset = 0;
if (ioctl(fd, FBIOPAN_DISPLAY, &vinfo) < 0)
{
return -1;
}
扩展功能¶
通用功能¶
FBIOGET_CAPABILITY_GFBG¶
【目的】
获取叠加层的支持能力。
【语法】
int ioctl (int fd,
FBIOGET_CAPABILITY_GFBG,
ot_fb_capability *cap);
【描述】
在使用某些接口前,用户可以通过调用此接口查询该叠加层是否支持该功能。
【参数】
参数名称 |
描述 |
输入/输出 |
|---|---|---|
fd |
Framebuffer设备文件描述符 |
输入 |
FBIOGET_CAPABILITY_GFBG |
ioctl号 |
输入 |
cap |
支持能力结构体指针 |
输出 |
【返回值】
返回值 |
描述 |
|---|---|
0 |
成功 |
–1 |
失败 |
【需求】
头文件:gfbg.h
【注意】
通过本接口获取的max_width和max_height为该图层用作高清、标清UI的最大值;如果该图层用于FBIO_DRAW_SMART_RECT,无须关注本接口获取的max_width和max_height,默认FBIO_DRAW_SMART_RECT支持最大分辨率3840*2160。
【举例】
无。
【相关接口】
无。
FBIOGET_SCREEN_ORIGIN_GFBG¶
【目的】
获取叠加层在屏幕上显示的起始点坐标。
【语法】
int ioctl (int fd,
FBIOGET_SCREEN_ORIGIN_GFBG,
ot_fb_point *point);
【描述】
使用此接口获取叠加层在屏幕上显示的起始点坐标。
【参数】
参数名称 |
描述 |
输入/输出 |
|---|---|---|
fd |
Framebuffer设备文件描述符 |
输入 |
FBIOGET_SCREEN_ORIGIN_GFBG |
ioctl号 |
输入 |
point |
坐标原点结构体指针 |
输出 |
【返回值】
返回值 |
描述 |
|---|---|
0 |
成功 |
–1 |
失败 |
【需求】
头文件:gfbg.h
【注意】
对软鼠标不适用。
【举例】
无。
【相关接口】
FBIOPUT_SCREEN_ORIGIN_GFBG¶
【目的】
设置叠加层在屏幕上显示的起始点坐标。
【语法】
int ioctl (int fd,
FBIOPUT_SCREEN_ORIGIN_GFBG,
ot_fb_point *point);
【描述】
使用此接口设置叠加层在屏幕上显示的起始点坐标,坐标范围从(0, 0)到该叠加层支持的最大分辨率减图形层支持的最小分辨率之间。
【参数】
参数名称 |
描述 |
输入/输出 |
|---|---|---|
fd |
Framebuffer设备文件描述符 |
输入 |
FBIOPUT_SCREEN_ORIGIN_GFBG |
ioctl号 |
输入 |
point |
坐标原点结构体指针 |
输入 |
【返回值】
返回值 |
描述 |
|---|---|
0 |
成功 |
–1 |
失败 |
【需求】
头文件: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_SHOW_GFBG¶
【目的】
获取当前叠加层的显示状态。
【语法】
int ioctl (int fd,
FBIOGET_SHOW_GFBG,
td_bool *show);
【描述】
使用此接口获取当前叠加层显示状态。
【参数】
参数名称 |
描述 |
输入/输出 |
|---|---|---|
fd |
Framebuffer设备文件描述符 |
输入 |
FBIOGET_SHOW_GFBG |
ioctl号 |
输入 |
show |
指示当前叠加层的状态:
|
输出 |
【返回值】
返回值 |
描述 |
|---|---|
0 |
成功 |
–1 |
失败 |
【需求】
头文件:gfbg.h
【注意】
对软鼠标不适用。
【举例】
无。
【相关接口】
FBIOPUT_SHOW_GFBG¶
【目的】
显示或隐藏该叠加层。
【语法】
int ioctl (int fd,
FBIOPUT_SHOW_GFBG,
td_bool *show);
【描述】
使用此接口设置叠加层显示状态:显示或隐藏。
【参数】
参数名称 |
描述 |
输入/输出 |
|---|---|---|
fd |
Framebuffer设备文件描述符 |
输入 |
FBIOPUT_SHOW_GFBG |
ioctl号 |
输入 |
show |
该叠加层的显示状态:
|
输入 |
【返回值】
返回值 |
描述 |
|---|---|
0 |
成功 |
–1 |
失败 |
【需求】
头文件:gfbg.h
【注意】
为正常显示,在显示之前,应将show的值设为TD_TRUE调用ioctl(fd, FBIOPUT_SHOW_GFBG, &show),即使能对应图形层。
显示时应保证图形层的分辨率不超出设备分辨率。
保证显示设备的能力支持所要显示的分辨率。
【举例】
无。
【相关接口】
FBIOGET_MIRROR_MODE¶
【目的】
获取当前叠加层的镜像模式。
【语法】
int ioctl (int fd,
FBIOGET_MIRROR_MODE,
ot_fb_mirror_mode *mirror_mode);
【描述】
使用此接口获取当前叠加层镜像模式。
【参数】
参数名称 |
描述 |
输入/输出 |
|---|---|---|
fd |
Framebuffer设备文件描述符 |
输入 |
FBIOGET_MIRROR_MODE |
ioctl号 |
输入 |
mirror_mode |
指示当前叠加层的镜像模式 |
输出 |
【返回值】
返回值 |
描述 |
|---|---|
0 |
成功 |
–1 |
失败 |
【需求】
头文件:gfbg.h
【注意】
只用于扩展模式下,OT_FB_LAYER_BUF_NONE模式不支持,对软鼠标不适用。
【举例】
无。
【相关接口】
无。
FBIOPUT_MIRROR_MODE¶
【目的】
设置当前叠加层的镜像模式。
【语法】
int ioctl (int fd,
FBIOPUT_MIRROR_MODE,
ot_fb_mirror_mode *mirror_mode);
【描述】
使用此接口设置当前叠加层镜像模式。
【参数】
参数名称 |
描述 |
输入/输出 |
|---|---|---|
fd |
Framebuffer设备文件描述符 |
输入 |
FBIOGET_MIRROR_MODE |
ioctl号 |
输入 |
mirror_mode |
叠加层的镜像模式 |
输入 |
【返回值】
返回值 |
描述 |
|---|---|
0 |
成功 |
–1 |
失败 |
【需求】
头文件:gfbg.h
【注意】
只用于扩展模式下,对软鼠标不适用。
不支持镜像模式和压缩同时做。
不支持镜像模式和旋转同时做。
在OT_FB_LAYER_BUF_NONE刷新模式下不支持镜像操作。
【举例】
无。
【相关接口】
无。
FBIOGET_ALPHA_GFBG¶
【目的】
获取叠加层Alpha。
【语法】
int ioctl (int fd,
FBIOGET_ALPHA_GFBG,
ot_fb_alpha *alpha);
【描述】
使用此接口获取当前叠加层的Alpha设置。
【参数】
参数名称 |
描述 |
输入/输出 |
|---|---|---|
fd |
Framebuffer设备文件描述符 |
输入 |
FBIOGET_ALPHA_GFBG |
ioctl号 |
输入 |
alpha |
Alpha结构体指针 |
输出 |
【返回值】
返回值 |
描述 |
|---|---|
0 |
成功 |
–1 |
失败 |
【需求】
头文件:gfbg.h
【注意】
请参见ot_fb_alpha的说明。
【举例】
无。
【相关接口】
FBIOPUT_ALPHA_GFBG¶
【目的】
设置叠加层的Alpha。
【语法】
int ioctl (int fd,
FBIOPUT_ALPHA_GFBG,
ot_fb_alpha *alpha);
【描述】
使用此接口设置当前叠加层的Alpha功能。
【参数】
参数名称 |
描述 |
输入/输出 |
|---|---|---|
fd |
Framebuffer设备文件描述符 |
输入 |
FBIOPUT_ALPHA_GFBG |
ioctl号 |
输入 |
alpha |
Alpha结构体指针 |
输入 |
【返回值】
返回值 |
描述 |
|---|---|
0 |
成功 |
–1 |
失败 |
【需求】
头文件:gfbg.h
【注意】
请参见ot_fb_alpha的说明。
【举例】
无。
【相关接口】
FBIOGET_COLORKEY_GFBG¶
【目的】
获取叠加层的colorkey。
【语法】
int ioctl (int fd,
FBIOGET_COLORKEY_GFBG,
ot_fb_colorkey *colorkey);
【描述】
使用此接口获取叠加层的colorkey。
【参数】
参数名称 |
描述 |
输入/输出 |
|---|---|---|
Fd |
Framebuffer设备文件描述符 |
输入 |
FBIOGET_COLORKEY_GFBG |
ioctl号 |
输入 |
colorkey |
colorkey结构体指针 |
输出 |
【返回值】
返回值 |
描述 |
|---|---|
0 |
成功 |
–1 |
失败 |
【需求】
头文件:gfbg.h
【注意】
在预乘模式下不支持colorkey功能。
【举例】
无。
【相关接口】
FBIOPUT_COLORKEY_GFBG¶
【目的】
设置叠加层的colorkey。
【语法】
int ioctl (int fd,
FBIOPUT_COLORKEY_GFBG,
ot_fb_colorkey *colorkey);
【描述】
使用此接口设置当前叠加层的colorkey功能。
【参数】
参数名称 |
描述 |
输入/输出 |
|---|---|---|
fd |
Framebuffer设备文件描述符 |
输入 |
FBIOPUT_COLORKEY_GFBG |
ioctl号 |
输入 |
colorkey |
colorkey结构体指针 |
输入 |
【返回值】
返回值 |
描述 |
|---|---|
0 |
成功 |
–1 |
失败 |
【需求】
头文件:gfbg.h
【注意】
在预乘模式下不支持colorkey功能。
【举例】
假设当前像素格式为ARGB8888,则要过滤掉红色分量为0x1F、绿色分量为0x2F、蓝色分量为0x3F的颜色值,具体设置如下:
ot_fb_colorkey colorkey;
colorkey. enable = TD_TRUE;
colorkey. value = 0x1F2F3F;
if (ioctl(fd, FBIOPUT_COLORKEY_GFBG, &colorkey) < 0)
{
return -1;
}
【相关接口】
FBIOGET_DEFLICKER_GFBG¶
【目的】
获取叠加层的抗闪烁设置。
【语法】
int ioctl (int fd,
FBIOGET_DEFLICKER_GFBG,
ot_fb_deflicker *deflicker);
【描述】
使用此接口获取当前叠加层的抗闪烁设置。
【参数】
参数名称 |
描述 |
输入/输出 |
|---|---|---|
fd |
Framebuffer设备文件描述符 |
输入 |
FBIOGET_DEFLICKER_GFBG |
ioctl号 |
输入 |
deflicker |
抗闪烁结构体指针 |
输出 |
【返回值】
返回值 |
描述 |
|---|---|
0 |
成功 |
非0 |
失败 |
【需求】
头文件:gfbg.h
【注意】
芯片不支持抗闪烁操作,所以调用该接口返回失败。
【举例】
无。
【相关接口】
FBIOPUT_DEFLICKER_GFBG¶
【目的】
设置叠加层的抗闪烁功能。
【语法】
int ioctl (int fd,
FBIOPUT_DEFLICKER_GFBG,
ot_fb_deflicker *deflicker);
【描述】
使用此接口设置当前叠加层的抗闪烁功能。
【参数】
参数名称 |
描述 |
输入/输出 |
|---|---|---|
fd |
Framebuffer设备文件描述符 |
输入 |
FBIOPUT_DEFLICKER_GFBG |
ioctl号 |
输入 |
deflicker |
抗闪烁结构体指针 |
输入 |
【返回值】
返回值 |
描述 |
|---|---|
0 |
成功 |
–1 |
失败 |
【需求】
头文件:gfbg.h
【注意】
芯片不支持抗闪烁操作,所以调用该接口返回失败。
【举例】
无。
【相关接口】
FBIOGET_VER_BLANK_GFBG¶
【目的】
为了操作显存时不引起撕裂现象,建议在该叠加层的垂直消隐区对显存进行操作,通过该接口可以等待该叠加层垂直消隐区的到来。
【语法】
int ioctl (int fd, FBIOGET_VER_BLANK_GFBG);
【描述】
使用此接口获取当前叠加层的消隐区。
【参数】
参数名称 |
描述 |
输入/输出 |
|---|---|---|
fd |
Framebuffer设备文件描述符 |
输入 |
FBIOGET_VER_BLANK_GFBG |
ioctl号 |
输入 |
【返回值】
返回值 |
描述 |
|---|---|
0 |
成功 |
–1 |
失败 |
【需求】
头文件:gfbg.h
【注意】
垂直消隐间隔较短,一般在几十毫秒,建议操作时间尽量短,以保证在垂直消隐区结束前完成。
【举例】
无。
【相关接口】
无。
FBIOFLIP_SURFACE¶
【目的】
实现多个Surface交替显示,并设置alpha和colorkey属性。
【语法】
int ioctl (int fd,
FBIOFLIP_SURFACE,
ot_fb_surfaceex *surface);
【描述】
此接口是FBIOPAN_DISPLAY的扩展接口,用于实现多个Surface交替显示的同时设置alpha和colorkey属性。
【参数】
参数名称 |
描述 |
输入/输出 |
|---|---|---|
fd |
Framebuffer设备文件描述符 |
输入 |
FBIOFLIP_SURFACE |
ioctl号 |
输入 |
surface |
Surface结构体指针 |
输入 |
【返回值】
返回值 |
描述 |
|---|---|
0 |
成功 |
–1 |
失败 |
【需求】
头文件:gfbg.h
【注意】
此接口只在FB标准模式中使用,用于把FB从扩展模式切换到标准模式。
Surface的物理地址必须在该叠加层配置的显存范围内;而且最好是16byte对齐,否则实际上显示的位置与所设置的位置值会有偏差。
【举例】
无。
【相关接口】
FBIOPUT_COMPRESSION_GFBG¶
【目的】
设置图层启用压缩功能。
【语法】
int ioctl (int fd,
FBIOPUT_COMPRESSION_GFBG,
td_bool *is_compress);
【描述】
设置图层启动压缩功能。
【参数】
参数名称 |
描述 |
输入/输出 |
|---|---|---|
Fd |
Framebuffer设备文件描述符 |
输入 |
FBIOPUT_COMPRESSION_GFBG |
ioctl号 |
输入 |
is_compress |
是否启动压缩功能标识的指针 |
输入 |
【返回值】
返回值 |
描述 |
|---|---|
0 |
成功 |
–1 |
失败 |
【需求】
头文件:gfbg.h
【注意】
对于启用压缩功能的情况,在绘制完内容后,要调用相应的刷新操作后内容才会真正得以显示出来。仅支持在扩展模式下OT_FB_LAYER_BUF_DOUBLE 或OT_FB_LAYER_BUF_DOUBLE_IMMEDIATE 刷新显示。
对鼠标层不适用;在启用压缩功能的情况下,不建议使用软鼠标功能。
压缩功能默认关闭。
不支持压缩和镜像模式同时做。
不支持压缩和旋转同时做。
ARGB8888的情况下,压缩可以节省内存45%。具体使用方式可以在加载ko时按典型场景所需内存的55%计算并4K对齐。
压缩仅支持数据格式:ARGB8888、ARGB1555、ARGB4444。
压缩仅支持图层G0和G1,SS928V100 G1不支持该功能。
压缩仅支持全屏刷新,不支持随机刷新和局部刷新。
ARGB1555、ARGB4444 4k压缩时会存在膨胀的情况,因此需要比非压缩情况下分配更多内存。压缩场景内存计算公式如下:
膨胀比 = 128/127 + (128 * 2 / (frm_wth * pix_depth));(除法运算的结果为小数)
压缩场景应分内存 >= 非压缩内存 * 膨胀比
【举例】
无。
【相关接口】
FBIOGET_COMPRESSION_GFBG¶
【目的】
获取图层的压缩功能状态。
【语法】
int ioctl (int fd,
FBIOGET_COMPRESSION_GFBG,
td_bool *is_compress);
【描述】
设置图层是否启动压缩功能。
【参数】
参数名称 |
描述 |
输入/输出 |
|---|---|---|
fd |
Framebuffer设备文件描述符 |
输入 |
FBIOGET_COMPRESSION_GFBG |
ioctl号 |
输入 |
is_compress |
获取状态的指针 |
- |
【返回值】
返回值 |
描述 |
|---|---|
0 |
成功 |
–1 |
失败 |
【需求】
头文件:gfbg.h
【注意】
无。
【举例】
无。
【相关接口】
FBIOPUT_MDDRDETECT_GFBG¶
【目的】
设置图层内存检测属性。
【语法】
int ioctl (int fd,
FBIOPUT_MDDRDETECT_GFBG,
ot_fb_ddr_zone *ddr_zone);
【描述】
设置图层内存检测属性。
【参数】
参数名称 |
描述 |
输入/输出 |
|---|---|---|
Fd |
Framebuffer设备文件描述符 |
输入 |
FBIOPUT_MDDRDETECT_GFBG |
ioctl号 |
输入 |
ddr_zone |
内存检测属性的指针 |
输入 |
【返回值】
返回值 |
描述 |
|---|---|
0 |
成功 |
–1 |
失败 |
【需求】
头文件:gfbg.h
【注意】
内存侦测功能只在0 buf模式和标准模式且压缩功能不使能条件下生效。
压缩功能使能条件下,内存侦测默认打开。内存侦测最多支持同时32个内存区域进行变化侦测,G0默认占用区域0至区域15,G1默认占用区域16至区域31。
内存侦测功能按照内存侦测的区域个数,对显示buffer按像素行进行均匀分割,进行内存侦测。
当用户设置内存侦测区域数为0时,内存侦测功能被关闭。
SS528V100/SS625V100/SS524V100/SS522V101/SS928V100/SS626V100不支持该功能。
【举例】
无。
【相关接口】
FBIOGET_MDDRDETECT_GFBG¶
【目的】
获取图层的内存侦测状态。
【语法】
int ioctl (int fd,
FBIOGET_MDDRDETECT_GFBG,
ot_fb_ddr_zone *ddr_zone);
【描述】
获取图层的内存侦测属性。
【参数】
参数名称 |
描述 |
输入/输出 |
|---|---|---|
fd |
Framebuffer设备文件描述符 |
输入 |
FBIOGET_MDDRDETECT_GFBG |
ioctl号 |
输入 |
ddr_zone |
获取状态的指针 |
输出 |
【返回值】
返回值 |
描述 |
|---|---|
0 |
成功 |
–1 |
失败 |
【需求】
头文件:gfbg.h
【注意】
SS528V100/SS625V100/SS524V100/SS522V101/SS928V100/SS626V100不支持该功能。
【举例】
无。
【相关接口】
FBIOPUT_LAYER_INFO¶
【目的】
设置图层信息,用于完成从FB的标准模式到FB的扩展模式切换或是FB的扩展模式之间的切换,同时能设置扩展模式下的刷新信息。
【语法】
int ioctl (int fd,
FBIOPUT_LAYER_INFO,
ot_fb_layer_info * layer_info);
【描述】
此接口用于设置图层信息,包括刷新模式、抗闪烁级别、屏幕起始点位置、画布分辨率、显存分辨率、屏幕显示分辨率以及是否使能预乘。以上信息的更详细说明见ot_fb_layer_info以及ot_fb_layer_buf的描述。
【参数】
参数名称 |
描述 |
输入/输出 |
|---|---|---|
fd |
Framebuffer设备文件描述符 |
输入 |
FBIOPUT_LAYER_INFO |
ioctl号 |
输入 |
layer_info |
图层信息结构体指针 |
输入 |
【返回值】
返回值 |
描述 |
|---|---|
0 |
成功 |
–1 |
失败 |
【需求】
头文件:gfbg.h
【注意】
在设置完某项属性后,必须通过设置layer_info的mask设置相应的掩码,否则该项设置不会生效;
若芯片不支持图形层的缩放,则显存分辨率就是屏幕显示分辨率,改变它们其中之一都会改变最终的显示分辨率,另外要求它们不能大于设备分辨率。
对于隔行显示设备,要求显存分辨率与屏幕显示分辨率的高度都必须为偶数。
芯片中图层自带的缩放功能可以参考FBIOPUT_SCREEN_SIZE。
【举例】
ot_fb_layer_info layer_info = {0};
layer_info. buf_mode = OT_FB_LAYER_BUF_ONE;
layer_info. mask = OT_FB_LAYER_MASK_BUF_MODE;
layer_info. display_width = 360;
layer_info. display_height = 320;
layer_info. x_pos = 16;
layer_info. y_pos = 16;
layer_info. mask |= OT_FB_LAYER_MASK_DISPLAY_SIZE | OT_FB_LAYER_MASK_POS;
ret = ioctl(s32Fd, FBIOPUT_LAYER_INFO, &layer_info);
【相关接口】
无。
FBIOGET_LAYER_INFO¶
【目的】
获取图层信息。
【语法】
int ioctl (int fd,
FBIOGET_LAYER_INFO
ot_fb_layer_info * layer_info);
【描述】
用于获取图层信息,包括刷新模式、抗闪烁级别、屏幕起始点位置、画布分辨率、显存分辨率、屏幕显示分辨率以及是否使能预乘。
【参数】
参数名称 |
描述 |
输入/输出 |
|---|---|---|
fd |
Framebuffer设备文件描述符 |
输入 |
FBIOGET_LAYER_INFO |
ioctl号 |
输入 |
layer_info |
图层信息结构体指针 |
输出 |
【返回值】
返回值 |
描述 |
|---|---|
0 |
成功 |
–1 |
失败 |
【需求】
头文件:gfbg.h
【注意】
该接口获取到的接口数据ot_fb_layer_info中,mask成员是没有意义的,始终被填充为OT_FB_LAYER_MASK_BUTT。
【举例】
无。
【相关接口】
无。
FBIOGET_CANVAS_BUF¶
【目的】
用于获取画布信息。
【语法】
int ioctl (int fd,
FBIOGET_CANVAS_BUF,
ot_fb_buf *canvas_buf)
【描述】
获取画布信息。
【参数】
参数名称 |
描述 |
输入/输出 |
|---|---|---|
fd |
Framebuffer设备文件描述符 |
输入 |
FBIOGET_CANVAS_BUF |
ioctl号 |
输入 |
canvas_buf |
画布信息结构体指针 |
输出 |
【返回值】
返回值 |
描述 |
|---|---|
0 |
成功 |
–1 |
失败 |
【需求】
头文件:gfbg.h
【注意】
对软鼠标不适用。
【举例】
无。
【相关接口】
无。
FBIO_REFRESH¶
【目的】
用于扩展模式下,刷新显示内容。
【语法】
int ioctl (int fd,
FBIO_REFRESH,
ot_fb_buf * buf_info);
【描述】
扩展模式下,启动刷新操作。
【参数】
参数名称 |
描述 |
输入/输出 |
|---|---|---|
fd |
Framebuffer设备文件描述符 |
输入 |
FBIO_REFRESH |
ioctl号 |
输入 |
buf_info |
ot_fb_buf结构体指针 |
输入 |
【返回值】
返回值 |
描述 |
|---|---|
0 |
成功 |
–1 |
失败 |
【需求】
头文件:gfbg.h
【注意】
只适用于扩展模式下,对软鼠标不适用。
画布(buf_info)物理起始地址与行间距均要满足16字节对齐。
【举例】
无。
【相关接口】
无。
FBIO_WAITFOR_FREFRESH_DONE¶
【目的】
扩展模式下,等待此前启动的刷新操作完成,即刷新的内容显示出来。
【语法】
int ioctl (int fd, FBIO_WAITFOR_FREFRESH_DONE)
【描述】
等待刷新操作完成。
【参数】
参数名称 |
描述 |
输入/输出 |
|---|---|---|
fd |
Framebuffer设备文件描述符 |
输入 |
FBIO_WAITFOR_FREFRESH_DONE |
ioctl号 |
输入 |
【返回值】
返回值 |
描述 |
|---|---|
0 |
成功 |
–1 |
失败 |
【需求】
头文件:gfbg.h
【注意】
只适用于扩展模式下,OT_FB_LAYER_BUF_NONE模式不支持,对软鼠标不适用。
【举例】
无。
【相关接口】
无。
FBIOPUT_DYNAMIC_RANGE_GFBG¶
【目的】
扩展模式下,设置图层的目标显示动态范围。
【语法】
int ioctl (int fd, FBIOPUT_DYNAMIC_RANGE_GFBG, ot_fb_dynamic_range * dst_dynamic_range);
【描述】
设置图层的目标显示动态范围。
【参数】
参数名称 |
描述 |
输入/输出 |
|---|---|---|
fd |
Framebuffer设备文件描述符 |
输入 |
FBIOPUT_DYNAMIC_RANGE_GFBG |
ioctl号 |
输入 |
dst_dynamic_range |
ot_fb_dynamic_range类型指针 |
输入 |
【返回值】
返回值 |
描述 |
|---|---|
0 |
成功 |
–1 |
失败 |
【需求】
头文件:gfbg.h
【注意】
不支持此接口。
【举例】
无。
【相关接口】
FBIOGET_DYNAMIC_RANGE_GFBG¶
【目的】
扩展模式下,获取图层的目标显示动态范围。
【语法】
int ioctl (int fd, FBIOGET_DYNAMIC_RANGE_GFBG, ot_fb_dynamic_range * dst_dynamic_range);
【描述】
获取图层的目标显示动态范围。
【参数】
参数名称 |
描述 |
输入/输出 |
|---|---|---|
fd |
Framebuffer设备文件描述符 |
输入 |
FBIOGET_DYNAMIC_RANGE_GFBG |
ioctl号 |
输入 |
dst_dynamic_range |
ot_fb_dynamic_range类型指针 |
输出 |
【返回值】
返回值 |
描述 |
|---|---|
0 |
成功 |
–1 |
失败 |
【需求】
头文件:gfbg.h
【注意】
不支持此接口。
【举例】
无。
【相关接口】
FBIOPUT_SCREEN_SIZE¶
【目的】
设置图层在屏幕上的显示大小。
【语法】
int ioctl (int fd, FBIOPUT_SCREEN_SIZE, ot_fb_size * ot_fb_size);
【描述】
设置图层在屏幕上的显示大小。
【参数】
参数名称 |
描述 |
输入/输出 |
|---|---|---|
fd |
Framebuffer设备文件描述符 |
输入 |
FBIOPUT_SCREEN_SIZE |
ioctl号 |
输入 |
ot_fb_size |
ot_fb_size类型指针,宽高要求2对齐。 |
输入 |
【返回值】
返回值 |
描述 |
|---|---|
0 |
成功 |
–1 |
失败 |
【需求】
头文件:gfbg.h
【注意】
通过设置屏幕显示分辨率,可以对图像进行缩放。如图像大小为800x600,则设置屏幕显示大小为1280x720可将图像放大到1280x720显示。
图形层缩放限制:输入分辨率超过1920x1080,不支持放大。
支持缩放倍数1~15倍。
【举例】
无。
【相关接口】
FBIOGET_SCREEN_SIZE¶
【目的】
获取图层在屏幕上的显示大小。
【语法】
int ioctl (int fd,
FBIOGET_SCREEN_SIZE,
ot_fb_size * ot_fb_size);
【描述】
获取图层在屏幕上的显示大小。
【参数】
参数名称 |
描述 |
输入/输出 |
|---|---|---|
fd |
Framebuffer设备文件描述符 |
输入 |
FBIOGET_SCREEN_SIZE |
ioctl号 |
输入 |
ot_fb_size |
ot_fb_size类型指针 |
输出 |
【返回值】
返回值 |
描述 |
|---|---|
0 |
成功 |
–1 |
失败 |
【需求】
头文件:gfbg.h
【注意】
无。
【举例】
无。
【相关接口】
FBIOGET_ROTATE_MODE¶
【目的】
扩展模式下,获取图形层的旋转角度。
【语法】
int ioctl (int fd,
FBIOGET_ROTATE_MODE,
ot_fb_rotate_mode * ot_fb_rot_get);
【描述】
获取图层的旋转角度。
【参数】
参数名称 |
描述 |
输入/输出 |
|---|---|---|
fd |
Framebuffer设备文件描述符 |
输入 |
FBIOGET_ROTATE_MODE |
ioctl号 |
输入 |
ot_fb_rot_get |
ot_fb_rotate_mode类型指针 |
输出 |
【返回值】
返回值 |
描述 |
|---|---|
0 |
成功 |
–1 |
失败 |
【需求】
头文件:gfbg.h
【注意】
只适用于扩展模式下,OT_FB_LAYER_BUF_NONE模式不支持。
旋转像素格式仅支持ARGB4444、ARGB1555。
【举例】
无。
【相关接口】
FBIOPUT_ROTATE_MODE¶
【目的】
扩展模式下,设置图层的旋转角度。
【语法】
int ioctl (int fd,
FBIOPUT_ROTATE_MODE,
ot_fb_rotate_mode * rot_set);
【描述】
设置图层的旋转角度。
【参数】
参数名称 |
描述 |
输入/输出 |
|---|---|---|
fd |
Framebuffer设备文件描述符 |
输入 |
FBIOGET_ROTATE_MODE |
ioctl号 |
输入 |
rot_set |
ot_fb_rotate_mode类型指针 |
输入 |
【返回值】
返回值 |
描述 |
|---|---|
0 |
成功 |
–1 |
失败 |
【需求】
头文件:gfbg.h
【注意】
只适用于扩展模式下。
OT_FB_LAYER_BUF_NONE刷新模式下不支持旋转功能。
不支持压缩和旋转同时做。
旋转功能的用法:
首先需要将fb_var_screeninfo中成员xres、yres(以及xres_virtual、yres_virtual)分别设置为旋转后的图像的宽和高;
然后调用ioctl (int fd, FBIOPUT_ROTATE_MODE,ot_fb_rotate_mode * penGfbgRotSet)接口即可;
另外,该功能仅支持OT_FB_LAYER_BUF_ONE、OT_FB_LAYER_BUF_DOUBLE和OT_FB_LAYER_BUF_DOUBLE_IMMEDIATE三种刷新模式下(见ot_fb_layer_buf)特定角度(90度、180度、270度)的旋转。
SS528V100, SS625V100, SS524V100, SS522V101, SS626V100旋转像素格式仅支持ARGB4444、ARGB1555。
SS928V100支持ARGB1555, ARGB4444, ARGB8888。
不支持旋转模式与镜像同时做。
【举例】
无。
【相关接口】
FBIO_CREATE_LAYER¶
【目的】
创建图形层资源。
【语法】
int ioctl (int fd, FBIO_CREATE _LAYER)
【描述】
通过ioctl创建图形层资源,主要是使能图形层。
【参数】
参数名称 |
描述 |
输入/输出 |
|---|---|---|
fd |
Framebuffer设备文件描述符 |
输入 |
FBIO_ CREATE _LAYER |
ioctl号 |
输入 |
【返回值】
返回值 |
描述 |
|---|---|
0 |
成功 |
–1 |
失败 |
【需求】
头文件:gfbg.h
【注意】
与FBIO_DESTROY_LAYER成对使用。
推荐用法:open fbx(0~4,支持的图层数根据芯片能力决定)后通过ioctl FBIO_CREATE_LAYER创建图形层硬件资源。
【举例】
无。
【相关接口】
无。
FBIO_DESTROY_LAYER¶
【目的】
释放图形层资源。
【语法】
int ioctl (int fd, FBIO_DESTROY_LAYER)
【描述】
通过ioctl释放图形层资源。
【参数】
参数名称 |
描述 |
输入/输出 |
|---|---|---|
fd |
Framebuffer设备文件描述符 |
输入 |
FBIO_DESTROY_LAYER |
ioctl号 |
输入 |
【返回值】
返回值 |
描述 |
|---|---|
0 |
成功 |
–1 |
失败 |
【需求】
头文件:gfbg.h
【注意】
与FBIO_ CREATE _LAYER成对使用。
由于linux 3.10以上的内核对close机制采用异步方式,这样可能在顺序执行图形层关闭和解绑定时驱动会出现颠倒执行顺序的情况,为确保关闭层和解绑定层能顺序执行,增加此接口,在调用close之前调用。
推荐用法:通过ioctl FBIO_DESTROY_LAYER释放图形层硬件资源后再close 设备,不建议单独调用FBIO_DESTROY_LAYER关闭图形层。
【举例】
无。
【相关接口】
无。
FBIO_DRAW_SMART_RECT¶
【目的】
在线画框。
【语法】
int ioctl (int fd,
FBIO_DRAW_SMART_RECT
ot_fb_smart_rect_param * param);
【描述】
图形层G3上绘制矩形框(有实边,无实边)、角框。最多画128个框。
【参数】
参数名称 |
描述 |
输入/输出 |
|---|---|---|
fd |
Framebuffer设备文件描述符 |
输入 |
FBIO_DRAW_SMART_RECT |
ioctl号 |
输入 |
param |
需绘制的框信息 |
输入 |
【返回值】
返回值 |
描述 |
|---|---|
0 |
成功 |
–1 |
失败 |
【需求】
头文件:gfbg.h
【注意】
SS528V100/SS625V100/SS928V100不支持。
按照clut4像素格式配置,最大支持分辨率3840*2160。
图形层G3用作在线画框功能时,不可用于标清显示或离线画框显示。如果不再使用在线画框功能或误用了(即调用过FBIO_DRAW_SMART_RECT),此时想用G3图形层做标清显示层或离线画框,需要close并重新open该图形层设备。
SS524V100支持G3可用作在线画框;SS626V100支持G3用作在线画框、显示层或离线画框,G4可用于在线画框、做标清层或离线画框。
在线画框使用标准步骤:(详见举例)
打开图形层设备fb3
设置虚拟分辨率
配置框的属性
调用ioctl实现画框显示(3,4步骤可以根据客户实际重复调用更新画框显示)
close 对应图形层设备(不再使用在线画框功能)。
【举例】
int ret;
int fd;
ot_vo_dev vo_dev = 0;
struct fb_var_screeninfo var;
ot_fb_smart_rect_param frame_param = {0};
ot_fb_smart_rect *smart_rect = NULL;
td_u32 num = 0;
/* 1.open and bind device */
ret = ss_mpi_vo_unbind_layer(OT_VO_LAYER_G3, vo_dev);
if (ret != TD_SUCCESS) {
return TD_FAILURE;
}
ret = ss_mpi_vo_bind_layer(OT_VO_LAYER_G3, vo_dev);
if (ret != TD_SUCCESS) {
return TD_FAILURE;
}
fd = open("/dev/fb3", O_RDWR);
if (fd < 0) {
return TD_FAILURE;
}
/* 2. put virscreen */
ret = ioctl (fd, FBIOGET_VSCREENINFO, &var);
if (ret != TD_SUCCESS) {
return TD_FAILURE;
}
var.red = g_clut4_field.r32;
var.green = g_clut4_field.g32;
var.blue = g_clut4_field.b32;
var.transp = g_clut4_field.a32;
var.bits_per_pixel = 4;
var.xres = WIDTH_3840;
var.yres = HEIGHT_2160;
var.activate = 0;
var.xres_virtual = WIDTH_3840;
var.yres_virtual = HEIGHT_2160;
var.xoffset=0;
var.yoffset=0;
ret = ioctl (fd, FBIOPUT_VSCREENINFO, &var);
if (ret != TD_SUCCESS) {
return TD_FAILURE;
}
/* 3. prepare smart rect data */
num = 128; /* max number for smart_rect */
smart_rect = malloc(sizeof(ot_fb_smart_rect) * num);
if (smart_rect == NULL) {
return TD_NULL;
}
/* config smart rect */
for (i = 0; i < num; i++) {
smart_rect[i].mode = OT_FB_SMART_RECT_SOLID;
smart_rect[i].rect.x = 0;
smart_rect[i].rect.y = 0;
smart_rect[i].rect.width = 3840 - 10 * i;
smart_rect[i].rect.height = 2160 - 10 * i;
smart_rect[i].thick = 10;
smart_rect[i].color_value = 0xffff0000; /* red */
}
/* 4. ioctl FBIO_DRAW_SMART_RECT */
frame_param.num = num;
frame_param.rect_start = smart_rect;
ret = ioctl(fd, FBIO_DRAW_SMART_RECT, &frame_param);
if (ret != TD_SUCCESS) {
return TD_FAILURE;
}
/* when no use for FBIO_DRAW_SMART_RECT, you can close fd */
free(smart_rect);
smart_rect = TD_NULL;
close(fd);
return TD_SUCCESS;
【相关数据类型与接口】
软鼠标功能¶
本小节中描述的接口只有在软鼠标功能启用的情况下才真正生效。如果想启用软鼠标功能,则应在加载gfbg.ko时把参数softcursor置为“on”。在启用软鼠标功能的情况下,调用open函数打开/dev/fb0后,就可以调用下面的函数进行软鼠标的相关操作(建议只使用下面的函数来使用软鼠标,而不要使用之前介绍的函数)。
SS528V100/SS625V100/SS524V100/SS522V101/SS928V100/SS626V100均不支持软鼠标功能。
FBIOPUT_CURSOR_INFO¶
【目的】
设置鼠标层的信息。
【语法】
int ioctl (int fd, FBIOPUT_CURSOR_INFO, ot_fb_cursor *pstCursor)
【描述】
设置鼠标层的信息,包括画布起始地址、大小、跨度以及像素格式。
【参数】
参数名称 |
描述 |
输入/输出 |
|---|---|---|
fd |
Framebuffer设备文件描述符 |
输入 |
FBIOPUT_CURSOR_INFO |
ioctl号 |
输入 |
pstCursor |
软鼠标层的信息 |
输入 |
【返回值】
返回值 |
描述 |
|---|---|
0 |
成功 |
–1 |
失败 |
【需求】
头文件:gfbg.h
【注意】
软鼠标的宽与高取值范围为:(0, 128]
软鼠标热点的横坐标与纵坐标都必须大于或等于0,但不能大于鼠标位图的宽与高。
【举例】
无。
【相关接口】
无。
FBIOGET_CURSOR_INFO¶
【目的】
获取鼠标层的信息。
【语法】
int ioctl (int fd, FBIOGET_CURSOR_INFO, ot_fb_cursor *pstCursor)
【描述】
获取鼠标层的信息。
【参数】
参数名称 |
描述 |
输入/输出 |
|---|---|---|
fd |
Framebuffer设备文件描述符 |
输入 |
FBIOGET_CURSOR_INFO |
ioctl号 |
输入 |
pstCursor |
软鼠标层的信息 |
输出 |
【返回值】
返回值 |
描述 |
|---|---|
0 |
成功 |
–1 |
失败 |
【需求】
头文件:gfbg.h
【注意】
无。
【举例】
无。
【相关接口】
无。
FBIOPUT_CURSOR_ATTCHCURSOR¶
【目的】
将软鼠标与某一个图形层进行绑定。
【语法】
int ioctl (int fd,
FBIOPUT_CURSOR_ATTCHCURSOR,
td_u32 *pu32LayerId)
【描述】
软鼠标与某一个图形层绑定后,它的内容就通过该图形层显示。
【参数】
参数名称 |
描述 |
输入/输出 |
|---|---|---|
fd |
FB设备文件描述符 |
输入 |
FBIOPUT_CURSOR_ATTCHCURSOR |
ioctl号 |
输入 |
pu32LayerId |
所要绑定到的图形层标识 |
输入 |
【返回值】
返回值 |
描述 |
|---|---|
0 |
成功 |
–1 |
失败 |
【需求】
头文件:gfbg.h
【注意】
待绑定的图形层必须处于已打开状态;
允许将同一个鼠标与某个图形层绑定多次,但不允许多个鼠标同时绑定到同一图形层;如果一个图形层已与一个鼠标绑定,但想绑定另一个鼠标层,则应先解除之前的绑定关系,否则出错;
绑定之前必须设置鼠标层的信息,另外不能将其绑定到其他鼠标层。
【举例】
无。
【相关接口】
无。
FBIOPUT_CURSOR_DETACHCURSOR¶
【目的】
解除软鼠标与图形层的绑定关系。
【语法】
int ioctl (int fd,
FBIOPUT_CURSOR_DETACHCURSOR,
td_u32 *pu32LayerId)
【描述】
解除软鼠标与图形层的绑定关系后,该鼠标内容将不会显示。
【参数】
参数名称 |
描述 |
输入/输出 |
|---|---|---|
fd |
FB设备文件描述符 |
输入 |
FBIOPUT_CURSOR_DETACHCURSOR |
ioctl号 |
输入 |
pu32LayerId |
图形层标识 |
输入 |
【返回值】
返回值 |
描述 |
|---|---|
0 |
成功 |
–1 |
失败 |
【需求】
头文件:gfbg.h
【注意】
无。
【举例】
无。
【相关接口】
无。
FBIOPUT_CURSOR_STATE¶
【目的】
设置软鼠标的显示状态。
【语法】
int ioctl (int fd, FBIOPUT_CURSOR_STATE, td_bool *pbShow)
【描述】
设置软鼠标的显示状态。
【参数】
参数名称 |
描述 |
输入/输出 |
|---|---|---|
fd |
Framebuffer设备文件描述符 |
输入 |
FBIOPUT_CURSOR_STATE |
ioctl号 |
输入 |
pbShow |
显示状态标识指针 |
输入 |
【返回值】
返回值 |
描述 |
|---|---|
0 |
成功 |
–1 |
失败 |
【需求】
头文件:gfbg.h
【注意】
软鼠标在绑定之后,默认是处于隐藏状态,所以必须要调用此接口将其置于显示状态它才能显示出来。
【举例】
无。
【相关接口】
无。
FBIOGET_CURSOR_STATE¶
【目的】
获取软鼠标的显示状态。
【语法】
int ioctl (int fd, FBIOGET_CURSOR_STATE, td_bool *pbShow)
【描述】
获取软鼠标的显示状态。
【参数】
参数名称 |
描述 |
输入/输出 |
|---|---|---|
fd |
Framebuffer设备文件描述符 |
输入 |
FBIOPUT_CURSOR_STATE |
ioctl号 |
输入 |
pbShow |
显示状态标识指针 |
输出 |
【返回值】
返回值 |
描述 |
|---|---|
0 |
成功 |
–1 |
失败 |
【需求】
头文件:gfbg.h
【注意】
软鼠标默认是处于隐藏状态。
【举例】
无。
【相关接口】
无。
FBIOPUT_CURSOR_POS¶
【目的】
设置软鼠标在所绑定图形层上的显示位置。
【语法】
int ioctl (int fd, FBIOPUT_CURSOR_POS, ot_fb_point *pstPos)
【描述】
设置软鼠标在所绑定图形层上的显示位置。
【参数】
参数名称 |
描述 |
输入/输出 |
|---|---|---|
fd |
Framebuffer设备文件描述符 |
输入 |
FBIOPUT_CURSOR_POS |
ioctl号 |
输入 |
pstPos |
显示位置信息 |
输入 |
【返回值】
返回值 |
描述 |
|---|---|
0 |
成功 |
–1 |
失败 |
【需求】
头文件:gfbg.h
【注意】
无。
【举例】
无。
【相关接口】
无。
FBIOGET_CURSOR_POS¶
【目的】
获取软鼠标在所绑定图形层上的显示位置。
【语法】
int ioctl (int fd, FBIOGET_CURSOR_POS, ot_fb_point *pstPos)
【描述】
获取软鼠标在所绑定图形层上的显示位置。
【参数】
参数名称 |
描述 |
输入/输出 |
|---|---|---|
fd |
Framebuffer设备文件描述符 |
输入 |
FBIOPUT_CURSOR_POS |
ioctl号 |
输入 |
pstPos |
显示位置信息 |
输出 |
【返回值】
返回值 |
描述 |
|---|---|
0 |
成功 |
–1 |
失败 |
【需求】
头文件:gfbg.h
【注意】
无。
【举例】
无。
【相关接口】
无。
FBIOPUT_CURSOR_COLORKEY¶
【目的】
设置软鼠标的colorkey信息。
【语法】
int ioctl (int fd, FBIOPUT_CURSOR_COLORKEY, ot_fb_colorkey * pstColorKey)
【描述】
设置软鼠标的colorkey信息。
【参数】
参数名称 |
描述 |
输入/输出 |
|---|---|---|
fd |
Framebuffer设备文件描述符 |
输入 |
FBIOPUT_CURSOR_ COLORKEY |
ioctl号 |
输入 |
pstColorKey |
colorkey结构体指针 |
输入 |
【返回值】
返回值 |
描述 |
|---|---|
0 |
成功 |
–1 |
失败 |
【需求】
头文件:gfbg.h
【注意】
无。
【举例】
无。
【相关接口】
无。
FBIOGET_CURSOR_COLORKEY¶
【目的】
获取软鼠标的colorkey信息。
【语法】
int ioctl (int fd, FBIOGET_CURSOR_COLORKEY, ot_fb_colorkey * pstColorKey)
【描述】
获取软鼠标的colorkey信息。
【参数】
参数名称 |
描述 |
输入/输出 |
|---|---|---|
fd |
Framebuffer设备文件描述符 |
输入 |
FBIOGET_CURSOR_ COLORKEY |
ioctl号 |
输入 |
pstColorKey |
colorkey结构体指针 |
输出 |
【返回值】
返回值 |
描述 |
|---|---|
0 |
成功 |
–1 |
失败 |
【需求】
头文件:gfbg.h
【注意】
无。
【举例】
无。
【相关接口】
无。
FBIOPUT_CURSOR_ALPHA¶
【目的】
设置软鼠标的alpha叠加信息。
【语法】
int ioctl (int fd, FBIOPUT_CURSOR_ALPHA, ot_fb_alpha *pstAlphaInfo)
【描述】
设置软鼠标的alpha叠加信息。
【参数】
参数名称 |
描述 |
输入/输出 |
|---|---|---|
fd |
Framebuffer设备文件描述符 |
输入 |
FBIOPUT_CURSOR_ALPHA |
ioctl号 |
输入 |
pstAlphaInfo |
alpha叠加信息 |
输入 |
【返回值】
返回值 |
描述 |
|---|---|
0 |
成功 |
–1 |
失败 |
【需求】
头文件:gfbg.h
【注意】
无。
【举例】
无。
【相关接口】
无。
FBIOGET_CURSOR_ALPHA¶
【目的】
获取软鼠标的alpha叠加信息。
【语法】
int ioctl (int fd, FBIOGET_CURSOR_ALPHA, ot_fb_alpha *pstAlphaInfo)
【描述】
获取软鼠标的alpha叠加信息。
【参数】
参数名称 |
描述 |
输入/输出 |
|---|---|---|
fd |
Framebuffer设备文件描述符 |
输入 |
FBIOGET_CURSOR_ALPHA |
ioctl号 |
输入 |
pstAlphaInfo |
alpha叠加信息 |
输出 |
【返回值】
返回值 |
描述 |
|---|---|
0 |
成功 |
–1 |
失败 |
【需求】
头文件:gfbg.h
【注意】
无。
【举例】
无。
【相关接口】
无。
错误码¶
表1列出了当函数返回值小于0时有可能出现的所有错误码。这些错误码来自标准的linux错误码定义,详细内容请参见linux内核原码errno_base.h。错误码可以通过打印Linux的标准错误码errno查看,或者用strerror(errno)打印错误信息。
表 1 错误码
错误代码 |
宏定义 |
描述 |
|---|---|---|
1 |
EPERM |
不支持该操作 |
12 |
ENOMEM |
内存不够 |
14 |
EFAULT |
传入参数指针地址无效 |
22 |
EINVAL |
传入参数无效 |
数据类型¶
在标准中定义的数据类型¶
fb_bitfield¶
【说明】
位域信息,用于设置像素格式。
【定义】
struct fb_bitfield
{
__u32 offset; /* beginning of bitfield */
__u32 length; /* length of bitfield */
__u32 msb_right; /* != 0: Most significant bit is right */
};
【成员】
成员名称 |
描述 |
支持情况 |
|---|---|---|
offset |
颜色分量起始比特位。 |
支持。 |
length |
颜色分量所占比特长度。 |
支持。 |
msb_right |
右边的比特是否为最高有效位。 |
只支持该位为0,即最左边的bit为最高有效位。 |
【注意】
例如ARGB1555格式,其位域信息的赋值如下:
struct fb_bitfield a16 = {15, 1, 0};
struct fb_bitfield r16 = {10, 5, 0};
struct fb_bitfield g16 = {5, 5, 0};
struct fb_bitfield b16 = {0, 5, 0};
【相关数据类型和接口】
无。
fb_var_screeninfo¶
【说明】
可变的屏幕信息。
【定义】
struct fb_var_screeninfo
{
__u32 xres; /* visible resolution */
__u32 yres;
__u32 xres_virtual; /* virtual resolution */
__u32 yres_virtual;
__u32 xoffset; /* offset from virtual to visible */
__u32 yoffset; /* resolution */
__u32 bits_per_pixel; /* guess what */
__u32 grayscale; /* != 0 Graylevels instead of colors */
fb_bitfield red; /* bitfield in fb mem if true color, */
fb_bitfield green; /* else only length is significant */
fb_bitfield blue;
fb_bitfield transp; /* transparency */
__u32 nonstd; /* != 0 Non standard pixel format */
__u32 activate; /* see FB_ACTIVATE_* */
__u32 height; /* height of picture in mm */
__u32 width; /* width of picture in mm */
__u32 accel_flags; /* (OBSOLETE) see fb_info.flags */
/* Timing: All values in pixclocks, except pixclock (of course) */
__u32 pixclock; /* pixel clock in ps (pico seconds) */
__u32 left_margin; /* time from sync to picture */
__u32 right_margin; /* time from picture to sync */
__u32 upper_margin; /* time from sync to picture */
__u32 lower_margin;
__u32 hsync_len; /* length of horizontal sync */
__u32 vsync_len; /* length of vertical sync */
__u32 sync; /* see FB_SYNC_* */
__u32 vmode; /* see FB_VMODE_* */
__u32 rotate; /* angle we rotate counter clockwise */
__u32 reserved[5]; /* Reserved for future compatibility */
};
【成员】
成员名称 |
描述 |
支持情况 |
|---|---|---|
xres |
可见屏幕宽度(像素数)。 |
支持,fb0,fb1默认值图层支持最大分辨率;fb2默认256;fb3、fb4默认值为720。 |
yres |
可见屏幕高度(像素数)。 |
支持。fb0,fb1默认为图层支持最大分辨率;fb2默认256;fb3、fb4默认值为576。 |
xres_virtual |
虚拟屏幕宽度(显存中图像宽度),当该值小于xres时会修改xres,使xres值与该值相等。 |
支持,fb0,fb1默认值为图层支持最大分辨率;fb2默认256;fb3、fb4默认值为720。 |
yres_virtual |
虚拟屏幕高度(显存中图像高度),当该值小于yres时会修改yres,使yres值与该值相等。结合xres_virtual,可以用来快速水平或垂直平移图像。 |
支持,fb0,fb1默认为图层支持最大分辨率;fb2默认256;fb3、fb4默认值为576。 |
xoffset |
在x方向上的偏移像素数。 |
支持,默认为0。 |
yoffset |
在y方向上的偏移像素数。 |
支持,默认为0。 |
bits_per_pixel |
每个像素所占的比特数。 |
支持,默认为16。 |
grayscale |
灰度级。 |
不支持,缺省值为0,表示彩色。 |
red |
颜色分量中红色的位域信息。 |
支持,默认为(10,5,0)。 |
green |
颜色分量中绿色的位域信息。 |
支持,默认为(5,5,0)。 |
blue |
颜色分量中蓝色的位域信息。 |
支持,默认为(0,5,0)。 |
transp |
颜色分量中alpha分量的位域信息。 |
支持,默认为(15,1,0)。 |
nonstd |
是否为标准像素格式。 |
不支持,缺省值为0,表示支持标准像素格式。 |
activate |
设置生效的时刻。 |
不支持,缺省值为FB_ACTIVATE_NOW,表示设置立刻生效。 |
height |
屏幕高,单位为mm。 |
不支持,缺省值为–1。 |
width |
屏幕宽,单位为mm。 |
不支持,缺省值为–1。 |
accel_flags |
加速标志。 |
不支持,缺省值为–1。 |
pixclock |
显示一个点需要的时间,单位为ns。 |
不支持,缺省值为–1。 |
left_margin |
分别是左消隐信号、右消隐信号、水平同步时长,这三个值之和等于水平回扫时间,单位为点时钟。 |
不支持,缺省值为–1。 |
right_margin |
||
hsync_len |
||
upper_margin |
分别是上消隐信号、下消隐信号、垂直同步时长,这三个值之和等于垂直回扫时间,单位为点时钟。 |
不支持,缺省值为–1。 |
lower_margin |
||
vsync_len |
||
sync |
同步信号方式。 |
不支持,缺省值为–1。 |
vmode |
扫描模式。 |
不支持,缺省值为–1。 |
rotate |
顺时针旋转的角度。 |
不支持,缺省值为0,表示无旋转。 |
【注意】
高清设备图形层默认的分辩率为图层支持的最大分辨率;标清设备图形层默认的分辩率为720x576,鼠标层默认的分辩率为256x256。像素格式为ARGB1555。
特别说明:
对于SS528V100,G0/G1分辨率最小32*32,最大4096*2160;G2:分辨率最小2*2,最大256*256;G3:最小32*32,CLUT格式支持3840*2160,其他格式720x576。
对于SS524V100,G0:分辨率最小32*32,最大3840*2160;G1:分辨率最小32*32,最大1920*1080;G2:分辨率最小2*2,最大256*256;G3:最小32*32,CLUT格式支持3840*2160,其他格式720x576。
对于SS522V101不支持G1,G0:分辨率最小32*32,最大3840*2160;G2:分辨率最小2*2,最大256*256;G3:最小32*32,CLUT格式支持3840*2160,其他格式720x576。
对于SS625V100,G0:分辨率最小32*32,最大4096*2160;G1:分辨率最小32*32,最大2560*1600;G2:分辨率最小2*2,最大256*256;G3:最小32*32,CLUT格式支持3840*2160,其他格式720x576。
对于SS626V100,G0: 分辨率最小32*32,最大4096*4320; G1: 分辨率最小32*32,最大4096*2160;G2:分辨率最小2*2,最大256*256;G3/G4:最小32*32,CLUT格式支持3840*2160,其他格式720x576。
对于SS928V100不支持G2。G0分辨率最小32*32,最大3840*2160;G1:分辨率最小32*32,最大1920*1080;G3:最小2*2,CLUT格式支持3840*2160,其他格式960x576。
【相关数据类型及接口】
fb_fix_screeninfo¶
【说明】
固定的屏幕信息。
【定义】
struct fb_fix_screeninfo
{
char id[16]; /* identification string eg "TT Builtin" */
unsigned long smem_start; /* Start of frame buffer mem (physical address) */
__u32 smem_len; /* Length of frame buffer mem */
__u32 type; /* see FB_TYPE_* */
__u32 type_aux; /* Interleave for interleaved Planes */
__u32 visual; /* see FB_VISUAL_* */
__u16 xpanstep; /* zero if no hardware panning */
__u16 ypanstep; /* zero if no hardware panning */
__u16 ywrapstep; /* zero if no hardware ywrap */
__u32 line_length; /* length of a line in bytes */
unsigned long mmio_start; /* Start of Memory Mapped I/O (physical address) */
__u32 mmio_len; /* Length of Memory Mapped I/O */
__u32 accel; /* Indicate to driver which specific chip/card we have */
__u16 reserved[3]; /* Reserved for future compatibility */
};
【成员】
成员名称 |
描述 |
支持情况 |
|---|---|---|
id |
设备驱动名称。 |
支持。 |
smem_start |
显存起始物理地址。 |
支持。 |
smem_len |
显存大小。 |
支持。 |
type |
显卡类型。 |
固定为FB_TYPE_PACKED_PIXELS,表示像素值紧密排列。 |
type_aux |
附加类型。 |
不支持,在FB_TYPE_PACKED_PIXELS显卡类型下无含义。 |
visual |
色彩模式。 |
不支持,默认为FB_VISUAL_TRUECOLOR,真彩色。 |
xpanstep |
支持水平方向上的PAN显示:
|
固定为1。 |
ypanstep |
支持垂直方向上的PAN显示:
|
固定为1。 |
ywrapstep |
该方式类似于ypanstep,不同之处在于:当其显示到底部时,能回到显存的开始处进行显示。 |
不支持,默认为0。 |
line_length |
每行字节数。 |
支持。 |
mmio_start |
显存映射I/O首地址。 |
不支持,默认为0。 |
mmio_len |
显存映射I/O长度。 |
不支持,默认为0。 |
accel |
显示所支持的硬件加速设备。 |
不支持,默认为FB_ACCEL_NONE,无加速设备。 |
reserved |
保留。 |
不支持,缺省值为0。 |
【注意】
无。
【相关数据类型及接口】
扩展的数据类型¶
ot_fb_rotate_mode¶
【说明】
GFBG支持的图形层旋转角度枚举。
【定义】
typedef enum
{
OT_FB_ROTATE_NONE = 0x0,
OT_FB_ROTATE_90 = 0x1,
OT_FB_ROTATE_180 = 0x2,
OT_FB_ROTATE_270= 0x3,
OT_FB_ROTATE_BUTT
}ot_fb_rotate_mode;
【成员】
成员名称 |
描述 |
|---|---|
OT_FB_ROTATE_NONE |
旋转角度:0度。 |
OT_FB_ROTATE_90 |
旋转角度:90度。 |
OT_FB_ROTATE_180 |
旋转角度:180度。 |
OT_FB_ROTATE_270 |
旋转角度:270度。 |
OT_FB_ROTATE_BUTT |
非法旋转角度。 |
【注意】
无。
【相关数据类型及接口】
无。
ot_fb_dynamic_range¶
【说明】
GFBG支持的图形层动态范围类型。
【定义】
typedef enum
{
OT_FB_DYNAMIC_RANGE_SDR8 = 0,
OT_FB_DYNAMIC_RANGE_SDR10,
OT_FB_DYNAMIC_RANGE_HDR10,
OT_FB_DYNAMIC_RANGE_HLG,
OT_FB_DYNAMIC_RANGE_SLF,
OT_FB_DYNAMIC_RANGE_BUTT
} ot_fb_dynamic_range;
【成员】
成员名称 |
描述 |
|---|---|
OT_FB_DYNAMIC_RANGE_SDR8 |
动态范围类型:SDR8。 |
OT_FB_DYNAMIC_RANGE_SDR10 |
动态范围类型:SDR10。 |
OT_FB_DYNAMIC_RANGE_HDR10 |
动态范围类型:HDR10。 |
OT_FB_DYNAMIC_RANGE_HLG |
动态范围类型:HLG。 |
OT_FB_DYNAMIC_RANGE_SLF |
动态范围类型:SLF。 |
【注意】
图形层动态范围仅支持以下种类:SDR8、SDR10和HDR10。
【相关数据类型及接口】
无。
ot_fb_color_format¶
【说明】
GFBG支持的像素格式集合。
【定义】
typedef enum
{
OT_FB_FORMAT_RGB565 = 0,
OT_FB_FORMAT_RGB888, /* RGB888 24bpp */
OT_FB_FORMAT_KRGB444, /* RGB444 16bpp */
OT_FB_FORMAT_KRGB555, /* RGB555 16bpp */
OT_FB_FORMAT_KRGB888, /* RGB888 32bpp */
OT_FB_FORMAT_ARGB4444, /* ARGB4444 */
OT_FB_FORMAT_ARGB1555, /* ARGB1555 */
OT_FB_FORMAT_ARGB8888, /* ARGB8888 */
OT_FB_FORMAT_ARGB8565, /* ARGB8565 */
OT_FB_FORMAT_RGBA4444, /* ARGB4444 */
OT_FB_FORMAT_RGBA5551, /* RGBA5551 */
OT_FB_FORMAT_RGBA5658, /* RGBA5658 */
OT_FB_FORMAT_RGBA8888, /* RGBA8888 */
OT_FB_FORMAT_BGR565, /* BGR565 */
OT_FB_FORMAT_BGR888, /* BGR888 */
OT_FB_FORMAT_ABGR4444, /* ABGR4444 */
OT_FB_FORMAT_ABGR1555, /* ABGR1555 */
OT_FB_FORMAT_ABGR8888, /* ABGR8888 */
OT_FB_FORMAT_ABGR8565, /* ABGR8565 */
OT_FB_FORMAT_KBGR444, /* BGR444 16bpp */
OT_FB_FORMAT_KBGR555, /* BGR555 16bpp */
OT_FB_FORMAT_KBGR888, /* BGR888 32bpp */
OT_FB_FORMAT_1BPP, /* clut1 */
OT_FB_FORMAT_2BPP, /* clut2 */
OT_FB_FORMAT_4BPP, /* clut4 */
OT_FB_FORMAT_8BPP, /* clut8 */
OT_FB_FORMAT_ACLUT44, /* AClUT44 */
OT_FB_FORMAT_ACLUT88, /* ACLUT88 */
OT_FB_FORMAT_PUYVY, /* UYVY */
OT_FB_FORMAT_PYUYV, /* YUYV */
OT_FB_FORMAT_PYVYU, /* YVYU */
OT_FB_FORMAT_YUV888, /* YUV888 */
OT_FB_FORMAT_AYUV8888, /* AYUV8888 */
OT_FB_FORMAT_YUVA8888, /* YUVA8888 */
OT_FB_FORMAT_BUTT
} ot_fb_color_format;
【成员】
成员名称 |
描述 |
|---|---|
OT_FB_FORMAT_RGB565 |
RGB565格式 |
OT_FB_FORMAT_RGB888 |
RGB888格式。 |
OT_FB_FORMAT_KRGB444 |
RGB444格式。 |
OT_FB_FORMAT_KRGB555 |
RGB555格式。 |
OT_FB_FORMAT_KRGB888 |
RGB888格式。 |
OT_FB_FORMAT_ARGB4444 |
ARGB4444格式。 |
OT_FB_FORMAT_ARGB1555 |
ARGB1555格式。 |
OT_FB_FORMAT_ARGB8888 |
ARGB8888格式。 |
OT_FB_FORMAT_ARGB8565 |
ARGB8565格式。 |
OT_FB_FORMAT_RGBA4444 |
RGBA4444格式。 |
OT_FB_FORMAT_RGBA5551 |
RGBA5551格式。 |
OT_FB_FORMAT_RGBA5658 |
RGBA5658格式。 |
OT_FB_FORMAT_RGBA8888 |
RGBA8888格式。 |
OT_FB_FORMAT_BGR565 |
BGR565格式。 |
OT_FB_FORMAT_BGR888 |
BGR888格式。 |
OT_FB_FORMAT_ABGR4444 |
ABGR4444格式。 |
OT_FB_FORMAT_ABGR1555 |
ABGR1555格式。 |
OT_FB_FORMAT_ABGR8888 |
ABGR8888格式。 |
OT_FB_FORMAT_ABGR8565 |
ABGR8565格式。 |
OT_FB_FORMAT_KBGR444 |
BGR444格式。 |
OT_FB_FORMAT_KBGR555 |
BGR555格式。 |
OT_FB_FORMAT_KBGR888 |
BGR888格式。 |
OT_FB_FORMAT_1BPP |
索引格式1bpp。 |
OT_FB_FORMAT_2BPP |
索引格式2bpp。 |
OT_FB_FORMAT_4BPP |
索引格式4bpp。 |
OT_FB_FORMAT_8BPP |
索引格式8bpp。 |
OT_FB_FORMAT_ACLUT44 |
ACLUT44格式。 |
OT_FB_FORMAT_ACLUT88 |
ACLUT88格式。 |
OT_FB_FORMAT_PUYVY |
PUYVY格式。 |
OT_FB_FORMAT_PYUYV |
PYUYV格式。 |
OT_FB_FORMAT_PYVYU |
PYVYU格式。 |
OT_FB_FORMAT_YUV888 |
YUV888格式。 |
OT_FB_FORMAT_AYUV8888 |
AYUV8888格式。 |
OT_FB_FORMAT_YUVA8888 |
YUVA8888格式。 |
OT_FB_FORMAT_BUTT |
非法像素格式。 |
【注意】
OT_FB_FORMAT_ARGB4444、OT_FB_FORMAT_ARGB1555、OT_FB_FORMAT_ARGB8888、OT_FB_FORMAT_2BPP、OT_FB_FORMAT_4BPP均支持。
【相关数据类型及接口】
无。
ot_fb_capability¶
【说明】
各个叠加层的支持能力。
【定义】
typedef struct
{
td_bool is_key_rgb;
td_bool is_key_alpha; /* whether support colorkey alpha */
td_bool is_global_alpha; /* whether support global alpha */
td_bool is_cmap; /* whether support color map */
td_bool has_cmap_reg; /* whether has color map register */
td_bool is_color_format[OT_FB_FORMAT_BUTT]; /* support which color format */
td_bool is_vo_scale; /* support vo scale */
td_bool is_layer_support; /* whether support a certain layer */
td_u32 max_width; /* the max pixels per line */
td_u32 max_height; /* the max lines */
td_u32 min_width; /* the min pixels per line */
td_u32 min_height; /* the min lines */
td_u32 ver_deflicker_level; /* vertical deflicker level, less than 2 means vertical deflicker is unsupported */
td_u32 hor_deflicker_level; /* horizontal deflicker level, less than 2 means horizontal deflicker is unsupported */
td_bool is_decompress;
td_bool is_premul;
td_bool is_ghdr /* NEW Feature. Is GHDR supported. */
td_bool is_osb; /* new feature. is smart rect supported */
}ot_fb_capability;
【成员】
成员名称 |
描述 |
|---|---|
is_key_rgb |
颜色分量是否可进行colorkey操作。 |
is_key_alpha |
是否支持带Alpha的colorkey。(此芯片不支持,默认为false) |
is_global_alpha |
是否支持全局Alpha和像素Alpha叠加。 |
has_cmap_reg |
是否有color map寄存器。 |
is_cmap |
是否支持调色板模式。 |
is_color_format |
支持的像素格式。 例如:is_color_format [OT_FB_FORMAT_ARGB1555] = 1,表示支持ARGB1555格式。 |
is_vo_scale |
是否支持vo scale |
is_layer_support |
是否支持a certain layer |
max_width |
图层支持最大分辨率的宽度。 |
max_height |
图层支持最大分辨率的高度。 |
min_width |
图层支持最小分辨率的宽度。 |
min_height |
图层支持最小分辨率的高度。 |
ver_deflicker_level |
支持的垂直抗闪烁最大级别,小于2为不支持。 |
hor_deflicker_level |
支持的水平抗闪烁最大级别,小于2为不支持。 |
is_decompress |
是否支持压缩模式。 |
is_premul |
是否支持预乘模式。 |
is_ghdr |
是否支持图形层高动态范围设置。 |
is_osb |
是否支持smart rect。 |
【注意】
is_global_alpha = 1
表示支持全局Alpha和像素Alpha叠加,当叠加层在处于Alpha通道模式时,叠加Alpha值来源于全局Alpha和像素Alpha的叠加。
is_global_alpha = 0
表示不支持全局Alpha和像素Alpha叠加,当叠加层处于Alpha通道模式时,叠加Alpha值就等于全局Alpha。
max_width/max_height是用于基础图形层绘制UI时的最大分辨率,特殊情况在使用FBIO_DRAW_SMART_RECT功能时,可以设置CLUT像素格式,最大分辨率支持3840*2160。
【相关数据类型及接口】
ot_fb_point¶
【说明】
坐标结构体。
【定义】
typedef struct
{
td_u32 x_pos; /* horizontal position */
td_u32 y_pos; /* vertical position */
}ot_fb_point;
【成员】
成员名称 |
描述 |
|---|---|
x_pos |
水平坐标。 |
y_pos |
垂直坐标。 |
【注意】
无。
【相关数据类型及接口】
ot_fb_mirror_mode¶
【说明】
镜像模式枚举。
【定义】
typedef enum
{
OT_FB_MIRROR_NONE = 0x0,
OT_FB_MIRROR_HOR = 0x1,
OT_FB_MIRROR_VER = 0x2,
OT_FB_MIRROR_BOTH= 0x3,
OT_FB_MIRROR_BUTT
}ot_fb_mirror_mode;
【成员】
成员名称 |
描述 |
|---|---|
OT_FB_MIRROR_NONE |
不进行镜像操作。 |
OT_FB_MIRROR_HOR |
水平方向镜像。 |
OT_FB_MIRROR_VER |
垂直方向镜像。 |
OT_FB_MIRROR_BOTH |
水平和垂直方向都做镜像操作。 |
OT_FB_MIRROR_BUTT |
非法的镜像模式。 |
【注意】
不支持镜像模式和压缩同时做。
镜像模式只支持argb8888、argb1555、argb4444格式。
【相关数据类型及接口】
ot_fb_alpha¶
【说明】
Alpha结构体。
【定义】
typedef struct
{
td_bool alpha_en; /* pixel alpha enable flag */
td_bool alpha_chn_en; /*global alpha enable flag */
td_u8 alpha0; /* alpha0 value */
td_u8 alpha1; /* alpha1 value */
td_u8 global_alpha; /* global alpha value */
td_u8 reserved;
}ot_fb_alpha;
【成员】
成员名称 |
描述 |
|---|---|
alpha_en |
像素Alpha使能,默认为1。 |
alpha_chn_en |
全局Alpha使能,默认为0。 |
alpha0 |
Alpha0值,范围:[0, 255],默认为0。在RGB1:5:5:5格式下,当最高位为0时,选择该值作为Alpha叠加的Alpha值。 |
alpha1 |
Alpha1值,范围:[0, 255],默认为255。在RGB1:5:5:5格式下,当最高位为1时,选择该值作为Alpha叠加的Alpha值。 |
global_alpha |
全局Alpha值,范围:[0, 255],默认为255。在Alpha通道使能时起作用。 |
reserved |
保留。 |
【注意】
Alpha值的计算公式有以下几种情况:
当像素Alpha和全局Alpha都使能时
对于不支持全局Alpha和像素Alpha叠加的芯片,叠加Alpha值的计算公式如下所示:alpha = global_alpha
对于支持全局Alpha和像素Alpha叠加的芯片,叠加Alpha值的计算公式如下所示:alpha = global_alpha * pixel_alpha
当全局Alpha不使能时,Alpha值等于像素Alpha值,即:

当像素Alpha不使能时,Alpha值等于global_alpha。
【相关数据类型及接口】
ot_fb_colorkey¶
【说明】
ot_fb_colorkey结构体,用于colorkey的属性设置。
【定义】
typedef struct
{
td_bool enable; /* colorkey 是否使能 */
td_u32 value;
}ot_fb_colorkey;
【成员】
成员 |
描述 |
|---|---|
enable |
Colorkey是否使能标识。 TRUE:使能; FALSE:不使能。 |
value |
Colorkey的颜色值。 |
【注意】
无。
【相关数据类型及接口】
ot_fb_deflicker¶
【说明】
抗闪烁结构体,用于设置或获取叠加层的抗闪烁设置。
【定义】
typedef struct ot_fb_deflicker
{
td_u32 hor_deflicker_level; /* horizontal deflicker level */
td_u32 ver_deflicker_level; /* vertical deflicker level */
td_u8 ATTRIBUTE * hor_deflicker_coef; /* horizontal deflicker coefficient */
td_u8 ATTRIBUTE * ver_deflicker_coef; /* vertical deflicker coefficient */
}ot_fb_deflicker;
【成员】
成员 |
描述 |
|---|---|
hor_deflicker_level |
水平抗闪烁阶数。 |
ver_deflicker_level |
垂直抗闪烁阶数。 |
hor_deflicker_coef |
水平抗闪烁系数,个数等于水平抗闪烁阶数减1。 |
ver_deflicker_coef |
垂直抗闪烁系数,个数等于垂直抗闪烁阶数减1。 |
【注意】
阶数指得到每行(列)处理结果中参与运算的行(列)数。一般而言,抗闪烁阶数越高,得到的效果也越好,但是也会带来图像的模糊。
【相关数据类型及接口】
ot_fb_surfaceex¶
【说明】
Surface结构体,用于双缓冲时两块Surfcace的属性设置。
【定义】
typedef struct
{
td_phys_addr_t phys_addr;
ot_fb_alpha alpha;
ot_fb_colorkey colorkey;
}ot_fb_surfaceex;
【成员】
成员 |
描述 |
|---|---|
phys_addr |
Surface的物理地址。 |
alpha |
Surface的alpha属性。 |
colorkey |
Surface的colorkey属性。 |
【注意】
Surface的物理地址必须在该叠加层配置的显存范围内,而且最好保证是16byte对齐。
【相关数据类型及接口】
ot_fb_layer_info¶
【说明】
图层信息结构体。
【定义】
typedef struct
{
ot_fb_layer_buf buf_mode;
ot_fb_layer_antiflicker_level antiflicker_level;
td_s32 x_pos; /**< the x pos of origion point in screen */
td_s32 y_pos; /**< the y pos of origion point in screen */
td_u32 canvas_width; /**< the width of canvas buffer */
td_u32 canvas_height; /**< the height of canvas buffer */
td_u32 display_width; /**< the width of display buf in fb */
td_u32 display_height; /**< the height of display buf in fb. */
td_u32 screen_width; /**< the width of screen */
td_u32 screen_height; /**< the height of screen */
td_bool is_premul; /**< The data drawed in buf is premul data or not*/
td_u32 mask; /**< param modify mask bit*/
}ot_fb_layer_info;
【成员】
成员 |
描述 |
|---|---|
buf_mode |
扩展模式下的刷新模式。 |
antiflicker_level |
图层抗闪烁等级。 |
x_pos |
图层在屏幕上的原点横坐标。 |
y_pos |
图层在屏幕上的原点纵坐标。 |
canvas_width |
画布buffer的宽。 |
canvas_height |
画布buffer的高。 |
display_width |
显存分辨率的宽。要求2对齐。 |
display_height |
显存分辨率的高。要求2对齐。 |
screen_width |
屏幕显示分辩率的宽。要求2对齐。 |
screen_height |
屏幕显示分辩率的高。要求2对齐。 |
is_premul |
FB中的数据是否为预乘数据。 |
mask |
设置图层信息时参数修改掩码位。 |
【注意】
图形缩放功能的使用方法:上述Canvas宽高(canvas_width, canvas_height)、Display宽高(display_width,display_height)和Screen宽高(screen_width,screen_height)之间的关系:
Canvas宽高表示实际要显示的内容的宽高,即未经缩放的图像的分辨率;
Display宽高表示显示缓冲区的宽高;
Screen宽高表示最终显示出来的宽高;
从Canvas宽高到Display宽高使用TDE的搬移和缩放功能,将画布内容搬移并缩放到显存;
从Canvas宽高到Display宽高且为放大时,需要将fb_var_screeninfo中成员xres和yres(以及xres_virtual和yres_virtual)分别设置为放大后的图像的宽和高;
从Display宽高到Screen宽高使用G0中的缩放功能(支持放大1~15倍,不支持缩小),将显存内容缩放到Screen宽高显示。
须知:上述缩放功能中,TDE的缩放能力(放大倍数和缩小倍数)可参考文档《TDE API参考》。 如果仅使用FBIOPAN_DISPLAY接口进行显示,则不涉及TDE搬移,在使用G0的缩放功能时,GFBG内部以display宽高作为参考,此时需将display宽高设置成Canvas宽高。
上述缩放功能中,TDE的缩放能力(放大倍数和缩小倍数)可参考文档《TDE API参考》。 如果仅使用FBIOPAN_DISPLAY接口进行显示,则不涉及TDE搬移,在使用G0的缩放功能时,GFBG内部以display宽高作为参考,此时需将display宽高设置成Canvas宽高。
若设置了display_width和mask(修改显示宽高的掩码设置参见ot_fb_layer_info_maskbit 中的OT_FB_LAYER_MASK_DISPLAY_SIZE项)且该宽度值比系统已存在的设置大,则该设置会修改固定屏幕信息fb_fix_screeninfo中的line_length项,修改后的大小为“设置的宽度值*每像素字节数”的16字节对齐。
若设置了display_width、display_height和mask(修改显示宽高的掩码设置参见ot_fb_layer_info_maskbit 中的OT_FB_LAYER_MASK_DISPLAY_SIZE项),则该设置会同步修改 fb_var_screeninfo中的xres和yres。
如果display_width大于xres_virtual,则设置xres_virtual为display_width;
如果display_height大于yres_virtual,则设置yres_virtual为display_height。
当图形层的像素格式为ARGB1555或ARGB4444时,不支持预乘模式。
当图形层全局alpha为1时,不支持预乘模式。
当colorkey使能时,不支持预乘模式。
【相关数据类型及接口】
ot_fb_layer_antiflicker_level¶
【说明】
图层抗闪等级。
【定义】
typedef enum
{
OT_FB_LAYER_ANTIFLICKER_NONE = 0x0, /**< no antiflicker*/
OT_FB_LAYER_ANTIFLICKER_LOW = 0x1, /**< low level*/
OT_FB_LAYER_ANTIFLICKER_MID = 0x2,/**< middle level*/
OT_FB_LAYER_ANTIFLICKER_HIGH = 0x3, /**< high level*/
OT_FB_LAYER_ANTIFLICKER_AUTO = 0x4, /**< auto*/
OT_FB_LAYER_ANTIFLICKER_BUTT
}ot_fb_layer_antiflicker_level;
【成员】
成员 |
描述 |
|---|---|
OT_FB_LAYER_ANTIFLICKER_NONE |
不做抗闪 |
OT_FB_LAYER_ANTIFLICKER_LOW |
低等级抗闪 |
OT_FB_LAYER_ANTIFLICKER_MID |
中等级抗闪 |
OT_FB_LAYER_ANTIFLICKER_HIGH |
高等级抗闪 |
OT_FB_LAYER_ANTIFLICKER_AUTO |
自动抗闪 |
OT_FB_LAYER_ANTIFLICKER_BUTT |
无效值 |
【注意】
如果不设置,则默认为自动抗闪。
【相关数据类型及接口】
ot_fb_layer_buf¶
【说明】
图层刷新类型。
【定义】
typedef enum
{
OT_FB_LAYER_BUF_DOUBLE = 0x0,
OT_FB_LAYER_BUF_ONE = 0x1,
OT_FB_LAYER_BUF_NONE = 0x2,
OT_FB_LAYER_BUF_DOUBLE_IMMEDIATE=0x3,
OT_FB_LAYER_BUF_BUTT
} ot_fb_layer_buf;
【成员】
成员 |
描述 |
|---|---|
OT_FB_LAYER_BUF_DOUBLE |
2 buffer模式 |
OT_FB_LAYER_BUF_ONE |
1 buffer模式 |
OT_FB_LAYER_BUF_NONE |
0 buffer模式 |
OT_FB_LAYER_BUF_DOUBLE_IMMEDIATE |
2 buffer立即模式 |
OT_FB_LAYER_BUF_BUTT |
无效值 |
注:各刷新类型的含义具体见《GFBG 开发指南》1.2中的“图形层刷新类型”小节。
【注意】
绘图内容从用户绘制buffer到显示buffer的过程用TDE进行搬移,因此是否支持缩放取决于TDE;而从显示buffer到显示设备的过程是否支持缩放取决于VO设备。
OT_FB_LAYER_BUF_DOUBLE与OT_FB_LAYER_BUF_DOUBLE_IMMEDIATE的区别在于OT_FB_LAYER_BUF_DOUBLE_IMMEDIATE方式的每一次刷新操作都要等到刷新内容真正显示出来之后才会返回,而OT_FB_LAYER_BUF_DOUBLE方式则不会等待。
OT_FB_LAYER_BUF_ONE刷新模式下默认使用TDE-VDP低延时功能,防止1buf天然裂屏现象,此功能仅SS524V100/SS522V101支持。
【相关数据类型及接口】
ot_fb_layer_info_maskbit¶
【说明】
标识ot_fb_layer_info中哪些成员有更新。
【定义】
typedef enum
{
OT_FB_LAYER_MASK_BUF_MODE = 0x1,
OT_FB_LAYER_MASK_ANTIFLICKER_MODE = 0x2,
OT_FB_LAYER_MASK_POS = 0x4,
OT_FB_LAYER_MASK_CANVAS_SIZE = 0x8,
OT_FB_LAYER_MASK_DISPLAY_SIZE = 0x10,
OT_FB_LAYER_MASK_SCREEN_SIZE = 0x20,
OT_FB_LAYER_MASK_MUL = 0x40,
OT_FB_LAYER_MASK_BUTT
}ot_fb_layer_info_maskbit;
【成员】
成员 |
描述 |
|---|---|
OT_FB_LAYER_MASK_BUF_MODE |
ot_fb_layer_info中buf模式是否有效掩码 |
OT_FB_LAYER_MASK_ANTIFLICKER_MODE |
抗闪烁模式是否有效掩码 |
OT_FB_LAYER_MASK_POS |
图层位置是否有效掩码 |
OT_FB_LAYER_MASK_CANVAS_SIZE |
canvassize是否有效掩码 |
OT_FB_LAYER_MASK_DISPLAY_SIZE |
displaysize是否有效掩码 |
OT_FB_LAYER_MASK_SCREEN_SIZE |
screensize是否有效掩码 |
OT_FB_LAYER_MASK_MUL |
预乘是否有效掩码 |
OT_FB_LAYER_MASK_BUTT |
无效值 |
【注意】
在设置完某项属性之后必须设置相应的掩码,否则该项设置不会生效。
【相关数据类型及接口】
ot_fb_buf¶
【说明】
图形层画布信息及更新区域,用于绘制与刷新。
【定义】
typedef struct
{
ot_fb_surface canvas;
ot_fb_rect update_rect; /* refresh region*/
}ot_fb_buf;
【成员】
成员 |
描述 |
|---|---|
canvas |
图形层的画布信息。 |
update_rect |
图形层的更新区域。 |
【注意】
【相关数据类型及接口】
ot_fb_surface¶
【说明】
Surface结构体,设置双缓冲时两块Surfcace的属性。
【定义】
typedef struct
{
td_phys_addr_t phys_addr; /**< start physical address */
td_u32 width; /**< width pixels */
td_u32 height; /**< height pixels */
td_u32 pitch; /**< line pixels */
ot_fb_color_format format; /**< color format */
ot_fb_dynamic_range dynamic_range; /**< destination dynamic range. */
}ot_fb_surface;
【成员】
成员 |
描述 |
|---|---|
phys_addr |
Surface的物理地址(非压缩数据时表示整块surface的物理地址,压缩数据时表示AR部分物理地址)。 |
width |
Surface的宽度属性。 |
height |
Surface的高度属性。 |
pitch |
存储区域一行的跨度属性。 |
format |
像素的格式属性。 |
dynamic_range |
Surface的动态范围。 |
【注意】
无。
【相关数据类型及接口】
ot_fb_cursor¶
【说明】
Cursor结构体,包含软鼠标的信息。
【定义】
typedef struct
{
ot_fb_surface cursor;
ot_fb_point hot_pos;
} ot_fb_cursor;
【成员】
成员 |
描述 |
|---|---|
cursor |
软鼠标的画布信息。 |
hot_pos |
软鼠标的热点位置。 |
【注意】
SS528V100不支持软鼠标功能。
【相关数据类型及接口】
无。
ot_fb_ddr_zone¶
【说明】
内存侦测结构体,包含内存侦测设置的开始区域和区域数信息。
【定义】
typedef struct
{
td_u32 start_section;
td_u32 zone_nums;
} ot_fb_ddr_zone;
【成员】
成员 |
描述 |
|---|---|
start_section |
内存侦测开始区域。 |
zone_nums |
内存侦测区域数。 |
【注意】
内存侦测区域数最大只有32个区域,设置的开始区域与区域数之和不能超过32。
【相关数据类型及接口】
ot_fb_smart_rect_mode¶
【说明】
GFBG支持的画框类型。
【定义】
typedef enum {
OT_FB_SMART_RECT_NONE = 0x0,
OT_FB_SMART_RECT_SOLID = 0x1,
OT_FB_SMART_RECT_FILLED = 0x2,
OT_FB_SMART_RECT_CORNER = 0x3,
OT_FB_SMART_RECT_BUTT
} ot_fb_smart_rect_mode;
【成员】
成员 |
描述 |
|---|---|
OT_FB_SMART_RECT_NONE |
不显示框。 |
OT_FB_SMART_RECT_SOLID |
矩形实边框 |
OT_FB_SMART_RECT_FILLED |
矩形填充。 |
OT_FB_SMART_RECT_CORNER |
角框。 |
OT_FB_SMART_RECT_BUTT |
非法类型。 |
【注意】
无。
【相关数据类型及接口】
ot_fb_smart_rect¶
【说明】
画框配置参数信息。
【定义】
typedef struct {
ot_fb_smart_rect_mode mode;
ot_fb_rect rect;
td_u32 corner_length;
td_u32 thick;
td_u32 color_value;
} ot_fb_smart_rect;
【成员】
成员 |
描述 |
|---|---|
mode |
画框类型。 |
rect |
画框坐标、宽高。 |
corner_length |
角框长度(当mode选择OT_FB_SMART_RECT_CORNER才有效)。 |
thick |
实边框/角框粗细(当mode选择OT_FB_SMART_RECT_SOLID或OT_FB_SMART_RECT_CORNER有效)。 |
color_value |
颜色值。 |
【注意】
SS524V100/SS522V101仅G3支持在线画框。
不支持在线画框与TDE CLUT画框同时生效,开启在线画框图层G3背景色固定为透明色(即除了框以外均为透明色)。
支持一次调用最多画框个数128个,图形层上最大画框数为128。
横坐标x需大于等于零,且小于等于图形层支持最大宽-1,如图形层支持3840*2160分辨率,则0 <= x <= 3839。
纵坐标y需大于等于零,且小于等于图形层支持最大高-1,如图形层支持3840*2160分辨率,则0 <= y <= 2159。
宽w需大于零,且x + w – 1 <= w_max – 1;高h需大于零,且y + h – 1 <= h_max – 1。如图形层支持3840*2160分辨率,w_max = 3840,h_max = 2160。
corner_length最大限制255。
thick最大限制32。
实边框限制thick的两倍需小于等于框的宽与高之间的小值。
角框限制thick的两倍需小于等于框的宽与高之间的小值,corner_length的两倍需小于等于框的宽与高之间的小值。
color_value按照argb8888配置,但考虑画框对颜色的需求及成本,颜色值有限制如下:
a,r,g,b四个分量均取各自8位的高4位左移4位后的数值作为新的分量值。所以会造成实际设置的各分量低四位无效。
【相关数据类型及接口】
ot_fb_smart_rect_param¶
【说明】
画框参数,包括画框个数和画框配置。
【定义】
typedef struct {
td_u32 num;
ot_fb_smart_rect *rect_start;
} ot_fb_smart_rect_param;
【成员】
成员 |
描述 |
|---|---|
num |
画框个数。 |
rect_start |
画框的配置指针。 |
【注意】
num最大限制128。
【相关数据类型及接口】
ot_fb_rect¶
【说明】
操作区域的位置及大小。
【定义】
typedef struct {
td_s32 x;
td_s32 y;
td_s32 width;
td_s32 height;
} ot_fb_rect;
【成员】
成员 |
描述 |
|---|---|
x |
起始横坐标。 |
y |
起始纵坐标。 |
width |
宽 |
height |
高 |
【注意】
无
【相关数据类型及接口】
无
ot_fb_size¶
【说明】
宽高大小。
【定义】
typedef struct {
td_u32 width;
td_u32 height;
} ot_fb_size;
【成员】
成员 |
描述 |
|---|---|
width |
宽 |
height |
高 |
【注意】
无
【相关数据类型及接口】
无
图形开发辅助接口¶
概述¶
简介¶
视频输出单元主要由设备层、视频层和图形层组成,如图1所示,具体关系如下:
设备层是基础,视频层和若干图形层基于设备层。设备层按照配置,输出一定的时序信号驱动与之相连的显示设备输出视频和图形,同时设备层决定了设备分辨率,即限制了视频层和图形层的显示分辨率。
基于以上架构,任何关于设备层的操作,都需要先关闭其上的视频层和所有图形层,再对设备层进行操作,这样才能正确显示视频和图形。例如:
关闭设备层时,需要先关闭视频层和图形层,再关闭设备层。
设备层属性变化时,如切换设备输出分辨率等,需要先关闭视频层和图形层,再关闭设备层,最后依次重新配置并开启设备层、视频层和图形层。
图 1 视频输出单元基本结构

注意事项¶
开发图形层时需要注意以下事项:
如何看到图形层输出
图形层要在显示设备上正常显示,必须在open(“/dev/fbn”)之前先配置并开启设备层。
设备层关闭后,必须对已经执行fd=open(“/dev/fbn”)的节点,进行close(fd)操作,否则,如果设备分辨率发生变化,下一次open(“/dev/fbn”)时将不会更新设备分辨到gfbg而显示异常。
每个显示设备都支持若干种时序输出,SDK在此不提供默认的设备层配置,也不在GFBG模块插入时默认打开设备层。用户需要调用相关接口使能设备层,然后操作图形层,才能看到显示结果。
SDK使用VO模块控制设备层。SDK的VO模块提供设备层和视频层控制接口,其中操作设备层的接口包括:ss_mpi_vo_enable/ss_mpi_vo_disable/ ss_mpi_vo _set_pub_attr/ ss_mpi_vo _get_pub_attr。
如何在不同设备间切换图形层
不同解决方案在不同设备间切换图形层如表1所示。
说明: 切换之前不需要关闭显示设备,但应先关闭相应的图形层并进行解绑定。
表 1 不同解决方案在不同设备间切换图形层
解决方案名称 |
描述 |
|---|---|
SS528V100/SS625V100/SS524V100 |
支持4个图形层:G0,G1,G2,G3 G0层固定绑定在设备DHD0上 G1层固定绑定在设备DHD1上 G2、G3层动态绑定在设备DHD0或DHD1或DSD0上 |
SS522V101 |
支持3个图形层:G0,G2,G3 G0层固定绑定在设备DHD0上 G2、G3层动态绑定在设备DHD0或DSD0上 |
SS928V100 |
支持3个图形层:G0,G1,G3 G0层固定绑定在设备DHD0上 G1层固定绑定在设备DHD1上 G3层动态绑定在设备DHD0或DHD1上 |
SS626V100 |
支持5个图形层:G0, G1, G2, G3, G4 G0层固定绑定在通道DHD0上 G1层固定绑定在通道DHD1上 G2层可动态绑定在通道DHD0或DHD1或DSD上 G3层可动态绑定在通道DHD0或DHD1上 G4层可动态绑定在通道DHD1或DSD上 |
API参考¶
ss_mpi_vo_bind_layer¶
【目的】
设置图形层绑定关系。
【语法】
td_s32 ss_mpi_vo_bind_layer(ot_vo_layer layer, ot_vo_dev dev)
【描述】
此接口实现绑定图形层到指定的VO设备。
【参数】
参数名称 |
描述 |
输入/输出 |
|---|---|---|
layer |
图形层标识 ot_vo_layer和ot_vo_dev 详情请参见《MPP 媒体处理软件V5.0 开发参考》“视频输出”章节。 |
输入 |
dev |
VO设备号 |
输入 |
【返回值】
返回值 |
描述 |
|---|---|
0 |
成功 |
–1 |
失败 |
【需求】
头文件:ss_mpi_vo.h、ot_common_vo.h
库文件:libss_mpi.a
【注意】
调用前需保证图形层未使能,而且应先解除之前的绑定关系。
【举例】
无。
【相关接口】
ss_mpi_vo_unbind_layer¶
【目的】
将指定图形层与设备的绑定关系解除。
【语法】
td_s32 ss_mpi_vo_unbind_layer(ot_vo_layer layer, ot_vo_dev dev)
【描述】
将指定图形层与设备的绑定关系解除。
【参数】
参数名称 |
描述 |
输入/输出 |
|---|---|---|
layer |
图形层号。 ot_vo_layer和ot_vo_dev详情请参见《MPP 媒体处理软件V5.0 开发参考》“视频输出”章节。 |
输入 |
dev |
视频设备号。 |
输入 |
【返回值】
返回值 |
描述 |
|---|---|
0 |
成功 |
–1 |
失败 |
【需求】
头文件:ss_mpi_vo.h、ot_common_vo.h
库文件:libss_mpi.a
【注意】
调用前需保证图形层处于关闭状态。
对未绑定的图形层进行解绑定亦会返回成功,即允许对同一个图形层解绑定多次。
【举例】
无。
【相关接口】
ss_mpi_vo_set_pub_attr¶
【目的】
设置视频输出设备的公共属性,指定接口类型、时序等配置。
【语法】
td_s32 ss_mpi_vo_set_pub_attr(ot_vo_dev dev, const ot_vo_pub_attr * pub_attr)
具体请参见《MPP 媒体处理软件V5.0 开发参考》“视频输出”章节。
ss_mpi_vo_get_pub_attr¶
【目的】
获取视频输出设备的公共属性,包括接口类型、时序配置。
【语法】
td_s32 ss_mpi_vo_get_pub_attr(ot_vo_dev dev, ot_vo_pub_attr * pub_attr)
具体请参见《MPP 媒体处理软件V5.0 开发参考》“视频输出”章节。
ss_mpi_vo_enable¶
【目的】
使能视频输出设备。
【语法】
td_s32 ss_mpi_vo_enable (ot_vo_dev dev)
【需求】
头文件:ss_mpi_vo.h、ot_common_vo.h
库文件:libss_mpi.a
【注意】
图形层要在显示设备上正常显示,必须在open(“/dev/fbn”)之前先调用此接口使能视频输出设备。
【举例】
无
【相关接口】
无
ss_mpi_vo_disable¶
【目的】
关闭视频输出设备。
【语法】
td_s32 ss_mpi_vo_disable (ot_vo_dev dev)
具体请参见《MPP 媒体处理软件V5.0 开发参考》“视频输出”章节。
Proc调试信息¶
图形层和fb设备号对应关系¶
可通过命令cat /proc/umap/gfbgn(n为图形层号)查看各个图形层的状态。
单个图形层调试信息¶
【调试信息】
# cat /proc/umap/gfbg0
layer_name :layer_0
open_count :0
show_state :OFF
graphic_enable :OFF
start_position :(0, 0)
xres, yres :(1280, 720)
xres_virtual, yres_virtual :(1280, 1440)
xoffset, yoffset :(0, 720)
fix.line_length :2560
mem_size: :8100 KB
layer_scale (hw): :NO
color_format: :ARGB1555
alpha_en :ON
alpha_channel_en :OFF
alpha0, alpha1 :0, 255
alpha_global :0
colorkey_en :OFF
colorkey_value :0xfc00
mirror_mode: :NONE
dynamic_range: :SDR8
deflicker_mode: :NONE
rotation_mode: :0
deflicker_level: :AUTO
gfbg_mode: :STANDARD
display_buffer_mode (+usr_buf) :unkown
displaying_addr (register) :0x841d2000
display_buffer[0] addr :0x84010000
display_buffer[1] addr :0x841d2000
is_premul_mode: :NO
display_rect :(1280, 720)
screen_rect :(1280, 720)
device_max_resolution :1280, 720
is_need_flip(2buf) :NO
buf_index_displaying(2buf) :1
refresh_request_num(2buf) :0
switch_buf_num(2buf) :0
union_rect (2buf) :(0,0,0,0)
canavas_updated_addr :0x841d2000
canavas_updated (w, h) :1280,720
canvas_width :1280
canvas_height :720
canvas_pitch :2560
canvas_format :ARGB1555
is_compress :NO
is_ddr_dettect :NO
ddr_detect_zones :0
premul_enable :OFF
【调试信息分析】
记录当前设备对应的图形层的内存配置信息及显示信息。
【参数说明】
参数 |
描述 |
|
|---|---|---|
图形层基本属性 |
layer_name |
G0 ~ G4对应的名称依次为:layer_0、layer_1、layer_2、layer_3、layer_4 |
open_count |
该图形层打开次数。 在用户调用open( )时增1;调用close( )时减1。在第一个用户open( )时实际打开VOU硬件图形层;在最后一个用户close( )时才实际关闭VOU硬件图形层。 |
|
show_state |
该图像层显示状态。 取值:{OFF表示不显示;ON表示显示}。 在用户成功设置可变屏幕信息后,内部自动显示此图层,该状态为1;用户显式地调用FBIOPUT_SHOW_GFBG隐藏/显示该图形层时此状态相应变化。 |
|
graphic_enable |
图形层物理硬件层使能状态。 取值:{OFF表示不使能;ON表示使能} 在用户调用FBIO_CREATE_LAYER开启,调用FBIO_DESTROY_LAYER关闭。用于特殊场景动态解绑图形层。 |
|
start_position |
图形层在显示设备上的起始显示位置,如(100, 50)表示起始显示位置x为100,y为50。 单位:像素。 默认为(0, 0),用户可调用FBIOPUT_SCREEN_ORIGIN_GFBG更新显示位置。 |
|
xres, yres |
可见屏幕宽度和高度。 |
|
xres_virtual |
虚拟分辨率宽度(显存中图像宽度),当该值小于xres时会修改xres,使xres值与该值相等。 |
|
yres_virtual |
虚拟分辨率高度(显存中图像高度),当该值小于yres时会修改yres,使yres值与该值相等。结合xres_virtual,可以用来快速水平或垂直平移图像。 |
|
xoffset,yoffset |
在x和y方向上的偏移像素数。 |
|
fix.line_length |
每行字节数。 |
|
mem_size |
显存大小。 |
|
layer_scale (hw) |
图形层是否支持硬件缩放功能。 取值:{NO表示不支持;YES表示支持}。 |
|
color_format |
图形层格式。 系统加载后默认值ARGB1555。 用户设置可变屏幕信息中的格式项后更新。 |
|
alpha_en |
像素alpha是否使能。 取值:{OFF表示否,ON表示是},默认值为ON。 Proc中所有alpha相关信息在用户设置FBIOPUT_ALPHA_GFBG时更新。 该项关闭,则像素alpha配置不生效; 该项开启且AlphaChannel关闭,则仅像素alpha生效(对ARGB1555格式,即Alpha0和Alpha1生效),该项开启且AlphaChannel开启,则像素alpha和全局alpha(Alpha Global)都生效。 |
|
alpha_channel _en |
全局alpha是否生效控制开关。 取值:{OFF表示否,ON表示是},默认值为OFF。 AlphaChannel Enable使能,Alpha Global便生效。 |
|
alpha0 |
ARGB1555格式时,当最高位为0时,选择该值作为Alpha叠加的Alpha值。 取值:0~255,默认为0。 |
|
alpha1 |
ARGB1555格式时,当最高位为1时,选择该值作为Alpha叠加的Alpha值。 取值:0~255,默认为255。 |
|
alpha_global |
全局alpha。 取值:0~255,默认为255。 |
|
colorkey_en |
该图层colorkey功能是否使能。 取值:{OFF表示否,ON表示是},默认值为OFF。 |
|
colorkey_value |
被透明掉的像素值,与当前层设置的像素格式一致。 |
|
mirror_mode |
镜像模式,无镜像(NONE)、水平(HORIZONTAL)镜像、垂直(VERTICAL)镜像、水平和垂直镜像(BOTH)。 |
|
dynamic_range |
动态范围,SDR8,SDR10,HDR10,HLG,SLF |
|
deflicker_mode |
抗闪烁模式。 |
|
rotation_mode |
旋转角度,0,90,180,270分别表示旋转0度,90度,180度,270度。 |
|
deflicker_level |
抗闪烁级别。 |
|
gfbg_mode |
STANDARD:标准模式 EXTEND:扩展模式 |
|
display_buffer_mode(+usr_buf) |
刷新模式。各模式与对应显示的内容关系如下: OT_FB_LAYER_BUF_DOUBLE —— triple,OT_FB_LAYER_BUF_ONE —— double,OT_FB_LAYER_BUF_NONE —— single, OT_FB_LAYER_BUF_DOUBLE_IMMEDIATE —— triple( no frame discarded),OT_FB_LAYER_BUF_BUTT —— unkown 注:+usr_buf表示该项计数包含用户buffer。 |
|
displaying_addr (register) |
送显物理地址。 |
|
display_buffer[0] addr |
显示buf 0的物理地址。 |
|
display_buffer[1] addr |
显示buf 1的物理地址 |
|
is_premul_mode |
是否预乘模式。 YES:是; NO:不是。 默认值:NO。 |
|
display_rect |
显示buf的分辨率,(width, height);默认(0, 0)。 |
|
screen_rect |
屏幕的分辨率,(width, height);默认(0, 0)。 |
|
device_max_resolution |
该层所在的显示设备的当前显示分辨率。 |
|
is_need_flip(2buf) |
显示buf是否需要翻转。 |
|
buf_index_displaying(2buf) |
当前显示buf的下标 0 或 1。 |
|
refresh_request_num(2buf) |
刷新次数。 |
|
switch_buf_num(2buf) |
实际翻转buf次数。 |
|
union_rect (2buf) |
合并后实际有效范围。 |
|
canavas_updated_addr |
画布更新区域的起始地址。 |
|
canavas_updated (w, h) |
画布更新区域的宽与高。 |
|
canvas_width |
画布宽度。 |
|
canvas_height |
画布高度。 |
|
canvas_pitch |
画布行间距。 |
|
canvas_format |
画布像素格式。 |
|
is_compress |
是否启用压缩功能标识。 |
|
is_ddr_dettect |
是否开始内存侦测。 |
|
ddr_detect_zones |
DDR侦测区域个数。 |
|
premul_enable |
预乘使能。 |
|
图形层的绑定关系¶
固定绑定关系
对于SS528V100,图形层与设备的绑定关系是固定不变的,G0固定绑定设备DHD0,G1固定绑定设备DHD1。
动态绑定关系
对于SS528V100,部分图形层与设备的绑定关系是可动态调整的,G2,G3可动态绑定设备0、设备1、设备2。
对于可动态绑定的图形层的绑定关系,可查看命令cat /proc/umap/vo输出的最后几行,内容如下:
---------------------------vo graphics layer bind info-----------------------------------------------------
layer_id bind_dev priority
【参数说明】
参数 |
描述 |
|
|---|---|---|
vo graphics layer bind info |
Layer_id |
可动态绑定的图形层 |
bind_dev |
图形层所绑定的设备号 |
|
priority |
优先级 |
|
注:异构系统vo在liteos侧,gfbg在linux侧,当关闭图形层后恢复默认CSC参数,vo的proc信息暂时无法获取图形层更新的数据。




