]> git.sesse.net Git - nageru/blobdiff - timecode_renderer.cpp
Support audio-only FFmpeg inputs. Somewhat wonky, though.
[nageru] / timecode_renderer.cpp
index 218120e151971eebb75f35f9af46ef2ee147f9b9..d42020aa7eb0d48cb138b3d631459e00573d567c 100644 (file)
@@ -13,6 +13,8 @@
 #include <movit/util.h>
 #include <sys/time.h>
 
+#include "flags.h"
+
 using namespace std;
 using namespace movit;
 
@@ -41,13 +43,21 @@ TimecodeRenderer::TimecodeRenderer(movit::ResourcePool *resource_pool, unsigned
                "#version 130 \n"
                "in vec2 tc0; \n"
                "uniform sampler2D tex; \n"
-               "out vec4 Y, CbCr, RGBA; \n"
+               "out vec4 Y, CbCr, YCbCr; \n"
                "void main() { \n"
-               "    vec4 gray = texture(tex, tc0); \n"
-               "    RGBA = gray.rrra; \n"
-               "    gray.r = gray.r * ((235.0-16.0)/255.0) + 16.0/255.0; \n"  // Limited-range Y'CbCr.
+               "    vec4 gray = texture(tex, tc0); \n";
+       if (global_flags.ten_bit_output) {
+               frag_shader +=
+                       "    gray.r = gray.r * ((940.0-16.0)/65535.0) + 16.0/65535.0; \n"  // Limited-range Y'CbCr.
+                       "    CbCr = vec4(512.0/65535.0, 512.0/65535.0, 0.0, 1.0); \n";
+       } else {
+               frag_shader +=
+                       "    gray.r = gray.r * ((235.0-16.0)/255.0) + 16.0/255.0; \n"  // Limited-range Y'CbCr.
+                       "    CbCr = vec4(128.0/255.0, 128.0/255.0, 0.0, 1.0); \n";
+       }
+       frag_shader +=
                "    Y = gray.rrra; \n"
-               "    CbCr = vec4(128.0/255.0, 128.0/255.0, 0.0, 1.0); \n"
+               "    YCbCr = vec4(Y.r, CbCr.r, CbCr.g, CbCr.a); \n"
                "} \n";
 
        vector<string> frag_shader_outputs;