[vlc-devel] [PATCH 5/7] qt: add support for the restore playback functions
Hugo Beauzée-Luyssen
hugo at beauzee.fr
Tue Jan 21 16:18:02 CET 2020
From: Pierre Lamot <pierre at videolabs.io>
canRestorePlayback is stored as a boolean rather than a pure event
because the player view is likely to be loaded after the callback is called
---
modules/gui/qt/player/player_controller.cpp | 25 ++++++++++++++++++-
modules/gui/qt/player/player_controller.hpp | 6 +++++
modules/gui/qt/player/player_controller_p.hpp | 2 ++
3 files changed, 32 insertions(+), 1 deletion(-)
diff --git a/modules/gui/qt/player/player_controller.cpp b/modules/gui/qt/player/player_controller.cpp
index 129d4c1429..b7e39086e9 100644
--- a/modules/gui/qt/player/player_controller.cpp
+++ b/modules/gui/qt/player/player_controller.cpp
@@ -252,6 +252,9 @@ static void on_player_current_media_changed(vlc_player_t *, input_item_t *new_m
that->UpdateArt( newMediaPtr.get() );
that->UpdateMeta( newMediaPtr.get() );
+ that->m_canRestorePlayback = false;
+ emit q->playbackRestoreQueried();
+
RecentsMRL::getInstance( that->p_intf )->addRecent( newMediaPtr.get()->psz_uri );
emit q->inputChanged(true);
@@ -310,6 +313,8 @@ static void on_player_state_changed(vlc_player_t *, enum vlc_player_state state,
emit q->isMenuChanged( false );
that->m_isInteractive= false;
emit q->isInteractiveChanged( false );
+ that->m_canRestorePlayback = false;
+ emit q->playbackRestoreQueried();
that->m_teletextAvailable = false;
emit q->teletextAvailableChanged( false );
@@ -840,6 +845,16 @@ static void on_player_corks_changed(vlc_player_t *, unsigned, void *data)
msg_Dbg( that->p_intf, "on_player_corks_changed");
}
+static void on_player_playback_restore_queried(vlc_player_t *, void *data)
+{
+ PlayerControllerPrivate* that = static_cast<PlayerControllerPrivate*>(data);
+ msg_Dbg( that->p_intf, "on_playback_restore_queried");
+ that->callAsync([that](){
+ that->m_canRestorePlayback = true;
+ emit that->q_func()->playbackRestoreQueried();
+ });
+}
+
static void on_player_timer_update(const struct vlc_player_timer_point *point,
void *data)
{
@@ -950,7 +965,7 @@ static const struct vlc_player_cbs player_cbs = {
on_player_subitems_changed,
on_player_vout_changed,
on_player_corks_changed,
- nullptr
+ on_player_playback_restore_queried
};
static const struct vlc_player_vout_cbs player_vout_cbs = {
@@ -1502,6 +1517,13 @@ void PlayerController::updateTimeFromTimer()
updateTime(system_now, false);
}
+void PlayerController::restorePlaybackPos()
+{
+ Q_D(PlayerController);
+ vlc_player_locker lock{ d->m_player };
+ vlc_player_RestorePlaybackPos( d->m_player );
+}
+
//MISC
void PlayerController::setABloopState(ABLoopState state)
@@ -1697,6 +1719,7 @@ PRIMITIVETYPE_GETTER(bool, isSeekable, m_capabilities & VLC_PLAYER_CAP_SEEK)
PRIMITIVETYPE_GETTER(bool, isRewindable, m_capabilities & VLC_PLAYER_CAP_REWIND)
PRIMITIVETYPE_GETTER(bool, isPausable, m_capabilities & VLC_PLAYER_CAP_PAUSE)
PRIMITIVETYPE_GETTER(bool, isRateChangable, m_capabilities & VLC_PLAYER_CAP_CHANGE_RATE)
+PRIMITIVETYPE_GETTER(bool, canRestorePlayback, m_canRestorePlayback);
PRIMITIVETYPE_GETTER(float, getSubtitleFPS, m_subtitleFPS)
PRIMITIVETYPE_GETTER(bool, hasVideoOutput, m_hasVideo)
PRIMITIVETYPE_GETTER(float, getBuffering, m_buffering)
diff --git a/modules/gui/qt/player/player_controller.hpp b/modules/gui/qt/player/player_controller.hpp
index 703b9b56a8..3c792b47a9 100644
--- a/modules/gui/qt/player/player_controller.hpp
+++ b/modules/gui/qt/player/player_controller.hpp
@@ -125,6 +125,8 @@ public:
Q_PROPERTY(bool pausable READ isPausable NOTIFY pausableChanged)
Q_PROPERTY(bool ratechangable READ isRateChangable NOTIFY rateChangableChanged)
+ Q_PROPERTY(bool canRestorePlayback READ canRestorePlayback NOTIFY playbackRestoreQueried)
+
//tracks
Q_PROPERTY(TrackListModel* videoTracks READ getVideoTracks CONSTANT)
Q_PROPERTY(TrackListModel* audioTracks READ getAudioTracks CONSTANT)
@@ -273,6 +275,8 @@ public slots:
bool isRateChangable() const;
void updatePositionFromTimer();
void updateTimeFromTimer();
+ bool canRestorePlayback() const;
+ void restorePlaybackPos();
//tracks
TrackListModel* getVideoTracks();
@@ -365,6 +369,8 @@ signals:
void recordableChanged( bool );
void rateChangableChanged( bool );
+ void playbackRestoreQueried();
+
//tracks
void audioDelayChanged(VLCTick);
void subtitleDelayChanged(VLCTick);
diff --git a/modules/gui/qt/player/player_controller_p.hpp b/modules/gui/qt/player/player_controller_p.hpp
index 8a7bcc790b..c3f3dd4ea4 100644
--- a/modules/gui/qt/player/player_controller_p.hpp
+++ b/modules/gui/qt/player/player_controller_p.hpp
@@ -82,6 +82,8 @@ public:
float m_position = 0.f;
VLCTick m_length= 0;
+ bool m_canRestorePlayback = false;
+
int m_capabilities = 0;
//tracks
--
2.20.1
More information about the vlc-devel
mailing list