[vlc-devel] [PATCH 14/20] opengl: flip the alignment once on Open

Steve Lhomme robux4 at ycbcr.xyz
Tue Aug 25 09:30:02 CEST 2020


---
 modules/video_output/caopengllayer.m  | 12 +++++------
 modules/video_output/macosx.m         | 18 +++++++----------
 modules/video_output/opengl/display.c | 29 ++++++++-------------------
 3 files changed, 21 insertions(+), 38 deletions(-)

diff --git a/modules/video_output/caopengllayer.m b/modules/video_output/caopengllayer.m
index e81f8210117..fbdbc8b59dc 100644
--- a/modules/video_output/caopengllayer.m
+++ b/modules/video_output/caopengllayer.m
@@ -213,6 +213,12 @@ static int Open (vout_display_t *vd, vout_display_cfg_t *cfg,
             outputSize = [sys->container visibleRect].size;
         vout_window_ReportSize(sys->embed, (int)outputSize.width, (int)outputSize.height);
 
+        /* Reverse vertical alignment as the GL tex are Y inverted */
+        if (cfg->align.vertical == VLC_VIDEO_ALIGN_TOP)
+            cfg->align.vertical = VLC_VIDEO_ALIGN_BOTTOM;
+        else if (cfg->align.vertical == VLC_VIDEO_ALIGN_BOTTOM)
+            cfg->align.vertical = VLC_VIDEO_ALIGN_TOP;
+
         return VLC_SUCCESS;
 
     bailout:
@@ -317,12 +323,6 @@ static int Control (vout_display_t *vd, int query, va_list ap)
             cfg_tmp.display.width = bounds.size.width;
             cfg_tmp.display.height = bounds.size.height;
 
-            /* Reverse vertical alignment as the GL tex are Y inverted */
-            if (cfg_tmp.align.vertical == VLC_VIDEO_ALIGN_TOP)
-                cfg_tmp.align.vertical = VLC_VIDEO_ALIGN_BOTTOM;
-            else if (cfg_tmp.align.vertical == VLC_VIDEO_ALIGN_BOTTOM)
-                cfg_tmp.align.vertical = VLC_VIDEO_ALIGN_TOP;
-
             vout_display_place_t place;
             vout_display_PlacePicture(&place, &vd->source, &cfg_tmp);
             if (unlikely(OpenglLock(sys->gl)))
diff --git a/modules/video_output/macosx.m b/modules/video_output/macosx.m
index 80247f1f29a..ffa6b83ee0f 100644
--- a/modules/video_output/macosx.m
+++ b/modules/video_output/macosx.m
@@ -241,6 +241,12 @@ static int Open (vout_display_t *vd, vout_display_cfg_t *cfg,
         vd->control = Control;
         vd->close   = Close;
 
+        /* Reverse vertical alignment as the GL tex are Y inverted */
+        if (cfg->align.vertical == VLC_VIDEO_ALIGN_TOP)
+            cfg->align.vertical = VLC_VIDEO_ALIGN_BOTTOM;
+        else if (cfg->align.vertical == VLC_VIDEO_ALIGN_BOTTOM)
+            cfg->align.vertical = VLC_VIDEO_ALIGN_TOP;
+
         /* */
         // FIXME: this call leads to a fatal mutex locking error in vout_ChangeDisplaySize()
         // vout_window_ReportSize(sys->embed, fmt->i_visible_width, fmt->i_visible_height);
@@ -350,18 +356,8 @@ static int Control (vout_display_t *vd, int query, va_list ap)
             case VOUT_DISPLAY_CHANGE_SOURCE_CROP:
             case VOUT_DISPLAY_CHANGE_DISPLAY_SIZE:
             {
-                /* we always use our current frame here, because we have some size constraints
-                 in the ui vout provider */
-                vout_display_cfg_t cfg_tmp = *vd->cfg;
-
-                /* Reverse vertical alignment as the GL tex are Y inverted */
-                if (cfg_tmp.align.vertical == VLC_VIDEO_ALIGN_TOP)
-                    cfg_tmp.align.vertical = VLC_VIDEO_ALIGN_BOTTOM;
-                else if (cfg_tmp.align.vertical == VLC_VIDEO_ALIGN_BOTTOM)
-                    cfg_tmp.align.vertical = VLC_VIDEO_ALIGN_TOP;
-
                 vout_display_place_t place;
-                vout_display_PlacePicture(&place, &vd->source, &cfg_tmp);
+                vout_display_PlacePicture(&place, &vd->source, vd->cfg);
                 @synchronized (sys->glView) {
                     sys->cfg = *vd->cfg;
                 }
diff --git a/modules/video_output/opengl/display.c b/modules/video_output/opengl/display.c
index 2ef8df9910b..a5738310531 100644
--- a/modules/video_output/opengl/display.c
+++ b/modules/video_output/opengl/display.c
@@ -141,6 +141,12 @@ static int Open(vout_display_t *vd, vout_display_cfg_t *cfg,
     if (sys->vgl == NULL)
         goto error;
 
+    /* Reverse vertical alignment as the GL tex are Y inverted */
+    if (cfg->align.vertical == VLC_VIDEO_ALIGN_TOP)
+        cfg->align.vertical = VLC_VIDEO_ALIGN_BOTTOM;
+    else if (cfg->align.vertical == VLC_VIDEO_ALIGN_BOTTOM)
+        cfg->align.vertical = VLC_VIDEO_ALIGN_TOP;
+
     vd->sys = sys;
     vd->info.subpicture_chromas = spu_chromas;
     vd->prepare = PictureRender;
@@ -206,16 +212,6 @@ static void PictureDisplay (vout_display_t *vd, picture_t *pic)
     }
 }
 
-static void
-FlipVerticalAlign(vout_display_cfg_t *cfg)
-{
-    /* Reverse vertical alignment as the GL tex are Y inverted */
-    if (cfg->align.vertical == VLC_VIDEO_ALIGN_TOP)
-        cfg->align.vertical = VLC_VIDEO_ALIGN_BOTTOM;
-    else if (cfg->align.vertical == VLC_VIDEO_ALIGN_BOTTOM)
-        cfg->align.vertical = VLC_VIDEO_ALIGN_TOP;
-}
-
 static int Control (vout_display_t *vd, int query, va_list ap)
 {
     vout_display_sys_t *sys = vd->sys;
@@ -231,12 +227,7 @@ static int Control (vout_display_t *vd, int query, va_list ap)
       case VOUT_DISPLAY_CHANGE_DISPLAY_FILLED:
       case VOUT_DISPLAY_CHANGE_ZOOM:
       {
-        vout_display_cfg_t cfg = *vd->cfg;
-        const video_format_t *src = &vd->source;
-
-        FlipVerticalAlign(&cfg);
-
-        vout_display_PlacePicture(&sys->place, src, &cfg);
+        vout_display_PlacePicture(&sys->place, &vd->source, vd->cfg);
         sys->place_changed = true;
         vlc_gl_Resize (sys->gl, vd->cfg->display.width, vd->cfg->display.height);
         return VLC_SUCCESS;
@@ -245,11 +236,7 @@ static int Control (vout_display_t *vd, int query, va_list ap)
       case VOUT_DISPLAY_CHANGE_SOURCE_ASPECT:
       case VOUT_DISPLAY_CHANGE_SOURCE_CROP:
       {
-        vout_display_cfg_t cfg = *vd->cfg;
-
-        FlipVerticalAlign(&cfg);
-
-        vout_display_PlacePicture(&sys->place, &vd->source, &cfg);
+        vout_display_PlacePicture(&sys->place, &vd->source, vd->cfg);
         sys->place_changed = true;
         return VLC_SUCCESS;
       }
-- 
2.26.2



More information about the vlc-devel mailing list