[vlc-devel] [PATCH v2 08/21] opengl: extract interop initialization

Romain Vimont rom1v at videolabs.io
Tue Jan 7 12:41:44 CET 2020


Move interop-specific initialization out of
opengl_fragment_shader_init_impl(), so that interops can be initialized
separately.
---
 .../video_output/opengl/fragment_shaders.c    | 53 ++++++++++++-------
 1 file changed, 34 insertions(+), 19 deletions(-)

diff --git a/modules/video_output/opengl/fragment_shaders.c b/modules/video_output/opengl/fragment_shaders.c
index e54fdf389d..7686512c85 100644
--- a/modules/video_output/opengl/fragment_shaders.c
+++ b/modules/video_output/opengl/fragment_shaders.c
@@ -516,6 +516,32 @@ xyz12_shader_init(opengl_tex_converter_t *tc)
     return fragment_shader;
 }
 
+static int
+opengl_interop_init(struct vlc_gl_interop *interop, GLenum tex_target,
+                    vlc_fourcc_t chroma, bool is_yuv,
+                    const vlc_chroma_description_t *desc,
+                    video_color_space_t yuv_space,
+                    const char *swizzle_per_tex[])
+{
+    assert(!interop->fmt.p_palette);
+    interop->sw_fmt = interop->fmt;
+    interop->sw_fmt.i_chroma = chroma;
+    interop->sw_fmt.space = yuv_space;
+    interop->tex_target = tex_target;
+
+    if (chroma == VLC_CODEC_XYZ12)
+    {
+        interop_xyz12_init(interop);
+        return VLC_SUCCESS;
+    }
+
+    if (is_yuv)
+        return interop_yuv_base_init(interop, tex_target, chroma, desc,
+                                      swizzle_per_tex);
+
+    return interop_rgb_base_init(interop, tex_target, chroma);
+}
+
 GLuint
 opengl_fragment_shader_init_impl(opengl_tex_converter_t *tc, GLenum tex_target,
                                  vlc_fourcc_t chroma, video_color_space_t yuv_space)
@@ -527,33 +553,24 @@ opengl_fragment_shader_init_impl(opengl_tex_converter_t *tc, GLenum tex_target,
     bool yuv_swap_uv = false;
     int ret;
 
-    assert(!tc->interop.fmt.p_palette);
-    tc->interop.sw_fmt = tc->interop.fmt;
-    tc->interop.sw_fmt.i_chroma = chroma;
-    tc->interop.sw_fmt.space = yuv_space;
-
     const vlc_chroma_description_t *desc = vlc_fourcc_GetChromaDescription(chroma);
     if (desc == NULL)
         return 0;
 
+    ret = opengl_interop_init(&tc->interop, tex_target, chroma, is_yuv,
+                              desc, yuv_space, swizzle_per_tex);
+    if (ret != VLC_SUCCESS)
+        return 0;
+
     if (chroma == VLC_CODEC_XYZ12)
-    {
-        interop_xyz12_init(&tc->interop);
         return xyz12_shader_init(tc);
-    }
 
     if (is_yuv)
     {
-        ret = interop_yuv_base_init(&tc->interop, tex_target, chroma, desc,
-                                    swizzle_per_tex);
-        if (ret == VLC_SUCCESS)
-            ret = tc_yuv_base_init(tc, chroma, desc, yuv_space, &yuv_swap_uv);
+        ret = tc_yuv_base_init(tc, chroma, desc, yuv_space, &yuv_swap_uv);
+        if (ret != VLC_SUCCESS)
+            return 0;
     }
-    else
-        ret = interop_rgb_base_init(&tc->interop, tex_target, chroma);
-
-    if (ret != VLC_SUCCESS)
-        return 0;
 
     const char *sampler, *lookup, *coord_name;
     switch (tex_target)
@@ -777,8 +794,6 @@ opengl_fragment_shader_init_impl(opengl_tex_converter_t *tc, GLenum tex_target,
                 (const char *)&chroma, yuv_space, ms.ptr);
     free(ms.ptr);
 
-    interop->tex_target = tex_target;
-
     tc->pf_fetch_locations = tc_base_fetch_locations;
     tc->pf_prepare_shader = tc_base_prepare_shader;
 
-- 
2.25.0.rc0



More information about the vlc-devel mailing list