Skip to content

Commit

Permalink
drm/omap: fix WB height with interlace
Browse files Browse the repository at this point in the history
When using WB capture from interlaced source, we need to halve the
picture heights correctly.

Unfortunately the current dispc_ovl_setup_common() doesn't deal with
interlace very neatly, so the end result is a bit messy.

Signed-off-by: Tomi Valkeinen <tomi.valkeinen@ti.com>
Acked-by: Benoit Parrot <bparrot@ti.com>
  • Loading branch information
Tomi Valkeinen committed Mar 1, 2018
1 parent b994e53 commit 1317ef2
Showing 1 changed file with 16 additions and 12 deletions.
28 changes: 16 additions & 12 deletions drivers/gpu/drm/omapdrm/dss/dispc.c
Original file line number Diff line number Diff line change
Expand Up @@ -2597,18 +2597,19 @@ static int dispc_ovl_setup_common(struct dispc_device *dispc,
out_width = out_width == 0 ? width : out_width;
out_height = out_height == 0 ? height : out_height;

if (ilace && height == out_height)
fieldmode = true;

if (ilace) {
if (fieldmode)
in_height /= 2;
pos_y /= 2;
out_height /= 2;

DSSDBG("adjusting for ilace: height %d, pos_y %d, "
"out_height %d\n", in_height, pos_y,
out_height);
if (plane != OMAP_DSS_WB) {
if (ilace && height == out_height)
fieldmode = true;

if (ilace) {
if (fieldmode)
in_height /= 2;
pos_y /= 2;
out_height /= 2;

DSSDBG("adjusting for ilace: height %d, pos_y %d, out_height %d\n",
in_height, pos_y, out_height);
}
}

if (!dispc_ovl_color_mode_supported(dispc, plane, fourcc))
Expand Down Expand Up @@ -2771,6 +2772,9 @@ int dispc_wb_setup(struct dispc_device *dispc,
enum omap_overlay_caps caps =
OMAP_DSS_OVL_CAP_SCALE | OMAP_DSS_OVL_CAP_PRE_MULT_ALPHA;

if (vm->flags & DISPLAY_FLAGS_INTERLACED)
in_height /= 2;

DSSDBG("dispc_wb_setup, pa %x, pa_uv %x, %d,%d -> %dx%d, cmode %x, "
"rot %d\n", wi->paddr, wi->p_uv_addr, in_width,
in_height, wi->width, wi->height, wi->fourcc, wi->rotation);
Expand Down

0 comments on commit 1317ef2

Please sign in to comment.