vlc | branch: master | Francois Cartegnie <[email protected]> | Fri May 31 11:21:26 2019 +0200| [e06b5ca35308ff9b56ff132bc76e1e579e08797d] | committer: Francois Cartegnie
Qt: on demand art fetch is now async > http://git.videolan.org/gitweb.cgi/vlc.git/?a=commit;h=e06b5ca35308ff9b56ff132bc76e1e579e08797d --- modules/gui/qt/components/player_controller.cpp | 36 +++++++++++++++++-------- modules/gui/qt/components/player_controller.hpp | 5 ++++ 2 files changed, 30 insertions(+), 11 deletions(-) diff --git a/modules/gui/qt/components/player_controller.cpp b/modules/gui/qt/components/player_controller.cpp index 37580926f3..111a2407e0 100644 --- a/modules/gui/qt/components/player_controller.cpp +++ b/modules/gui/qt/components/player_controller.cpp @@ -886,6 +886,8 @@ PlayerController::PlayerController( intf_thread_t *_p_intf ) /* Audio Menu */ menusAudioMapper = new QSignalMapper(this); CONNECT( menusAudioMapper, mapped(const QString&), this, menusUpdateAudio(const QString&) ); + + input_fetcher_cbs.on_art_fetch_ended = onArtFetchEnded_callback; } PlayerController::~PlayerController() @@ -1351,16 +1353,13 @@ void PlayerController::snapshot() void PlayerController::requestArtUpdate( input_item_t *p_item, bool b_forced ) { Q_D(PlayerController); - bool b_current_item = false; + if ( !p_item ) { /* default to current item */ vlc_player_locker lock{ d->m_player }; if ( vlc_player_IsStarted( d->m_player ) ) - { p_item = vlc_player_GetCurrentMedia( d->m_player ); - b_current_item = true; - } } if ( p_item ) @@ -1375,16 +1374,31 @@ void PlayerController::requestArtUpdate( input_item_t *p_item, bool b_forced ) libvlc_ArtRequest( vlc_object_instance(d->p_intf), p_item, (b_forced) ? META_REQUEST_OPTION_SCOPE_ANY : META_REQUEST_OPTION_NONE, - NULL, NULL ); - /* No input will signal the cover art to update, - * let's do it ourself */ - if ( b_current_item ) - d->UpdateArt( p_item ); - else - emit artChanged( p_item ); + &input_fetcher_cbs, this ); } } +void PlayerController::onArtFetchEnded_callback(input_item_t *p_item, bool fetched, + void *userdata) +{ + PlayerController *me = reinterpret_cast<PlayerController *>(userdata); + me->onArtFetchEnded(p_item, fetched); +} + +void PlayerController::onArtFetchEnded(input_item_t *p_item, bool) +{ + Q_D(PlayerController); + + vlc_player_locker lock{ d->m_player }; + bool b_current_item = (p_item == vlc_player_GetCurrentMedia( d->m_player )); + /* No input will signal the cover art to update, + * let's do it ourself */ + if ( b_current_item ) + d->UpdateArt( p_item ); + else + emit artChanged( p_item ); +} + const QString PlayerController::decodeArtURL( input_item_t *p_item ) { assert( p_item ); diff --git a/modules/gui/qt/components/player_controller.hpp b/modules/gui/qt/components/player_controller.hpp index cdf7c8129d..2b20bcab20 100644 --- a/modules/gui/qt/components/player_controller.hpp +++ b/modules/gui/qt/components/player_controller.hpp @@ -411,6 +411,11 @@ private: Q_DECLARE_PRIVATE(PlayerController) QScopedPointer<PlayerControllerPrivate> d_ptr; QSignalMapper *menusAudioMapper; //used by VLCMenuBar + + /* updateArt gui request */ + input_fetcher_callbacks_t input_fetcher_cbs; + static void onArtFetchEnded_callback(input_item_t *, bool fetched, void *userdata); + void onArtFetchEnded(input_item_t *, bool fetched); }; #endif _______________________________________________ vlc-commits mailing list [email protected] https://mailman.videolan.org/listinfo/vlc-commits
