#include <movit/util.h>
#include <sys/time.h>
+#include "flags.h"
+
using namespace std;
using namespace movit;
"#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;
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;