Edit online

功能描述

影子寄存器 (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模块后,3个分量的 输出宽高相同,输出YUV444格式:

../images/de_function_scale.png
2. Video图层 YUV420 缩放

当scaler0 选择 6x4 taps 16phases 多相位滤波算法,scaler0控制寄存器选择的是内置滤波系数,不需要 软件设置滤波系数表。当scaler0选择的是多相位滤波算法,并且scaler0控制寄存器选择的是查表,则 需要软件设置滤波系数表, channel0和channel1有独立的滤波系数表,并且水平滤波系数和垂直滤波系 数需要单独设置,总共对应4组滤波系数。

水平滤波为6 taps,滤波系数为6x16共96个。通过大小为48的32bits寄存器组来设置,每个系数为14bits 有符号数, 寄存器低16bits和高16bits各存储一个系数,小端方式存储,例如phase0和phase1占用一个 32bits寄存器,phase0在[0:13],phase1在[16:29]。先存储tap0的phase0,phase1,依次到phase15, 然后再存储tap1, tap2,tap3,tap4,tap5。

../images/de_function_scale_coef0.png

垂直滤波为4 taps,滤波系数为4x16共64个。通过大小为32的32bits寄存器组来设置,每个系数为14bits有符号数, 寄存器低16bits和高16bits各存储一个系数,例如phase0和phase1占用一个32bits寄存器,phase0在[0:13], phase1在[16:29]。先存储tap0的phase0,phase1,依次到phase15,然后再存储tap1, tap2,tap3。

../images/de_function_scale_coef1.png

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))/255g_out=(g_ui*alpha_ui+g_video*(255-alpha_ui))/255b_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对齐