Edit online

MPP GE 接口说明

mpp_ge 接口说明请参考 MPP 对 GE 接口的封装

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

../images/ge_function_cmdq_5.png
1. 应用调用 MPP 框架

接口列表

1. mpp_ge_open
struct mpp_ge *mpp_ge_open();
功能说明

打开 ge 设备

参数定义
返回值 struct mpp_ge 结构体指针

NULL:失败

注意事项
2. mpp_ge_close
voidmpp_ge_close(structmpp_ge*ge);
功能说明 关闭 ge 设备
参数定义 ge: struct mpp_ge 结构体指针
返回值
注意事项
3. mpp_ge_get_mode
enumge_modempp_ge_get_mode(structmpp_ge*ge);
功能说明 获取 GE 模式
参数定义 ge: struct mpp_ge 结构体指针
返回值 enum ge_mode 枚举类型通过返回值可以获取 GE 是否工作在命令队列模式
注意事项
4. mpp_ge_fillrect
intmpp_ge_fillrect(structmpp_ge*ge,structge_fillrect*fillrect);
功能说明 矩形填充
参数定义 ge: struct mpp_ge 结构体指针 fillrect:struct ge_fillrect 结构体指针
返回值 0:成功;<0:失败
注意事项 normal(非命令队列)模式此接口是同步的。命令队列模式此接口是异步的:(1)当用户的缓存 buffer 足够时候仅把命令缓存在用户;(2)当用户的缓存空间不够的时候,先通过 write 接口,把缓存的命令全部写入驱动,然后再把当前命令缓存到用户 buffer

矩形填充在目标图像中指定一块矩形区域,填充颜色格式只能为 ARGB8888 格式, 在进行固定颜色填充的时候,不支持 scaler,不支持 90/180/270 度旋转,不支持镜像, 填充的颜色可以和目标层进行 blending 和 key。

../images/ge_function_fill2.png
2. 矩形填充
5. mpp_ge_bitblt
intmpp_ge_bitblt(structmpp_ge*ge,structge_bitblt*blt);
功能说明 位块搬移
参数定义 ge: struct mpp_ge 结构体指针 blt:struct ge_bitblt 结构体指针
返回值 0:成功;<0:失败
注意事项 normal(非命令队列)模式此接口是同步的。命令队列模式此接口是异步的:(1)当用户的缓存 buffer 足够时候仅把命令缓存在用户;(2)当用户的缓存空间不够的时候,先通过 write 接口,把缓存的命令全部写入驱动,然后再把当前命令缓存到用户 buffer
位块搬移可以分两种情况:
  1. 原图的矩形区域搬移到目标图的矩形区域中不进行缩放

    ../images/ge_function_blit2.png
    3. 不进行缩放
  2. 原图的矩形区域搬移到目标图的矩形区域中同时进行放大或者缩小

    ../images/ge_function_stretchblit2.png
    4. 进行缩放

    在进行位块搬移的同时可以进行 blending 和 key,同时也支持 90/180/270 度旋转和镜像。

6. mpp_ge_rotate
intmpp_ge_rotate(structmpp_ge*ge,structge_rotation*rot);
功能说明 任意角度旋转
参数定义 ge: struct mpp_ge 结构体指针 rot:struct ge_rotation 结构体指针
返回值 0:成功;<0:失败
注意事项 normal(非命令队列)模式此接口是同步的。命令队列模式此接口是异步的:(1)当用户的缓存 buffer 足够时候仅把命令缓存在用户;(2)当用户的缓存空间不够的时候,先通过 write 接口,把缓存的命令全部写入驱动,然后再把当前命令缓存到用户 buffer

进行任意角度旋转的时候可以进行 blending,并且可以指定原图和目标图的旋转中心,任意角度旋转原图和目标图都只支持 RGB 格式。 其中旋转角度传给驱动的是旋转角度的 sin 和 cos 值,为 2.12 定点数,其中小数部分 12bits ,则应用程序计算 sin 和 cos 值的方法如下:

../images/ge_function_rot12.png

7. mpp_ge_emit
iintmpp_ge_emit(structmpp_ge*ge);
功能说明 向驱动发送命令
参数定义 ge: struct mpp_ge 结构体指针
返回值 0:成功;<0:失败
注意事项 normal(非命令队列)模式此接口为空,不产生任何作用命令队列模式此接口通过 write 接口,把用户 buffer 中缓存的命令都写入驱动
8. mpp_ge_sync
iintmpp_ge_sync(structmpp_ge*ge);
功能说明 阻塞等待所有任务执行完成
参数定义 ge: struct mpp_ge 结构体指针
返回值 0:成功;<0:失败
注意事项 normal(非命令队列)模式此接口为空,不产生任何作用命令队列模式此接口通过调用 SYNC 接口,等待所有任务都完成