]> git.sesse.net Git - movit/blobdiff - ycbcr_input.cpp
Drop setting the locale altogether.
[movit] / ycbcr_input.cpp
index 4166da9752d35c78b8061a3ca24dabef198c6daf..22d689d2a04997edf43fd8a7e768720a176a25be 100644 (file)
@@ -1,6 +1,6 @@
 #include <Eigen/Core>
 #include <Eigen/LU>
-#include <GL/glew.h>
+#include <epoxy/gl.h>
 #include <assert.h>
 #include <stdio.h>
 #include <string.h>
@@ -11,6 +11,9 @@
 #include "ycbcr_input.h"
 
 using namespace Eigen;
+using namespace std;
+
+namespace movit {
 
 namespace {
 
@@ -62,7 +65,6 @@ YCbCrInput::YCbCrInput(const ImageFormat &image_format,
                        unsigned width, unsigned height)
        : image_format(image_format),
          ycbcr_format(ycbcr_format),
-         finalized(false),
          needs_mipmaps(false),
          width(width),
          height(height),
@@ -95,12 +97,7 @@ YCbCrInput::~YCbCrInput()
        }
 }
 
-void YCbCrInput::finalize()
-{
-       finalized = true;
-}
-       
-void YCbCrInput::set_gl_state(GLuint glsl_program_num, const std::string& prefix, unsigned *sampler_num)
+void YCbCrInput::set_gl_state(GLuint glsl_program_num, const string& prefix, unsigned *sampler_num)
 {
        for (unsigned channel = 0; channel < 3; ++channel) {
                glActiveTexture(GL_TEXTURE0 + *sampler_num + channel);
@@ -108,7 +105,7 @@ void YCbCrInput::set_gl_state(GLuint glsl_program_num, const std::string& prefix
 
                if (texture_num[channel] == 0) {
                        // (Re-)upload the texture.
-                       texture_num[channel] = resource_pool->create_2d_texture(GL_LUMINANCE8, widths[channel], heights[channel]);
+                       texture_num[channel] = resource_pool->create_2d_texture(GL_R8, widths[channel], heights[channel]);
                        glBindTexture(GL_TEXTURE_2D, texture_num[channel]);
                        check_error();
                        glTexParameteri(GL_TEXTURE_2D, GL_TEXTURE_MIN_FILTER, GL_LINEAR);
@@ -119,7 +116,7 @@ void YCbCrInput::set_gl_state(GLuint glsl_program_num, const std::string& prefix
                        check_error();
                        glPixelStorei(GL_UNPACK_ROW_LENGTH, pitch[channel]);
                        check_error();
-                       glTexSubImage2D(GL_TEXTURE_2D, 0, 0, 0, widths[channel], heights[channel], GL_LUMINANCE, GL_UNSIGNED_BYTE, pixel_data[channel]);
+                       glTexSubImage2D(GL_TEXTURE_2D, 0, 0, 0, widths[channel], heights[channel], GL_RED, GL_UNSIGNED_BYTE, pixel_data[channel]);
                        check_error();
                        glPixelStorei(GL_UNPACK_ROW_LENGTH, 0);
                        check_error();
@@ -144,7 +141,7 @@ void YCbCrInput::set_gl_state(GLuint glsl_program_num, const std::string& prefix
        *sampler_num += 3;
 }
 
-std::string YCbCrInput::output_fragment_shader()
+string YCbCrInput::output_fragment_shader()
 {
        float coeff[3], offset[3], scale[3];
 
@@ -212,34 +209,23 @@ std::string YCbCrInput::output_fragment_shader()
        // Inverting the matrix gives us what we need to go from YCbCr back to RGB.
        Matrix3d ycbcr_to_rgb = rgb_to_ycbcr.inverse();
 
-       std::string frag_shader;
+       string frag_shader;
 
        frag_shader = output_glsl_mat3("PREFIX(inv_ycbcr_matrix)", ycbcr_to_rgb);
-
-       char buf[256];
-       sprintf(buf, "const vec3 PREFIX(offset) = vec3(%.8f, %.8f, %.8f);\n",
-               offset[0], offset[1], offset[2]);
-       frag_shader += buf;
-
-       sprintf(buf, "const vec3 PREFIX(scale) = vec3(%.8f, %.8f, %.8f);\n",
-               scale[0], scale[1], scale[2]);
-       frag_shader += buf;
+       frag_shader += output_glsl_vec3("PREFIX(offset)", offset[0], offset[1], offset[2]);
+       frag_shader += output_glsl_vec3("PREFIX(scale)", scale[0], scale[1], scale[2]);
 
        float cb_offset_x = compute_chroma_offset(
                ycbcr_format.cb_x_position, ycbcr_format.chroma_subsampling_x, widths[1]);
        float cb_offset_y = compute_chroma_offset(
                ycbcr_format.cb_y_position, ycbcr_format.chroma_subsampling_y, heights[1]);
-       sprintf(buf, "const vec2 PREFIX(cb_offset) = vec2(%.8f, %.8f);\n",
-               cb_offset_x, cb_offset_y);
-       frag_shader += buf;
+       frag_shader += output_glsl_vec2("PREFIX(cb_offset)", cb_offset_x, cb_offset_y);
 
        float cr_offset_x = compute_chroma_offset(
                ycbcr_format.cr_x_position, ycbcr_format.chroma_subsampling_x, widths[2]);
        float cr_offset_y = compute_chroma_offset(
                ycbcr_format.cr_y_position, ycbcr_format.chroma_subsampling_y, heights[2]);
-       sprintf(buf, "const vec2 PREFIX(cr_offset) = vec2(%.8f, %.8f);\n",
-               cr_offset_x, cr_offset_y);
-       frag_shader += buf;
+       frag_shader += output_glsl_vec2("PREFIX(cr_offset)", cr_offset_x, cr_offset_y);
 
        frag_shader += read_file("ycbcr_input.frag");
        return frag_shader;
@@ -254,3 +240,5 @@ void YCbCrInput::invalidate_pixel_data()
                }
        }
 }
+
+}  // namespace movit