9.1.2. 功能描述

9.1.2.1. 影子寄存器(shadow register)

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

回写(Write back) 、Timing相关寄存器和DE配置更新寄存器没有shadow register,其他的寄存器都 有shadow register。

9.1.2.2. UI图层

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

../../../_images/de_function_ui.png

图 9.1 UI图层

9.1.2.3. 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

图 9.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

图 9.3 水平系数排列

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

图 9.4 垂直系数排列

9.1.2.4. Blending

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

UI alpha有三种模式:pixel alpha模式、全局alpha模式、混合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

图 9.5 Blending

9.1.2.5. 限制条件

  • 支持屏幕最小size为64x64

  • 模块时钟最高可到200MHz

  • pixel clk最高可到150MHz

  • 当开启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都要求8bytes对齐