5. DW100 去畸变驱动

Vivante DW100 去畸变处理器 IP 核位于 i.MX8MP SoC 上,它对输入图像应用可编程的几何变换,以校正镜头引入的失真。

硬件通过一个网格图来暴露变换函数,该网格图具有使用 X、Y 顶点坐标索引的 16x16 像素宏块。

                       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 DeWarp* 章节。

Vivante DW100 m2m 驱动程序实现了以下特定于驱动程序的控制

V4L2_CID_DW100_DEWARPING_16x16_VERTEX_MAP (__u32 array)

将 DW100 驱动程序的去畸变图(又名 LUT)blob 指定为 U32 动态数组,如 IMX8MP 参考手册的 *13.15.2.3 Dewarping Remap* 章节中所述。 图像被分成许多小的 16x16 块。 如果图像的宽度/高度不能被 16 整除,则最右边/最下面的块的大小为余数。 去畸变图仅保存块的顶点坐标。 去畸变网格图由 x 和 y 的顶点坐标组成。 每个 x, y 坐标寄存器使用 16 位 (UQ12.4) 来记录坐标地址,其中 Y 坐标位于高位,X 坐标位于低位。 当接收器格式更改时,驱动程序会修改此控件的尺寸,以反映新的输入分辨率。