summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorVladimir Belyavsky <belyavskyv@gmail.com>2023-05-04 14:00:14 +0300
committerVladimir Belyavsky <belyavskyv@gmail.com>2023-05-04 21:42:30 +0300
commit9830f6593868be875465b8ed9b3796685600adb0 (patch)
tree94e222e39cbae9d5db15b00cb8d39cbf689e5cef
parent54c2bd33eddc96ac7268ca43773e98b4cd7433f6 (diff)
downloadqtmultimedia-9830f6593868be875465b8ed9b3796685600adb0.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 Pick-to: 6.5 Change-Id: I16e26710941ed6b8429f39c201572092f2714c74 Reviewed-by: Lars Knoll <lars@knoll.priv.no>
-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)
{