Index: /trunk/src/VBox/Frontends/VirtualBox/shaders/cconvAYUV.c
===================================================================
--- /trunk/src/VBox/Frontends/VirtualBox/shaders/cconvAYUV.c	(revision 22640)
+++ /trunk/src/VBox/Frontends/VirtualBox/shaders/cconvAYUV.c	(revision 22640)
@@ -0,0 +1,10 @@
+#extension GL_ARB_texture_rectangle : enable
+
+uniform sampler2DRect uSrcTex;
+
+void cconvApplyAYUV(vec4 color);
+void cconvAYUV(vec2 srcCoord)
+{
+    vec4 color = texture2DRect(uSrcTex, srcCoord);
+    cconvApplyAYUV(color);
+}
Index: /trunk/src/VBox/Frontends/VirtualBox/shaders/cconvAYUV_void.c
===================================================================
--- /trunk/src/VBox/Frontends/VirtualBox/shaders/cconvAYUV_void.c	(revision 22640)
+++ /trunk/src/VBox/Frontends/VirtualBox/shaders/cconvAYUV_void.c	(revision 22640)
@@ -0,0 +1,2 @@
+void cconvAYUV(vec2 srcCoord)
+{}
Index: /trunk/src/VBox/Frontends/VirtualBox/shaders/cconvApplyAYUV.c
===================================================================
--- /trunk/src/VBox/Frontends/VirtualBox/shaders/cconvApplyAYUV.c	(revision 22640)
+++ /trunk/src/VBox/Frontends/VirtualBox/shaders/cconvApplyAYUV.c	(revision 22640)
@@ -0,0 +1,19 @@
+/* AYUV <-> GL_BGRA_EXT
+ * A <-> B
+ * Y <-> G
+ * U <-> R
+ * V <-> A */
+void cconvApplyAYUV(vec4 color)
+{
+    float y, u, v, r, g, b;
+    y = color.g;
+    u = color.r;
+    v = color.a;
+    u = u - 0.5;
+    v = v - 0.5;
+    y = 1.164*(y-0.0625);
+    b = y + 2.018*u;
+    g = y - 0.813*v - 0.391*u;
+    r = y + 1.596*v;
+    gl_FragColor = vec4(r,g,b,1.0);
+}
Index: /trunk/src/VBox/Frontends/VirtualBox/shaders/cconvBGR.c
===================================================================
--- /trunk/src/VBox/Frontends/VirtualBox/shaders/cconvBGR.c	(revision 22640)
+++ /trunk/src/VBox/Frontends/VirtualBox/shaders/cconvBGR.c	(revision 22640)
@@ -0,0 +1,8 @@
+#extension GL_ARB_texture_rectangle : enable
+
+uniform sampler2DRect uSrcTex;
+
+void cconvBGR(vec2 srcCoord)
+{
+    gl_FragColor = texture2DRect(uSrcTex, vec2(srcCoord.x, srcCoord.y));
+}
Index: /trunk/src/VBox/Frontends/VirtualBox/shaders/cconvBGR_void.c
===================================================================
--- /trunk/src/VBox/Frontends/VirtualBox/shaders/cconvBGR_void.c	(revision 22640)
+++ /trunk/src/VBox/Frontends/VirtualBox/shaders/cconvBGR_void.c	(revision 22640)
@@ -0,0 +1,2 @@
+void cconvBGR(vec2 srcCoord)
+{}
Index: /trunk/src/VBox/Frontends/VirtualBox/shaders/cconvUYVY.c
===================================================================
--- /trunk/src/VBox/Frontends/VirtualBox/shaders/cconvUYVY.c	(revision 22640)
+++ /trunk/src/VBox/Frontends/VirtualBox/shaders/cconvUYVY.c	(revision 22640)
@@ -0,0 +1,38 @@
+#extension GL_ARB_texture_rectangle : enable
+
+uniform sampler2DRect uSrcTex;
+
+void cconvApplyAYUV(vec4 color);
+/* texture internalFormat: 4
+ * size: width/2 X height
+ * data format: GL_BGRA_EXT
+ * UYVY ->
+ * U = B
+ * V = R
+ * for even -> Y = G
+ * for odd  -> Y = A
+/* UYVY-rgb888 conversion shader */
+/* this is also Y422 and UYNV */
+void cconvUYVY(vec2 srcCoord)
+{
+    float x = srcCoord.x;
+    vec4 srcClr = texture2DRect(uSrcTex, vec2(x, srcCoord.y));
+    float u = srcClr.b;
+    float v = srcClr.r;
+    int pix = int(x);
+    float part = x - float(pix);
+    float y;
+    if(part < 0.5)
+    {
+        y = srcClr.g;
+    }
+    else
+    {
+        y = srcClr.a;
+    }
+    /* convert it to AYUV (for the GL_BGRA_EXT texture this is mapped as follows:
+     * A -> B
+     * Y -> G
+     * U -> R
+     * V -> A */
+    cconvApplyAYUV(vec4(u, y, 0.0, v));}
Index: /trunk/src/VBox/Frontends/VirtualBox/shaders/cconvUYVY_void.c
===================================================================
--- /trunk/src/VBox/Frontends/VirtualBox/shaders/cconvUYVY_void.c	(revision 22640)
+++ /trunk/src/VBox/Frontends/VirtualBox/shaders/cconvUYVY_void.c	(revision 22640)
@@ -0,0 +1,2 @@
+void cconvUYVY(vec2 srcCoord)
+{}
Index: /trunk/src/VBox/Frontends/VirtualBox/shaders/cconvYUY2.c
===================================================================
--- /trunk/src/VBox/Frontends/VirtualBox/shaders/cconvYUY2.c	(revision 22640)
+++ /trunk/src/VBox/Frontends/VirtualBox/shaders/cconvYUY2.c	(revision 22640)
@@ -0,0 +1,39 @@
+#extension GL_ARB_texture_rectangle : enable
+
+uniform sampler2DRect uSrcTex;
+
+void cconvApplyAYUV(vec4 color);
+/* texture internalFormat: 4
+ * size: width/2 X height
+ * data format: GL_BGRA_EXT
+ * YUYV ->
+ * U = G
+ * V = A
+ * for even -> Y = B
+ * for odd  -> Y = R
+/* UYVY-rgb888 conversion shader */
+/* this is also YUNV, V422 and YUYV */
+void cconvYUY2(vec2 srcCoord)
+{
+    float x = srcCoord.x;
+    vec4 srcClr = texture2DRect(uSrcTex, vec2(x, srcCoord.y));
+    float u = srcClr.g;
+    float v = srcClr.a;
+    int pix = int(x);
+    float part = x - float(pix);
+    float y;
+    if(part < 0.5)
+    {
+        y = srcClr.b;
+    }
+    else
+    {
+        y = srcClr.r;
+    }
+    /* convert it to AYUV (for the GL_BGRA_EXT texture this is mapped as follows:
+     * A -> B
+     * Y -> G
+     * U -> R
+     * V -> A */
+    cconvApplyAYUV(vec4(u, y, 0.0, v));
+}
Index: /trunk/src/VBox/Frontends/VirtualBox/shaders/cconvYUY2_void.c
===================================================================
--- /trunk/src/VBox/Frontends/VirtualBox/shaders/cconvYUY2_void.c	(revision 22640)
+++ /trunk/src/VBox/Frontends/VirtualBox/shaders/cconvYUY2_void.c	(revision 22640)
@@ -0,0 +1,2 @@
+void cconvYUY2(vec2 srcCoord)
+{}
Index: /trunk/src/VBox/Frontends/VirtualBox/shaders/cconvYV12.c
===================================================================
--- /trunk/src/VBox/Frontends/VirtualBox/shaders/cconvYV12.c	(revision 22640)
+++ /trunk/src/VBox/Frontends/VirtualBox/shaders/cconvYV12.c	(revision 22640)
@@ -0,0 +1,30 @@
+#extension GL_ARB_texture_rectangle : enable
+
+uniform sampler2DRect uSrcTex;
+uniform sampler2DRect uVTex;
+uniform sampler2DRect uUTex;
+
+float splitBGRA(vec4 color, float coord);
+void cconvApplyAYUV(vec4 color);
+/* texture internalFormat: GL_LUMINANCE
+ * size: width X height
+ * data format: GL_LUMINANCE
+ *
+/* YV12-rgb888 conversion shader */
+void cconvYV12(vec2 srcCoord)
+{
+    vec4 clrY = texture2DRect(uSrcTex, srcCoord);
+    vec4 clrV = texture2DRect(uVTex, vec2(gl_TexCoord[2]));
+    vec4 clrU = texture2DRect(uUTex, vec2(gl_TexCoord[3]));
+    float y = splitBGRA(clrY, srcCoord.x);
+    float v = splitBGRA(clrV, gl_TexCoord[2].x);
+    float u = splitBGRA(clrU, gl_TexCoord[3].x);
+
+    /* convert it to AYUV (for the GL_BGRA_EXT texture this is mapped as follows:
+     * A -> B
+     * Y -> G
+     * U -> R
+     * V -> A */
+    cconvApplyAYUV(vec4(u, y, 0.0, v));
+//    gl_FragColor = vec4(clrY.r,clrY.r,clrY.r,1.0);
+}
Index: /trunk/src/VBox/Frontends/VirtualBox/shaders/cconvYV12_void.c
===================================================================
--- /trunk/src/VBox/Frontends/VirtualBox/shaders/cconvYV12_void.c	(revision 22640)
+++ /trunk/src/VBox/Frontends/VirtualBox/shaders/cconvYV12_void.c	(revision 22640)
@@ -0,0 +1,2 @@
+void cconvYV12(vec2 srcCoord)
+{}
Index: /trunk/src/VBox/Frontends/VirtualBox/shaders/ckeyDst.c
===================================================================
--- /trunk/src/VBox/Frontends/VirtualBox/shaders/ckeyDst.c	(revision 22640)
+++ /trunk/src/VBox/Frontends/VirtualBox/shaders/ckeyDst.c	(revision 22640)
@@ -0,0 +1,15 @@
+#extension GL_ARB_texture_rectangle : enable
+
+uniform sampler2DRect uDstTex;
+uniform vec4 uDstClr;
+
+vec2 ckeyDst(void)
+{
+    vec4 dstClr = texture2DRect(uDstTex, vec2(gl_TexCoord[0]));
+    vec3 difClr = dstClr.rgb - uDstClr.rgb;
+    if(any(greaterThan(difClr, vec3(0.01, 0.01, 0.01)))
+        || any(lessThan(difClr, vec3(-0.01, -0.01, -0.01))))
+            discard;
+//    /* gl_FragColor = texture2DRect(uSrcTex, vec2(gl_TexCoord[1])); */
+    return vec2(gl_TexCoord[1]);
+}
Index: /trunk/src/VBox/Frontends/VirtualBox/shaders/ckeyDst_void.c
===================================================================
--- /trunk/src/VBox/Frontends/VirtualBox/shaders/ckeyDst_void.c	(revision 22640)
+++ /trunk/src/VBox/Frontends/VirtualBox/shaders/ckeyDst_void.c	(revision 22640)
@@ -0,0 +1,4 @@
+vec2 ckeyDst(void)
+{
+    return vec2(gl_TexCoord[0]);
+}
Index: /trunk/src/VBox/Frontends/VirtualBox/shaders/mainOverlay.c
===================================================================
--- /trunk/src/VBox/Frontends/VirtualBox/shaders/mainOverlay.c	(revision 22640)
+++ /trunk/src/VBox/Frontends/VirtualBox/shaders/mainOverlay.c	(revision 22640)
@@ -0,0 +1,17 @@
+vec2 ckeyDst(void);
+void cconvYV12(vec2 srcCoord);
+void cconvUYVY(vec2 srcCoord);
+void cconvYUY2(vec2 srcCoord);
+void cconvAYUV(vec2 srcCoord);
+void cconvBGR(vec2 srcCoord);
+
+void main(void)
+{
+	vec2 srcCoord = ckeyDst();
+
+	cconvYV12(srcCoord);
+	cconvUYVY(srcCoord);
+	cconvYUY2(srcCoord);
+	cconvAYUV(srcCoord);
+	cconvBGR(srcCoord);
+}
Index: /trunk/src/VBox/Frontends/VirtualBox/shaders/splitBGRA.c
===================================================================
--- /trunk/src/VBox/Frontends/VirtualBox/shaders/splitBGRA.c	(revision 22640)
+++ /trunk/src/VBox/Frontends/VirtualBox/shaders/splitBGRA.c	(revision 22640)
@@ -0,0 +1,14 @@
+
+float splitBGRA(vec4 color, float coord)
+{
+    int pix = int(coord);
+	float part = coord - float(pix);
+	/* todo: do not use if */
+	if(part < 0.25)
+		return color.b;
+	if(part < 0.5)
+		return color.g;
+	if(part < 0.75)
+		return color.r;
+	return color.a;
+}
