Android: fix QMediaPlayer::bufferStatus value.
It was returning the buffering progress for the whole media, which is not what is expected according to the documentation. It should return instead how much the playback buffer is filled. This information is not available on Android so we simply return 100% when the status is BufferedMedia or BufferingMedia, 0% otherwise. Change-Id: I9fb55a9317948ba9375291a57bbf100f186382a2 Reviewed-by: Christian Stromme <christian.stromme@digia.com>
This commit is contained in:
committed by
The Qt Project
parent
c376e13abd
commit
235c863db9
@@ -54,6 +54,7 @@ QAndroidMediaPlayerControl::QAndroidMediaPlayerControl(QObject *parent)
|
||||
mVideoOutput(0),
|
||||
mSeekable(true),
|
||||
mBufferPercent(-1),
|
||||
mBufferFilled(false),
|
||||
mAudioAvailable(false),
|
||||
mVideoAvailable(false),
|
||||
mBuffering(false),
|
||||
@@ -221,7 +222,7 @@ void QAndroidMediaPlayerControl::setMuted(bool muted)
|
||||
|
||||
int QAndroidMediaPlayerControl::bufferStatus() const
|
||||
{
|
||||
return mBufferPercent;
|
||||
return mBufferFilled ? 100 : 0;
|
||||
}
|
||||
|
||||
bool QAndroidMediaPlayerControl::isAudioAvailable() const
|
||||
@@ -487,7 +488,6 @@ void QAndroidMediaPlayerControl::onBufferingChanged(qint32 percent)
|
||||
{
|
||||
mBuffering = percent != 100;
|
||||
mBufferPercent = percent;
|
||||
Q_EMIT bufferStatusChanged(mBufferPercent);
|
||||
|
||||
updateAvailablePlaybackRanges();
|
||||
|
||||
@@ -621,6 +621,8 @@ void QAndroidMediaPlayerControl::setMediaStatus(QMediaPlayer::MediaStatus status
|
||||
|
||||
mCurrentMediaStatus = status;
|
||||
Q_EMIT mediaStatusChanged(mCurrentMediaStatus);
|
||||
|
||||
updateBufferStatus();
|
||||
}
|
||||
|
||||
void QAndroidMediaPlayerControl::setSeekable(bool seekable)
|
||||
@@ -658,7 +660,6 @@ void QAndroidMediaPlayerControl::resetBufferingProgress()
|
||||
mBuffering = false;
|
||||
mBufferPercent = 0;
|
||||
mAvailablePlaybackRange = QMediaTimeRange();
|
||||
Q_EMIT bufferStatusChanged(mBufferPercent);
|
||||
}
|
||||
|
||||
void QAndroidMediaPlayerControl::flushPendingStates()
|
||||
@@ -694,4 +695,15 @@ void QAndroidMediaPlayerControl::flushPendingStates()
|
||||
}
|
||||
}
|
||||
|
||||
void QAndroidMediaPlayerControl::updateBufferStatus()
|
||||
{
|
||||
bool bufferFilled = (mCurrentMediaStatus == QMediaPlayer::BufferedMedia
|
||||
|| mCurrentMediaStatus == QMediaPlayer::BufferingMedia);
|
||||
|
||||
if (mBufferFilled != bufferFilled) {
|
||||
mBufferFilled = bufferFilled;
|
||||
Q_EMIT bufferStatusChanged(bufferStatus());
|
||||
}
|
||||
}
|
||||
|
||||
QT_END_NAMESPACE
|
||||
|
||||
@@ -106,6 +106,7 @@ private:
|
||||
QAndroidVideoOutput *mVideoOutput;
|
||||
bool mSeekable;
|
||||
int mBufferPercent;
|
||||
bool mBufferFilled;
|
||||
bool mAudioAvailable;
|
||||
bool mVideoAvailable;
|
||||
QSize mVideoSize;
|
||||
@@ -127,6 +128,7 @@ private:
|
||||
void updateAvailablePlaybackRanges();
|
||||
void resetBufferingProgress();
|
||||
void flushPendingStates();
|
||||
void updateBufferStatus();
|
||||
};
|
||||
|
||||
QT_END_NAMESPACE
|
||||
|
||||
Reference in New Issue
Block a user