]> git.sesse.net Git - nageru/commitdiff
Fix timecode rendering for 10-bit output.
authorSteinar H. Gunderson <sgunderson@bigfoot.com>
Fri, 17 Mar 2017 18:59:42 +0000 (19:59 +0100)
committerSteinar H. Gunderson <sgunderson@bigfoot.com>
Fri, 17 Mar 2017 18:59:42 +0000 (19:59 +0100)
timecode_renderer.cpp

index 218120e151971eebb75f35f9af46ef2ee147f9b9..b70904a8346fdf365e7d06c21c7d783aa0820b98 100644 (file)
@@ -13,6 +13,8 @@
 #include <movit/util.h>
 #include <sys/time.h>
 
+#include "flags.h"
+
 using namespace std;
 using namespace movit;
 
@@ -44,11 +46,19 @@ TimecodeRenderer::TimecodeRenderer(movit::ResourcePool *resource_pool, unsigned
                "out vec4 Y, CbCr, RGBA; \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.
-               "    Y = gray.rrra; \n"
-               "    CbCr = vec4(128.0/255.0, 128.0/255.0, 0.0, 1.0); \n"
-               "} \n";
+               "    RGBA = gray.rrra; \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.
+                       "    Y = gray.rrra; \n"
+                       "    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.
+                       "    Y = gray.rrra; \n"
+                       "    CbCr = vec4(128.0/255.0, 128.0/255.0, 0.0, 1.0); \n";
+       }
+       frag_shader += "} \n";
 
        vector<string> frag_shader_outputs;
        program_num = resource_pool->compile_glsl_program(vert_shader, frag_shader, frag_shader_outputs);