Edit online

功能描述

16 Aug 2024
Read time: 6 minute(s)
GE 模块包含以下子模块,各模块功能描述如下:
  • 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 还具有以下功能:

GE 使用过程中存在一定限制约束,详情可查看限制条件

任意角度旋转

Rotation1 子模块可以对图像进行任意角度旋转,以图像左上角为原点,原图的旋转中心在(m, n)目标图的旋转中心在(c, d),如下图所示:
注: 任意角度旋转只支持 RGB 格式,不支持 YUV 格式。

../images/ge_function_rot1.png

1. 旋转示意图

由原图到目标图的旋转变换矩阵为:


../images/ge_function_rot1_1.png

2. 旋转公式

图像缩放

Scaler0 子模块支持对 RGB/ YUV 格式图像进行缩放,支持缩放倍数范围为 1/16 ~ 16,详细功能特性如下:
  • 支持 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。


        ../images/ge_function_scale_coef0.png

        3. 水平系数排列
      • 垂直滤波为 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。

        ../images/ge_function_scale_coef1.png

        4. 垂直系数排列

颜色空间转换(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 加速操作,其操作方法以及性能如下所示:

  1. 矩形填充(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

    ../images/ge_function_fill1.png

    5. 矩形填充
  2. 位块搬移 (Bit BLT/ Stretch BLT):把内存中源图像的一块矩形区域,搬移到目标图像中的一块矩形区域中。在位块搬移过程中,源图和目标图可以同时进行 alpha blending/CK 操作。
    1. 原图的矩形区域搬移到目标图的矩形区域中时不进行缩放(Bit BLT),如下图所示:


      ../images/ge_function_blit1.png

      6. 位图搬移
    2. 原图的矩形区域搬移到目标图的矩形区域中同时进行放大或者缩小(Stretch BLT),如下图所示:


      ../images/ge_function_stretchblit1.png

      7. 位图搬移同时缩放
  3. 性能: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。