]> git.sesse.net Git - nageru/blobdiff - flow.h
Decode 4:2:2 JPEGs via VA-API if available.
[nageru] / flow.h
diff --git a/flow.h b/flow.h
index f268316bd6882e7ea0f3d1a4dd305af6a368b5d3..9536a3808034868810f4ba3143d782b3315b11a4 100644 (file)
--- a/flow.h
+++ b/flow.h
@@ -453,7 +453,7 @@ public:
        Splat(const OperatingPoint &op);
 
        // alpha is the time of the interpolated frame (0..1).
-       void exec(GLuint image_tex, GLuint bidirectional_flow_tex, GLuint flow_tex, GLuint depth_rb, int width, int height, float alpha);
+       void exec(GLuint gray_tex, GLuint bidirectional_flow_tex, GLuint flow_tex, GLuint depth_rb, int width, int height, float alpha);
 
 private:
        const OperatingPoint op;
@@ -464,7 +464,7 @@ private:
        GLuint splat_program;
 
        GLuint uniform_splat_size, uniform_alpha;
-       GLuint uniform_image_tex, uniform_flow_tex;
+       GLuint uniform_gray_tex, uniform_flow_tex;
        GLuint uniform_inv_flow_size;
 };
 
@@ -522,11 +522,15 @@ private:
 
 class Blend {
 public:
-       Blend();
-       void exec(GLuint image_tex, GLuint flow_tex, GLuint output_tex, int width, int height, float alpha);
+       Blend(bool split_ycbcr_output);
+
+       // output2_tex is only used if split_ycbcr_output was true.
+       void exec(GLuint image_tex, GLuint flow_tex, GLuint output_tex, GLuint output2_tex, int width, int height, float alpha);
 
 private:
+       bool split_ycbcr_output;
        PersistentFBOSet<1> fbos;
+       PersistentFBOSet<2> fbos_split;
        GLuint blend_vs_obj;
        GLuint blend_fs_obj;
        GLuint blend_program;
@@ -537,12 +541,12 @@ private:
 
 class Interpolate {
 public:
-       Interpolate(int width, int height, const OperatingPoint &op);
+       Interpolate(int width, int height, const OperatingPoint &op, bool split_ycbcr_output);
 
-       // Returns a texture that must be released with release_texture()
-       // after use. image_tex must be a two-layer RGBA8 texture with mipmaps
-       // (unless flow_level == 0).
-       GLuint exec(GLuint image_tex, GLuint bidirectional_flow_tex, GLuint width, GLuint height, float alpha);
+       // Returns a texture (or two, if split_ycbcr_output is true) that must
+       // be released with release_texture() after use. image_tex must be a
+       // two-layer RGBA8 texture with mipmaps (unless flow_level == 0).
+       std::pair<GLuint, GLuint> exec(GLuint image_tex, GLuint gray_tex, GLuint bidirectional_flow_tex, GLuint width, GLuint height, float alpha);
 
        void release_texture(GLuint tex) {
                pool.release_texture(tex);
@@ -553,6 +557,7 @@ private:
        GLuint vertex_vbo, vao;
        TexturePool pool;
        const OperatingPoint op;
+       const bool split_ycbcr_output;
 
        Splat splat;
        HoleFill hole_fill;