功能描述
- Flip/ Rotation0 子模块:可以进行水平镜像、垂直镜像、0/ 90/ 180/ 270 度固定角度旋转。
水平镜像、 垂直镜像和固定角度旋转三个功能可分别单独开启,也可同时开启。如果同时开启,水平镜像和垂直镜像旋转功能会在固定角度旋转功能之前生效。
- Rotation1 子模块:可以对图像进行任意角度旋转。任意角度旋转只支持 RGB 格式,不支持 YUV 格式。
关于详细描述,可查看任意角度旋转
- Scaler0 子模块:对特定格式的图像进行缩放。
关于图像缩放的详细说明,可查看图像缩放。
- CSC0 和 CSC1 子模块:支持 YUV 转 RGB 的颜色空间转换。关于格式转换公式的详细描述,可查看 颜色空间转换(CSC0 和 CSC1)。
- CSC2 子模块:支持 RGB 转 YUV 颜色空间转换。关于格式转换公式的详细描述,可查看 颜色空间转换 (CSC2)
- Porter-Duff Alpha Blending:支持选择不同的叠加系数对图像进行叠加混合。
- Dither 子模块:支持输入 ARGB8888 或者 RGB888 格式,输出 ARGB4444、RGB565、ARGB1555。打开 Dither 功能,可以使图像渐变区域更平滑。
- 格式化输出 (FMT ) 子模块:对接收到的像素按照像素格式的排列要求写入 memory。比如 ARGB8888 格式只有一个 plane,NV12 格式有 2 个 plane, YUV420p 有 三个 plane。FMT 子模块对接收到的像素按照像素格式的排列要求写入 memory。
GE 使用过程中存在一定限制约束,详情可查看限制条件。
任意角度旋转
由原图到目标图的旋转变换矩阵为:
图像缩放
- 支持 6x4 taps 16 phases 多相位滤波算法。
- 具有两个独立的 channel:
- 对 RGB 格式进行缩放操作时,需要配置 Scaler0 的 channel0 参数。
- 对 YUV 格式进行缩放操作时,Y 通道需要设置 channel0 参数,U 和 V 通道需要设置 channel1 参数。
- 当 scaler0 控制寄存器选择以下不同配置时:
- 内置滤波系数:不需要软件设置滤波系数表。
- 查表:需要软件设置滤波系数表,
- channel0 和 channel1 有独立的滤波系数表:
- 水平滤波系数和垂直滤波系数需要单独设置,总共对应 4 组滤波系数。
- 水平滤波为 6 taps,滤波系数为 6x16 共 96 个,通过大小为 48 的 32bits
寄存器组来设置。
每个系数为 14 bits 有符号数, 寄存器低 16 bits 和高 16 bits 各存储一个系数。
例如 phase0 和 phase1 占用一个 32 bits 寄存器,phase0 在[0:13],phase1 在[16:29]。 先存储 tap0 的 phase0, phase1,依次到 phase15,然后再存储 tap1, tap2,tap3,tap4,tap5。
-
垂直滤波为 4 taps,滤波系数为 4x16 共 64 个。通过大小为 32 的 32bits 寄存器组来设置。
每个系数为 14 bits 有符号数, 寄存器低 16 bits 和高 16 bits 各存储一个系数。
例如 phase0 和 phase1 占用一个 32 bits 寄存器,phase0 在[0:13], phase1 在[16:29]。先存储 tap0 的 phase0,phase1,依次到 phase15,然后再存储 tap1, tap2,tap3。
颜色空间转换(CSC0 和 CSC1)
CSC0 和 CSC1 子模块都是 YUV 转 RGB,颜色空间转换模块,格式转换公式如下:
R = Coef0 * Y + Coef1 * U + Coef2 * V + Coef3;
G = Coef4 * Y + Coef5 * U + Coef6 * V + Coef7;
B = Coef8 * Y + Coef9 * U + Coef10 * V + Coef11;
颜色空间转换 (CSC2)
CSC2 子模块是 RGB 转 YUV 颜色空间转换模块,格式转换公式如下:
Y = Coef0 * R + Coef1 * G + Coef2 * B+ Coef3;
U = Coef4 * R + Coef5 * G + Coef6 * B+ Coef7;
V = Coef8 * R + Coef9 * G + Coef10 * B+ Coef11;
Porter/Duff Alpha Blending
pixel = (source * fs + destination * fd),
sa = source alpha,
da = destination alpha
序号 | Blending 模式 | fs | fd |
---|---|---|---|
0 | NONE(默认) | sa | 1-sa |
1 | CLEAR | 0 | 0 |
2 | SRC | 1 | 0 |
3 | DST | 0 | 1 |
4 | SRC_OVER | 1 | 1-sa |
5 | DST_OVER | 1-da | 1 |
6 | SRC_IN | da | 0 |
7 | DST_IN | 0 | sa |
8 | SRC_OUT | 1-da | 0 |
9 | DST_OUT | 0 | 1-sa |
10 | SRC_ATOP | da | 1-sa |
11 | DST_ATOP | 1-da | sa |
12 | XOR | 1-da | 1-sa |
13 | ADD | 1 | 1 |
基本 2D 加速操作
矩形填充和位块搬移是最基本的 2D 加速操作,其操作方法以及性能如下所示:
-
矩形填充(Fill Rectangle):指定内存中的一块矩形区域,并向矩形区域填充固定颜色,如下图所示:
- Output Image Addr 为要矩形填充图像的基地址
- 坐标 (x_offset, y_offset)
为填充区域相对于基地址的坐标偏移。由软件计算出坐标(x_offset,y_offset)地址 addr 配置给硬件,计算方法如下:
bpp: 每个像素占用的字节(Bytes Per Pixel) addr = output_image_addr + output_image_stride * y_offset + x_offset * bpp
-
位块搬移 (Bit BLT/ Stretch BLT):把内存中源图像的一块矩形区域,搬移到目标图像中的一块矩形区域中。在位块搬移过程中,源图和目标图可以同时进行 alpha blending/CK 操作。
-
原图的矩形区域搬移到目标图的矩形区域中时不进行缩放(Bit BLT),如下图所示:
-
原图的矩形区域搬移到目标图的矩形区域中同时进行放大或者缩小(Stretch BLT),如下图所示:
-
-
性能:GE 的最高工作频率为 200 MHz,开启不同功能的性能如下表所示。
序号 2D 加速操作 性能(关闭 Rotation1) 性能(开启 Rotation1) 0 Fill Rectanle 1 pixel/cycle N/A 1 Blit 0.95 pixel/cycle 0.45 pixel/cycle 2 Stretch BLT 0.7 pixel/cycle N/A -
设 mclk 为 GE 的工作时钟,GE 的性能为 P,则每秒钟可以处理的像素个数为:pixel_num = mclk * P。
- mclk 单位:Hz
- p 单位: pixel/cycle
-
每一帧处理的像素个数 frame_pixel = width * height,当使用 Stretch BLT 功能时,计算输入或者输出中最大图片的像素个数。
-
GE 可以处理的最大帧率 frame per second (fps) = pixel_num ÷ frame_pixel。
-
当受到系统实际带宽限制时,可以用分配给 GE 的实际带宽量来计算实际帧率。
-
限制条件
-
任意角度旋转不支持 Dither,不支持 YUV 格式,并且 DST 和 OUT 地址需要一致。
-
Scan order 只在 src、dst、out 都为 RGB 格式,并且 scaler、rot0、rot1 关闭的情况下开启,并且不可以开启 Dither。
-
YUV 格式支持的最小 size 为 8x8, 最大 size 为 4096x4096(单位为 pixel)。
-
YUV 格式必须开启 scaler
-
RGB 格式不开启 scaler、不开启 rot1 的情况,支持的最小 size 为:1x1(单位为 pixel)。
-
RGB 格式不开启 scaler、开启 rot1 的情况,支持最小 size 为:4x4(单位为 pixel)。
-
RGB 格式开启 scaler 的情况,支持最小 size 为:4x4(单位为 pixel)。
-
RGB 格式支持最大 size 为:4096x4096(单位为 pixel)。
-
颜色填充模式/渐变填充模式下,不可以开启 scaler、rot0、rot1。
-
配置 queue 的 ring buffer 的起始地址和总长度需要 128 bytes 对齐。
-
任意角度旋转只支持 blending,不支持 Color Key。