summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
-rw-r--r--media/java/android/media/MediaPlayer2.java18
1 files changed, 17 insertions, 1 deletions
diff --git a/media/java/android/media/MediaPlayer2.java b/media/java/android/media/MediaPlayer2.java
index 548dc881d733..82889761b592 100644
--- a/media/java/android/media/MediaPlayer2.java
+++ b/media/java/android/media/MediaPlayer2.java
@@ -1763,10 +1763,13 @@ public class MediaPlayer2 implements AutoCloseable
*/
// This is an asynchronous call.
public Object setAudioSessionId(int sessionId) {
- keepAudioSessionIdAlive(sessionId);
+ final AudioTrack dummyAudioTrack = new AudioTrack(AudioManager.STREAM_MUSIC, 44100,
+ AudioFormat.CHANNEL_OUT_MONO, AudioFormat.ENCODING_PCM_16BIT, 2,
+ AudioTrack.MODE_STATIC, sessionId);
return addTask(new Task(CALL_COMPLETED_SET_AUDIO_SESSION_ID, false) {
@Override
void process() {
+ keepAudioSessionIdAlive(dummyAudioTrack);
native_setAudioSessionId(sessionId);
}
});
@@ -4621,4 +4624,17 @@ public class MediaPlayer2 implements AutoCloseable
AudioTrack.MODE_STATIC, sessionId);
}
}
+
+ private void keepAudioSessionIdAlive(AudioTrack at) {
+ synchronized (mSessionIdLock) {
+ if (mDummyAudioTrack != null) {
+ if (mDummyAudioTrack.getAudioSessionId() == at.getAudioSessionId()) {
+ at.release();
+ return;
+ }
+ mDummyAudioTrack.release();
+ }
+ mDummyAudioTrack = at;
+ }
+ }
}