[vlc-devel] [PATCH] vout: Initialize screen saver inhibition from the vout thread

Hugo Beauzée-Luyssen hugo at beauzee.fr
Wed Jan 24 12:48:12 CET 2018


On Wed, Jan 24, 2018, at 12:39 PM, Rémi Denis-Courmont wrote:
> Le 24 janvier 2018 12:11:16 GMT+02:00, "Hugo Beauzée-Luyssen" 
> <hugo at beauzee.fr> a écrit :
> >Fix #19463
> >---
> > include/vlc_vout_window.h       |  1 +
> > src/video_output/video_output.c |  3 +++
> > src/video_output/window.c       | 25 +++++++++++++++----------
> > 3 files changed, 19 insertions(+), 10 deletions(-)
> >
> >diff --git a/include/vlc_vout_window.h b/include/vlc_vout_window.h
> >index 237e7b2aae..daf7c5136f 100644
> >--- a/include/vlc_vout_window.h
> >+++ b/include/vlc_vout_window.h
> >@@ -216,6 +216,7 @@ VLC_API vout_window_t *
> >vout_window_New(vlc_object_t *, const char *module, cons
> >  */
> > VLC_API void vout_window_Delete(vout_window_t *);
> > 
> >+void vout_window_InitInhibition(vout_window_t *window);
> > void vout_window_SetInhibition(vout_window_t *window, bool enabled);
> > 
> >static inline int vout_window_vaControl(vout_window_t *window, int
> >query,
> >diff --git a/src/video_output/video_output.c
> >b/src/video_output/video_output.c
> >index 640d999e80..ab16180a35 100644
> >--- a/src/video_output/video_output.c
> >+++ b/src/video_output/video_output.c
> >@@ -1716,6 +1716,9 @@ static void *Thread(void *object)
> > 
> >     mtime_t deadline = VLC_TS_INVALID;
> >     bool wait = false;
> >+
> >+    vout_window_InitInhibition(sys->window);
> >+
> >     for (;;) {
> >         vout_control_cmd_t cmd;
> > 
> >diff --git a/src/video_output/window.c b/src/video_output/window.c
> >index 0eb055a47f..d9313dca1b 100644
> >--- a/src/video_output/window.c
> >+++ b/src/video_output/window.c
> >@@ -76,16 +76,6 @@ vout_window_t *vout_window_New(vlc_object_t *obj,
> >const char *module,
> >         return NULL;
> >     }
> > 
> >-    /* Hook for screensaver inhibition */
> >-    if (var_InheritBool(obj, "disable-screensaver") &&
> >-        (window->type == VOUT_WINDOW_TYPE_XID || window->type ==
> >VOUT_WINDOW_TYPE_HWND))
> >-    {
> >-        w->inhibit = vlc_inhibit_Create(VLC_OBJECT (window));
> >-        if (w->inhibit != NULL)
> >-            vlc_inhibit_Set(w->inhibit, VLC_INHIBIT_VIDEO);
> >-    }
> >-    else
> >-        w->inhibit = NULL;
> >     return window;
> > }
> > 
> >@@ -113,6 +103,21 @@ void vout_window_Delete(vout_window_t *window)
> >     vlc_object_release(window);
> > }
> > 
> >+void vout_window_InitInhibition(vout_window_t *window)
> >+{
> >+    window_t* w = (window_t*)window;
> >+    /* Hook for screensaver inhibition */
> >+    if (var_InheritBool(window, "disable-screensaver") &&
> >+        (window->type == VOUT_WINDOW_TYPE_XID || window->type ==
> >VOUT_WINDOW_TYPE_HWND))
> >+    {
> >+        w->inhibit = vlc_inhibit_Create(VLC_OBJECT (window));
> >+        if (w->inhibit != NULL)
> >+            vlc_inhibit_Set(w->inhibit, VLC_INHIBIT_VIDEO);
> >+    }
> >+    else
> >+        w->inhibit = NULL;
> >+}
> >+
> > void vout_window_SetInhibition(vout_window_t *window, bool enabled)
> > {
> >     window_t *w = (window_t *)window;
> >-- 
> >2.11.0
> >
> >_______________________________________________
> >vlc-devel mailing list
> >To unsubscribe or modify your subscription options:
> >https://mailman.videolan.org/listinfo/vlc-devel
> 
> I don't see any valid reasons to do this. This looks like an ugly kludge 
> around some unstated and unfixed bug, and it breaks the non-vout window 
> usage.

I can only speculate on the reason why this fixes the issue described by #19463, since the documentation doesn't mention any requirement with regard to the calling thread. However, since the function is named SetThreadExecutionState, it feels safe to assume that the changes are thread specific. 
In any case, when restoring happens in a different thread than the initial configuration change, nothing happens.

I'm not sure what you mean by "it breaks the non-vout window usage", but my knowledge of the vout/window/display internals is quite weak.

-- 
  Hugo Beauzée-Luyssen
  hugo at beauzee.fr


More information about the vlc-devel mailing list