]> git.sesse.net Git - movit/blobdiff - ycbcr_input.frag
Add YCbCr input. Required a bit of reworking of the sRGB extension stuff, but seems...
[movit] / ycbcr_input.frag
diff --git a/ycbcr_input.frag b/ycbcr_input.frag
new file mode 100644 (file)
index 0000000..13e44b0
--- /dev/null
@@ -0,0 +1,23 @@
+uniform sampler2D PREFIX(tex_y);
+uniform sampler2D PREFIX(tex_cb);
+uniform sampler2D PREFIX(tex_cr);
+
+vec4 FUNCNAME(vec2 tc) {
+       // OpenGL's origin is bottom-left, but most graphics software assumes
+       // a top-left origin. Thus, for inputs that come from the user,
+       // we flip the y coordinate.
+       tc.y = 1.0 - tc.y;
+
+       vec3 ycbcr;
+       ycbcr.x = texture2D(PREFIX(tex_y), tc).x;
+       ycbcr.y = texture2D(PREFIX(tex_cb), tc + PREFIX(chroma_offset)).x;
+       ycbcr.z = texture2D(PREFIX(tex_cr), tc + PREFIX(chroma_offset)).x;
+
+       ycbcr -= PREFIX(offset);
+       ycbcr *= PREFIX(scale);
+
+       vec4 rgba;
+       rgba.rgb = PREFIX(inv_ycbcr_matrix) * ycbcr;
+       rgba.a = 1.0;
+       return rgba;
+}