From ce2b95ae200332495b348be07f77fe60b6c23dcc Mon Sep 17 00:00:00 2001 From: Jay Shrauner Date: Wed, 26 Feb 2014 10:08:37 -0800 Subject: Fix AudioEngine to allow re-initialization - DO NOT MERGE Add AudioEngine::CompareAndSetEngine and change VariableSpeed::initializeEngine to use this method so it only initializes a new engine once rather than asserting on subsequent calls. Change AudioEngine::DeleteEngine so it ignores repeated calls instead of asserting. Add VariableSpeed::isReadyToPlay so callers can detect when the audio library has been properly initialized. Bug:11511992 Change-Id: I4517cb2ab4c186da43dffc7dbc2a9ad49000059f (cherry picked from commit 8502b724a9fdc104e7b4a3aba1641e101b4c7be9) --- .../src/com/android/ex/variablespeed/MediaPlayerProxy.java | 1 + .../android/ex/variablespeed/SingleThreadedMediaPlayerProxy.java | 5 +++++ .../src/com/android/ex/variablespeed/VariableSpeed.java | 9 ++++++++- 3 files changed, 14 insertions(+), 1 deletion(-) (limited to 'variablespeed/src/com/android/ex/variablespeed') diff --git a/variablespeed/src/com/android/ex/variablespeed/MediaPlayerProxy.java b/variablespeed/src/com/android/ex/variablespeed/MediaPlayerProxy.java index 8489dc1..3b7b576 100644 --- a/variablespeed/src/com/android/ex/variablespeed/MediaPlayerProxy.java +++ b/variablespeed/src/com/android/ex/variablespeed/MediaPlayerProxy.java @@ -42,6 +42,7 @@ public interface MediaPlayerProxy { int getDuration(); void seekTo(int startPosition); void start(); + boolean isReadyToPlay(); boolean isPlaying(); int getCurrentPosition(); void pause(); diff --git a/variablespeed/src/com/android/ex/variablespeed/SingleThreadedMediaPlayerProxy.java b/variablespeed/src/com/android/ex/variablespeed/SingleThreadedMediaPlayerProxy.java index 17692f7..c9a9741 100644 --- a/variablespeed/src/com/android/ex/variablespeed/SingleThreadedMediaPlayerProxy.java +++ b/variablespeed/src/com/android/ex/variablespeed/SingleThreadedMediaPlayerProxy.java @@ -84,6 +84,11 @@ public class SingleThreadedMediaPlayerProxy implements MediaPlayerProxy { mDelegate.start(); } + @Override + public synchronized boolean isReadyToPlay() { + return mDelegate.isReadyToPlay(); + } + @Override public synchronized boolean isPlaying() { return mDelegate.isPlaying(); diff --git a/variablespeed/src/com/android/ex/variablespeed/VariableSpeed.java b/variablespeed/src/com/android/ex/variablespeed/VariableSpeed.java index 5c93d26..e44a375 100644 --- a/variablespeed/src/com/android/ex/variablespeed/VariableSpeed.java +++ b/variablespeed/src/com/android/ex/variablespeed/VariableSpeed.java @@ -336,10 +336,17 @@ public class VariableSpeed implements MediaPlayerProxy { } } + @Override + public boolean isReadyToPlay() { + synchronized (lock) { + return !mHasBeenReleased && mHasDuration; + } + } + @Override public boolean isPlaying() { synchronized (lock) { - return mHasStartedPlayback && !hasPlaybackFinished(); + return isReadyToPlay() && mHasStartedPlayback && !hasPlaybackFinished(); } } -- cgit v1.2.3