DLPU082C August 2021 – March 2024 DLPC7540
This command loads the manual warp table into the system. It has the start index and an arbitrary number of points as parameters. The start index is a 16-bit number that represents the linear index into the 2D warp table. The warp table is always assumed have the same number of warp points as the control points set up using SetManualWarpControlPoints command.
Each point is passed as two 13.3 fixed point numbers that represents X and Y coordinates. Because the total command packet size cannot exceed 512 bytes, the table is loaded by invoking the command multiple times with different start indexes. If the total number of points passed in the manual warp table is less than 62×32 then software generates the warp map for all 62×32 control points from the warp map of input even spaced control points. For each 62×32 control points it finds the four closest control points in even spaced warp map and then using bilinear interpolation calculate the output position.
Manual warp map is applied after any scaling and keystone correction performed by the warp engine.
Manual warp control points just be set before using this command.
Byte Index | Value | Description |
---|---|---|
0 | 0x54 | Command packet header (destination 4, length present, response required) |
1 | 0x34 | Command opcode |
2-3 | 0x0031 | Number of bytes in payload (49) |
4-5 | 0x0000 | Start index in the table (0) |
6-7 | 0x0000 | X1 = 0.0 |
8-9 | 0x0000 | Y1 = 0.0 |
10-11 | 0x2800 | X2 = 1280.0 |
12-13 | 0x0640 | Y2 = 200.0 |
14-15 | 0x5000 | X3 = 2560.0 |
16-17 | 0x0640 | Y3 = 200.0 |
18-19 | 0x77F8 | X4 = 3839.0 |
20-21 | 0x0640 | Y4 = 200.0 |
22-23 | 0x0000 | X5 = 0.0 |
24-25 | 0x21C0 | Y5 = 1080.0 |
26-27 | 0x2800 | X6 = 1280.0 |
28-29 | 0x21C0 | Y6 = 1080.0 |
30-31 | 0x5000 | X7 = 2560.0 |
32-33 | 0x21C0 | Y7 = 1080.0 |
34-35 | 0x71C0 | X8 = 3640.0 |
36-37 | 0x21C0 | Y8 = 1080.0 |
38-39 | 0x0000 | X9 = 0.0 |
40-41 | 0x4378 | Y9 = 2159.0 |
42-43 | 0x2800 | X10 = 1280.0 |
44-45 | 0x3D40 | Y10 = 1960.0 |
46-47 | 0x5000 | X11 = 2560.0 |
48-49 | 0x3D40 | X11 = 1960.0 |
50-51 | 0x77F8 | X12 = 3839.0 |
51-52 | 0x4378 | Y12 = 2159.0 |
Method for sending large number of warp points
As previously mentioned, the number of bytes in one command cannot exceed 512. To send a large number of warp points, send multiple packets. An example method for sending 62×32 warp points is shown here:
Command 1: index = 0, followed by 124 pairs of X, Y (124×2×2 = 496 bytes)
Command 2: index = 124, followed by the next 124 pairs of X, Y
Command 3: index = 248, followed by the next 124 pairs of X, Y
and so on through:
Command 16: index = 930, followed by the last 124 pairs of X, Y
Optimization to reduce the data sent by the command interface
Consider the case where out of 62×32 warp points, only some have changed (say the 10th, 11th, 12th and 45th point), then the following method can be used.
Command 1: index= 0, followed by (X10, Y10, X11, Y11, X12, Y12)
Command 2: index = 45, followed by (X45, Y45)
Command 3: ApplyManualWarping command with Enable = 0
Command 4" ApplyManualWarping command with Enable = 1
This optimization can be used instead of sending all of the 62×32 warp points when any point changes.