From 6b48b5de2bf992ea630e9584e206d0129ac9111e Mon Sep 17 00:00:00 2001 From: Baligh Uddin Date: Thu, 26 Dec 2013 10:51:50 -0800 Subject: Import translations. DO NOT MERGE Change-Id: Ica62235d3952c75ce0f7eaae6b4e314094f48b19 Auto-generated-cl: translation import --- carousel/test/res/values-am/strings.xml | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/carousel/test/res/values-am/strings.xml b/carousel/test/res/values-am/strings.xml index 5f4b961..f1e8da2 100644 --- a/carousel/test/res/values-am/strings.xml +++ b/carousel/test/res/values-am/strings.xml @@ -21,7 +21,7 @@ xmlns:xliff="urn:oasis:names:tc:xliff:document:1.2"> "የሙዚቃ Carousel" "የCarousel ፍተሻ" - "የCarouselን ጥቅም የሚያሳይ ትግበራ" + "የCarouselን ጥቅም የሚያሳይ መተግበሪያ" "ክንውን ቀያያሪ" "የቅርብ ጊዜ ትግበራዎች" "ምንም የቅርብ ጊዜ ክንውን የለም" -- cgit v1.2.3 From e49544de8cf5224d0fd2af944b1431c92f7b83f9 Mon Sep 17 00:00:00 2001 From: Baligh Uddin Date: Wed, 19 Feb 2014 21:37:27 -0800 Subject: Import translations. DO NOT MERGE Change-Id: I7fe4f19559fd348ccd5a802cd93f29707ac11a65 Auto-generated-cl: translation import --- carousel/test/res/values-ca/strings.xml | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/carousel/test/res/values-ca/strings.xml b/carousel/test/res/values-ca/strings.xml index 15d758c..9f85f5e 100644 --- a/carousel/test/res/values-ca/strings.xml +++ b/carousel/test/res/values-ca/strings.xml @@ -21,7 +21,7 @@ xmlns:xliff="urn:oasis:names:tc:xliff:document:1.2"> "MusicCarousel" "CarouselTest" - "Una aplicació per mostrar l\'ús de Carousel" + "Una aplicació per mostrar com es fa servir l\'expositor giratori" "TaskSwitcher" "Aplicacions usades recentment" "No hi ha tasques recents" -- cgit v1.2.3 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) --- variablespeed/jni/jni_entry.cc | 7 +++++-- variablespeed/jni/variablespeed.cc | 19 +++++++++++++------ variablespeed/jni/variablespeed.h | 1 + .../android/ex/variablespeed/MediaPlayerProxy.java | 1 + .../variablespeed/SingleThreadedMediaPlayerProxy.java | 5 +++++ .../com/android/ex/variablespeed/VariableSpeed.java | 9 ++++++++- 6 files changed, 33 insertions(+), 9 deletions(-) diff --git a/variablespeed/jni/jni_entry.cc b/variablespeed/jni/jni_entry.cc index 368d230..d679475 100644 --- a/variablespeed/jni/jni_entry.cc +++ b/variablespeed/jni/jni_entry.cc @@ -81,9 +81,12 @@ JNI_METHOD(initializeEngine, void) (JNIEnv*, jclass, float initialRate, size_t decodeInitialSize, size_t decodeMaxSize, size_t startPositionMillis, int audioStreamType) { MethodLog _("initializeEngine"); - AudioEngine::SetEngine(new AudioEngine(targetFrames, + AudioEngine *engine = new AudioEngine(targetFrames, windowDuration, windowOverlapDuration, maxPlayBufferCount, initialRate, - decodeInitialSize, decodeMaxSize, startPositionMillis, audioStreamType)); + decodeInitialSize, decodeMaxSize, startPositionMillis, audioStreamType); + if (!AudioEngine::CompareAndSetEngine(NULL, engine)) { + delete engine; + } } JNI_METHOD(shutdownEngine, void) (JNIEnv*, jclass) { diff --git a/variablespeed/jni/variablespeed.cc b/variablespeed/jni/variablespeed.cc index 73ac609..4bdbbcc 100644 --- a/variablespeed/jni/variablespeed.cc +++ b/variablespeed/jni/variablespeed.cc @@ -129,14 +129,21 @@ void AudioEngine::SetEngine(AudioEngine* engine) { audioEngine_ = engine; } +bool AudioEngine::CompareAndSetEngine(AudioEngine* expect, AudioEngine* update) { + android::Mutex::Autolock autoLock(publishEngineLock_); + if (audioEngine_ == expect) { + DeleteEngine(); + audioEngine_ = update; + return true; + } + return false; +} + void AudioEngine::DeleteEngine() { - if (audioEngine_ == NULL) { - LOGE("you haven't initialized the audio engine"); - CHECK(false); - return; + if (audioEngine_ != NULL) { + delete audioEngine_; + audioEngine_ = NULL; } - delete audioEngine_; - audioEngine_ = NULL; } // **************************************************************************** diff --git a/variablespeed/jni/variablespeed.h b/variablespeed/jni/variablespeed.h index 07cba0f..b48dbc2 100644 --- a/variablespeed/jni/variablespeed.h +++ b/variablespeed/jni/variablespeed.h @@ -64,6 +64,7 @@ class AudioEngine { static AudioEngine* GetEngine(); static void SetEngine(AudioEngine* engine); + static bool CompareAndSetEngine(AudioEngine* expect, AudioEngine* update); static void DeleteEngine(); private: 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