USER GUIDE / IMAGE INPUT & ENCODING / IPU / OVERVIEW
概述
图像处理单元(IPU)用于图像后期处理。它包含图像色彩空间转换(CSC)和1 层OSD 功能。
功能
- 支持数据格式:
- CSC 功能
- 输入数据格式:NV12、YUV422
- 输出数据格式:NV12、NV21、ARGB、RGB、HSV
- OSD 功能
- Layer1 输入数据格式:NV12、YUV422、ARGB8888
- Layer2 输入数据格式:ARGB32、ARGB1555、RGB32、NV12、NV21、2bit 模式
- 输出数据格式:NV12、YUV422、ARGB8888
- CSC 功能
- 最小输入和输出图像尺寸(像素):4×4
- 最大输入和输出图像尺寸(像素):1280×1280
- 通道OSD 功能:
- 支持1 层OSD
- 支持12 种端口的port-duff OSD 模式
- 支持layer1 和layer2 的图层顺序配置
- 通道CSC 功能:支持参数可配置的色彩空间转换
- 输出数据可写入PSRAM,也可直通传输至DPU
- 支持单帧工作模式、连续帧工作模式
框图

图 1 显示了IPU 数据流框图。通道内有2 个DMA:channel-dma,bk-dma,分别为OSD 小图DMA 和OSD 大图DMA。bk-dma 读取数据作为OSD 操作的大图或CSC 操作的图片。通道中只有一个OSD DMA 用于读取OSD 功能中作为小图的数据,IPU 提供1 个OSD 通道配置。硬件只有一套CSC 算法逻辑,在OSD 模式下,可能需要做CSC 算法,因此OSD 模式和CSC 模式不能同时开启。在CSC 模式下,输出数据格式可以选ARGB/NV/HSV。在OSD 模式下,大图通道数据与做完CSC 操作的小图通道数据进入OSD 模块做重叠,且软件需配置寄存器来决定哪张图片作为前景图,哪张图片作为背景图。最后,结果数据将通过DMA 输出模块输出到外部存储器。
功能说明
IPU 是支持高性能OSD 和CSC 功能的模块。它最多可配置1 幅需要重叠的图像。表 1 显示了IPU 的主要功能点。
| 主要功能 | 支持输入格式 | 支持输出格式 | 支持直通到DPU |
|---|---|---|---|
| OSD | NV12/YUV422/ARGB8888 | NV12/YUV422/ARGB8888 | PSRAM |
| CSC | NV12/YUV422 | ARGB/RGB/NV12/NV21/HSV | PSRAM |
源图片和缓冲区
对于IPU 来说,它需要知道图片存储在哪里以及图片的格式是什么。测试人员可以使用数据格式寄存器0x12C 和0x11C 来告诉IPU 大图和小图分别是什么格式。

除格式外,IPU 还必须通过输入Y 数据地址(0xC)和UV 数据地址(0x10)知道大图的源地址;通过输入Y 数据地址(0xBC)和UV 数据地址(0xC4)知道小图的源地址;地址必须为8 字节对齐。对于存储在内存中的图片,它还具有其他一些特性,如宽度、高度和跨距。大图和小图的宽度和高度可分别由输入几何尺寸寄存器(0x18)和(0xFC)配置。而大图的跨距则由Y 数据行跨距(0x1C)和UV 数据行跨距(0x20)配置;小图的跨距则由Y 数据行跨距(0xC0)和UV 数据行跨距(0xC8)。三者的关系如下图 3 所示。图 3 显示NV 数据格式参数关系。

颜色转换
IPU 支持色彩转换功能。输入格式可从NV12 、YUV422 格式中选择,输出格式支持ARGB、RGB、NV12、NV21 和HSV 格式。以下转换需要设置*CH0* 的CSC 参数寄存器(由于CSC 和OSD 不能同时启用,CH0 的CSC 计算模块可通过BK 通道CSC 操作共享,以节省硬件成本):
- NV12 to NV21/NV12
- NV12 to ARGB/RGB
- NV12 to HSV
- YUV422 to NV21/NV12
- YUV422 to ARGB/RGB
- YUV422 to HSV
这些参数的命令值将在CH0 CSC 寄存器部分进行说明。
结果图片和缓冲区
与源图像和缓冲区一样,结果图像也有数据格式、宽度、高度和缓冲区跨距。由于图片大小不会改变,因此输出图片的高度、宽度将与输入大图保持一致,无需配置。这里需要配置的是输出Y 数据地址(0x24)、UV 数据地址(0xB4)、V 数据地址(0x30)作为目的地址,以及输出Y 跨距(0x1C)、UV 跨距(0xB8)、V 数据跨距(0x34)作为输出跨距。

运行IPU
在IPU 中设置必要的寄存器后,需要告诉IPU 哪一个寄存器需要重新配置。可以在寄存器配置使能控制寄存器(0x64)中设置相应的位来告诉IPU。如果某个寄存器在0x64 寄存器中没有对应位,则该寄存器在更改后会立即动作。
设置完0x64 寄存器后,只需向IPU 触发寄存器(0x74)写1,IPU 即可运行。
当值1 被写入0x74 时,它将首先记录到记录寄存器中。然后,IPU 检查记录寄存器是否空闲。如果记录寄存器的值为1,IPU 将启动一个新帧操作。IPU 将在每次帧操作开始时检查0x64 寄存器,清除记录寄存器和0x64 寄存器。
IPU 工作完成和空闲
IPU 提供IPU 状态寄存器(0x4),让测试人员了解其内部状态。如果IPU 完成了一帧并处于空闲状态,IPU 状态寄存器(0x4)中的MSTATUS 位将变为0。有两种情况将会将IPU 处于空闲:
- 单帧模式时,IPU 完成一帧工作后,不再有新帧工作。
- 用户停止IPU,且不再有新的帧工作。
停止,重置IPU
如果需要尽快停止IPU,测试人员需要停止,而不是重置IPU。重置IPU 可能会导致一些严重后果。
将IPU 触发寄存器(0x74)中的停止位写入1 将触发停止机制,然后只需等待IPU 恢复空闲即可。
只有当IPU 空闲时,才能重置IPU。复位时,IPU 中的所有寄存器都将设置为复位值。
中断
IPU 可以向系统触发中断。测试人员需要通过将IPU 全局控制(0x7C)的IRQ_EN 位设置为1 来启用中断。这里有一种情况中断将会生成:
- IPU 从繁忙状态转为空闲。
OSD 功能
IPU 最多支持1 层OSD 功能。大图来自图 1 中的OSD 大图通道,输入数据类型可从以下3 种类型中选择:NV12、YUV422、ARGB8888。输出数据类型应与输入大图类型相同,软件无需配置输出图片类型。
进行OSD 操作时应注意以下事项:
- OSD 小图通道还支持RGB 到YUV 和YUV 到RGB 的转换。
- OSD 小图和大图通道可支持屏蔽功能和alpha 选择功能,您可以从像素alpha、全局alpha 和(像素alpha)*(全局alpha)中选择alpha。
- OSD 小图通道禁用,则分离的大图通道可用作数据移动功能,而无需更改数据值。
- OSD 小图和大图通道可支持alpha 预乘的使能和关闭。
- OSD 时,IPU 将小图做PADDING,即将其分辨率扩充到和大图一致后再做OSD 算法,填充像素由OSD_LAY_PADDING_ARGB(0x1B0)寄存器决定。换句话说,重叠区域是小图和大图的像素点做OSD,非重叠区域是OSD_LAY_PADDING_ARGB 和大图的像素点做OSD。
读取仲裁器功能
IPU 中最多有2 个DMA 通道同时运行,因此需要一个读取仲裁器来按顺序读取数据。这个读取仲裁器非常简单,有两种模式:固定优先级模式和轮循模式,可以通过设置寄存器0x1A8 来设置模式和优先级。