[vlc-devel] [PATCH 8/9] vout: allow basic VOUT_DISPLAY_CHANGE_STEREO_MODE changes when crop+sar is supported

Steve Lhomme robux4 at ycbcr.xyz
Sat Oct 27 08:46:34 CEST 2018


In the future changing to device and/or shader based stereo mode will only be
supported by a few modules.

--
another alternative would be for modules to advertise the non-crop stereo display
modes they support in vout_display_info_t. It may also be possible to know when a
display cannot handle a mode and look for another one. Rather than just failing to
set a control value.
---
 modules/hw/mmal/vout.c                 | 15 +++++++++++++++
 modules/hw/vdpau/display.c             | 17 +++++++++++++++++
 modules/video_output/android/display.c | 16 ++++++++++++++++
 modules/video_output/caopengllayer.m   | 17 +++++++++++++++++
 modules/video_output/ios.m             | 17 +++++++++++++++++
 modules/video_output/kva.c             | 17 +++++++++++++++++
 modules/video_output/win32/common.c    | 16 ++++++++++++++++
 modules/video_output/xcb/x11.c         | 17 +++++++++++++++++
 modules/video_output/xcb/xvideo.c      | 17 +++++++++++++++++
 9 files changed, 149 insertions(+)

diff --git a/modules/hw/mmal/vout.c b/modules/hw/mmal/vout.c
index 19a58347b1..56acdceaef 100644
--- a/modules/hw/mmal/vout.c
+++ b/modules/hw/mmal/vout.c
@@ -631,6 +631,21 @@ static int vd_control(vout_display_t *vd, int query, va_list args)
                 ret = VLC_SUCCESS;
             break;
 
+        case VOUT_DISPLAY_CHANGE_STEREO_MODE:
+            tmp_cfg = va_arg(args, const vout_display_cfg_t *);
+            switch (tmp_cfg->stereo_mode)
+            {
+            /* allow basic crop handling */
+            case VIDEO_STEREO_OUTPUT_AUTO:
+            case VIDEO_STEREO_OUTPUT_ORIGINAL:
+            case VIDEO_STEREO_OUTPUT_LEFT_ONLY:
+            case VIDEO_STEREO_OUTPUT_RIGHT_ONLY:
+                ret = VLC_SUCCESS;
+                break;
+            default: break;
+            }
+            break;
+
         case VOUT_DISPLAY_RESET_PICTURES:
             vlc_assert_unreachable();
         case VOUT_DISPLAY_CHANGE_ZOOM:
diff --git a/modules/hw/vdpau/display.c b/modules/hw/vdpau/display.c
index 9774f47eb3..f68bb3dfb0 100644
--- a/modules/hw/vdpau/display.c
+++ b/modules/hw/vdpau/display.c
@@ -385,6 +385,23 @@ static int Control(vout_display_t *vd, int query, va_list ap)
     case VOUT_DISPLAY_CHANGE_SOURCE_CROP:
         vout_display_SendEventPicturesInvalid (vd);
         return VLC_SUCCESS;
+    case VOUT_DISPLAY_CHANGE_STEREO_MODE:
+    {
+        const vout_display_cfg_t *cfg = va_arg(ap, const vout_display_cfg_t *);
+        switch (cfg->stereo_mode)
+        {
+        /* allow basic crop handling */
+        case VIDEO_STEREO_OUTPUT_AUTO:
+        case VIDEO_STEREO_OUTPUT_ORIGINAL:
+        case VIDEO_STEREO_OUTPUT_LEFT_ONLY:
+        case VIDEO_STEREO_OUTPUT_RIGHT_ONLY:
+            return VLC_SUCCESS;
+        default:
+            return VLC_EGENERIC;
+        }
+        break;
+    }
+
     default:
         msg_Err(vd, "unknown control request %d", query);
         return VLC_EGENERIC;
diff --git a/modules/video_output/android/display.c b/modules/video_output/android/display.c
index e3dfeab2ab..c0477595ed 100644
--- a/modules/video_output/android/display.c
+++ b/modules/video_output/android/display.c
@@ -1042,6 +1042,22 @@ static int Control(vout_display_t *vd, int query, va_list args)
         FixSubtitleFormat(sys);
         return VLC_SUCCESS;
     }
+    case VOUT_DISPLAY_CHANGE_STEREO_MODE:
+    {
+        const vout_display_cfg_t *cfg = va_arg(args, const vout_display_cfg_t *);
+        switch (cfg->stereo_mode)
+        {
+        /* allow basic crop handling */
+        case VIDEO_STEREO_OUTPUT_AUTO:
+        case VIDEO_STEREO_OUTPUT_ORIGINAL:
+        case VIDEO_STEREO_OUTPUT_LEFT_ONLY:
+        case VIDEO_STEREO_OUTPUT_RIGHT_ONLY:
+            return VLC_SUCCESS;
+        default:
+            return VLC_EGENERIC;
+        }
+        break;
+    }
     case VOUT_DISPLAY_CHANGE_DISPLAY_SIZE:
     {
         const vout_display_cfg_t *cfg = va_arg(args, const vout_display_cfg_t *);
diff --git a/modules/video_output/caopengllayer.m b/modules/video_output/caopengllayer.m
index d334c6b62c..0534facca5 100644
--- a/modules/video_output/caopengllayer.m
+++ b/modules/video_output/caopengllayer.m
@@ -361,6 +361,23 @@ static int Control (vout_display_t *vd, int query, va_list ap)
             return VLC_SUCCESS;
         }
 
+        case VOUT_DISPLAY_CHANGE_STEREO_MODE:
+        {
+            const vout_display_cfg_t *cfg = va_arg(ap, const vout_display_cfg_t *);
+            switch (cfg->stereo_mode)
+            {
+            /* allow basic crop handling */
+            case VIDEO_STEREO_OUTPUT_AUTO:
+            case VIDEO_STEREO_OUTPUT_ORIGINAL:
+            case VIDEO_STEREO_OUTPUT_LEFT_ONLY:
+            case VIDEO_STEREO_OUTPUT_RIGHT_ONLY:
+                return VLC_SUCCESS;
+            default:
+                return VLC_EGENERIC;
+            }
+            break;
+        }
+
         case VOUT_DISPLAY_CHANGE_VIEWPOINT:
         {
             int ret;
diff --git a/modules/video_output/ios.m b/modules/video_output/ios.m
index 7629cdbb87..d79691bce5 100644
--- a/modules/video_output/ios.m
+++ b/modules/video_output/ios.m
@@ -285,6 +285,23 @@ static int Control(vout_display_t *vd, int query, va_list ap)
             return VLC_SUCCESS;
         }
 
+        case VOUT_DISPLAY_CHANGE_STEREO_MODE:
+        {
+            const vout_display_cfg_t *cfg = va_arg(ap, const vout_display_cfg_t *);
+            switch (cfg->stereo_mode)
+            {
+            /* allow basic crop handling */
+            case VIDEO_STEREO_OUTPUT_AUTO:
+            case VIDEO_STEREO_OUTPUT_ORIGINAL:
+            case VIDEO_STEREO_OUTPUT_LEFT_ONLY:
+            case VIDEO_STEREO_OUTPUT_RIGHT_ONLY:
+                return VLC_SUCCESS;
+            default:
+                return VLC_EGENERIC;
+            }
+            break;
+        }
+
         case VOUT_DISPLAY_CHANGE_VIEWPOINT:
             return vout_display_opengl_SetViewpoint(glsys->vgl,
                 &va_arg (ap, const vout_display_cfg_t* )->viewpoint);
diff --git a/modules/video_output/kva.c b/modules/video_output/kva.c
index 1cb5417ed4..17f4283867 100644
--- a/modules/video_output/kva.c
+++ b/modules/video_output/kva.c
@@ -461,6 +461,23 @@ static int Control( vout_display_t *vd, int query, va_list args )
         return VLC_SUCCESS;
     }
 
+    case VOUT_DISPLAY_CHANGE_STEREO_MODE:
+    {
+        const vout_display_cfg_t *cfg = va_arg(args, const vout_display_cfg_t *);
+        switch (cfg->stereo_mode)
+        {
+        /* allow basic crop handling */
+        case VIDEO_STEREO_OUTPUT_AUTO:
+        case VIDEO_STEREO_OUTPUT_ORIGINAL:
+        case VIDEO_STEREO_OUTPUT_LEFT_ONLY:
+        case VIDEO_STEREO_OUTPUT_RIGHT_ONLY:
+            return VLC_SUCCESS;
+        default:
+            return VLC_EGENERIC;
+        }
+        break;
+    }
+
     case VOUT_DISPLAY_RESET_PICTURES:
     case VOUT_DISPLAY_CHANGE_DISPLAY_FILLED:
         /* TODO */
diff --git a/modules/video_output/win32/common.c b/modules/video_output/win32/common.c
index eb2c08a54c..3415b99fb4 100644
--- a/modules/video_output/win32/common.c
+++ b/modules/video_output/win32/common.c
@@ -618,6 +618,22 @@ int CommonControl(vout_display_t *vd, int query, va_list args)
         UpdateRects(vd, cfg, true);
         return VLC_SUCCESS;
     }
+    case VOUT_DISPLAY_CHANGE_STEREO_MODE:
+    {
+        const vout_display_cfg_t *cfg = va_arg(args, const vout_display_cfg_t *);
+        switch (cfg->stereo_mode)
+        {
+        /* allow basic crop handling */
+        case VIDEO_STEREO_OUTPUT_AUTO:
+        case VIDEO_STEREO_OUTPUT_ORIGINAL:
+        case VIDEO_STEREO_OUTPUT_LEFT_ONLY:
+        case VIDEO_STEREO_OUTPUT_RIGHT_ONLY:
+            return VLC_SUCCESS;
+        default:
+            return VLC_EGENERIC;
+        }
+        break;
+    }
 #if !VLC_WINSTORE_APP
     case VOUT_DISPLAY_CHANGE_DISPLAY_SIZE:   /* const vout_display_cfg_t *p_cfg */
     {   /* Update dimensions */
diff --git a/modules/video_output/xcb/x11.c b/modules/video_output/xcb/x11.c
index fecf7f0856..da5b18b962 100644
--- a/modules/video_output/xcb/x11.c
+++ b/modules/video_output/xcb/x11.c
@@ -478,6 +478,23 @@ static int Control (vout_display_t *vd, int query, va_list ap)
         vout_display_SendEventPicturesInvalid (vd);
         return VLC_SUCCESS;
 
+    case VOUT_DISPLAY_CHANGE_STEREO_MODE:
+    {
+        const vout_display_cfg_t *cfg = va_arg(ap, const vout_display_cfg_t *);
+        switch (cfg->stereo_mode)
+        {
+        /* allow basic crop handling */
+        case VIDEO_STEREO_OUTPUT_AUTO:
+        case VIDEO_STEREO_OUTPUT_ORIGINAL:
+        case VIDEO_STEREO_OUTPUT_LEFT_ONLY:
+        case VIDEO_STEREO_OUTPUT_RIGHT_ONLY:
+            return VLC_SUCCESS;
+        default:
+            return VLC_EGENERIC;
+        }
+        break;
+    }
+
     case VOUT_DISPLAY_RESET_PICTURES:
     {
         ResetPictures (vd);
diff --git a/modules/video_output/xcb/xvideo.c b/modules/video_output/xcb/xvideo.c
index 394144cb20..4ea98e8d47 100644
--- a/modules/video_output/xcb/xvideo.c
+++ b/modules/video_output/xcb/xvideo.c
@@ -741,6 +741,23 @@ static int Control (vout_display_t *vd, int query, va_list ap)
         return VLC_SUCCESS;
     }
 
+    case VOUT_DISPLAY_CHANGE_STEREO_MODE:
+    {
+        const vout_display_cfg_t *cfg = va_arg(ap, const vout_display_cfg_t *);
+        switch (cfg->stereo_mode)
+        {
+        /* allow basic crop handling */
+        case VIDEO_STEREO_OUTPUT_AUTO:
+        case VIDEO_STEREO_OUTPUT_ORIGINAL:
+        case VIDEO_STEREO_OUTPUT_LEFT_ONLY:
+        case VIDEO_STEREO_OUTPUT_RIGHT_ONLY:
+            return VLC_SUCCESS;
+        default:
+            return VLC_EGENERIC;
+        }
+        break;
+    }
+
     case VOUT_DISPLAY_RESET_PICTURES:
         vlc_assert_unreachable();
     default:
-- 
2.17.0



More information about the vlc-devel mailing list