summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorYoann Lopes <yoann.lopes@digia.com>2013-07-29 16:28:15 +0200
committerThe Qt Project <gerrit-noreply@qt-project.org>2013-08-19 15:31:21 +0200
commit4585518d523ec5fcc2c0e35f472926d060ca7871 (patch)
tree3d1274a7ab2c8603b1327bfdc43b4b1a8bc254d3
parentc86d14a380118bc530547c69ba982d2c5e04a992 (diff)
downloadqtmultimedia-4585518d523ec5fcc2c0e35f472926d060ca7871.tar.gz
Android: fixed media player buffering logic.
When the media is ready, the status should always transition to LoadedMedia and then immediately to BufferingMedia or BufferedMedia. Also, when the duration is queried before the media is ready but already buffering, it should always return 0 to avoid errors from the Android media player. Task-number: QTBUG-32635 Change-Id: Ibcb9c23b4f64c4f9a1a8e0ef81989ae78cfb19ef Reviewed-by: Christian Stromme <christian.stromme@digia.com>
-rw-r--r--src/plugins/android/jar/src/org/qtproject/qt5/android/multimedia/QtAndroidMediaPlayer.java2
-rw-r--r--src/plugins/android/mediaplayer/qandroidmediaplayercontrol.cpp13
2 files changed, 7 insertions, 8 deletions
diff --git a/src/plugins/android/jar/src/org/qtproject/qt5/android/multimedia/QtAndroidMediaPlayer.java b/src/plugins/android/jar/src/org/qtproject/qt5/android/multimedia/QtAndroidMediaPlayer.java
index d1abf658e..2ca07a63e 100644
--- a/src/plugins/android/jar/src/org/qtproject/qt5/android/multimedia/QtAndroidMediaPlayer.java
+++ b/src/plugins/android/jar/src/org/qtproject/qt5/android/multimedia/QtAndroidMediaPlayer.java
@@ -191,8 +191,8 @@ public class QtAndroidMediaPlayer extends MediaPlayer
@Override
public void onPrepared(final MediaPlayer mp)
{
- onMediaPlayerInfoNative(MEDIA_PLAYER_DURATION, getDuration(), mID);
onMediaPlayerInfoNative(MEDIA_PLAYER_READY, 0, mID);
+ onMediaPlayerInfoNative(MEDIA_PLAYER_DURATION, getDuration(), mID);
mPreparing = false;
}
diff --git a/src/plugins/android/mediaplayer/qandroidmediaplayercontrol.cpp b/src/plugins/android/mediaplayer/qandroidmediaplayercontrol.cpp
index a70f4e130..4dc56ebd9 100644
--- a/src/plugins/android/mediaplayer/qandroidmediaplayercontrol.cpp
+++ b/src/plugins/android/mediaplayer/qandroidmediaplayercontrol.cpp
@@ -98,8 +98,9 @@ QMediaPlayer::MediaStatus QAndroidMediaPlayerControl::mediaStatus() const
qint64 QAndroidMediaPlayerControl::duration() const
{
return (mCurrentMediaStatus == QMediaPlayer::InvalidMedia
- || mCurrentMediaStatus == QMediaPlayer::NoMedia) ? 0
- : mMediaPlayer->getDuration();
+ || mCurrentMediaStatus == QMediaPlayer::NoMedia
+ || !mMediaPlayerReady) ? 0
+ : mMediaPlayer->getDuration();
}
qint64 QAndroidMediaPlayerControl::position() const
@@ -330,14 +331,12 @@ void QAndroidMediaPlayerControl::onMediaPlayerInfo(qint32 what, qint32 extra)
setState(QMediaPlayer::StoppedState);
break;
case JMediaPlayer::MEDIA_PLAYER_READY:
+ setMediaStatus(QMediaPlayer::LoadedMedia);
if (mBuffering) {
setMediaStatus(mBufferPercent == 100 ? QMediaPlayer::BufferedMedia
: QMediaPlayer::BufferingMedia);
} else {
- setMediaStatus(QMediaPlayer::LoadedMedia);
- mBufferPercent = 100;
- Q_EMIT bufferStatusChanged(mBufferPercent);
- updateAvailablePlaybackRanges();
+ onBufferChanged(100);
}
setAudioAvailable(true);
mMediaPlayerReady = true;
@@ -402,7 +401,7 @@ void QAndroidMediaPlayerControl::onError(qint32 what, qint32 extra)
void QAndroidMediaPlayerControl::onBufferChanged(qint32 percent)
{
- mBuffering = true;
+ mBuffering = percent != 100;
mBufferPercent = percent;
Q_EMIT bufferStatusChanged(mBufferPercent);