功能描述
影子寄存器 (Shadow Register)
- Preload register:软件可以操作的寄存器。
- Shadow register:软件看不到,硬件操作的寄存器
除了 CRC 校验、CCM 和 Gamma 矫正、QoS、Timing 相关寄存器和 DE 配置更新寄存器之外, 其他的寄存器都有 shadow register。
UI 图层
UI 图层有四个矩形窗口,每个窗口可以单独控制开关,四个窗口可以通过设置各自以 UI 图层左上角为原点的坐标,控制显示在 UI 图层的不同位置。四个窗口设置 Buffer 的颜色格式必须一致。矩形窗口对应的 Buffer 可以是对原始图像裁剪的一块区域,通过软件计算出相应矩形区域的 addr,并且四个矩形窗口不可重叠,需要进行有效性检查。
Video 图层
- 当输入格式为 YUV420、YUV422 格式时必须开启 scaler。
- 当输入格式 为 RGB 格式时不支持 scaler。
- 输入 Buffer 可以用软件裁剪矩形区域。
- 对于 RGB 格式 addr 水平和垂直方向 都是 1 像素对齐。
- 对于 YUV420、YUV422 需要保证 Y 和 U、V 的对应关系。
- YUV420 格式裁剪的水平偏移需 2 像素对齐,垂直偏移也需 2 像素对齐。
- YUV422 格式裁剪的水平偏移需要 2 像素对齐,垂直方向 1 像素对齐。
Video 图层 CSC0 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
Scaler0 有两个独立的 channel,两个 channel 独立处理。Y 分量由 channel0 处理,U 和 V 分量由 channel1 处理。YUV420/ YUV422 经过 scaler0 模块后,都统一输出 YUV444,然后再经过 CSC0 转换成 RGB 格式,作为最终的 Video 图层显示。
下图中的 YUV420P/ NV12/ NV21 格式的 U、V 分量的宽和高是 Y 分量的一半,经过 Scaler 模块后,三个分量的输出宽高相同,输出 YUV444 格式:
- 当 scaler0 选择 6x4 taps 16 phases 多相位滤波算法,scaler0 控制寄存器选择的是内置滤波系数,不需要软件设置滤波系数表。
- 当 scaler0 选择的是多相位滤波算法,并且 scaler0 控制寄存器选择的是查表,则需要软件设置滤波系数表。
- 水平滤波为 6 taps,滤波系数为 6x16 共 96 个。
通过 48 个 32 bits 寄存器来设置,每个系数为 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 个 32 bits 寄存器来设置,每个系数为 14 bits 有符号数,寄存器低 16 bits 和高 16 bits 各存储一个系数。
例如 phase0 和 phase1 占用一个 32 bits 寄存器,phase0 在[0:13], phase1 在[16:29]。先存储 tap0 的 phase0,phase1,依次到 phase15,然后再存储 tap1, tap2,tap3。
Blending
UI 图层在 Video 图层顶部,UI 图层和 Video 图层在重叠区域进行 Alpha 叠加和 Color Key 操作,Color Key 操作优先于 Alpha 叠加。在 UI 图层和 Video 图层都没有覆盖到的区域显示背景色。
UI Alpha 有三种模式:
- Pixels Alpha 模式:ui_alpha = pixel_alpha
当 pixel alpha 不存在时,ui_alpha = 255。
- 全局 Alpha 模式:ui_alpha = G_ALPHA
G_ALPHA 为设置的全局 alpha 值,取值范围为 0~255。
- 混合 Alpha 模式:ui_alpha = pixels alpha * G_ALPHA/255
UI 图层和 Video 图层透明度混合计算:
r_out=(r_ui*alpha_ui+r_video*(255-alpha_ui))/255
g_out=(g_ui*alpha_ui+g_video*(255-alpha_ui))/255
b_out=(b_ui*alpha_ui+b_video*(255-alpha_ui))/255
限制条件
-
支持屏幕最小 size 为 64x64
-
模块时钟最高可到 200 MHz
-
Pixel clk 最高可到 150 MHz
-
当开启 Dither 功能时,屏幕宽度最大到 2048
-
UI 图层不支持 scaler,仅 Video 图层 YUV 格式支持 scaler
-
UI 图层矩形窗支持的最小 size:2x2,单位为 pixel
-
Video 图层 YUV 格式支持的最小输入/输出 size:8x8,单位为 pixel
-
Video 图层 YUV 格式支持的最大输入宽度:2048,单位为 pixel
-
Video 图层 RGB 格式支持的最小 size:2x2,单位为 pixel
-
UI 图层和 Video 图层的所有格式的 stride 都要求 8 bytes 对齐