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

Rémi Denis-Courmont remi at remlab.net
Thu Apr 5 10:32:18 CEST 2018


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.

There are reasons why find-name has been deprecated for over 8 years.
-- 
Envoyé de mon appareil Android avec Courriel K-9 Mail. Veuillez excuser ma brièveté.


More information about the vlc-devel mailing list