diff options
author | Dominik Holland <dominik.holland@pelagicore.com> | 2017-03-06 14:55:34 +0100 |
---|---|---|
committer | Dominik Holland <dominik.holland@pelagicore.com> | 2017-03-08 10:46:32 +0000 |
commit | e77e8a55e6ef764873cca4c7712fe73b58ad1961 (patch) | |
tree | 9a7850be7503537c98d742f563c3074073869541 | |
parent | 5dcadb7b9196255d73ae524f2dd72913c08d584a (diff) |
media_simulator: Made the player backend more solid
When using the previous/next functions to fast, the backend could
crash as it was using the same QMediaPlayer object from two different
threads. We now limit it to one thread to make sure the operation
get queued.
Change-Id: I1d03d44cd843f6b77f19cc669a1de8feed434413
Reviewed-by: Robert Griebl <robert.griebl@pelagicore.com>
-rw-r--r-- | src/plugins/ivimedia/media_simulator/mediaplayerbackend.cpp | 14 | ||||
-rw-r--r-- | src/plugins/ivimedia/media_simulator/mediaplayerbackend.h | 2 |
2 files changed, 11 insertions, 5 deletions
diff --git a/src/plugins/ivimedia/media_simulator/mediaplayerbackend.cpp b/src/plugins/ivimedia/media_simulator/mediaplayerbackend.cpp index 52631ea..a229b8c 100644 --- a/src/plugins/ivimedia/media_simulator/mediaplayerbackend.cpp +++ b/src/plugins/ivimedia/media_simulator/mediaplayerbackend.cpp @@ -45,6 +45,7 @@ #include <QtConcurrent/QtConcurrent> #include <QtMultimedia/QMediaPlayer> +#include <QThreadPool> #include <QFuture> #include <QSqlError> #include <QSqlQuery> @@ -54,8 +55,11 @@ MediaPlayerBackend::MediaPlayerBackend(const QSqlDatabase &database, QObject *pa : QIviMediaPlayerBackendInterface(parent) , m_count(0) , m_currentIndex(-1) + , m_threadPool(new QThreadPool(this)) , m_player(new QMediaPlayer(this)) { + m_threadPool->setMaxThreadCount(1); + connect(m_player, &QMediaPlayer::durationChanged, this, &MediaPlayerBackend::durationChanged); connect(m_player, &QMediaPlayer::positionChanged, @@ -130,7 +134,7 @@ void MediaPlayerBackend::fetchData(int start, int count) QStringList queries; queries.append(queryString); - QtConcurrent::run(this, + QtConcurrent::run(m_threadPool, this, &MediaPlayerBackend::doSqlOperation, MediaPlayerBackend::Select, queries, @@ -152,7 +156,7 @@ void MediaPlayerBackend::insert(int index, const QIviPlayableItem *item) .arg(track_index); QStringList queries = queryString.split(';'); - QtConcurrent::run(this, + QtConcurrent::run(m_threadPool, this, &MediaPlayerBackend::doSqlOperation, MediaPlayerBackend::Insert, queries, index, 0); @@ -165,7 +169,7 @@ void MediaPlayerBackend::remove(int index) .arg(index); QStringList queries = queryString.split(';'); - QtConcurrent::run(this, + QtConcurrent::run(m_threadPool, this, &MediaPlayerBackend::doSqlOperation, MediaPlayerBackend::Remove, queries, index, 1); @@ -188,7 +192,7 @@ void MediaPlayerBackend::move(int cur_index, int new_index) .arg(delta > 0 ? "-" : "+"); QStringList queries = queryString.split(';'); - QtConcurrent::run(this, + QtConcurrent::run(m_threadPool, this, &MediaPlayerBackend::doSqlOperation, MediaPlayerBackend::Move, queries, cur_index, new_index); @@ -315,7 +319,7 @@ void MediaPlayerBackend::setCurrentIndex(int index) QStringList queries; queries.append(queryString); - QtConcurrent::run(this, + QtConcurrent::run(m_threadPool, this, &MediaPlayerBackend::doSqlOperation, MediaPlayerBackend::SetIndex, queries, m_currentIndex, 0); diff --git a/src/plugins/ivimedia/media_simulator/mediaplayerbackend.h b/src/plugins/ivimedia/media_simulator/mediaplayerbackend.h index 1c46ee9..cc9bbc5 100644 --- a/src/plugins/ivimedia/media_simulator/mediaplayerbackend.h +++ b/src/plugins/ivimedia/media_simulator/mediaplayerbackend.h @@ -48,6 +48,7 @@ QT_FORWARD_DECLARE_CLASS(QMediaPlayer); QT_FORWARD_DECLARE_CLASS(QMediaPlaylist); +QT_FORWARD_DECLARE_CLASS(QThreadPool); class MediaPlayerBackend : public QIviMediaPlayerBackendInterface { @@ -89,6 +90,7 @@ private: int m_count; int m_currentIndex; + QThreadPool *m_threadPool; QMediaPlayer *m_player; QSqlDatabase m_db; }; |