aboutsummaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorDominik Holland <dominik.holland@pelagicore.com>2017-03-06 14:55:34 +0100
committerDominik Holland <dominik.holland@pelagicore.com>2017-03-08 10:46:32 +0000
commite77e8a55e6ef764873cca4c7712fe73b58ad1961 (patch)
tree9a7850be7503537c98d742f563c3074073869541
parent5dcadb7b9196255d73ae524f2dd72913c08d584a (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.cpp14
-rw-r--r--src/plugins/ivimedia/media_simulator/mediaplayerbackend.h2
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;
};