diff options
| -rw-r--r-- | media/java/android/media/MediaPlayer2.java | 18 |
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; + } + } } |