[vlc-devel] [3.0 PATCH] input: display OSD from NAV controls

Thomas Guillem thomas at gllm.fr
Thu Apr 5 11:51:58 CEST 2018


On Thu, Apr 5, 2018, at 11:44, Rémi Denis-Courmont wrote:
> Le 5 avril 2018 12:08:40 GMT+03:00, Thomas Guillem <thomas at gllm.fr> a écrit :
> >
> >On Thu, Apr 5, 2018, at 10:32, Rémi Denis-Courmont wrote:
> >> Le 5 avril 2018 09:19:05 GMT+03:00, Thomas Guillem <thomas at gllm.fr> a
> >écrit :
> >> >Sorry in advance for this ugly hack. I didn't had the time to merge
> >the
> >> >code of
> >> >the hotkeys module as planned for 3.0. This will be done in 4.0 into
> >> >the new
> >> >input manager.
> >> >
> >> >In the meantime, it's quite important to have UI feedback when
> >> >seeking/jumping
> >> >from the arrow keys. Indeed, users won't understand why the OSD is
> >> >showing when
> >> >pressing Ctrl + arrow keys and not when pressing arrow keys alone.
> >> >
> >> >This hacks use the vlc_object_find_name() (that should be removed
> >for
> >> >4.0) to
> >> >detect if the "hotkeys" module is running and forward the commands
> >to
> >> >this
> >> >module that will show the OSD.
> >> >
> >> >Why not calling OSD functions directly from input.c ? Because we
> >need
> >> >to use
> >> >the same SPU chan for sliders (otherwise, you can end up showing 2
> >> >overlapping
> >> >sliders).
> >> >---
> >> > src/input/input.c  | 18 ++++++++++++++++++
> >> > src/misc/objects.c |  4 ++--
> >> > 2 files changed, 20 insertions(+), 2 deletions(-)
> >> >
> >> >diff --git a/src/input/input.c b/src/input/input.c
> >> >index f4d49b809f..ddf62746ff 100644
> >> >--- a/src/input/input.c
> >> >+++ b/src/input/input.c
> >> >@@ -45,6 +45,7 @@
> >> > #include "stream.h"
> >> > 
> >> > #include <vlc_aout.h>
> >> >+#include <vlc_actions.h>
> >> > #include <vlc_sout.h>
> >> > #include <vlc_dialog.h>
> >> > #include <vlc_url.h>
> >> >@@ -1774,6 +1775,23 @@ static void ControlNav( input_thread_t
> >*p_input,
> >> >int i_type )
> >> >         return;
> >> >     }
> >> > 
> >> >+    /* HACK: use hotkeys module directly  since it can handle OSD.
> >> >+     * TODO: merge hotkeys module in future input manager. */
> >> >+    vlc_object_t *p_obj = vlc_object_find_name(
> >p_input->obj.libvlc,
> >> >"hotkeys" );
> >> >+    if( p_obj )
> >> >+    {
> >> >+        if( seek_direction != 0 )
> >> >+            var_SetInteger( p_input->obj.libvlc, "key-action",
> >> >+                            seek_direction == 1 ?
> >> >ACTIONID_JUMP_FORWARD_SHORT
> >> >+                                                :
> >> >ACTIONID_JUMP_BACKWARD_SHORT );
> >> >+        else
> >> >+            var_SetInteger( p_input->obj.libvlc, "key-action",
> >> >+                            vol_direction == 1 ? ACTIONID_VOL_UP
> >> >+                                               : ACTIONID_VOL_DOWN
> >);
> >> >+        vlc_object_release( p_obj );
> >> >+        return;
> >> >+    } /* else, no hotkeys module: send command directly */
> >> >+
> >> >/* Seek or change volume if the input doesn't have navigation or
> >> >viewpoint */
> >> >     if( seek_direction != 0 )
> >> >     {
> >> >diff --git a/src/misc/objects.c b/src/misc/objects.c
> >> >index d1ea869410..aee3356454 100644
> >> >--- a/src/misc/objects.c
> >> >+++ b/src/misc/objects.c
> >> >@@ -388,8 +388,8 @@ vlc_object_t *vlc_object_find_name( vlc_object_t
> >> >*p_this, const char *psz_name )
> >> >/* This was officially deprecated on August 19 2009. For the
> >> >convenience of
> >> >    * wannabe code janitors, this is the list of names that remain
> >used
> >> >      * and unfixed since then. */
> >> >-    static const char bad[][5] = { "v4l2", "zvbi" };
> >> >-    if( bsearch( psz_name, bad, 2, 5, (void *)strcmp ) == NULL )
> >> >+    static const char bad[][8] = { "hotkeys", "v4l2", "zvbi" };
> >> >+    if( bsearch( psz_name, bad, 3, 8, (void *)strcmp ) == NULL )
> >> >         return NULL;
> >> > msg_Err( p_this, "looking for object \"%s\"... FIXME XXX", psz_name
> >);
> >> > #endif
> >> >-- 
> >> >2.11.0
> >> >
> >> >_______________________________________________
> >> >vlc-devel mailing list
> >> >To unsubscribe or modify your subscription options:
> >> >https://mailman.videolan.org/listinfo/vlc-devel
> >> 
> >> This would route the navigation controls to the wrong input if there
> >are 
> >> more than one. Which seems far worse than a cosmetic lack of OSD.
> >
> >Good point, I'll add the following check:
> >var_GetAddress( p_input->obj.parent, "input-current" ) == p_input;
> >
> >Either, the parent of this input is the playlist or something else (the
> >libvlc mediaplayer). In both case, fetching "input-current" will
> >indicate if this input is handled by the hotkeys module.
> >
> >> 
> >> There are reasons why find-name has been deprecated for over 8 years.
> >
> >I tried to remove this function completely for VLC 3.0. It's only used
> >by v4l2 (and zvbi on macOS) now. I already know this is a forbidden
> >function and that this patch is ugly. But, sometimes, having a coherent
> >app is more important than this kind of concern, no ? I precise that I
> >only want this patch for 3.0.
> >
> >> -- 
> >> Envoyé de mon appareil Android avec Courriel K-9 Mail. Veuillez
> >excuser 
> >> ma brièveté.
> >> _______________________________________________
> >> vlc-devel mailing list
> >> To unsubscribe or modify your subscription options:
> >> https://mailman.videolan.org/listinfo/vlc-devel
> >_______________________________________________
> >vlc-devel mailing list
> >To unsubscribe or modify your subscription options:
> >https://mailman.videolan.org/listinfo/vlc-devel
> 
> That is yet worse. It becomes racy (since the variable is only meant for 
> callbacks) and remains inconsistent (since it won't always solve the 
> targetted issue).
> 
> In a *stable* branch, *stability* is far more important than 
> consistency. The time to worry about consistency was before the code 
> freeze.

But new issues that we need to fix are discovered after the freeze because many users start to test our code. It's a chicken egg situation...

> 
> -- 
> Envoyé de mon appareil Android avec Courriel K-9 Mail. Veuillez excuser 
> ma brièveté.


More information about the vlc-devel mailing list