From e689ae60dafcc5db6a7266906f38410f0d6f3e24 Mon Sep 17 00:00:00 2001 From: Tomi Valkeinen Date: Thu, 8 Oct 2015 19:12:24 +0300 Subject: Add support for YVYU and VYUY --- libkmstest/testpat.cpp | 53 +++++++++++++++++++++++++++++++------------------- 1 file changed, 33 insertions(+), 20 deletions(-) (limited to 'libkmstest') diff --git a/libkmstest/testpat.cpp b/libkmstest/testpat.cpp index f621b91..5c67660 100644 --- a/libkmstest/testpat.cpp +++ b/libkmstest/testpat.cpp @@ -40,6 +40,9 @@ static void draw_pixel(DumbFramebuffer& buf, unsigned x, unsigned y, RGB color) break; } case PixelFormat::UYVY: + case PixelFormat::YUYV: + case PixelFormat::YVYU: + case PixelFormat::VYUY: { if ((x & 1) == 0) { c1 = color; @@ -51,28 +54,38 @@ static void draw_pixel(DumbFramebuffer& buf, unsigned x, unsigned y, RGB color) YUV yuv1 = c1.yuv(); YUV yuv2 = color.yuv(); - p[0] = (yuv1.u + yuv2.u) / 2; - p[1] = yuv1.y; - p[2] = (yuv1.v + yuv2.v) / 2; - p[3] = yuv2.y; - break; - } - case PixelFormat::YUYV: - { - if ((x & 1) == 0) { - c1 = color; - return; + switch (buf.format()) { + case PixelFormat::UYVY: + p[0] = (yuv1.u + yuv2.u) / 2; + p[1] = yuv1.y; + p[2] = (yuv1.v + yuv2.v) / 2; + p[3] = yuv2.y; + break; + + case PixelFormat::YUYV: + p[0] = yuv1.y; + p[1] = (yuv1.u + yuv2.u) / 2; + p[2] = yuv2.y; + p[3] = (yuv1.v + yuv2.v) / 2; + break; + + case PixelFormat::YVYU: + p[0] = yuv1.y; + p[1] = (yuv1.v + yuv2.v) / 2; + p[2] = yuv2.y; + p[3] = (yuv1.u + yuv2.u) / 2; + break; + + case PixelFormat::VYUY: + p[0] = (yuv1.v + yuv2.v) / 2; + p[1] = yuv1.y; + p[2] = (yuv1.u + yuv2.u) / 2; + p[3] = yuv2.y; + break; + default: + break; } - uint8_t *p = (uint8_t*)(buf.map(0) + buf.stride(0) * y + x * 2); - - YUV yuv1 = c1.yuv(); - YUV yuv2 = color.yuv(); - - p[0] = yuv1.y; - p[1] = (yuv1.u + yuv2.u) / 2; - p[2] = yuv2.y; - p[3] = (yuv1.v + yuv2.v) / 2; break; } default: -- cgit v1.2.3