[vlc-devel] [PATCH 4/5] bluray: use DEMUX_VOUT_CHANGED control to get vouts

Thomas Guillem thomas at gllm.fr
Fri Jul 13 11:34:40 CEST 2018


Remove one other dependency to "intf-event".
---
 modules/access/bluray.c | 58 ++++++++++++++++-------------------------
 1 file changed, 23 insertions(+), 35 deletions(-)

diff --git a/modules/access/bluray.c b/modules/access/bluray.c
index 2c5b709351..fd6b483c21 100644
--- a/modules/access/bluray.c
+++ b/modules/access/bluray.c
@@ -277,13 +277,12 @@ static int   blurayDemux(demux_t *);
 static void  blurayInitTitles(demux_t *p_demux, uint32_t menu_titles);
 static int   bluraySetTitle(demux_t *p_demux, int i_title);
 
+static void  blurayHandleOverlays(demux_t *p_demux, int nread);
 static void  blurayOverlayProc(void *ptr, const BD_OVERLAY * const overlay);
 static void  blurayArgbOverlayProc(void *ptr, const BD_ARGB_OVERLAY * const overlay);
 
 static int   onMouseEvent(vlc_object_t *p_vout, const char *psz_var,
                           vlc_value_t old, vlc_value_t val, void *p_data);
-static int   onIntfEvent(vlc_object_t *, char const *,
-                         vlc_value_t, vlc_value_t, void *);
 
 static void  blurayResetParser(demux_t *p_demux);
 static void  notifyDiscontinuity( demux_sys_t *p_sys );
@@ -689,8 +688,6 @@ static int blurayOpen(vlc_object_t *object)
     var_Create( p_demux, "ts-cc-check", VLC_VAR_BOOL );
     var_SetBool( p_demux, "ts-cc-check", false );
 
-    var_AddCallback( p_demux->p_input, "intf-event", onIntfEvent, p_demux );
-
     /* Open BluRay */
 #ifdef BLURAY_DEMUX
     if (p_demux->s) {
@@ -881,8 +878,6 @@ static void blurayClose(vlc_object_t *object)
     demux_t *p_demux = (demux_t*)object;
     demux_sys_t *p_sys = p_demux->p_sys;
 
-    var_DelCallback( p_demux->p_input, "intf-event", onIntfEvent, p_demux );
-
     setTitleInfo(p_sys, NULL);
 
     /*
@@ -2042,6 +2037,28 @@ static int blurayControl(demux_t *p_demux, int query, va_list args)
         }
         return VLC_EGENERIC;
 
+    case DEMUX_VOUT_CHANGED:
+    {
+        vout_thread_t **pp_vouts = va_arg( args, vout_thread_t** );
+        size_t i_vout_count = va_arg( args, size_t );
+
+        vlc_mutex_lock(&p_sys->bdj_overlay_lock);
+        if( p_sys->p_vout != NULL ) {
+            blurayReleaseVout(p_demux);
+        }
+        /* Blu-rays should have only one VOUT (or zero) */
+        p_sys->p_vout = i_vout_count > 0 ? vlc_object_hold(pp_vouts[0]) : NULL;
+        vlc_mutex_unlock(&p_sys->bdj_overlay_lock);
+
+        if (p_sys->p_vout != NULL) {
+            var_AddCallback(p_sys->p_vout, "mouse-moved", onMouseEvent, p_demux);
+            var_AddCallback(p_sys->p_vout, "mouse-clicked", onMouseEvent, p_demux);
+        }
+
+        blurayHandleOverlays(p_demux, 1);
+        break;
+    }
+
     case DEMUX_CAN_RECORD:
     case DEMUX_GET_FPS:
     case DEMUX_SET_GROUP_DEFAULT:
@@ -2439,14 +2456,6 @@ static void blurayHandleOverlays(demux_t *p_demux, int nread)
         bool display = ov->status == ToDisplay;
         vlc_mutex_unlock(&ov->lock);
         if (display) {
-            if (p_sys->p_vout == NULL) {
-                p_sys->p_vout = input_GetVout(p_demux->p_input);
-                if (p_sys->p_vout != NULL) {
-                    var_AddCallback(p_sys->p_vout, "mouse-moved", onMouseEvent, p_demux);
-                    var_AddCallback(p_sys->p_vout, "mouse-clicked", onMouseEvent, p_demux);
-                }
-            }
-
             /* NOTE: we might want to enable background video always when there's no video stream playing.
                Now, with some discs, there are perioids (even seconds) during which the video window
                disappears and just playlist is shown.
@@ -2470,27 +2479,6 @@ static void blurayHandleOverlays(demux_t *p_demux, int nread)
     vlc_mutex_unlock(&p_sys->bdj_overlay_lock);
 }
 
-static int onIntfEvent( vlc_object_t *p_input, char const *psz_var,
-                        vlc_value_t oldval, vlc_value_t val, void *p_data )
-{
-    (void)p_input; (void) psz_var; (void) oldval;
-    demux_t *p_demux = p_data;
-    demux_sys_t *p_sys = p_demux->p_sys;
-
-    if (val.i_int == INPUT_EVENT_VOUT) {
-
-        vlc_mutex_lock(&p_sys->bdj_overlay_lock);
-        if( p_sys->p_vout != NULL ) {
-            blurayReleaseVout(p_demux);
-        }
-        vlc_mutex_unlock(&p_sys->bdj_overlay_lock);
-
-        blurayHandleOverlays(p_demux, 1);
-    }
-
-    return VLC_SUCCESS;
-}
-
 #define BD_TS_PACKET_SIZE (192)
 #define NB_TS_PACKETS (200)
 #define BD_READ_SIZE (NB_TS_PACKETS * BD_TS_PACKET_SIZE)
-- 
2.18.0



More information about the vlc-devel mailing list