[vlc-devel] [vlc-commits] vout: opengl: resize fmt to the max size the HW can handle

Rémi Denis-Courmont remi at remlab.net
Wed Jul 12 03:08:58 CEST 2017


Le 12 juillet 2017 00:23:30 GMT+08:00, "victorien.lecouviour.tuffet at gmail.com" <git at videolan.org> a écrit :
>vlc | branch: master | victorien.lecouviour.tuffet at gmail.com
><victorien.lecouviour.tuffet at gmail.com> | Fri Jul  7 17:19:30 2017
>+0200| [4546bd4d5dac831e99f11b4daace222ce5267473] | committer:
>Jean-Baptiste Kempf
>
>vout: opengl: resize fmt to the max size the HW can handle
>
>This fixes the issue #18215 for Linux, MacOS and Windows when using
>OpenGL
>vout, as well as the issue #18214.
>
>Signed-off-by: Jean-Baptiste Kempf <jb at videolan.org>
>
>>
>http://git.videolan.org/gitweb.cgi/vlc.git/?a=commit;h=4546bd4d5dac831e99f11b4daace222ce5267473
>---
>
>modules/video_output/opengl/vout_helper.c | 38
>+++++++++++++++++++++++++++++++
> 1 file changed, 38 insertions(+)
>
>diff --git a/modules/video_output/opengl/vout_helper.c
>b/modules/video_output/opengl/vout_helper.c
>index 82650b7a85..075b1c2ee8 100644
>--- a/modules/video_output/opengl/vout_helper.c
>+++ b/modules/video_output/opengl/vout_helper.c
>@@ -602,6 +602,35 @@ opengl_init_program(vout_display_opengl_t *vgl,
>struct prgm *prgm,
>     return VLC_SUCCESS;
> }
> 
>+static void
>+ResizeFormatToGLMaxTexSize(video_format_t *fmt, unsigned int
>max_tex_size)
>+{
>+    if (fmt->i_width > fmt->i_height)
>+    {
>+        unsigned int const  vis_w = fmt->i_visible_width;
>+        unsigned int const  vis_h = fmt->i_visible_height;
>+        unsigned int const  nw_w = max_tex_size;
>+        unsigned int const  nw_vis_w = nw_w * vis_w / fmt->i_width;
>+
>+        fmt->i_height = nw_w * fmt->i_height / fmt->i_width;
>+        fmt->i_width = nw_w;
>+        fmt->i_visible_height = nw_vis_w * vis_h / vis_w;
>+        fmt->i_visible_width = nw_vis_w;
>+    }
>+    else
>+    {
>+        unsigned int const  vis_w = fmt->i_visible_width;
>+        unsigned int const  vis_h = fmt->i_visible_height;
>+        unsigned int const  nw_h = max_tex_size;
>+        unsigned int const  nw_vis_h = nw_h * vis_h / fmt->i_height;
>+
>+        fmt->i_width = nw_h * fmt->i_width / fmt->i_height;
>+        fmt->i_height = nw_h;
>+        fmt->i_visible_width = nw_vis_h * vis_w / vis_h;
>+        fmt->i_visible_height = nw_vis_h;
>+    }
>+}
>+
> vout_display_opengl_t *vout_display_opengl_New(video_format_t *fmt,
>                               const vlc_fourcc_t **subpicture_chromas,
>                                                vlc_gl_t *gl,
>@@ -700,6 +729,15 @@ vout_display_opengl_t
>*vout_display_opengl_New(video_format_t *fmt,
> #endif
> #undef GET_PROC_ADDR
> 
>+    /* Resize the format if it is greater than the maximum texture
>size
>+     * supported by the hardware */
>+    GLint       max_tex_size;
>+    glGetIntegerv(GL_MAX_TEXTURE_SIZE, &max_tex_size);
>+
>+    if ((GLint)fmt->i_width > max_tex_size ||
>+        (GLint)fmt->i_height > max_tex_size)
>+        ResizeFormatToGLMaxTexSize(fmt, max_tex_size);
>+
> #if defined(USE_OPENGL_ES2)
>/* OpenGL ES 2 includes support for non-power of 2 textures by
>specification
>* so checks for extensions are bound to fail. Check for OpenGL ES
>version instead. */
>
>_______________________________________________
>vlc-commits mailing list
>vlc-commits at videolan.org
>https://mailman.videolan.org/listinfo/vlc-commits

The physical dimensions don't seem to make sense here.
-- 
Rémi Denis-Courmont
Typed on an inconvenient virtual keyboard
-------------- next part --------------
An HTML attachment was scrubbed...
URL: <http://mailman.videolan.org/pipermail/vlc-devel/attachments/20170712/daed1ee1/attachment.html>


More information about the vlc-devel mailing list