From feb365184f1b020278849fb171095d3e95f44a9c Mon Sep 17 00:00:00 2001 From: wjiang Date: Thu, 8 Aug 2013 18:49:41 +0800 Subject: Gallery2: Recycle effect instance when MovieActivity pauses VideoView will deallocate audio track for local video playback when MovieActivity being paused, which causes audio effect being released twice when onDestroy() is called. To avoid such special case, we should ensure effect be deallocated/allocated when video view call pause/resume. Change-Id: I571f9f3126be747ebe4e65a01f6880941d00d25d CRs-Fixed: 522349, 523853, 524557 --- src/com/android/gallery3d/app/MovieActivity.java | 78 ++++++++++++++---------- 1 file changed, 47 insertions(+), 31 deletions(-) (limited to 'src') diff --git a/src/com/android/gallery3d/app/MovieActivity.java b/src/com/android/gallery3d/app/MovieActivity.java index fc712964e..40f845efb 100644 --- a/src/com/android/gallery3d/app/MovieActivity.java +++ b/src/com/android/gallery3d/app/MovieActivity.java @@ -198,27 +198,7 @@ public class MovieActivity extends Activity { mPlayer.setOnPreparedListener(new MediaPlayer.OnPreparedListener() { @Override public void onPrepared(MediaPlayer mp) { - int sessionId = mp.getAudioSessionId(); - if (mBassBoostSupported) { - mBassBoostEffect = new BassBoost(0, sessionId); - } - if (mVirtualizerSupported) { - mVirtualizerEffect = new Virtualizer(0, sessionId); - } - if (mIsHeadsetOn) { - if (mPrefs.getBoolean(Key.global_enabled.toString(), false)) { - if (mBassBoostSupported) { - mBassBoostEffect.setStrength((short) - mPrefs.getInt(Key.bb_strength.toString(), 0)); - mBassBoostEffect.setEnabled(true); - } - if (mVirtualizerSupported) { - mVirtualizerEffect.setStrength((short) - mPrefs.getInt(Key.virt_strength.toString(), 0)); - mVirtualizerEffect.setEnabled(true); - } - } - } + initEffects(mp.getAudioSessionId()); } }); } @@ -409,6 +389,46 @@ public class MovieActivity extends Activity { } } + private void initEffects(int sessionId) { + // Singleton instance + if ((mBassBoostEffect == null) && mBassBoostSupported) { + mBassBoostEffect = new BassBoost(0, sessionId); + } + + if ((mVirtualizerEffect == null) && mVirtualizerSupported) { + mVirtualizerEffect = new Virtualizer(0, sessionId); + } + + if (mIsHeadsetOn) { + if (mPrefs.getBoolean(Key.global_enabled.toString(), false)) { + if (mBassBoostSupported) { + mBassBoostEffect.setStrength((short) + mPrefs.getInt(Key.bb_strength.toString(), 0)); + mBassBoostEffect.setEnabled(true); + } + if (mVirtualizerSupported) { + mVirtualizerEffect.setStrength((short) + mPrefs.getInt(Key.virt_strength.toString(), 0)); + mVirtualizerEffect.setEnabled(true); + } + } + } + + } + + private void releaseEffects() { + if (mBassBoostEffect != null) { + mBassBoostEffect.setEnabled(false); + mBassBoostEffect.release(); + mBassBoostEffect = null; + } + if (mVirtualizerEffect != null) { + mVirtualizerEffect.setEnabled(false); + mVirtualizerEffect.release(); + mVirtualizerEffect = null; + } + } + private Intent createShareIntent() { Intent intent = new Intent(Intent.ACTION_SEND); intent.setType("video/*"); @@ -455,6 +475,9 @@ public class MovieActivity extends Activity { @Override public void onPause() { + // Audio track will be deallocated for local video playback, + // thus recycle effect here. + releaseEffects(); mPlayer.onPause(); try { unregisterReceiver(mReceiver); @@ -474,6 +497,8 @@ public class MovieActivity extends Activity { intentFilter.addAction(AudioManager.ACTION_AUDIO_BECOMING_NOISY); registerReceiver(mReceiver, intentFilter); } + + initEffects(mPlayer.getAudioSessionId()); super.onResume(); } @@ -485,17 +510,8 @@ public class MovieActivity extends Activity { @Override public void onDestroy() { + releaseEffects(); mPlayer.onDestroy(); - if (mBassBoostEffect != null) { - mBassBoostEffect.setEnabled(false); - mBassBoostEffect.release(); - mBassBoostEffect = null; - } - if (mVirtualizerEffect != null) { - mVirtualizerEffect.setEnabled(false); - mVirtualizerEffect.release(); - mVirtualizerEffect = null; - } super.onDestroy(); } -- cgit v1.2.3