]> git.sesse.net Git - movit/blobdiff - footer.frag
Support multiple Y'CbCr outputs.
[movit] / footer.frag
index 339ef7bbb335887fd36f4d209f03d3dfb6247618..8a55b01bbaa373a3a9d20d27d98ef2c80fcf1b0a 100644 (file)
@@ -9,6 +9,18 @@
 #define YCBCR_OUTPUT_SPLIT_Y_AND_CBCR 0
 #endif
 
+#ifndef SECOND_YCBCR_OUTPUT_PLANAR
+#define SECOND_YCBCR_OUTPUT_PLANAR 0
+#endif
+
+#ifndef SECOND_YCBCR_OUTPUT_SPLIT_Y_AND_CBCR
+#define SECOND_YCBCR_OUTPUT_SPLIT_Y_AND_CBCR 0
+#endif
+
+#ifndef SECOND_YCBCR_OUTPUT_INTERLEAVED
+#define SECOND_YCBCR_OUTPUT_INTERLEAVED 0
+#endif
+
 #ifndef YCBCR_ALSO_OUTPUT_RGBA
 #define YCBCR_ALSO_OUTPUT_RGBA 0
 #endif
 #endif
 
 #if YCBCR_OUTPUT_PLANAR
-out vec4 Y;
-out vec4 Cb;
-out vec4 Cr;
+out vec4 Y, Cb, Cr;
 #elif YCBCR_OUTPUT_SPLIT_Y_AND_CBCR
-out vec4 Y;
-out vec4 Chroma;
+out vec4 Y, Chroma;
 #else
-out vec4 FragColor;
+out vec4 FragColor;  // Y'CbCr or RGBA.
+#endif
+
+#if SECOND_YCBCR_OUTPUT_PLANAR
+out vec4 Y2, Cb2, Cr2;
+#elif SECOND_YCBCR_OUTPUT_SPLIT_Y_AND_CBCR
+out vec4 Y2, Chroma2;
+#elif SECOND_YCBCR_OUTPUT_INTERLEAVED
+out vec4 YCbCr2;
 #endif
 
 #if YCBCR_ALSO_OUTPUT_RGBA
@@ -58,6 +75,19 @@ void main()
        FragColor = color0;
 #endif
 
+       // Exactly the same, just with other outputs.
+       // (GLSL does not allow arrays of outputs.)
+#if SECOND_YCBCR_OUTPUT_PLANAR
+       Y2 = color0.rrra;
+       Cb2 = color0.ggga;
+       Cr2 = color0.bbba;
+#elif SECOND_YCBCR_OUTPUT_SPLIT_Y_AND_CBCR
+       Y2 = color0.rrra;
+       Chroma2 = color0.gbba;
+#elif SECOND_YCBCR_OUTPUT_INTERLEAVED
+       YCbCr2 = color0;
+#endif
+
 #if YCBCR_ALSO_OUTPUT_RGBA
        RGBA = color1;
 #endif