[vlc-devel] [PATCH 2/2] player: avoid spurious emits

Romain Vimont rom1v at videolabs.io
Thu May 2 11:17:14 CEST 2019


In Qt, on capability changes, a signal was emitted for all capabilities
regardless of whether they actually changed.

Instead, only emit a signal for capabilities which changed.
---
 .../gui/qt/components/player_controller.cpp   | 33 +++++++++++++++----
 1 file changed, 26 insertions(+), 7 deletions(-)

diff --git a/modules/gui/qt/components/player_controller.cpp b/modules/gui/qt/components/player_controller.cpp
index c79f376576..6104063a8d 100644
--- a/modules/gui/qt/components/player_controller.cpp
+++ b/modules/gui/qt/components/player_controller.cpp
@@ -325,17 +325,36 @@ static void on_player_rate_changed(vlc_player_t *, float new_rate, 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](){
+    that->callAsync([that, old_caps, new_caps]() {
         PlayerController* q = that->q_func();
         that->m_capabilities = new_caps;
-        emit q->seekableChanged( (new_caps & VLC_INPUT_CAPABILITIES_SEEKABLE) != 0 );
-        emit q->rewindableChanged( (new_caps & VLC_INPUT_CAPABILITIES_REWINDABLE) != 0 );
-        emit q->pausableChanged( (new_caps & VLC_INPUT_CAPABILITIES_PAUSEABLE) != 0 );
-        emit q->recordableChanged( (new_caps & VLC_INPUT_CAPABILITIES_RECORDABLE) != 0 );
-        emit q->rateChangableChanged( (new_caps & VLC_INPUT_CAPABILITIES_CHANGE_RATE) != 0 );
+
+        bool oldSeekable = old_caps & VLC_INPUT_CAPABILITIES_SEEKABLE;
+        bool newSeekable = new_caps & VLC_INPUT_CAPABILITIES_SEEKABLE;
+        if (newSeekable != oldSeekable)
+            emit q->seekableChanged( newSeekable );
+
+        bool oldRewindable = old_caps & VLC_INPUT_CAPABILITIES_REWINDABLE;
+        bool newRewindable = new_caps & VLC_INPUT_CAPABILITIES_REWINDABLE;
+        if (newRewindable != oldRewindable)
+            emit q->rewindableChanged( newRewindable );
+
+        bool oldPauseable = old_caps & VLC_INPUT_CAPABILITIES_PAUSEABLE;
+        bool newPauseable = new_caps & VLC_INPUT_CAPABILITIES_PAUSEABLE;
+        if (newPauseable != oldPauseable)
+            emit q->pausableChanged( newPauseable );
+
+        bool oldRecordable = old_caps & VLC_INPUT_CAPABILITIES_RECORDABLE;
+        bool newRecordable = new_caps & VLC_INPUT_CAPABILITIES_RECORDABLE;
+        if (newRecordable != oldRecordable)
+            emit q->recordableChanged( newRecordable);
+
+        bool oldChangeRate = old_caps & VLC_INPUT_CAPABILITIES_CHANGE_RATE;
+        bool newChangeRate = new_caps & VLC_INPUT_CAPABILITIES_CHANGE_RATE;
+        if (newChangeRate != oldChangeRate)
+            emit q->rateChangableChanged( newChangeRate );
     });
 
     //FIXME other events?
-- 
2.20.1



More information about the vlc-devel mailing list