diff options
author | Samuel Mira <samuel.mira@qt.io> | 2021-09-14 16:14:28 +0300 |
---|---|---|
committer | Qt Cherry-pick Bot <cherrypick_bot@qt-project.org> | 2021-09-17 10:00:23 +0000 |
commit | 1c33f92f40edc3ab2a81b59cba87d1d08484d25b (patch) | |
tree | 0f929af68d3e848d14192919061f098decb73776 | |
parent | a25fe5bf2eab924125963e3b2b004ac553e3c86f (diff) | |
download | qtmultimedia-1c33f92f40edc3ab2a81b59cba87d1d08484d25b.tar.gz |
Fix Playback issue on Android
The android media player did not change when a new source was
set because in QtAndroidMediaPlayer setDataSource, if the state
was not Idle, would fail silently without changing the source.
Now if the state is not Idle it will reset the mediaplayer.
Fixes: QTBUG-96456
Change-Id: I7b06524ac4a341140e08e44cde2d75211f1c7a9e
Reviewed-by: Assam Boudjelthia <assam.boudjelthia@qt.io>
(cherry picked from commit 96a708759938a2f55dea3b6f02cd394334654818)
Reviewed-by: Qt Cherry-pick Bot <cherrypick_bot@qt-project.org>
-rw-r--r-- | src/android/jar/src/org/qtproject/qt/android/multimedia/QtAndroidMediaPlayer.java | 52 |
1 files changed, 26 insertions, 26 deletions
diff --git a/src/android/jar/src/org/qtproject/qt/android/multimedia/QtAndroidMediaPlayer.java b/src/android/jar/src/org/qtproject/qt/android/multimedia/QtAndroidMediaPlayer.java index fb1ba3088..f332c2db7 100644 --- a/src/android/jar/src/org/qtproject/qt/android/multimedia/QtAndroidMediaPlayer.java +++ b/src/android/jar/src/org/qtproject/qt/android/multimedia/QtAndroidMediaPlayer.java @@ -263,13 +263,23 @@ public class QtAndroidMediaPlayer private void init() { - if (mMediaPlayer == null) { - mMediaPlayer = new MediaPlayer(); - setState(State.Idle); - // Make sure the new media player has the volume that was set on the QMediaPlayer - setVolumeHelper(mMuted ? 0 : mVolume); - setAudioAttributes(mMediaPlayer, mAudioAttributes); - } + if (mMediaPlayer != null) + return; + + mMediaPlayer = new MediaPlayer(); + setState(State.Idle); + // Make sure the new media player has the volume that was set on the QMediaPlayer + setVolumeHelper(mMuted ? 0 : mVolume); + setAudioAttributes(mMediaPlayer, mAudioAttributes); + + mMediaPlayer.setOnBufferingUpdateListener(new MediaPlayerBufferingListener()); + mMediaPlayer.setOnCompletionListener(new MediaPlayerCompletionListener()); + mMediaPlayer.setOnInfoListener(new MediaPlayerInfoListener()); + mMediaPlayer.setOnSeekCompleteListener(new MediaPlayerSeekCompleteListener()); + mMediaPlayer.setOnVideoSizeChangedListener(new MediaPlayerVideoSizeChangedListener()); + mMediaPlayer.setOnErrorListener(new MediaPlayerErrorListener()); + mMediaPlayer.setOnPreparedListener(new MediaPlayerPreparedListener()); + mMediaPlayer.setOnTimedTextListener(new MediaPlayerTimedTextListener()); } public void start() @@ -387,20 +397,17 @@ public class QtAndroidMediaPlayer public void setDataSource(final String path) { - if ((mState & State.Uninitialized) != 0) + if (mState == State.Uninitialized) init(); - if ((mState & State.Idle) == 0) - return; + if (mState != State.Idle) + reset(); - mMediaPlayer.setOnBufferingUpdateListener(new MediaPlayerBufferingListener()); - mMediaPlayer.setOnCompletionListener(new MediaPlayerCompletionListener()); - mMediaPlayer.setOnInfoListener(new MediaPlayerInfoListener()); - mMediaPlayer.setOnSeekCompleteListener(new MediaPlayerSeekCompleteListener()); - mMediaPlayer.setOnVideoSizeChangedListener(new MediaPlayerVideoSizeChangedListener()); - mMediaPlayer.setOnErrorListener(new MediaPlayerErrorListener()); - mMediaPlayer.setOnPreparedListener(new MediaPlayerPreparedListener()); - mMediaPlayer.setOnTimedTextListener(new MediaPlayerTimedTextListener()); + // mediaplayer can only setDataSource if it is on State.Idle + if (mState != State.Idle) { + Log.w(TAG, "Trying to set data source of a media player that is not idle!"); + return; + } if (mSurfaceHolder != null) mMediaPlayer.setDisplay(mSurfaceHolder); @@ -675,14 +682,7 @@ public class QtAndroidMediaPlayer public void reset() { - if ((mState & (State.Idle - | State.Initialized - | State.Prepared - | State.Started - | State.Paused - | State.Stopped - | State.PlaybackCompleted - | State.Error)) == 0) { + if (mState == State.Uninitialized) { return; } |