MPP GE 设计及接口说明
5 Dec 2024
Read time: 3 minute(s)
由于驱动支持非命令队列和命令队列两种模式,在提供的用户 MPP 接口中,对调用驱动的接口进行了封装,保持了统一的调用 API, 建议用户统一使用 MPP 中间层 API。在命令队列模式下,task 会先缓存在用户的 cmd buffer 中,当调用 mpp_ge_emit 后, 会通过 write 接口把命令写入内核的 ring buffer。
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_fillrect
功能说明 | 矩形填充 |
---|---|
参数定义 |
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。
mpp_ge_bitblt
功能说明 | 位块搬移 |
---|---|
参数定义 |
ge: struct mpp_ge 结构体指针
blt: struct ge_bitblt 结构体指针
|
返回值 |
0:成功
<0:失败
|
注意事项 |
normal(非命令队列)模式此接口是同步
的。
命令队列模式此接口是异步的:
(1)当用户的缓存 buffer 足够时候仅把
命令缓存在用户
(2)当用户的缓存空间不够的时候,先
通过 write 接口,把缓存的命令全部
写入驱动,然后再把当前命令缓存到
用户 buffer
|
位块搬移可以分两种情况:
-
原图的矩形区域搬移到目标图的矩形区域中不进行缩放
-
原图的矩形区域搬移到目标图的矩形区域中同时进行放大或者缩小
在进行位块搬移的同时可以进行 alpha blending 和 color key,同时也支持 90/180/270 度旋转和镜像。
mpp_ge_rotate
功能说明 | 任意角度旋转 |
---|---|
参数定义 |
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 值的方法如下:
mpp_ge_emit
功能说明 | 向驱动发送命令 |
---|---|
参数定义 |
ge: struct mpp_ge 结构体指针
|
返回值 |
0:成功
<0:失败
|
注意事项 |
normal(非命令队列)模式此接口为空,
不产生任何作用
命令队列模式此接口通过 write 接口,
把用户 buffer 中缓存的命令都写入驱动
|
mpp_ge_sync
功能说明 | 阻塞等待所有任务执行完成 |
---|---|
参数定义 |
ge: struct mpp_ge 结构体指针
|
返回值 |
0:成功
<0:失败
|
注意事项 |
normal(非命令队列)模式此接口为空,
不产生任何作用
命令队列模式此接口通过调用 IOC_GE_SYNC
接口,等待所有任务都完成
|