From 2412c298d4e8c112a63eb1e3ec9b5f2789bd3eeb Mon Sep 17 00:00:00 2001 From: Yoann Lopes Date: Mon, 4 Nov 2013 19:14:22 +0100 Subject: [PATCH] Android: fix two race conditions in the media player. start() could be called before the media player was marked as prepared. When changing media, setMediaPath() could be called before the media player was reset. Task-number: QTBUG-34558 Change-Id: I886fd5f5008f76dcbc88c57d7b16a439b394d4a7 Reviewed-by: Christian Stromme --- .../qtproject/qt5/android/multimedia/QtAndroidMediaPlayer.java | 3 +-- .../android/src/mediaplayer/qandroidmediaplayercontrol.cpp | 2 +- 2 files changed, 2 insertions(+), 3 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 2ca07a63..cd79c979 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 @@ -159,7 +159,6 @@ public class QtAndroidMediaPlayer extends MediaPlayer public void onCompletion(final MediaPlayer mp) { onMediaPlayerInfoNative(MEDIA_PLAYER_FINISHED, 0, mID); - reset(); } } @@ -191,9 +190,9 @@ public class QtAndroidMediaPlayer extends MediaPlayer @Override public void onPrepared(final MediaPlayer mp) { + mPreparing = false; onMediaPlayerInfoNative(MEDIA_PLAYER_READY, 0, mID); onMediaPlayerInfoNative(MEDIA_PLAYER_DURATION, getDuration(), mID); - mPreparing = false; } } diff --git a/src/plugins/android/src/mediaplayer/qandroidmediaplayercontrol.cpp b/src/plugins/android/src/mediaplayer/qandroidmediaplayercontrol.cpp index 3f3b599a..54c04e5c 100644 --- a/src/plugins/android/src/mediaplayer/qandroidmediaplayercontrol.cpp +++ b/src/plugins/android/src/mediaplayer/qandroidmediaplayercontrol.cpp @@ -344,7 +344,7 @@ void QAndroidMediaPlayerControl::onMediaPlayerInfo(qint32 what, qint32 extra) Q_EMIT positionChanged(extra); break; case JMediaPlayer::MEDIA_PLAYER_FINISHED: - setState(QMediaPlayer::StoppedState); + stop(); setMediaStatus(QMediaPlayer::EndOfMedia); break; }