diff options
author | Jean-Michel Trivi <jmtrivi@google.com> | 2009-08-31 10:41:55 -0700 |
---|---|---|
committer | Jean-Michel Trivi <jmtrivi@google.com> | 2009-08-31 11:39:20 -0700 |
commit | 09f8db7ad3963f5fa15f2b99880b2f70e89c30ae (patch) | |
tree | e83c6d439d9f345cd0b2415ecf3658d3041f2cdc /packages | |
parent | 1615ccc8a45ea2521339ae6f5b5d543a131915cf (diff) | |
download | frameworks_base-09f8db7ad3963f5fa15f2b99880b2f70e89c30ae.zip frameworks_base-09f8db7ad3963f5fa15f2b99880b2f70e89c30ae.tar.gz frameworks_base-09f8db7ad3963f5fa15f2b99880b2f70e89c30ae.tar.bz2 |
Add a synchronous stop method to TTS synth engine so that upon its destruction,
if it was synthesing to a file, the latter can be deleted without
still being written to.
Clear the hashmap of SpeechItem to be stopped (mKillList) when the speech
queue is empty.
Diffstat (limited to 'packages')
-rw-r--r-- | packages/TtsService/jni/android_tts_SynthProxy.cpp | 25 | ||||
-rwxr-xr-x | packages/TtsService/src/android/tts/SynthProxy.java | 14 | ||||
-rwxr-xr-x | packages/TtsService/src/android/tts/TtsService.java | 6 |
3 files changed, 43 insertions, 2 deletions
diff --git a/packages/TtsService/jni/android_tts_SynthProxy.cpp b/packages/TtsService/jni/android_tts_SynthProxy.cpp index 1793587..071a90d 100644 --- a/packages/TtsService/jni/android_tts_SynthProxy.cpp +++ b/packages/TtsService/jni/android_tts_SynthProxy.cpp @@ -721,6 +721,27 @@ android_tts_SynthProxy_stop(JNIEnv *env, jobject thiz, jint jniData) } +static int +android_tts_SynthProxy_stopSync(JNIEnv *env, jobject thiz, jint jniData) +{ + int result = TTS_FAILURE; + + if (jniData == 0) { + LOGE("android_tts_SynthProxy_stop(): invalid JNI data"); + return result; + } + + // perform a regular stop + result = android_tts_SynthProxy_stop(env, thiz, jniData); + // but wait on the engine having released the engine mutex which protects + // the synthesizer resources. + engineMutex.lock(); + engineMutex.unlock(); + + return result; +} + + static jobjectArray android_tts_SynthProxy_getLanguage(JNIEnv *env, jobject thiz, jint jniData) { @@ -778,6 +799,10 @@ static JNINativeMethod gMethods[] = { "(I)I", (void*)android_tts_SynthProxy_stop }, + { "native_stopSync", + "(I)I", + (void*)android_tts_SynthProxy_stopSync + }, { "native_speak", "(ILjava/lang/String;I)I", (void*)android_tts_SynthProxy_speak diff --git a/packages/TtsService/src/android/tts/SynthProxy.java b/packages/TtsService/src/android/tts/SynthProxy.java index a0814aa..b59a626 100755 --- a/packages/TtsService/src/android/tts/SynthProxy.java +++ b/packages/TtsService/src/android/tts/SynthProxy.java @@ -52,6 +52,18 @@ public class SynthProxy { } /** + * Synchronous stop of the synthesizer. This method returns when the synth + * has completed the stop procedure and doesn't use any of the resources it + * was using while synthesizing. + * + * @return {@link android.speech.tts.TextToSpeech.SUCCESS} or + * {@link android.speech.tts.TextToSpeech.ERROR} + */ + public int stopSync() { + return native_stopSync(mJniData); + } + + /** * Synthesize speech and speak it directly using AudioTrack. */ public int speak(String text, int streamType) { @@ -156,6 +168,8 @@ public class SynthProxy { private native final int native_stop(int jniData); + private native final int native_stopSync(int jniData); + private native final int native_speak(int jniData, String text, int streamType); private native final int native_synthesizeToFile(int jniData, String text, String filename); diff --git a/packages/TtsService/src/android/tts/TtsService.java b/packages/TtsService/src/android/tts/TtsService.java index 2e11698..6094494 100755 --- a/packages/TtsService/src/android/tts/TtsService.java +++ b/packages/TtsService/src/android/tts/TtsService.java @@ -188,6 +188,8 @@ public class TtsService extends Service implements OnCompletionListener { // Unregister all callbacks. mCallbacks.kill(); + + Log.v("TtsService", "onDestroy() completed"); } @@ -497,14 +499,13 @@ public class TtsService extends Service implements OnCompletionListener { // clear the current speech item if (mCurrentSpeechItem != null) { - result = sNativeSynth.stop(); + result = sNativeSynth.stopSync(); mKillList.put(mCurrentSpeechItem, true); mIsSpeaking = false; // was the engine writing to a file? if (mCurrentSpeechItem.mType == SpeechItem.TEXT_TO_FILE) { // delete the file that was being written - // TODO make sure the synth is not writing to the file anymore if (mCurrentSpeechItem.mFilename != null) { File tempFile = new File(mCurrentSpeechItem.mFilename); Log.v("TtsService", "Leaving behind " + mCurrentSpeechItem.mFilename); @@ -884,6 +885,7 @@ public class TtsService extends Service implements OnCompletionListener { } if (mSpeechQueue.size() < 1) { mIsSpeaking = false; + mKillList.clear(); broadcastTtsQueueProcessingCompleted(); return; } |