diff options
author | Vladimir Belyavsky <belyavskyv@gmail.com> | 2023-05-04 14:00:14 +0300 |
---|---|---|
committer | Vladimir Belyavsky <belyavskyv@gmail.com> | 2023-05-04 21:42:30 +0300 |
commit | 9830f6593868be875465b8ed9b3796685600adb0 (patch) | |
tree | 94e222e39cbae9d5db15b00cb8d39cbf689e5cef /src/multimedia/playback | |
parent | 54c2bd33eddc96ac7268ca43773e98b4cd7433f6 (diff) |
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
Pick-to: 6.5
Change-Id: I16e26710941ed6b8429f39c201572092f2714c74
Reviewed-by: Lars Knoll <lars@knoll.priv.no>
Diffstat (limited to 'src/multimedia/playback')
-rw-r--r-- | src/multimedia/playback/qmediaplayer.cpp | 17 | ||||
-rw-r--r-- | src/multimedia/playback/qmediaplayer_p.h | 2 |
2 files changed, 11 insertions, 8 deletions
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) { |