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 座標位於低位。 當接收器格式更改時,驅動程式會修改此控制元件的尺寸,以反映新的輸入解析度。