Edit online

接口设计

3 Mar 2025
Read time: 5 minute(s)
AICFB 显示驱动接口分可为标准功能和扩展功能。
  • 标准功能:
    • 将物理显存映射到用户空间

    • 获取显示屏的分辨率和获取 Framebuffer 的像素格式

    • 支持单缓冲 Framebuffer 和双缓冲 Framebuffer 可配置

  • 扩展功能:
    • 获取图层个数

    • 获取图层能力

    • 获取图层配置数据

    • 更新图层配置数据

    • 支持同时更新多图层配置数据

    • 支持图层 scaler 设置

    • 支持 alpha blending 设置

    • 支持 color key

    • 获取显示屏大小

    • 绑定 DMA-BUF

    • 解绑 DMA-BUF

    • 将 /dev/fb0 导出为 dmabuf fd

Framebuffer 标准接口

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

参数

描述

输入/输出

Fd

打开 FB 设备后设备描述符

输入

cmd

主要的 cmd 命令如下:

FBIOGET_VSCREENINFO:获取屏幕可变信息

FBIOPUT_VSCREENINFO:设置屏幕可变信息

FBIOGET_FSCREENINFO:获取屏幕固定信息

FBIOPAN_DISPLAY:设置 PAN 显示

FBIO_WAITFORVSYNC: 等待 vsync 信号

输入

cmddata

各 cmd 对应的数据类型分别是:

屏幕可变信息:struct fb_var_screeninfo *类型

屏幕固定信息:struct fb_fix_screeninfo *类型

PAN 显示:struct fb_var_screeninfo *类型

输入/输出

扩展接口

1. AICFB_WAIT_FOR_VSYNC

接口定义

int ioctl(int fd, unsigned long cmd, unsigned int *pvalue);

功能说明

等待 Vsync 信号

参数定义

CMD: AICFB_WAIT_FOR_VSYNC

pvalue: 该值无意义,固定为 NULL

返回值

0:成功

-1:失败

注意事项

2. AICFB_GET_LAYER_NUM

接口定义

int ioctl(int fd, unsigned long cmd, struct aicfb_layer_num *pvalue);

功能说明

获取显示图层的个数, 包括 UI 图层个数和 Video 图层

参数定义

CMD: AICFB_GET_LAYER_NUM

player_num: 参考结构体 struct aicfb_layer_num 定义

返回值

0:成功

-1:失败

注意事项

3. AICFB_GET_LAYER_CAPABILITY

接口定义

int ioctl(int fd, unsigned long cmd, struct aicfb_layer_capability *player_cap);

功能说明

获取当前图层的能力

参数定义

CMD: AICFB_GET_LAYER_CAPABILITY

player_cap: 参考结构体 struct aicfb_layer_capability 定义

返回值

0:成功

-1:失败

注意事项

调用接口前要先填写结构体中的 layer_id

4. AICFB_GET_LAYER_CONFIG

接口定义

int ioctl(int fd, unsigned long cmd, struct aicfb_layer_data *player_conf);

功能说明

获取图层配置信息

参数定义

CMD: AICFB_GET_LAYER_CONFIG

player_conf: 参考结构体 struct aicfb_layer_data 定义

返回值

0:成功

-1:失败

注意事项

调用接口前要先填写结构体中的 id,如果是多矩形窗口要同时填写 rect_win_id

5. AICFB_UPDATE_LAYER_CONFIG

接口定义

int ioctl(int fd, unsigned long cmd, struct aicfb_layer_data *player_conf)

功能说明

更新图层配置信息

参数定义

CMD: AICFB_UPDATE_LAYER_CONFIG

player_ocnf:参考结构体 struct aicfb_layer_data 定义

返回值

0: 成功

-1:失败

注意事项

如果是仅更新图层的部分 data 信息,

可以先调用接口 CONFIG,获取当前图层信息,

然后再修改要更新的图像信息,最后再调用此接口更新图层信息

6. AICFB_UPDATE_LAYER_CONFIG_LISTS

接口定义

int ioctl(int fd, unsigned long cmd, struct aicfb_config_lists *player_lists);

功能说明

更新图层配置数据列表

参数定义

CMD: AICFB_UPDATE_LAYER_CONFIG_LISTS aicfb_config_lists

player_lists: 参考结构体 struct aicfb_config_lists 定义

返回值

0:成功

-1:失败

注意事项

通过此接口可以同时更新多个图层或者多个窗口的配置信息

通过此接口调用的好处是相关图层配置的更新可以同时生效

7. AICFB_GET_ALPHA_CONFIG

接口定义

int ioctl(int fd, unsigned long cmd, struct aicfb_alpha_config *alpha);

功能说明

获取当前图层的 Alpha 配置

参数定义

CMD: AICFB_GET_ALPHA_CONFIG

alpha: 参结考构体 struct aicfb_alpha_config 定义

返回值

0:成功

-1:失败

注意事项

8. AICFB_UPDATE_ALPHA_CONFIG

接口定义

int ioctl(int fd, unsigned long cmd, struct aicfb_alpha_config *alpha);

功能说明

更新当前图层的 Alpha 配置

参数定义

CMD: AICFB_UPDATE_ALPHA_CONFIG

alpha: 参结考构体 struct aicfb_alpha_config 定义

返回值

0:成功

-1:失败

注意事项

9. AICFB_GET_CK_CONFIG

接口定义

int ioctl(int fd, unsigned long cmd, struct aicfb_ck_config *player_ck);

功能说明

获取当前图层的 CK 配置

参数定义

CMD: AICFB_GET_CK_CONFIG

player_ck: 参考结构体 struct aicfb_ck_config 定义

返回值

0:成功

-1:当前图层不支持 color key

注意事项

10. AICFB_UPDATE_CK_CONFIG

接口定义

int ioctl(int fd, unsigned long cmd, struct aicfb_ck_config *player_ck);

功能说明

更新当前图层的 CK 配置

参数定义

CMD: AICFB_SET_CK_CONFIG

player_ck: 参考结构体 struct aicfb_ck_config 定义

返回值

0: 成功

-1:当前图层不支持 color key

注意事项

11. AICFB_GET_SCREEN_SIZE

接口定义

int ioctl(int fd, unsigned long cmd, struct aic_size *pscreen_size);

功能说明

更新当前图层的 CK 配置

参数定义

CMD: AICFB_GET_SCREEN_SIZE

pscreen_size: 结构体 struct aic_size 定义了屏幕的宽,高信息

返回值

0:成功

-1:失败

注意事项

12. AICFB_GET_FB_LAYER_CONFIG

接口定义

int ioctl(int fd, unsigned long cmd, struct aicfb_layer_data *player_conf);

功能说明

获取标准 framebuffer 占用的图层信息

参数定义

CMD: AICFB_GET_FB_LAYER_CONFIG

player_conf: 参考结构体 struct aicfb_layer_data 定义

返回值

0:成功

-1:失败

注意事项

13. AICFB_GET_DMABUF

接口定义

int ioctl(int fd, unsigned long cmd, struct aicfb_dmabuf_fd *fds);

功能说明

通知 fb 驱动绑定 DMA-BUF

参数定义

CMD: AICFB_GET_DMABUF

fds: 参考结构体 struct aicfb_dmabuf_fd 定义

返回值

0:成功

-1:失败

注意事项

APP 在将 dmabuf 送给 DE 显示之前必须进行绑定,否则无法显示 buf 中的内容

14. AICFB_PUT_DMABUF

接口定义

int ioctl(int fd, unsigned long cmd, struct aicfb_dmabuf_fd *fds);

功能说明

通知 fb 驱动解绑 DMA-BUF

参数定义

CMD: AICFB_PUT_DMABUF

fds: 参考结构体 struct aicfb_dmabuf_fd 定义

返回 值

0:成功

-1:失败

注意事项

15. AICFB_TO_DMABUF_FD

接口定义

int ioctl(int fd, unsigned long cmd, struct aicfb_dmabuf_fd *fds);

功能说明

将 /dev/fb0 导出为一个 dmabuf fd

参数定义

CMD: AICFB_TO_DMABUF_FD

fds: 参考结构体 struct aicfb_dmabuf_fd 定义

返回 值

0:成功

-1:失败

注意事项

导出的 dmabuf fd 不支持 mmap 操作,无法得到一个有效的虚拟地址