5. DW100 去畸变驱动程序¶
在 i.MX8MP SoC 上发现的 Vivante DW100 去畸变处理器 IP 核,会对输入图像应用可编程的几何变换,以校正镜头引入的失真。
该转换函数通过硬件以网格图的形式公开,其中 16x16 像素宏块使用 X、Y 顶点坐标进行索引。
Image width
<--------------------------------------->
^ .-------.-------.-------.-------.-------.
| | 16x16 | | | | |
I | | pixel | | | | |
m | | block | | | | |
a | .-------.-------.-------.-------.-------.
g | | | | | | |
e | | | | | | |
| | | | | | |
h | .-------.-------.-------.-------.-------.
e | | | | | | |
i | | | | | | |
g | | | | | | |
h | .-------.-------.-------.-------.-------.
t | | | | | | |
| | | | | | |
| | | | | | |
v '-------'-------'-------'-------'-------'
Grid of Image Blocks for Dewarping Map
每个 x、y 坐标寄存器使用 16 位来记录坐标地址,格式为无符号 12.4 定点格式 (UQ12.4)。
.----------------------.--------..----------------------.--------.
| 31~20 | 19~16 || 15~4 | 3~0 |
| (integer) | (frac) || (integer) | (frac) |
'----------------------'--------''----------------------'--------'
<-------------------------------><------------------------------->
Y coordinate X coordinate
Remap Register Layout
去畸变图是通过使用 V4L2_CID_DW100_DEWARPING_16x16_VERTEX_MAP 控件从应用程序设置的。该控件包含一个 u32 值数组,存储网格每个顶点的 (x, y) 目标坐标。x 坐标存储在 16 个 LSB 中,y 坐标存储在 16 个 MSB 中。
数组中的元素数量必须与图像大小匹配
elems = (DIV_ROUND_UP(width, 16) + 1) * (DIV_ROUND_UP(height, 16) + 1);
如果应用程序未设置该控件,则驱动程序使用恒等映射。
有关 DW100 硬件操作的更多详细信息,请参阅 IMX8MP 参考手册的第 13.15 章 去畸变。
Vivante DW100 m2m 驱动程序实现了以下特定于驱动程序的控件
V4L2_CID_DW100_DEWARPING_16x16_VERTEX_MAP (__u32 array)
指定 DW100 驱动程序的去畸变图(也称为 LUT)blob,如 IMX8MP 参考手册的第 13.15.2.3 章 去畸变重映射中所述,为 U32 动态数组。图像被划分为许多小的 16x16 块。如果图像的宽度/高度不能被 16 整除,则最右侧/最底部块的大小为余数。去畸变图仅保存块的顶点坐标。去畸变网格图由 x 和 y 的顶点坐标组成。每个 x、y 坐标寄存器使用 16 位 (UQ12.4) 记录坐标地址,其中 Y 坐标在高位,X 坐标在低位。当接收器格式更改时,驱动程序会修改此控件的尺寸,以反映新的输入分辨率。