Edit online

功能描述

12 Jun 2024
Read time: 4 minute(s)

影子寄存器 (Shadow Register)

为了实现一组配置同时生效,DE 的大部分寄存器都是对应两个寄存器。
  • Preload register:软件可以操作的寄存器。
  • Shadow register:软件看不到,硬件操作的寄存器
当软件配置好一组参数到 preload register 后,设置 CONFIG_UPDATE 为 1,即可把所有的 preload register 寄存器值同时更新到 shadow register。

除了 CRC 校验、CCM 和 Gamma 矫正、QoS、Timing 相关寄存器和 DE 配置更新寄存器之外, 其他的寄存器都有 shadow register。

UI 图层

UI 图层有四个矩形窗口,每个窗口可以单独控制开关,四个窗口可以通过设置各自以 UI 图层左上角为原点的坐标,控制显示在 UI 图层的不同位置。四个窗口设置 Buffer 的颜色格式必须一致。矩形窗口对应的 Buffer 可以是对原始图像裁剪的一块区域,通过软件计算出相应矩形区域的 addr,并且四个矩形窗口不可重叠,需要进行有效性检查。


../images/de_function_ui.png

1. UI 图层

Video 图层

Video 图层支持 RGB 和 YUV 格式输入。
  • 当输入格式为 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 格式:


../images/de_function_scale.png

2. Video 图层 YUV420 缩放
  • 当 scaler0 选择 6x4 taps 16 phases 多相位滤波算法,scaler0 控制寄存器选择的是内置滤波系数,不需要软件设置滤波系数表。
  • 当 scaler0 选择的是多相位滤波算法,并且 scaler0 控制寄存器选择的是查表,则需要软件设置滤波系数表。
Channel0 和 channel1 有独立的滤波系数表,并且水平滤波系数和垂直滤波系数需要单独设置,总共对应四组滤波系数。
  • 水平滤波为 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。


    de_function_scale_horizontal

  • 垂直滤波为 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。


    de_function_scale_vertical

Blending

UI 图层在 Video 图层顶部,UI 图层和 Video 图层在重叠区域进行 Alpha 叠加和 Color Key 操作,Color Key 操作优先于 Alpha 叠加。在 UI 图层和 Video 图层都没有覆盖到的区域显示背景色。

UI Alpha 有三种模式:

  1. Pixels Alpha 模式:ui_alpha = pixel_alpha

    当 pixel alpha 不存在时,ui_alpha = 255。

  2. 全局 Alpha 模式:ui_alpha = G_ALPHA

    G_ALPHA 为设置的全局 alpha 值,取值范围为 0~255。

  3. 混合 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

../images/de_function_blend.png

限制条件

  • 支持屏幕最小 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 对齐