[vlc-commits] player: pass old_caps to on_capabilities_changed

Romain Vimont git at videolan.org
Fri May 3 09:52:35 CEST 2019


vlc | branch: master | Romain Vimont <rom1v at videolabs.io> | Thu May  2 11:17:13 2019 +0200| [50c0fa5d65c2ad805b3295e21b118c4c9a8669b2] | committer: Thomas Guillem

player: pass old_caps to on_capabilities_changed

The capabilities are stored in a bitset. When it changes, it may be
useful to know its old value, to know which capability changed.

Signed-off-by: Thomas Guillem <thomas at gllm.fr>

> http://git.videolan.org/gitweb.cgi/vlc.git/?a=commit;h=50c0fa5d65c2ad805b3295e21b118c4c9a8669b2
---

 include/vlc_player.h                            |  5 +++--
 modules/control/dbus/dbus.c                     |  7 ++++---
 modules/gui/qt/components/player_controller.cpp |  3 ++-
 src/input/player.c                              |  5 ++++-
 test/src/input/player.c                         | 21 ++++++++++++++++-----
 5 files changed, 29 insertions(+), 12 deletions(-)

diff --git a/include/vlc_player.h b/include/vlc_player.h
index a055c842cc..17e927c948 100644
--- a/include/vlc_player.h
+++ b/include/vlc_player.h
@@ -473,11 +473,12 @@ struct vlc_player_cbs
      * Always called when the media is opening. Can be called during playback.
      *
      * @param player locked player instance
-     * @param new_caps player capabilities
+     * @param old_caps old player capabilities
+     * @param new_caps new player capabilities
      * @param data opaque pointer set by vlc_player_AddListener()
      */
     void (*on_capabilities_changed)(vlc_player_t *player,
-        int new_caps, void *data);
+        int old_caps, int new_caps, void *data);
 
     /**
      * Called when the player position has changed
diff --git a/modules/control/dbus/dbus.c b/modules/control/dbus/dbus.c
index d117d5332b..af6e4dc58f 100644
--- a/modules/control/dbus/dbus.c
+++ b/modules/control/dbus/dbus.c
@@ -145,7 +145,7 @@ static void player_on_state_changed(vlc_player_t *,
 static void player_on_error_changed(vlc_player_t *,
                                     enum vlc_player_error, void *);
 static void player_on_rate_changed(vlc_player_t *, float, void *);
-static void player_on_capabilities_changed(vlc_player_t *, int, void *);
+static void player_on_capabilities_changed(vlc_player_t *, int, int, void *);
 static void player_on_position_changed(vlc_player_t *,
                                        vlc_tick_t, float, void *);
 static void player_on_media_meta_changed(vlc_player_t *,
@@ -1080,7 +1080,8 @@ player_on_rate_changed(vlc_player_t *player, float new_rate, void *data)
 }
 
 static void
-player_on_capabilities_changed(vlc_player_t *player, int new_caps, void *data)
+player_on_capabilities_changed(vlc_player_t *player, int old_caps, int new_caps,
+                               void *data)
 {
     intf_thread_t *intf = data;
     intf_sys_t *sys = intf->p_sys;
@@ -1093,7 +1094,7 @@ player_on_capabilities_changed(vlc_player_t *player, int new_caps, void *data)
     vlc_mutex_unlock(&sys->lock);
     if (ok1 || ok2)
         wakeup_main_loop(intf);
-    (void) player; (void) new_caps;
+    (void) player; (void) old_caps; (void) new_caps;
 }
 
 static void
diff --git a/modules/gui/qt/components/player_controller.cpp b/modules/gui/qt/components/player_controller.cpp
index cd8fc33b45..c79f376576 100644
--- a/modules/gui/qt/components/player_controller.cpp
+++ b/modules/gui/qt/components/player_controller.cpp
@@ -323,8 +323,9 @@ static void on_player_rate_changed(vlc_player_t *, float new_rate, void *data)
     });
 }
 
-static void on_player_capabilities_changed(vlc_player_t *, int new_caps, void *data)
+static void on_player_capabilities_changed(vlc_player_t *, int old_caps, int new_caps, void *data)
 {
+    Q_UNUSED(old_caps);
     PlayerControllerPrivate* that = static_cast<PlayerControllerPrivate*>(data);
     msg_Dbg( that->p_intf, "on_player_capabilities_changed");
     that->callAsync([that,new_caps](){
diff --git a/src/input/player.c b/src/input/player.c
index 1cd06ca42b..da74eb4ee4 100644
--- a/src/input/player.c
+++ b/src/input/player.c
@@ -1904,10 +1904,13 @@ input_thread_Events(input_thread_t *input_thread,
             vlc_player_SendEvent(player, on_rate_changed, input->rate);
             break;
         case INPUT_EVENT_CAPABILITIES:
+        {
+            int old_caps = input->capabilities;
             input->capabilities = event->capabilities;
             vlc_player_SendEvent(player, on_capabilities_changed,
-                                 input->capabilities);
+                                 old_caps, input->capabilities);
             break;
+        }
         case INPUT_EVENT_POSITION:
             if (input->time != event->position.ms ||
                 input->position != event->position.percentage)
diff --git a/test/src/input/player.c b/test/src/input/player.c
index 669a6c5013..c30f6128dd 100644
--- a/test/src/input/player.c
+++ b/test/src/input/player.c
@@ -27,6 +27,12 @@
 #include <vlc_player.h>
 #include <vlc_vector.h>
 
+struct report_capabilities
+{
+    int old_caps;
+    int new_caps;
+};
+
 struct report_position
 {
     vlc_tick_t time;
@@ -87,7 +93,7 @@ struct report_media_subitems
     X(enum vlc_player_error, on_error_changed) \
     X(float, on_buffering_changed) \
     X(float, on_rate_changed) \
-    X(int, on_capabilities_changed) \
+    X(struct report_capabilities, on_capabilities_changed) \
     X(struct report_position, on_position_changed) \
     X(vlc_tick_t, on_length_changed) \
     X(struct report_track_list, on_track_list_changed) \
@@ -261,11 +267,15 @@ player_on_rate_changed(vlc_player_t *player, float new_rate, void *data)
 }
 
 static void
-player_on_capabilities_changed(vlc_player_t *player, int new_caps,
+player_on_capabilities_changed(vlc_player_t *player, int old_caps, int new_caps,
                                void *data)
 {
     struct ctx *ctx = get_ctx(player, data);
-    VEC_PUSH(on_capabilities_changed, new_caps);
+    struct report_capabilities report = {
+        .old_caps = old_caps,
+        .new_caps = new_caps,
+    };
+    VEC_PUSH(on_capabilities_changed, report);
 }
 
 static void
@@ -731,10 +741,11 @@ test_end_prestop_capabilities(struct ctx *ctx)
     vec_on_capabilities_changed *vec = &ctx->report.on_capabilities_changed;
     while (vec->size == 0)
         vlc_player_CondWait(ctx->player, &ctx->wait);
+    int new_caps = VEC_LAST(vec).new_caps;
     assert(vlc_player_CanSeek(player) == ctx->params.can_seek
-        && !!(VEC_LAST(vec) & VLC_PLAYER_CAP_SEEK) == ctx->params.can_seek);
+        && !!(new_caps & VLC_PLAYER_CAP_SEEK) == ctx->params.can_seek);
     assert(vlc_player_CanPause(player) == ctx->params.can_pause
-        && !!(VEC_LAST(vec) & VLC_PLAYER_CAP_PAUSE) == ctx->params.can_pause);
+        && !!(new_caps & VLC_PLAYER_CAP_PAUSE) == ctx->params.can_pause);
 }
 
 static void



More information about the vlc-commits mailing list