Add support for YVYU and VYUY
[android/external-libkmsxx.git] / libkmstest / testpat.cpp
index f621b911da772f96c456dcd5e43d4c6da6b78452..5c6766045a935ccc4c7b34c35ef2dc8e48ec66eb 100644 (file)
@@ -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: