X-Git-Url: https://git.sesse.net/?a=blobdiff_plain;f=timecode_renderer.cpp;h=a923acd4f3554d1a6d653d9e7ca045dbd24d4dd3;hb=4ecd34848b59533e0db7e70ad893b2d75ad6e464;hp=218120e151971eebb75f35f9af46ef2ee147f9b9;hpb=7f726d57e80de3e18686f0e45482ca48db91e82f;p=nageru diff --git a/timecode_renderer.cpp b/timecode_renderer.cpp index 218120e..a923acd 100644 --- a/timecode_renderer.cpp +++ b/timecode_renderer.cpp @@ -13,6 +13,8 @@ #include #include +#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 frag_shader_outputs; @@ -112,7 +122,7 @@ string TimecodeRenderer::get_timecode_text(double pts, unsigned frame_num) unsigned stream_time_min = stream_time % 60; unsigned stream_time_hour = stream_time / 60; - char timecode_text[256]; + char timecode_text[512]; snprintf(timecode_text, sizeof(timecode_text), "Nageru - %s.%03u UTC - Stream time %02u:%02u:%02u.%03u (frame %u)", clock_text, msecs, stream_time_hour, stream_time_min, stream_time_sec, stream_time_ms, frame_num); return timecode_text;