diff options
author | Philipp Zabel <p.zabel@pengutronix.de> | 2018-09-18 05:34:19 -0400 |
---|---|---|
committer | Philipp Zabel <p.zabel@pengutronix.de> | 2018-11-05 08:40:08 -0500 |
commit | e46279f097d44581d9474dd51963657b9d9feb6f (patch) | |
tree | 0704ad6b130f838f74471df4a4778b8bec6b4066 | |
parent | d966e23d61a2c3769ed0c0a3c6e20b300a313317 (diff) |
gpu: ipu-v3: image-convert: add some ASCII art to the exposition
Visualize the scaling and rotation pipeline with some ASCII art
diagrams. Remove the FIXME comment about missing seam prevention.
Signed-off-by: Philipp Zabel <p.zabel@pengutronix.de>
Acked-by: Steve Longerbeam <slongerbeam@gmail.com>
-rw-r--r-- | drivers/gpu/ipu-v3/ipu-image-convert.c | 39 |
1 files changed, 29 insertions, 10 deletions
diff --git a/drivers/gpu/ipu-v3/ipu-image-convert.c b/drivers/gpu/ipu-v3/ipu-image-convert.c index b735065fe288..91fe8f1672b4 100644 --- a/drivers/gpu/ipu-v3/ipu-image-convert.c +++ b/drivers/gpu/ipu-v3/ipu-image-convert.c | |||
@@ -37,17 +37,36 @@ | |||
37 | * when double_buffering boolean is set). | 37 | * when double_buffering boolean is set). |
38 | * | 38 | * |
39 | * Note that the input frame must be split up into the same number | 39 | * Note that the input frame must be split up into the same number |
40 | * of tiles as the output frame. | 40 | * of tiles as the output frame: |
41 | * | 41 | * |
42 | * FIXME: at this point there is no attempt to deal with visible seams | 42 | * +---------+-----+ |
43 | * at the tile boundaries when upscaling. The seams are caused by a reset | 43 | * +-----+---+ | A | B | |
44 | * of the bilinear upscale interpolation when starting a new tile. The | 44 | * | A | B | | | | |
45 | * seams are barely visible for small upscale factors, but become | 45 | * +-----+---+ --> +---------+-----+ |
46 | * increasingly visible as the upscale factor gets larger, since more | 46 | * | C | D | | C | D | |
47 | * interpolated pixels get thrown out at the tile boundaries. A possilble | 47 | * +-----+---+ | | | |
48 | * fix might be to overlap tiles of different sizes, but this must be done | 48 | * +---------+-----+ |
49 | * while also maintaining the IDMAC dma buffer address alignment and 8x8 IRT | 49 | * |
50 | * alignment restrictions of each tile. | 50 | * Clockwise 90° rotations are handled by first rescaling into a |
51 | * reusable temporary tile buffer and then rotating with the 8x8 | ||
52 | * block rotator, writing to the correct destination: | ||
53 | * | ||
54 | * +-----+-----+ | ||
55 | * | | | | ||
56 | * +-----+---+ +---------+ | C | A | | ||
57 | * | A | B | | A,B, | | | | | | ||
58 | * +-----+---+ --> | C,D | | --> | | | | ||
59 | * | C | D | +---------+ +-----+-----+ | ||
60 | * +-----+---+ | D | B | | ||
61 | * | | | | ||
62 | * +-----+-----+ | ||
63 | * | ||
64 | * If the 8x8 block rotator is used, horizontal or vertical flipping | ||
65 | * is done during the rotation step, otherwise flipping is done | ||
66 | * during the scaling step. | ||
67 | * With rotation or flipping, tile order changes between input and | ||
68 | * output image. Tiles are numbered row major from top left to bottom | ||
69 | * right for both input and output image. | ||
51 | */ | 70 | */ |
52 | 71 | ||
53 | #define MAX_STRIPES_W 4 | 72 | #define MAX_STRIPES_W 4 |