diff options
author | Vladimir Belyavsky <belyavskyv@gmail.com> | 2023-05-04 14:00:14 +0300 |
---|---|---|
committer | Qt Cherry-pick Bot <cherrypick_bot@qt-project.org> | 2023-05-04 19:07:28 +0000 |
commit | 1d326406c5ee1a093fe7eddc2d47af60456b72ea (patch) | |
tree | 3a07457ccae9b17b273756cd876dd0e5b2fe387e | |
parent | 7ac68e92e299261d7ad16791b66261504888b16e (diff) | |
download | qtmultimedia-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.cpp | 2 | ||||
-rw-r--r-- | src/multimedia/playback/qmediaplayer.cpp | 17 | ||||
-rw-r--r-- | src/multimedia/playback/qmediaplayer_p.h | 2 |
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) { |