]> git.sesse.net Git - nageru/blobdiff - timecode_renderer.h
Add a switch for writing a timecode to the stream; useful for latency debugging.
[nageru] / timecode_renderer.h
diff --git a/timecode_renderer.h b/timecode_renderer.h
new file mode 100644 (file)
index 0000000..809a829
--- /dev/null
@@ -0,0 +1,48 @@
+#ifndef _TIMECODE_RENDERER_H
+#define _TIMECODE_RENDERER_H 1
+
+#include <memory>
+#include <string>
+
+#include <epoxy/gl.h>
+
+// A class to render a simple text string onto the picture using Qt and OpenGL.
+
+namespace movit {
+
+class ResourcePool;
+
+}  // namespace movit
+
+class QImage;
+
+class TimecodeRenderer {
+public:
+       TimecodeRenderer(movit::ResourcePool *resource_pool, unsigned display_width, unsigned display_height);
+       ~TimecodeRenderer();
+
+       // Return a string with the current wall clock time and the
+       // logical stream time.
+       static std::string get_timecode_text(double pts, unsigned frame_num);
+
+       // The FBO is assumed to contain three outputs (Y', Cb/Cr and RGBA).
+       void render_timecode(GLuint fbo, const std::string &text);
+
+private:
+       void render_string_to_buffer(const std::string &text);
+       void render_buffer_to_fbo(GLuint fbo);
+
+       movit::ResourcePool *resource_pool;
+       unsigned display_width, display_height, height;
+
+       GLuint vbo;  // Holds position and texcoord data.
+       GLuint tex;
+       //std::unique_ptr<unsigned char[]> pixel_buffer;
+       std::unique_ptr<QImage> image;
+
+       GLuint program_num;  // Owned by <resource_pool>.
+       GLuint texture_sampler_uniform;
+       GLuint position_attribute_index, texcoord_attribute_index;
+};
+
+#endif