[vlc-devel] [PATCH 4/4] player: associate ES ids with vouts

Thomas Guillem thomas at gllm.fr
Wed May 29 16:26:21 CEST 2019


This will allow API users to clearly identify vouts.
---
Changes:

Use vlc_es_id_t * directly in vout events, in order to be more consistent with
other player events. The track will be accessible via
vlc_player_GetTrack(player, es_id);

 include/vlc_player.h                              |  4 +++-
 lib/media_player.c                                |  4 +++-
 modules/control/gestures.c                        |  9 ++++++---
 modules/control/hotkeys.c                         |  2 ++
 modules/gui/macosx/playlist/VLCPlayerController.m |  6 ++++--
 modules/gui/qt/components/player_controller.cpp   |  2 +-
 src/input/player.c                                |  6 ++++--
 test/src/input/player.c                           | 13 +++++++++----
 8 files changed, 32 insertions(+), 14 deletions(-)

diff --git a/include/vlc_player.h b/include/vlc_player.h
index 054c4abae3..3d924e927d 100644
--- a/include/vlc_player.h
+++ b/include/vlc_player.h
@@ -836,10 +836,12 @@ struct vlc_player_cbs
      * @param player locked player instance
      * @param action started or stopped
      * @param vout vout (can't be NULL)
+     * @param es_id the ES id associated with this vout
      * @param data opaque pointer set by vlc_player_AddListener()
      */
     void (*on_vout_changed)(vlc_player_t *player,
-        enum vlc_player_vout_action action, vout_thread_t *vout, void *data);
+        enum vlc_player_vout_action action, vout_thread_t *vout,
+        vlc_es_id_t *es_id, void *data);
 
     /**
      * Called when the player is corked
diff --git a/lib/media_player.c b/lib/media_player.c
index fd085c3793..ad61bdb779 100644
--- a/lib/media_player.c
+++ b/lib/media_player.c
@@ -401,10 +401,12 @@ on_cork_changed(vlc_player_t *player, unsigned cork_count, void *data)
 
 static void
 on_vout_changed(vlc_player_t *player, enum vlc_player_vout_action action,
-                vout_thread_t *vout, void *data)
+                vout_thread_t *vout, vlc_es_id_t *es_id,
+                void *data)
 {
     (void) action;
     (void) vout;
+    (void) es_id;
 
     libvlc_media_player_t *mp = data;
 
diff --git a/modules/control/gestures.c b/modules/control/gestures.c
index 608747f43b..804e6df2eb 100644
--- a/modules/control/gestures.c
+++ b/modules/control/gestures.c
@@ -104,7 +104,9 @@ vlc_module_end ()
 
 static void player_on_vout_changed(vlc_player_t *player,
                                    enum vlc_player_vout_action action,
-                                   vout_thread_t *vout, void *data);
+                                   vout_thread_t *vout,
+                                   vlc_es_id_t *es_id,
+                                   void *data);
 static int MovedEvent( vlc_object_t *, char const *,
                        vlc_value_t, vlc_value_t, void * );
 static int ButtonEvent( vlc_object_t *, char const *,
@@ -389,9 +391,10 @@ static int ButtonEvent( vlc_object_t *p_this, char const *psz_var,
 static void
 player_on_vout_changed(vlc_player_t *player,
                        enum vlc_player_vout_action action,
-                       vout_thread_t *vout, void *data)
+                       vout_thread_t *vout,
+                       vlc_es_id_t *es_id, void *data)
 {
-    VLC_UNUSED(player);
+    VLC_UNUSED(player); VLC_UNUSED(es_id);
     intf_thread_t *intf = data;
     intf_sys_t *sys = intf->p_sys;
     switch (action)
diff --git a/modules/control/hotkeys.c b/modules/control/hotkeys.c
index b81debb4ea..a3d74cfd57 100644
--- a/modules/control/hotkeys.c
+++ b/modules/control/hotkeys.c
@@ -1016,8 +1016,10 @@ ViewpointMovedCallback(vlc_object_t *obj, char const *var,
 static void
 player_on_vout_changed(vlc_player_t *player,
                        enum vlc_player_vout_action action, vout_thread_t *vout,
+                       vlc_es_id_t *es_id,
                        void *data)
 {
+    VLC_UNUSED(es_id);
     intf_thread_t *intf = data;
     bool vrnav = var_GetBool(vout, "viewpoint-changeable");
     switch (action)
diff --git a/modules/gui/macosx/playlist/VLCPlayerController.m b/modules/gui/macosx/playlist/VLCPlayerController.m
index 50dd9f5339..3da99559dc 100644
--- a/modules/gui/macosx/playlist/VLCPlayerController.m
+++ b/modules/gui/macosx/playlist/VLCPlayerController.m
@@ -345,10 +345,10 @@ static void cb_player_stats_changed(vlc_player_t *p_player,
 
 static void cb_player_track_list_changed(vlc_player_t *p_player,
                                          enum vlc_player_list_action action,
-                                         const struct vlc_player_track *track,
+                                         vlc_es_id_t *es_id,
                                          void *p_data)
 {
-    VLC_UNUSED(p_player); VLC_UNUSED(action); VLC_UNUSED(track);
+    VLC_UNUSED(p_player); VLC_UNUSED(action); VLC_UNUSED(es_id);
     dispatch_async(dispatch_get_main_queue(), ^{
         VLCPlayerController *playerController = (__bridge VLCPlayerController *)p_data;
         [playerController trackListChanged];
@@ -429,10 +429,12 @@ static void cb_player_item_meta_changed(vlc_player_t *p_player,
 static void cb_player_vout_changed(vlc_player_t *p_player,
                                    enum vlc_player_vout_action action,
                                    vout_thread_t *p_vout,
+                                   const struct vlc_player_track *track,
                                    void *p_data)
 {
     VLC_UNUSED(p_player);
     VLC_UNUSED(p_vout);
+    VLC_UNUSED(track);
     dispatch_async(dispatch_get_main_queue(), ^{
         VLCPlayerController *playerController = (__bridge VLCPlayerController *)p_data;
         [playerController voutListUpdated];
diff --git a/modules/gui/qt/components/player_controller.cpp b/modules/gui/qt/components/player_controller.cpp
index 37580926f3..ca6f2ed06a 100644
--- a/modules/gui/qt/components/player_controller.cpp
+++ b/modules/gui/qt/components/player_controller.cpp
@@ -713,7 +713,7 @@ static void on_player_subitems_changed(vlc_player_t *, input_item_t *, input_ite
 }
 
 
-static void on_player_vout_changed(vlc_player_t *player, enum vlc_player_vout_action, vout_thread_t *, void *data)
+static void on_player_vout_changed(vlc_player_t *player, enum vlc_player_vout_action, vout_thread_t *, vlc_es_id_t *, void *data)
 {
     PlayerControllerPrivate* that = static_cast<PlayerControllerPrivate*>(data);
     msg_Dbg( that->p_intf, "on_player_vout_list_changed");
diff --git a/src/input/player.c b/src/input/player.c
index a1c44c5dc0..86fcf1fafc 100644
--- a/src/input/player.c
+++ b/src/input/player.c
@@ -1792,6 +1792,7 @@ vlc_player_input_HandleVoutEvent(struct vlc_player_input *input,
                                  const struct vlc_input_event_vout *ev)
 {
     assert(ev->vout);
+    assert(ev->id);
 
     static const char osd_vars[][sizeof("deinterlace-mode")] = {
         "aspect-ratio", "autoscale", "crop", "crop-bottom",
@@ -1800,11 +1801,12 @@ vlc_player_input_HandleVoutEvent(struct vlc_player_input *input,
     };
 
     vlc_player_t *player = input->player;
+
     switch (ev->action)
     {
         case VLC_INPUT_EVENT_VOUT_ADDED:
             vlc_player_SendEvent(player, on_vout_changed,
-                                 VLC_PLAYER_VOUT_STARTED, ev->vout);
+                                 VLC_PLAYER_VOUT_STARTED, ev->vout, ev->id);
 
             /* Register vout callbacks after the vout list event */
             var_AddCallback(ev->vout, "fullscreen",
@@ -1826,7 +1828,7 @@ vlc_player_input_HandleVoutEvent(struct vlc_player_input *input,
                                 vlc_player_VoutOSDCallback, player);
 
             vlc_player_SendEvent(player, on_vout_changed,
-                                 VLC_PLAYER_VOUT_STOPPED, ev->vout);
+                                 VLC_PLAYER_VOUT_STOPPED, ev->vout, ev->id);
             break;
         default:
             vlc_assert_unreachable();
diff --git a/test/src/input/player.c b/test/src/input/player.c
index 8406e4352f..2c031f83a4 100644
--- a/test/src/input/player.c
+++ b/test/src/input/player.c
@@ -79,6 +79,7 @@ struct report_vout
 {
     enum vlc_player_vout_action action;
     vout_thread_t *vout;
+    vlc_es_id_t *es_id;
 };
 
 struct report_media_subitems
@@ -433,15 +434,16 @@ player_on_statistics_changed(vlc_player_t *player,
 
 static void
 player_on_vout_changed(vlc_player_t *player,
-                            enum vlc_player_vout_action action,
-                            vout_thread_t *vout, void *data)
+                       enum vlc_player_vout_action action,
+                       vout_thread_t *vout, vlc_es_id_t *es_id, void *data)
 {
     struct ctx *ctx = get_ctx(player, data);
     struct report_vout report = {
         .action = action,
-        .vout = vout,
+        .vout = vout_Hold(vout),
+        .es_id = vlc_es_id_Hold(es_id),
     };
-    vout_Hold(vout);
+    assert(report.es_id);
     VEC_PUSH(on_vout_changed, report);
 }
 
@@ -570,7 +572,10 @@ ctx_reset(struct ctx *ctx)
     {
         struct report_vout report;
         FOREACH_VEC(report, on_vout_changed)
+        {
             vout_Release(report.vout);
+            vlc_es_id_Release(report.es_id);
+        }
     }
 
     {
-- 
2.20.1



More information about the vlc-devel mailing list