5.14. 二维图形处理 - 2D GPU
5.14.1. 模块描述
2D GPU 支持
位块
传输( BitBlt) 拉伸
位 图 传输( Stretch Blit) 矩形
填充 和 清除( Rectangle fill and clear) 单次
滤波 位块 传输 ( One Pass Filter Blit) 透明度
混合( Alpha blending) 支持
顺时针 或 逆时针 方向 的 90 ° 、 180 ° 、 270 ° 旋转 支持
镜像 翻转 支持 ROP(光栅
操作码) 支持
裁剪 支持
色彩 空间 转换,即 YUV 转 RGB 和 RGB 转 YUV( Color Space Convert) 多源
融合
注意: 使用 GPU2D 做 YUV 之间
YUV 与 RGB 之间
格式 转换 是 存在 误差 的 由于
硬件 在 完成 YUV 格式 转换 时(比如 YUYV 转 NV12 ),先 做 YUYV 转 RGB,再 从 RGB 转换 为 NV12
5.14.1.1. 基础规格
最大
分辨率 为 4k 处理
性能 4k@90fps
注意: 4k 指
5.14.1.2. 支持格式
| 格式 | 输入 | 输出 |
|---|---|---|
| A8 | Y | Y |
| R8 | Y | Y |
| A1R5G5B5 | Y | Y |
| A4R4G4B4 | Y | Y |
| X1R5G5B5 | Y | Y |
| X4R4G4B4 | Y | Y |
| R5G6B5 | Y | Y |
| RG16 | Y | Y |
| X8R8G8B8 | Y | Y |
| A8R8G8B8 | Y | Y |
| A2R10G10B10 | Y | Y |
| YUY2 (packed YUV422) | Y | Y |
| UYVY (packed YUV422) | Y | Y |
| YV12 (planar YUV420) | Y | Y |
| I010(10bit planar YUV420) | Y | Y |
| NV12 (semi-planar YUV420) | Y | Y |
| NV16 (semi-planar YUV422) | Y | Y |
| P010(semi-planar YUV420) | Y | Y |
| NV12-10bit (semi-planar YUV420) | Y | Y |
| NV16-10bit (semi-planar YUV422) | Y | N |
| Planar RGB888/YUV444(8bit) | Y | Y |
Y:表示
支持 N:表示
不 支持
5.14.1.3. 对齐要求
表格
平面
数量 :定义图像 数据 被 分成 几个 部分。 平面
每 :定义像素 位数 每个 平面 中 每个 像素 使用 的 位数。 水平
像素 :定义宽度 / 垂直 像素 高度 每个 平面 中 像素 在 水平 方向 和 垂直 方向 的 布局。 每
平面 :定义行 对齐 每 一行 数据 的 内存 对齐。 每
平面 :定义地址 对齐 平面 起始 地址 的 内存 对齐。
| 格式 |
BPP | 平面 |
平面 |
水平 |
垂直 |
每 |
每 |
|---|---|---|---|---|---|---|---|
| A8 | 8 | 1 | 8, 0, 0 | 1 | 1 | 1, 0, 0 | 1, 0, 0 |
| A1R5G5B5 | 16 | 1 | 16, 0, 0 | 1 | 1 | 2, 0, 0 | 2, 0, 0 |
| A4R4G4B4 | 16 | 1 | 16, 0, 0 | 1 | 1 | 2, 0, 0 | 2, 0, 0 |
| X1R5G5B5 | 16 | 1 | 16, 0, 0 | 1 | 1 | 2, 0, 0 | 2, 0, 0 |
| X4R4G4B4 | 16 | 1 | 16, 0, 0 | 1 | 1 | 2, 0, 0 | 2, 0, 0 |
| R5G6B5 | 16 | 1 | 16, 0, 0 | 1 | 1 | 2, 0, 0 | 2, 0, 0 |
| RG16 | 16 | 1 | 16, 0, 0 | 1 | 1 | 2, 0, 0 | 2, 0, 0 |
| X8R8G8B8 | 32 | 1 | 32, 0, 0 | 1 | 1 | 4, 0, 0 | 4, 0, 0 |
| A8R8G8B8 | 32 | 1 | 32, 0, 0 | 1 | 1 | 4, 0, 0 | 4, 0, 0 |
| A2R10G10B10 | 32 | 1 | 32, 0, 0 | 1 | 1 | 4, 0, 0 | 4, 0, 0 |
| YUYV | 16 | 1 | 16, 0, 0 | 2 | 1 | 4, 0, 0 | 4, 0, 0 |
| UYVY | 16 | 1 | 16, 0, 0 | 2 | 1 | 4, 0, 0 | 4, 0, 0 |
| YV12 | 24 | 3 | 8, 8, 8 | 2 | 2 | 64, 32, 32 | 64, 64, 64 |
| I010 | 48 | 3 | 16, 16, 16 | 2 | 2 | 128, 64, 64 | 128, 64, 64 |
| NV12 | 16 | 2 | 8, 8, 0 | 2 | 2 | 64, 64, 0 | 64, 64, 0 |
| NV16 | 16 | 2 | 8, 8, 0 | 2 | 1 | 64, 64, 0 | 64, 64, 0 |
| P010 | 32 | 2 | 16, 16, 0 | 2 | 2 | 128, 128, 0 | 128, 128, 0 |
| NV12_10BIT | 24 | 2 | 16, 8, 0 | 4 | 2 | 80, 80, 0 | 80, 80, 0 |
| NV16_10BIT | 32 | 2 | 16, 16, 0 | 2 | 1 | 40, 40, 0 | 80, 80, 0 |
| Planar RGB888 | 24 | 3 | 8, 8, 8 | 1 | 1 | 4, 4, 4 | 4, 4, 4 |
表格
平面每像素位数 ( BPP)
定义:表示
每个 平面 中 每个 像素 使用 的 位数。 解释:
对于
单 平面 格式,如 A8R8G8B8 ,每个 像素 的 位数 是 32 位,因此 平面 每 像素 位数 为 32 。 对于
多 平面 格式,如 YV12 , Y 平面 是 8 位, U 平面 和 V 平面 也 是 8 位。 每个
平面 的 位数 可以 不同,如 NV12 的 Y 平面 是 8 位,而 UV 平面 也 是 8 位,但 合在一起 仍然 为 16 位。
平面数量
定义:指
图像 数据 在 内存 中 被 分成 的 独立 部分 数量。 解释:
图像
数据 可以 存储 在 一个 或 多个 平面 中。平面 是 指 图像 数据 的 一个 独立 部分,用于 存储 特定 的 颜色 分量 或 亮度 / 色度 信息。 单
平面 :图像格式 数据 全部 存在 一个 平面 中,通常 用于 RGB 格式,如 A8R8G8B8 、 RGB888 。 多
平面 :图像格式 数据 被 分成 多个 平面 存储,通常 用于 YUV 格式,如 YV12 、 NV12 等。 双
平面 :如 NV12 , Y 分量在 一个 平面, UV 分量 在 另 一个 平面。 三
平面 :如 YV12 , Y、 U、 V 分量分别 存储 在 三个 独立 的 平面 中。
水平像素宽度( aWidthPixel)
定义:指
图像 中 每个 平面 在 水平 方向 上 所 包含 的 像素数。 解释:
通常
为 1 ,表示 每个 像素 是 独立 存储 的。 在
某些 YUV 格式 中,色度 分量 的 像素 宽度 可能 是 亮度 分量 的 一半,比如 YUV 4:2:0 格式 中, U 和 V 平面 的 宽度 只有 Y 平面 的 一半。
垂直像素高度( aHeightPixel)
定义:指
图像 中 每个 平面 在 垂直 方向 上 所 包含 的 像素数。 解释:
和
水平 像素 宽度 类似,通常 为 1 。 但是,在
一些 YUV 格式(如 YUV 4:2:0 )中,色度 分量 的 高度 是 亮度 分量 的 一半,这样 可以 减少 存储空间。
每平面行对齐( aStrideByte)
定义:指在
存储 每 一行 图像 数据 时,确保 数据 行在 内存 中 的 对齐 字节数。 解释:
目的
是 为了 提高 访问 效率,在 CPU 或 GPU 读取数据 时 减少 内存 访问 的 不连续性。 例如, NV12 的 Y 平面
和 UV 平面 的 字节 对齐 为 64 字节,这 意味着 每 一行 的 数据 长度 会 被 填充 至 64 的 倍数。
每平面地址对齐( aAddressByte)
定义:指
每个 平面 的 起始 地址 在 内存 中 应当 对齐 的 字节数。 解释:
用于
确保 图像 平面 的 起始 地址 是 某个 特定 字节 边界 的 倍数(如 16 字节、 32 字节 或 64 字节),从而 提高 内存 访问 的 效率。 例如, NV12 格式
的 Y 和 UV 平面 通常 需要 64 字节 的 地址 对齐,这 可以 减少 内存 访问 时间。
5.14.2. 参考示例
GPU 2D 部分
示例 代码 可以 参考 sample_gpu_2d 章节
5.14.3. API 参考
| API 接口 | 接口 |
|---|---|
| n2d_open | 打开 GPU2D 模块,一个 |
| n2d_close | 关闭 GPU2D 模块 |
| n2d_commit | 将 |
| n2d_commit_ex | 将 |
| n2d_allocate | 申请 |
| n2d_free | 释放 n2d_allocate 申请 |
| n2d_map | 将 |
| n2d_unmap | 释放n2d_map 映射 |
| n2d_is_feature_support | 查询 |
| n2d_blit | 执行 位块 |
| n2d_filterblit | 执行 位块 |
| n2d_multisource_blit | 多个 |
| n2d_fill | 用 |
| n2d_set | 设置 |
5.14.4. API 接口说明
5.14.4.1. n2d_open
【函数声明】
n2d_error_t n2d_open(n2d_void)
【功能描述】
如果
想 使用 N2D 功能,必须 先 调用 n2d_open获取 GPU 的上下文 和 资源。
【参数描述】
无
【返回值】
成功: N2D_SUCCESS 0
失败:异常
为 负值 错误码,参考 返回值 说明
5.14.4.2. n2d_close
【函数声明】
n2d_error_t n2d_close(n2d_void)
【功能描述】
这个
函数 会 将 之前 将 n2d_open打开的 上下文 关闭,然后 销毁 所有 资源,并 释放 所有 内存。 如果
这个 函数 释放 了 GPU 硬件 上面 最后 的 资源, GPU 硬件 将会 被 关闭 。
【参数描述】
无
【返回值】
成功: N2D_SUCCESS 0
失败:异常
为 负值 错误码,参考 返回值 说明
5.14.4.3. n2d_commit
【函数声明】
n2d_error_t n2d_commit(n2d_void)
【功能描述】
将
待 执行 的 指令 缓冲区 送入 GPU 硬件。 该
函数 。会 一直 堵塞,直到 GPU 硬件 完成 处理 才 返回
【参数描述】
无
【返回值】
成功: N2D_SUCCESS 0
失败:异常
为 负值 错误码,参考 返回值 说明
5.14.4.4. n2d_commit_ex
【函数声明】
n2d_error_t n2d_commit_ex(n2d_bool_t stall)
【功能描述】
将
待 执行 的 指令 缓冲区 送入 GPU 硬件。
【参数描述】
[IN]
stall当
stall为N2D_TRUE时,该函数 会 一直 堵塞,直到 GPU 硬件 完成 。处理 才 返回 当
stall位N2D_FALSE时,该函数 会 立刻 返回。
【返回值】
成功: N2D_SUCCESS 0
失败:异常
为 负值 错误码,参考 返回值 说明
5.14.4.5. n2d_allocate
【函数声明】
n2d_error_t n2d_allocate (n2d_buffer_t *buffer)
【功能描述】
这个
函数 会 申请 一块 内存空间,用于 存储 GPU 操作 时 的 上下文 和 资源。 申请
空间 的 高 宽 和 格式 等 都 要 提前 在 buffer指向的 结构 体 里面 配置 好。 这个
函数 要 和 n2d_free配对使用。
【参数描述】
[IN]
buffer指向
n2d_buffer_t结构体 的 指针,该 结构 体 应该 提前 配置 好 高 宽 和 格式。
【返回值】
成功: N2D_SUCCESS 0
失败:异常
为 负值 错误码,参考 返回值 说明
5.14.4.6. n2d_free
【函数声明】
n2d_error_t n2d_free (n2d_buffer_t *buffer)
【功能描述】
这个
函数 会 将 之前 由 n2d_allocate申请的 buffer内存资源 释放。 这个
函数 要 和 n2d_allocate配对使用。
【参数描述】
[IN]
buffer指向
n2d_buffer_t结构体 的 指针,该 结构 体 需要 使用 过 n2d_allocate申请内存。
【返回值】
成功: N2D_SUCCESS 0
失败:异常
为 负值 错误码,参考 返回值 说明
5.14.4.7. n2d_map
【函数声明】
n2d_error_t n2d_map (n2d_buffer_t *buffer)
【功能描述】
这个
函数 用于 将 用户 空间 申请 到 的 内存 地址映射 给 GPU 使用。 内存
必须 是 连续 的。 需要
和 n2d_unmap成对 使用。
【参数描述】
[IN]
buffer指向
n2d_buffer_t结构体 的 指针,需要 配置 好 高 宽 和 格式。 如果
内存地址 是 虚拟地址,则 将 memory属性赋值 为 虚拟地址,并 将 gpu属性置 为 0 。 如果
内存地址 是 物理地址,则 将 gpu属性赋值 为 物理地址,并 将 memory属性置 为 0 。
【返回值】
成功: N2D_SUCCESS 0
失败:异常
为 负值 错误码,参考 返回值 说明
5.14.4.8. n2d_unmap
【函数声明】
n2d_error_t n2d_unmap (n2d_buffer_t *buffer)
【功能描述】
这
函数 会 释放 之前 由 n2d_map映射的 内存,并 将 映射 关系 解除。 需要
和 n2d_map成对 使用。
【参数描述】
[IN]
buffer指向
n2d_buffer_t结构体 的 指针,需要 之前 被 n2d_map函数使用 过。
【返回值】
成功: N2D_SUCCESS 0
失败:异常
为 负值 错误码,参考 返回值 说明
5.14.4.9. n2d_is_feature_support
【函数声明】
n2d_bool_t n2d_is_feature_support (n2d_feature_t feature)
【功能描述】
这个
函数 会 查询 硬件 是否 支持 传入 的 功能。
【参数描述】
[IN]
feature指向
n2d_feature_t枚举类型 的 指针,详情 可见 n2d_feature_t介绍。
【返回值】
成功:支持
失败:其他,不
支持
5.14.4.10. n2d_blit
【函数声明】
n2d_error_t n2d_blit(n2d_buffer_t *dst_buf, n2d_rectangle_t *dst_rect, n2d_buffer_t *src_buf, n2d_rectangle_t *src_rect, n2d_blend_t mode)
【功能描述】
这是
一个 blit函数。blit操作使用 源 缓冲区 和 目标 缓冲区 进行。源 缓冲区 和 目标 缓冲区 结构 使用 n2d_buffer_t结构定义。 [IN]
blit将源图像 的 指定 区域 复制到 目标 缓冲区 的 指定 区域,支持 混合、旋转 和 格式 转换。如果 区域 。大小 不同,将 自动 执行 缩放 动作 该
函数 会 等待 硬件 完成,即 它 是 同步 的。一次 只能 有 一个 blit函数处于 活动状态。驱动程序 不 支持 多 上下文,因此 当前 的 blit函数必须 完成 并 关闭,然后 才能 初始化 另 一个 blit函数。[IN]
blit函数可以 与 混合 功能 一起 使用,也 可以 不 使用 混合 功能。 [IN]
blit函数可以 通过 为源 缓冲区 和 目标 缓冲区 指定 适当 的 格式 来 进行 颜色 转换。 当源
或 目标 缓冲区 格式 为 N2D_YUYV、N2D_UYVY、N2D_YV12、N2D_I420、N2D_NV12、N2D_NV21、N2D_NV16或N2D_NV61时,源矩形 大小 和 目标 矩形 大小 必须 相等,否则 将 返回 N2D_INVALID_ARGUMENT,并且ROP或透明度 将 被 忽略。
【参数描述】
[IN]
dst_buf指向
目标 缓冲区 的 n2d_buffer_t结构体 指针。 blit函数的 有效 目标 格式 包括 n2d_buffer_format_t枚举中 的 大多数 颜色 格式。 如果
源 缓冲区 格式 为 N2D_YUYV、N2D_UYVY、N2D_YV12、N2D_I420、N2D_NV12、N2D_NV21、N2D_NV16或N2D_NV61,则源 矩形 大小 和 目标 矩形 大小 必须 相等,否则 n2d_blit将返回 N2D_INVALID_ARGUMENT。
[IN]
src_buf指向
描述 blit源的 n2d_buffer_t结构体 指针。 blit函数的 有效 源 格式 包括 n2d_buffer_format_t枚举中 的 所有 颜色 格式。
[IN]
dst_rect可
选 参数,指向 定义 目标 缓冲区 内 区域 的 n2d_rectangle_t结构体 指针。如果 未指定 此 矩形,则 整个 目标 缓冲区 将 用作 目标 区域。
[IN]
src_rect可
选 参数,指向 定义 源 缓冲区 内 区域 的 n2d_rectangle_t结构体 指针。如果 未指定 此 矩形,则 整个 源 缓冲区 将 用作 源 区域。如果 源 缓冲区 格式 为 N2D_YUYV或N2D_UYVY,则源 矩形 大小 和 目标 矩形 大小 必须 相等,否则 n2d_blit将返回 N2D_INVALID_ARGUMENT。
[IN]
mode指定
要 应用 于 每个 图像 像素 的 硬件 支持 的 混合 模式 之一。如果 不 需要 混合,则 将 此值 设置 为 N2D_BLEND_NONE (0)。参见n2d_blend_t枚举。
【返回值】
成功: N2D_SUCCESS 0
失败:异常
为 负值 错误码,参考 返回值 说明
5.14.4.11. n2d_filterblit
【函数声明】
n2d_error_t n2d_filterblit(n2d_buffer_t *dst_buf, n2d_rectangle_t *dst_rect, n2d_rectangle_t *dst_subrect, n2d_buffer_t *src_buf, n2d_rectangle_t *src_rect, n2d_blend_t mode)
【功能描述】
[IN]
n2d_filterblit使用 FIR 重采样 滤波器 进行 高质量 的 图像 缩放。 如果
源 图像 的 指定 区域 和 目标 缓冲区 的 指定 区域 大小 相同, n2d_filterblit将作为 位块 传输( bitblit)工作。支持 混合、旋转。 该
函数 会 等待 硬件 完成,即 它 是 同步 的。一次 只能 有 一个 n2d_filterblit函数处于 活动状态。驱动程序 不 支持 多 上下文,因此 当前 的 n2d_filterblit函数必须 完成 并 关闭,然后 才能 初始化 另 一个 n2d_filterblit函数。[IN]
n2d_filterblit函数可以 与 混合 功能 一起 使用,也 可以 不 使用 混合 功能。
【参数描述】
[IN]
dst_buf指向
目标 缓冲区 的 n2d_buffer_t结构体 指针。 n2d_filterblit函数的 有效 目标 格式 包括 n2d_buffer_format_t枚举中 的 大多数 颜色 格式。
[IN]
dst_rect可
选 参数,指向 定义 目标 缓冲区 内 子 区域 的 n2d_rectangle_t结构体 指针。如果 未指定 此 矩形,则 整个 目标 缓冲区 将 用作 目标 区域。
[IN]
dst_subrect指向
n2d_rectangle_t结构体 的 指针,提供 目标 区域 内 子 区域 的 坐标。如果 dst_subrect为N2D_NULL,则使用 dst_rect设置的 坐标 渲染 完整 图像。如果 dst_subrect不是N2D_NULL,且dst_subrect和dst_rect不相等,则 假定 dst_subrect在dst_rect内,并仅 用于 渲染 子 区域。
[IN]
src_buf指向
描述 n2d_filterblit源的 n2d_buffer_t结构体 指针。 n2d_filterblit函数的 有效 源 格式 包括 n2d_buffer_format_t枚举中 的 所有 颜色 格式。
[IN]
src_rect可
选 参数,指向 定义 源 缓冲区 内 子 区域 的 n2d_rectangle_t结构体 指针。如果 未指定 此 矩形,则 整个 源 缓冲区 将 用作 源 区域。
[IN]
mode指定
要 应用 于 每个 图像 像素 的 硬件 支持 的 混合 模式 之一。如果 不 需要 混合,则 将 此值 设置 为 N2D_BLEND_NONE (0)。参见n2d_blend_t枚举。
【返回值】
成功: N2D_SUCCESS 0
失败:异常
为 负值 错误码,参考 返回值 说明
5.14.4.12. n2d_multisource_blit
【函数声明】
n2d_error_t n2d_multisource_blit(n2d_buffer_t *dst_buf, n2d_int32_t mask)
【功能描述】
该
函数 使用 多个 源 进行 多源 位块 传输( multi-blit)。
【参数描述】
[IN]
dst_buf指向
定义 目标 缓冲区 的 n2d_buffer_t结构体 指针。
[IN]
mask指示
八个 可 能源 中 的 哪些 源 将 用于 执行 多源 位块 传输( MultiSrcBlit,即 合成 操作)。位 N 表示 源 索引 N。
【返回值】
成功: N2D_SUCCESS 0
失败:异常
为 负值 错误码,参考 返回值 说明
5.14.4.13. n2d_fill
【函数声明】
n2d_error_t n2d_fill(n2d_buffer_t *dest, n2d_rectangle_t *rect, n2d_color_t color, n2d_blend_t mode)
【参数描述】
[IN]
dest指向
要 填充 的 目标 缓冲区 的 n2d_buffer_t结构体 指针。
[IN]
rect指向
指定 填充 区域 的 n2d_rectangle_t结构体 指针。如果 矩形 为 NULL,则 整个 目标 缓冲区 将 被 指定 颜色 填充。
[IN]
color用于
填充 / 清除 缓冲区 的 颜色 值。参见 n2d_color_t。
[IN]
mode应用
于 每个 像素 的 混合 模式。如果 不 需要 混合,则 将 此值 设置 为 N2D_BLEND_NONE (0)。参见n2d_blend_t枚举。
【功能描述】
该
函数 用 指定 的 颜色 填充 或 清除 指定 的 缓冲区(整个 缓冲区 或 缓冲区 中 的 部分 矩形 区域)。 该
函数 会 等待 硬件 完成,即 它 是 同步 的。
【返回值】
成功: N2D_SUCCESS 0
失败:异常
为 负值 错误码,参考 返回值 说明
5.14.4.14. n2d_set
【函数声明】
n2d_error_t n2d_set(n2d_state_config_t *config)
【功能描述】
该
函数 用于 设置 配置。
【参数描述】
[IN]
config设置
某些 功能 的 属性 状态。参见 结构 体 n2d_state_config_t以了解 支持 的 值。
【返回值】
成功: N2D_SUCCESS 0
失败:异常
为 负值 错误码,参考 返回值 说明
5.14.5. 数据结构
5.14.5.1. 类型定义
| Name | Typedef |
|---|---|
| n2d_bool_t | int |
| n2d_int8_t | char |
| n2d_int16_t | short |
| n2d_uint16_t | unsigned short |
| n2d_int_t | int |
| n2d_int32_t | int |
| n2d_uint_t | unsigned int |
| n2d_uint32_t | unsigned int |
| n2d_uint64_t | unsigned long long |
| n2d_float_t | float |
| n2d_double_t | double |
| n2d_string | char* |
| n2d_void | void |
| n2d_const_string | const char* |
| n2d_size_t | unsigned long long (64-bit OS) |
| n2d_uintptr_t | unsigned long long (64-bit OS) |
| n2d_pointer | void* |
| n2d_color_t | uint32_t |
5.14.5.2. 枚举类型
n2d_error_t
说明
Nano2D API 函数
通过 n2d_error_返回状态 码,如果 成功,将 返回 N2D_SUCCESS。N2D_SUCCESS设置为 零,因此 如果 任何 函数 返回 非零值,则 表示 发生 了 错误。可能 的 错误 值 包括 下表中 的 值。
| n2d_error_t value | String Values | Description |
|---|---|---|
| 0 | N2D_SUCCESS | 成功,无 |
| 1 | N2D_INVALID_ARGUMENT | 指定 |
| 2 | N2D_OUT_OF_MEMORY | 内存不足 |
| 3 | N2D_NO_CONTEXT | 没有 |
| 4 | N2D_TIMEOUT | 等待 |
| 5 | N2D_OUT_OF_RESOURCES | 系统资源 |
| 6 | N2D_GENERIC_IO | 无法 |
| 7 | N2D_NOT_SUPPORTED | 请求 |
| 8 | N2D_ERROR_HEAP_CORRUPTED | MMU 表 |
| 9 | N2D_NOT_ALIGNED | 未 |
| 10 | N2D_NOT_FOUND | 未找到 |
| 11 | N2D_INTERRUPTED | 被 |
| 12 | N2D_MEMORY_LEAK | 内存 |
n2d_blend_t
说明
此
枚举 定义 了 HAL 支持 的 混合 模式。 S和D代表源 和 目标 颜色 通道, Sa和Da代表源 和 目标 的 alpha 通道。
| n2d_blend_t value | String Values | Description |
|---|---|---|
| 0 | N2D_BLEND_NONE | S,无 |
| 1 | N2D_BLEND_SRC_OVER | S + (1 - Sa) * D |
| 2 | N2D_BLEND_DST_OVER | (1 – Da) * S + D |
| 3 | N2D_BLEND_SRC_IN | Da * S |
| 4 | N2D_BLEND_DST_IN | Sa * D |
| 5 | N2D_BLEND_ADDITIVE | S + D |
| 6 | N2D_BLEND_SUBTRACT | D * (1 – S) |
n2d_buffer_format_t
说明
指定
用于 缓冲区 的 颜色 格式 像素 类型。
| n2d_buffer_format_t value | String Values | Description |
|---|---|---|
| 0x100 | N2D_RGBA8888 | 32-bit RGBA 格式,每个 |
| 0x101 | N2D_RGBX8888 | 32-bit RGBX 格式,每个 |
| 0x200 | N2D_R1010B10A2 | 32-bit RGBA 格式,每个 |
| 0x300 | N2D_R5G5B5A1 | 16-bit RGBA 格式,每个 |
| 0x301 | N2D_R5G5B5X1 | 16-bit RGBX 格式,每个 |
| 0x400 | N2D_RGBA4444 | 16-bit RGBA 格式,每个 |
| 0x401 | N2D_RGBX4444 | 16-bit RGBX 格式,每个 |
| 0x402 | N2D_RGB565 | 16-bit RGB 格式,每个 |
| 0x403 | N2D_RGB888 | 24-bit RGB 格式,每个 |
| 0x404 | N2D_RGB888I | 24-bit RGB 格式,每个 |
| 0x405 | N2D_RGB161616I | 48-bit RGB 格式,每个 |
| 0x406 | N2D_BGRA8888 | 32-bit RGBA 格式,每个 |
| 0x407 | N2D_BGRX8888 | 32-bit RGBX 格式,每个 |
| 0x408 | N2D_B10G10R10A2 | 32-bit RGBA 格式,每个 |
| 0x409 | N2D_BGR565 | 16-bit RGB 格式,每个 |
| 0x40A | N2D_B5G5R5A1 | 16-bit RGBA 格式,每个 |
| 0x40B | N2D_B5G5R5X1 | 16-bit RGBX 格式,每个 |
| 0x40C | N2D_BGRA4444 | 16-bit RGBA 格式,每个 |
| 0x40D | N2D_BGRX4444 | 16-bit RGBX 格式,每个 |
| 0x40E | N2D_ABGR8888 | 32-bit RGBA 格式,每个 |
| 0x40F | N2D_XBGR8888 | 32-bit RGBX 格式,每个 |
| 0x410 | N2D_A2B10G10R10 | 32-bit RGBA 格式,每个 |
| 0x411 | N2D_A1B5G5R5 | 16-bit RGBA 格式,每个 |
| 0x412 | N2D_X1B5G5R5 | 16-bit RGBX 格式,每个 |
| 0x413 | N2D_ABGR4444 | 16-bit RGBA 格式,每个 |
| 0x414 | N2D_XBGR4444 | 16-bit RGBX 格式,每个 |
| 0x415 | N2D_ARGB8888 | 32-bit RGBA 格式,每个 |
| 0x416 | N2D_XRGB8888 | 32-bit RGBX 格式,每个 |
| 0x417 | N2D_A2R10G10B10 | 32-bit RGBA 格式,每个 |
| 0x418 | N2D_A1R5G5B5 | 16-bit RGBA 格式,每个 |
| 0x419 | N2D_X1R5G5B5 | 16-bit RGBX 格式,每个 |
| 0x41A | N2D_ARGB4444 | 16-bit RGBA 格式,每个 |
| 0x41B | N2D_XRGB4444 | 16-bit RGBX 格式,每个 |
| 0x500 | N2D_RGB888_PLANAR | planar RGB 格式,每个 |
| 0x501 | N2D_RGB888I_PLANAR | planar RGB 格式,每个 |
| 0x502 | N2D_RGB161616I_PLANAR | planar RGB 格式,每个 |
| 0x600 | N2D_A8 | 8-bit alpha 格式。没有 RGB 值。 |
| 0x700 | N2D_YUYV | 32-bit packed YUV 格式,每 2 个 |
| 0x701 | N2D_UYVY | 32-bit packed YUV 格式,每 2 个 |
| 0x702 | N2D_AYUV | 3 planar YUV 格式,无 alpha。 Y/U/V0 在 7:0 位, Y/U/V1 在 15:8 位, Y/U/V2 在 23:16 位, Y/U/V3 在 31:24 位。 |
| 0x703 | N2D_YV12 | 12 bpp planar YUV4:2:0 格式,每个 |
| 0x704 | N2D_I420 | planar YUV 格式, 8 位 Y planar ,随后 |
| 0x705 | N2D_NV12 | 12 bpp planar YUV 4:2:0 格式,每个 |
| 0x706 | N2D_NV21 | 12 bpp planar YUV 4:2:0 格式,与 NV12 相同,但 U 和 V 在 |
| 0x707 | N2D_NV16 | 16 bpp planar YUV 4:2:2 格式,每个 |
| 0x708 | N2D_NV61 | 16 bpp planar YUV 4:2:2 格式,与 NV16 相同,但 U 和 V 层 |
| 0x709 | N2D_NV12_10BIT | 10-bit YUV 格式,每个 |
| 0x70A | N2D_NV21_10BIT | 10-bit YUV 格式,每个 |
| 0x70B | N2D_NV16_10BIT | 10-bit YUV 格式,每个 |
| 0x70C | N2D_NV61_10BIT | 10-bit YUV 格式,每个 |
| 0x70D | N2D_P010_MSB | P010 ( YUV 4:2:0 2planar ,每个 |
n2d_cache_mode_t
说明
指定
缓存 模式。 使用
的 结构 体: n2d_buffer_t常量
定义: #define N2D_CACHEMODE_DEFAULT N2D_CACHE_256
| n2d_cache_mode_t value | String Values | Description |
|---|---|---|
| 0 | N2D_CACHE_AUTO | |
| 0x1 | N2D_CACHE_128 | |
| 0x2 | N2D_CACHE_256 | |
| 0x3 | N2D_CACHE_ALL | N2D_CACHE_128 或 N2D_CACHE_256 |
n2d_core_id_t
说明
指定
多处理器 设计 中 的 核心 ID。 使用
的 函数: n2d_switch_core
| n2d_core_id_t value | String Values | Description |
|---|---|---|
| 0 | N2D_CORE_0 | |
| 1 | N2D_CORE_1 | |
| 2 | N2D_CORE_2 | |
| 3 | N2D_CORE_3 |
n2d_csc_mode_t
说明
指定
颜色 空间 转换 模式。 使用
的 结构 体: n2d_csc_config_t
| n2d_csc_mode_t value | String Values | Description |
|---|---|---|
| 0 | N2D_CSC_BT709 | |
| 0x1 | N2D_CSC_BT601 | |
| 0x2 | N2D_CSC_BT2020 | |
| 0x4 | N2D_CSC_USER_DEFINED | |
| 0x5 | N2D_CSC_USER_DEFINED_CLAMP | |
| 0x40000000 | N2D_CSC_SET_FULL_RANGE | |
| 0x80000000 | N2D_CSC_DST |
注意:在
如果
/*CSC SETTING*/
n2d_state_config_t csc_com = {0};
csc_com.state = N2D_SET_CSC;
csc_com.config.csc.cscMode = N2D_CSC_SET_FULL_RANGE | N2D_CSC_BT709; // 设置为 BT709 ,灰阶范围为 full range
csc_com.config.csc.userCSCMode = N2D_CSC_YUV_TO_RGB;
n2d_set(&csc_com);
csc_com.config.csc.userCSCMode = N2D_CSC_RGB_TO_YUV;
n2d_set(&csc_com);
/*END*/
这个
n2d_feature_t
说明
指定
可能 在 硬件 中 可用 和 支持 的 功能。 使用
的 函数: n2d_is_feature_support
| n2d_feature_t value | String Values | Description |
|---|---|---|
| 0 | N2D_FEATURE_YUV420_OUTPUT | 支持 YUV420 输出 |
| 1 | N2D_FEATURE_2D_10BIT_OUTPUT_LINEAR | 支持 10 位 |
| 2 | N2D_FEATURE_MAJOR_SUPER_TILE | |
| 3 | N2D_FEATURE_DEC400_COMPRESSION | 支持 DEC400 压缩 |
| 4 | N2D_FEATURE_ANDROID_ONLY | |
| 5 | N2D_FEATURE_2D_TILING | 支持 TILING |
| 6 | N2D_FEATURE_2D_MINOR_TILING | |
| 7 | N2D_FEATURE_DEC_COMPRESSION | 支持 DEC 压缩 |
| 8 | N2D_FEATURE_2D_MULTI_SOURCE_BLT | 支持 |
| 9 | N2D_FEATURE_BGR_PLANAR | 支持 BGR8888 和 AYUV 格式 |
| 10 | N2D_FEATURE_SCALER | 支持 |
| 11 | N2D_FEATURE_2D_ONE_PASS_FILTER | 支持 |
| 12 | N2D_FEATURE_2D_OPF_YUV_OUTPUT | 单次 |
| 13 | N2D_FEATURE_SEPARATE_SRC_DST | 支持 |
| 14 | N2D_FEATURE_2D_ALL_QUAD | |
| 15 | N2D_FEATURE_2D_POST_FLIP | |
| 16 | N2D_FEATURE_AXI_FE | |
| 17 | N2D_FEATURE_CSC_PROGRAMMABLE | 支持 |
| 18 | N2D_FEATURE_DEC400_FC | |
| 19 | N2D_FEATURE_TRANSPARENCY_MASK | 支持 |
| 20 | N2D_FEATURE_TRANSPARENCY_COLOR_KEY | |
| 21 | N2D_FEATURE_NORMALIZATION | |
| 22 | N2D_FEATURE_NORMALIZATION_QUALTIZATION | |
| 23 | N2D_FEATURE_HISTOGRAM | 支持 |
| 24 | N2D_FEATURE_BRIGHTNESS_SATURATION | 支持 |
| 25 | N2D_FEATURE_64BIT_ADDRESS | 支持 64 位 |
| 26 | N2D_FEATURE_FEATURE_CONTEXT_ID | 支持 |
| 27 | N2D_FEATURE_FEATURE_SECURE_BUFFER | 支持 |
| 28 | N2D_FEATURE_MMU_PAGE_DESCRIPTOR | 支持 |
| 29 | N2D_FEATURE_SECURITY_AHB | |
| 30 | N2D_FEATURE_FRAME_DONE_INTERRUPT | 支持 |
n2d_orientation_t
说明
指定
n2d_buffer_t结构体 的 方向。 使用
的 结构 体: n2d_buffer_t
| n2d_orientation_t value | String Values | Description |
|---|---|---|
| 0 | N2D_0 | Buffer is 0 degrees rotated. |
| 1 | N2D_90 | Buffer is 90 degrees rotated. |
| 2 | N2D_180 | Buffer is 180 degrees rotated. |
| 3 | N2D_270 | Buffer is 270 degrees rotated. |
| 4 | N2D_FLIP_X | Flip in horizontal direction. |
| 5 | N2D_FLIP_Y | Flip in vertical direction. |
n2d_tiling_t
说明
指定
n2d_buffer_t结构体 的 tile 方式。 使用
的 结构 体: n2d_buffer_t
| n2d_tiling_t value | String Values | Description |
|---|---|---|
| 0 | N2D_INVALID_TILED | Invalid tiling |
| 1 | N2D_LINEAR | No tiling |
| 2 | N2D_TILED | 4x4 tiling |
| 3 | N2D_SUPER_TILED | 64x64 tiling |
| 4 | N2D_MINOR_TILED | 2x2 tiling |
| 5 | N2D_TILING_SPLIT_BUFFER | 2x2 tiling |
| 6 | N2D_TILING_X_MAJOR | X Major (Z-ordered) tiling |
| 7 | N2D_TILING_Y_MAJOR | Y Major tiling |
| 8 | N2D_TILING_SWAP | |
| 9 | N2D_MULTI_TILED | N2D_TILED | N2D_TILING_SPLIT_BUFFER |
| 10 | N2D_MULTI_SUPER_TILED | N2D_SUPER_TILED | N2D_TILING_SPLIT_BUFFER |
| 11 | N2D_YMAJOR |
n2d_tile_status_config_t
说明
指定
n2d_buffer_t结构体 的 tile 状态 模式。 使用
的 结构 体: n2d_buffer_t
| n2d_tile_status_config_t value | String Values | Description |
|---|---|---|
| 0 | N2D_TSC_DISABLE | No compression |
| 0x00000001 | N2D_TSC_DEC_COMPRESSED | DEC400 compression |
n2d_pixel_color_multiply_mode_t
说明
使用
的 函数: n2d_set_pixel_multiply_mode
| n2d_pixel_color_multiply_mode_t value | String Values | Description |
|---|---|---|
| 0 | N2D_COLOR_MULTIPLY_DISABLE | |
| 1 | N2D_COLOR_MULTIPLY_ENABLE |
n2d_global_color_multiply_mode_t
说明
指定
用于 alpha 融合 的 全局 模式。 使用
的 函数: n2d_set_pixel_multiply_mode
| n2d_global_color_multiply_mode_t value | String Values | Description |
|---|---|---|
| 0 | N2D_GLOBAL_COLOR_MULTIPLY_DISABLE | |
| 1 | N2D_GLOBAL_COLOR_MULTIPLY_ALPHA | |
| 2 | N2D_GLOBAL_COLOR_MULTIPLY_COLOR |
n2d_filter_type_t
说明
指定
滤波器 类型。 使用
的 结构 体: n2d_state_config_t
| n2d_filter_type_t value | String Values | Description |
|---|---|---|
| 0 | N2D_FILTER_SYNC | |
| 1 | N2D_FILTER_BLUR | Blur filter |
| 2 | N2D_FILTER_USER | User specified filter |
| 3 | N2D_FILTER_BILINEAR | Bilinear |
| 4 | N2D_FILTER_BICUBIC | Bicubic |
n2d_state_value_t
说明
用于
区分 特定 的 配置 行为。 使用
的 结构 体: n2d_csc_config_t
| n2d_state_value_t value | String Values | Description |
|---|---|---|
| 0x1 | N2D_CSC_YUV_TO_RGB | |
| 0x2 | N2D_CSC_RGB_TO_YUV |
n2d_state_type_t
说明
指定
配置 状态 的 设置。 使用
的 结构 体: n2d_state_config_t
| n2d_state_type_t value | String Values | Description |
|---|---|---|
| 0 | N2D_SET_ALPHABLEND_MODE | |
| 1 | N2D_SET_BRIGHTNESS | 不 |
| 2 | N2D_SET_CLIP_RECTANGLE | |
| 3 | N2D_SET_CONTEXT_ID | 不 |
| 4 | N2D_SET_CSC | |
| 5 | N2D_SET_DITHER | |
| 6 | N2D_SET_DST_COLORKEY | |
| 7 | N2D_SET_FAST_CLEAR | 不 |
| 8 | N2D_SET_FILTER_TYPE | |
| 9 | N2D_SET_GLOBAL_ALPHA | |
| 10 | N2D_SET_HISTOGRAM_CALC | 不 |
| 11 | N2D_SET_HISTOGRAM_EQUAL | 不 |
| 12 | N2D_SET_KERNEL_SIZE | |
| 13 | N2D_SET_MASKPACK | 不 |
| 14 | N2D_SET_MULTISOURCE_INDEX | |
| 15 | N2D_SET_MULTISRC_DST_RECTANGLE | |
| 16 | N2D_SET_NORMALIZATION | 不 |
| 17 | N2D_SET_PIXEL_MULTIPLY_MODE | |
| 18 | N2D_SET_ROP | |
| 19 | N2D_SET_SRC_COLORKEY | |
| 20 | N2D_SET_TRANSPARENCY | 不 |
n2d_source_type_t
说明
指定
源 类型。
| n2d_source_type_t value | String Values | Description |
|---|---|---|
| 0 | N2D_SOURCE_DEFAULT | |
| N2D_SOURCE_MASKED | ||
| N2D_SOURCE_MASKED_MONO |
5.14.5.3. 结构体
n2d_point_t
说明
此
结构 描述 了 Nano2D 的 点 数据。点 定义 了 屏幕 上 的 一个 像素。 使用
的 函数: n2d_line,n2d_maskpack_config_t
属性
表
| 成员 | 类型 | 描述 |
|---|---|---|
| x | n2d_int32_t | 点 |
| y | n2d_int32_t | 点 |
n2d_rectangle_t
说明
此
结构 定义 了 Nano2D 数据 矩形 的 组织 方式。 使用
的 函数: n2d_blit,n2d_fill,n2d_line,n2d_set_filter_type,n2d_set_source,n2d_set_clip
属性
表
| 成员 | 类型 | 描述 |
|---|---|---|
| x | n2d_int32_t | 矩形 |
| y | n2d_int32_t | 矩形 |
| width | n2d_int32_t | 矩形 |
| height | n2d_int32_t | 矩形 |
n2d_csc_config_t
说明
此
结构 体 指定 颜色 空间 转换( CSC)模式。 使用
的 结构 体: n2d_state_config_t常量
定义: #define N2D_CSC_PROGRAMMABLE_SIZE 12
属性
表
| 成员 | 类型 | 描述 |
|---|---|---|
| cscMode | n2d_csc_mode_t | 颜色n2d_csc_mode_t |
| userCSCMode | n2d_state_value_t | 用户N2D_CSC_YUV_TO_RGB 或 N2D_CSC_RGB_TO_YUV,仅cscMode 为 N2D_CSC_USER_DEFINED 或 N2D_CSC_USER_DEFINED_CLAMP 时 |
| cscTable[N2D_CSC_PROGRAMMABLE_SIZE] | n2d_int32_t | 颜色 |
n2d_dither_info_t
说明
此
结构 体 指定 是否 启用 抖动 功能。 使用
的 结构 体: n2d_state_config_t
属性
表
| 成员 | 类型 | 描述 |
|---|---|---|
| enable | n2d_bool_t | 1= 启用 |
n2d_multisrc_dst_rect_config_t
说明
此
结构 体 描述 了 多源 目标 矩形 的 配置。 使用
的 结构 体: n2d_state_config_t
属性
表
| 成员 | 类型 | 描述 |
|---|---|---|
| *source | n2d_buffer_t | 指向 |
| srcRect | n2d_rectangle_t | 源 |
| dstRect | n2d_rectangle_t | 目标 |
n2d_rop_config_t
说明
此
结构 体 定义 了 Nano2D 数据 的 ROP 配置。 使用
的 结构 体: n2d_state_config_t
属性
表
| 成员 | 类型 | 描述 |
|---|---|---|
| fg_rop | n2d_uint32_t | 前景 ROP |
| bg_rop | n2d_uint32_t | 背景 ROP |
n2d_multiply_mode_config_t
说明
此
结构 体 描述 了 用于 Alpha 融合 的 预乘 / 预除 模式。 使用
的 结构 体: n2d_state_config_t
属性
表
| 成员 | 类型 | 描述 |
|---|---|---|
| srcPremult | n2d_pixel_color_multiply_mode_t | 源 |
| dstPremult | n2d_pixel_color_multiply_mode_t | 目标 |
| srcGlobal | n2d_global_color_multiply_mode_t | 源 |
| dstDemult | n2d_pixel_color_multiply_mode_t | 目标 |
n2d_kernel_size_config_t
说明
此
结构 体 提供 水平 和 垂直 内核 大小。 使用
的 结构 体: n2d_state_config_t
属性
表
| 成员 | 类型 | 描述 |
|---|---|---|
| horSize | n2d_uint8_t | 水平 |
| verSize | n2d_uint8_t | 垂直 |
n2d_state_config_t
说明
此
结构 提供 状态 配置 数据。 使用
的 函数: n2d_set
属性
表
| 成员 | 类型 | 描述 |
|---|---|---|
| state | n2d_state_type_t | 状态 |
| config | union | 包含 |
config联合体成员
| 成员 | 类型 | 描述 |
|---|---|---|
| csc | n2d_csc_config_t | 颜色 |
| ditherInfo | n2d_dither_info_t | 包含 |
| multisourceIndex | n2d_multisource_index_config_t | 源n2d_uint32_t |
| clipRect | n2d_rectangle_t | 裁剪 |
| globalAlpha | n2d_global_alpha_config_t | 全局 alpha 值 |
| alphablendMode | n2d_blend_t | alpha 混合 |
| multisrcAndDstRect | n2d_multisrc_dst_rect_config_t | 多源 |
| rop | n2d_rop_config_t | 前景 |
| pixelMultiplyMode | n2d_multiply_mode_config_t | 预乘 / 预除 |
| kernelSize | n2d_kernel_size_config_t | 内核 |
| filterType | n2d_filter_type_t | 滤波器 |
n2d_buffer_t
说明
此
结构 定义 了 Nano2D buffer 的 信息
属性
表
| 成员 | 类型 | 描述 |
|---|---|---|
| width | n2d_int32_t | 缓冲区 |
| height | n2d_int32_t | 缓冲区 |
| alignedw | n2d_int32_t | 缓冲区 |
| alignedh | n2d_int32_t | 缓冲区 |
| stride | n2d_int32_t | 缓冲区 |
| srcType | n2d_source_type_t | 源 |
| format | n2d_buffer_format_t | 缓冲区 |
| orientation | n2d_orientation_t | 缓冲区 |
| tiling | n2d_tiling_t | tiling 模式 |
| cacheMode | n2d_cache_mode_t | 缓冲区 |
| handle | n2d_uintptr_t | 缓冲区 |
| memory | n2d_pointer | CPU 侧 |
| gpu | n2d_uint32_t | GPU 侧 |
| uvstride[MAX_UV_PLANE] | n2d_int32_t | UV 层 |
| uv_handle[MAX_UV_PLANE] | n2d_pointer | UV 层 |
| uv_memory[MAX_UV_PLANE] | n2d_pointer | UV 层 |
| uv_gpu[MAX_UV_PLANE] | n2d_uint32_t | GPU 侧 UV 层 |
| tile_status_config | n2d_tile_status_config_t | tiling 状态 |
| tile_status_buffer | n2d_tile_status_buffer_t | tiling 状态 |
5.14.6. 返回值说明
5.14.6.1. n2d_error_t
说明
Nano2D API 函数
通过 n2d_error_返回状态 码,如果 成功,将 返回 N2D_SUCCESS。N2D_SUCCESS设置为 零,因此 如果 任何 函数 返回 非零值,则 表示 发生 了 错误。可能 的 错误 值 包括 下表中 的 值。
| n2d_error_t value | String Values | Description |
|---|---|---|
| 0 | N2D_SUCCESS | 成功,无 |
| 1 | N2D_INVALID_ARGUMENT | 指定 |
| 2 | N2D_OUT_OF_MEMORY | 内存不足 |
| 3 | N2D_NO_CONTEXT | 没有 |
| 4 | N2D_TIMEOUT | 等待 |
| 5 | N2D_OUT_OF_RESOURCES | 系统资源 |
| 6 | N2D_GENERIC_IO | 无法 |
| 7 | N2D_NOT_SUPPORTED | 请求 |
| 8 | N2D_ERROR_HEAP_CORRUPTED | MMU 表 |
| 9 | N2D_NOT_ALIGNED | 未 |
| 10 | N2D_NOT_FOUND | 未找到 |
| 11 | N2D_INTERRUPTED | 被 |
| 12 | N2D_MEMORY_LEAK | 内存 |