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.valkei...@ti.com>
Acked-by: Benoit Parrot <bpar...@ti.com>
---
 drivers/gpu/drm/omapdrm/dss/dispc.c | 28 ++++++++++++++++------------
 1 file changed, 16 insertions(+), 12 deletions(-)

diff --git a/drivers/gpu/drm/omapdrm/dss/dispc.c 
b/drivers/gpu/drm/omapdrm/dss/dispc.c
index 99bbc97d0de4..3d804187df13 100644
--- a/drivers/gpu/drm/omapdrm/dss/dispc.c
+++ b/drivers/gpu/drm/omapdrm/dss/dispc.c
@@ -2496,18 +2496,19 @@ static int dispc_ovl_setup_common(enum omap_plane_id 
plane,
        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(plane, fourcc))
@@ -2667,6 +2668,9 @@ int dispc_wb_setup(const struct omap_dss_writeback_info 
*wi,
        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);
-- 
Texas Instruments Finland Oy, Porkkalankatu 22, 00180 Helsinki.
Y-tunnus/Business ID: 0615521-4. Kotipaikka/Domicile: Helsinki

_______________________________________________
dri-devel mailing list
dri-devel@lists.freedesktop.org
https://lists.freedesktop.org/mailman/listinfo/dri-devel

Reply via email to