Edit online

MPP GE 设计及接口说明

5 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 框架

mpp_ge_open

1.
功能说明 打开 ge 设备
参数定义
返回值
struct mpp_ge 结构体指针
NULL:失败
注意事项

mpp_ge_close

2.
功能说明 关闭 ge 设备
参数定义
ge: struct mpp_ge 结构体指针
返回值
注意事项

mpp_ge_get_mode

3.
功能说明 获取 GE 模式
参数定义
ge: struct mpp_ge 结构体指针
返回值
enum ge_mode 枚举类型
通过返回值可以获取 GE 是否工作在命令队列
模式
注意事项

mpp_ge_fillrect

4.
功能说明 矩形填充
参数定义
ge: struct mpp_ge 结构体指针
fillrect: struct ge_fillrect 结构体指针
返回值
0:成功
<0:失败
注意事项
normal(非命令队列)模式此接口是同步
的。
命令队列模式此接口是异步的:
(1)当用户的缓存 buffer 足够时候仅把
命令缓存在用户
(2)当用户的缓存空间不够的时候,先
通过 write 接口,把缓存的命令全部
写入驱动,然后再把当前命令缓存到
用户 buffer

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


ge_function_fill1

2. 矩形填充

mpp_ge_bitblt

5.
功能说明 位块搬移
参数定义
ge: struct mpp_ge 结构体指针
blt: struct ge_bitblt 结构体指针
返回值
0:成功
<0:失败
注意事项
normal(非命令队列)模式此接口是同步
的。
命令队列模式此接口是异步的:
(1)当用户的缓存 buffer 足够时候仅把
命令缓存在用户
(2)当用户的缓存空间不够的时候,先
通过 write 接口,把缓存的命令全部
写入驱动,然后再把当前命令缓存到
用户 buffer

位块搬移可以分两种情况:

  1. 原图的矩形区域搬移到目标图的矩形区域中不进行缩放


    ge_function_blit1

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


    ge_function_stretchblit1

    4. 进行缩放

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

mpp_ge_rotate

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

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


ge_function_rot

mpp_ge_emit

7.
功能说明 向驱动发送命令
参数定义
ge: struct mpp_ge 结构体指针
返回值
0:成功
<0:失败
注意事项
normal(非命令队列)模式此接口为空,
不产生任何作用
命令队列模式此接口通过 write 接口,
把用户 buffer 中缓存的命令都写入驱动

mpp_ge_sync

8.
功能说明 阻塞等待所有任务执行完成
参数定义
ge: struct mpp_ge 结构体指针
返回值
0:成功
<0:失败
注意事项
normal(非命令队列)模式此接口为空,
不产生任何作用
命令队列模式此接口通过调用 IOC_GE_SYNC
接口,等待所有任务都完成