summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorVladimir Belyavsky <belyavskyv@gmail.com>2023-05-04 14:00:14 +0300
committerQt Cherry-pick Bot <cherrypick_bot@qt-project.org>2023-05-04 19:07:28 +0000
commit1d326406c5ee1a093fe7eddc2d47af60456b72ea (patch)
tree3a07457ccae9b17b273756cd876dd0e5b2fe387e
parent7ac68e92e299261d7ad16791b66261504888b16e (diff)
downloadqtmultimedia-1d326406c5ee1a093fe7eddc2d47af60456b72ea.tar.gz
QMediaPlayer: emit errorChanged signal whenever the error has changed
There was a problem that error/errorString properties were not properly notified when reseted on start playing. So now we use private setError() method whenever 'error' should be changed. Also as a drive-by there are several improvements: - errorChanged signal will be emitted now only when the property's value was actually changed. - errorOccured signal is now emitted only when there is a real error, i.e. it will never be emitted with NoError. Fixes: QTBUG-113386 Change-Id: I16e26710941ed6b8429f39c201572092f2714c74 Reviewed-by: Lars Knoll <lars@knoll.priv.no> (cherry picked from commit 9830f6593868be875465b8ed9b3796685600adb0) Reviewed-by: Qt Cherry-pick Bot <cherrypick_bot@qt-project.org>
-rw-r--r--src/multimedia/platform/qplatformmediaplayer.cpp2
-rw-r--r--src/multimedia/playback/qmediaplayer.cpp17
-rw-r--r--src/multimedia/playback/qmediaplayer_p.h2
3 files changed, 12 insertions, 9 deletions
diff --git a/src/multimedia/platform/qplatformmediaplayer.cpp b/src/multimedia/platform/qplatformmediaplayer.cpp
index 5fb82b523..76de92cff 100644
--- a/src/multimedia/platform/qplatformmediaplayer.cpp
+++ b/src/multimedia/platform/qplatformmediaplayer.cpp
@@ -29,7 +29,7 @@ void QPlatformMediaPlayer::mediaStatusChanged(QMediaPlayer::MediaStatus status)
void QPlatformMediaPlayer::error(int error, const QString &errorString)
{
- player->d_func()->setError(error, errorString);
+ player->d_func()->setError(QMediaPlayer::Error(error), errorString);
}
QT_END_NAMESPACE
diff --git a/src/multimedia/playback/qmediaplayer.cpp b/src/multimedia/playback/qmediaplayer.cpp
index e17063652..36d8618ac 100644
--- a/src/multimedia/playback/qmediaplayer.cpp
+++ b/src/multimedia/playback/qmediaplayer.cpp
@@ -116,14 +116,18 @@ void QMediaPlayerPrivate::setStatus(QMediaPlayer::MediaStatus s)
emit q->mediaStatusChanged(s);
}
-void QMediaPlayerPrivate::setError(int error, const QString &errorString)
+void QMediaPlayerPrivate::setError(QMediaPlayer::Error error, const QString &errorString)
{
Q_Q(QMediaPlayer);
- this->error = QMediaPlayer::Error(error);
- this->errorString = errorString;
- emit q->errorChanged();
- emit q->errorOccurred(this->error, errorString);
+ auto prevError = std::exchange(this->error, error);
+ auto prevErrorString = std::exchange(this->errorString, errorString);
+
+ if (prevError != error || prevErrorString != errorString)
+ emit q->errorChanged();
+
+ if (error != QMediaPlayer::NoError)
+ emit q->errorOccurred(error, errorString);
}
void QMediaPlayerPrivate::setMedia(const QUrl &media, QIODevice *stream)
@@ -507,8 +511,7 @@ void QMediaPlayer::play()
return;
// Reset error conditions
- d->error = NoError;
- d->errorString = QString();
+ d->setError(NoError, QString());
d->control->play();
}
diff --git a/src/multimedia/playback/qmediaplayer_p.h b/src/multimedia/playback/qmediaplayer_p.h
index ce9bf091e..04f35e884 100644
--- a/src/multimedia/playback/qmediaplayer_p.h
+++ b/src/multimedia/playback/qmediaplayer_p.h
@@ -60,7 +60,7 @@ public:
void setState(QMediaPlayer::PlaybackState state);
void setStatus(QMediaPlayer::MediaStatus status);
- void setError(int error, const QString &errorString);
+ void setError(QMediaPlayer::Error error, const QString &errorString);
void setVideoSink(QVideoSink *sink)
{