Edit online

MPP 对 GE 接口的封装

2 Dec 2024
Read time: 3 minute(s)

由于驱动支持非命令队列和命令队列两种模式,在提供的用户态 MPP 接口中,对调用驱动的接口进行了封装,保持了统一的调用 API, 建议用户统一使用 MPP 中间层 API。在命令队列模式下,task 会先缓存在用户态的 cmd buffer 中,当调用 mpp_ge_emit 后, 会通过 write 接口把命令写入内核的 ring buffer。


ge_call_mpp

1. 应用调用 MPP 框架
1. MPP 封装接口语法
接口名称 语法
mpp_ge_open
struct mpp_ge *mpp_ge_open();
mpp_ge_close
void mpp_ge_close(struct mpp_ge *ge);
mpp_ge_get_mode
enum ge_mode mpp_ge_get_mode(struct mpp_ge *ge);
mpp_ge_add_dmabuf
int mpp_ge_add_dmabuf(struct mpp_ge *ge, int dma_fd);
mpp_ge_rm_dmabuf
int mpp_ge_rm_dmabuf(struct mpp_ge *ge, int dma_fd);
mpp_ge_fillrect
int mpp_ge_fillrect(struct mpp_ge *ge, struct ge_fillrect *fillrect);
mpp_ge_bitblt
int mpp_ge_bitblt(struct mpp_ge *ge, struct ge_bitblt *blt);
mpp_ge_rotate
int mpp_ge_rotate(struct mpp_ge *ge, struct ge_rotation *rot);
mpp_ge_emit
nt mpp_ge_emit(struct mpp_ge *ge);
mpp_ge_sync
iint mpp_ge_sync(struct mpp_ge *ge);
2. MPP 封装接口功能描述
接口名称 功能说明 参数定义 返回值 注意事项
mpp_ge_open 打开 ge 设备 -

struct mpp_ge 结构体指针

NULL:失败

-
mpp_ge_close 关闭 ge 设备 ge: struct mpp_ge 结构体指针 - -
mpp_ge_get_mode 获取 GE 模式 ge: struct mpp_ge 结构体指针

enum ge_mode 枚举类型

通过返回值可以获取 GE 是否工作在命令队列模式

-
mpp_ge_add_dmabuf 添加 DMA buffer ge:struct mpp_ge 结构体指针

dma_fd:dma buffer fd

  • 0:成功
  • <0:失败
-
mpp_ge_rm_dmabuf 删除 DMA buffer ge:struct mpp_ge 结构体指针

dma_fd:dma buffer fd

  • 0:成功
  • <0:失败
-
mpp_ge_fillrect 矩形填充 ge: struct mpp_ge 结构体指针

fillrect:struct ge_fillrect 结构体指针

  • 0:成功
  • <0:失败
normal(非命令队列)模式此接口是同步的。命令队列模式此接口是异步的:
  • 当用户态的缓存 buffer 足够时候仅把命令缓存在用户态。
  • 当用户态的缓存空间不够的时候,先通过 write 接口,把缓存的命令全部写入驱动,然后再把当前命令缓存到用户态 buffer。
mpp_ge_bitblt 位块搬移 ge: struct mpp_ge 结构体指针

blt:struct ge_bitblt 结构体指针

  • 0:成功
  • <0:失败
normal(非命令队列)模式此接口是同步的。命令队列模式此接口是异步的:
  • 当用户态的缓存 buffer 足够时候仅把命令缓存在用户态。
  • 当用户态的缓存空间不够的时候,先通过 write 接口,把缓存的命令全部写入驱动,然后再把当前命令缓存到用户态 buffer。
mpp_ge_rotate 任意角度旋转 ge: struct mpp_ge 结构体指针

rot:struct ge_rotation 结构体指针

  • 0:成功
  • <0:失败
normal(非命令队列)模式此接口是同步的。命令队列模式此接口是异步的:
  • 当用户态的缓存 buffer 足够时候仅把命令缓存在用户态。
  • 当用户态的缓存空间不够的时候,先通过 write 接口,把缓存的命令全部写入驱动,然后再把当前命令缓存到用户态 buffer。
mpp_ge_emit 向驱动发送命令 ge: struct mpp_ge 结构体指针
  • 0:成功
  • <0:失败
normal(非命令队列)模式此接口为空,不产生任何作用。

命令队列模式此接口通过 write 接口,把用户态 buffer 中缓存的命令都写入驱动。

mpp_ge_sync 阻塞等待所有任务执行完成 ge: struct mpp_ge 结构体指针
  • 0:成功
  • <0:失败
normal(非命令队列)模式此接口为空,不产生任何作用。

命令队列模式此接口通过调用 SYNC 接口,等待所有任务都完成。