Edit online

接口设计

28 Nov 2024
Read time: 6 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 操作,无法得到一个有效的虚拟地址