Merge "API changes for NFC." into gingerbread
diff --git a/core/java/android/speech/tts/TextToSpeech.java b/core/java/android/speech/tts/TextToSpeech.java
index 841257f..757eaa6 100755
--- a/core/java/android/speech/tts/TextToSpeech.java
+++ b/core/java/android/speech/tts/TextToSpeech.java
@@ -464,10 +464,17 @@
 
         Intent intent = new Intent("android.intent.action.START_TTS_SERVICE");
         intent.addCategory("android.intent.category.TTS");
-        mContext.bindService(intent, mServiceConnection,
-                Context.BIND_AUTO_CREATE);
-        // TODO handle case where the binding works (should always work) but
-        //      the plugin fails
+        boolean bound = mContext.bindService(intent, mServiceConnection, Context.BIND_AUTO_CREATE);
+        if (!bound) {
+            Log.e("TextToSpeech.java", "initTts() failed to bind to service");
+            if (mInitListener != null) {
+                mInitListener.onInit(ERROR);
+            }
+        } else {
+            // initialization listener will be called inside ServiceConnection
+            Log.i("TextToSpeech.java", "initTts() successfully bound to service");
+        }
+        // TODO handle plugin failures
     }
 
 
@@ -717,8 +724,9 @@
     {
         synchronized (mStartLock) {
             int result = ERROR;
-            Log.i("TTS received: ", text);
+            Log.i("TextToSpeech.java - speak", "speak text of length " + text.length());
             if (!mStarted) {
+                Log.e("TextToSpeech.java - speak", "service isn't started");
                 return result;
             }
             try {
@@ -1226,7 +1234,10 @@
             String filename) {
         synchronized (mStartLock) {
             int result = ERROR;
+            Log.i("TextToSpeech.java - synthesizeToFile", "synthesizeToFile text of length "
+                    + text.length());
             if (!mStarted) {
+                Log.e("TextToSpeech.java - synthesizeToFile", "service isn't started");
                 return result;
             }
             try {
diff --git a/services/audioflinger/AudioFlinger.cpp b/services/audioflinger/AudioFlinger.cpp
index cd9b07e..5071555 100644
--- a/services/audioflinger/AudioFlinger.cpp
+++ b/services/audioflinger/AudioFlinger.cpp
@@ -5433,19 +5433,21 @@
 
         // clear auxiliary effect input buffer for next accumulation
         if ((mDescriptor.flags & EFFECT_FLAG_TYPE_MASK) == EFFECT_FLAG_TYPE_AUXILIARY) {
-            memset(mConfig.inputCfg.buffer.raw, 0, mConfig.inputCfg.buffer.frameCount*sizeof(int32_t));
+            memset(mConfig.inputCfg.buffer.raw, 0,
+                   mConfig.inputCfg.buffer.frameCount*sizeof(int32_t));
         }
     } else if ((mDescriptor.flags & EFFECT_FLAG_TYPE_MASK) == EFFECT_FLAG_TYPE_INSERT &&
-                mConfig.inputCfg.buffer.raw != mConfig.outputCfg.buffer.raw){
-        // If an insert effect is idle and input buffer is different from output buffer, copy input to
-        // output
+                mConfig.inputCfg.buffer.raw != mConfig.outputCfg.buffer.raw) {
+        // If an insert effect is idle and input buffer is different from output buffer,
+        // accumulate input onto output
         sp<EffectChain> chain = mChain.promote();
         if (chain != 0 && chain->activeTracks() != 0) {
-            size_t size = mConfig.inputCfg.buffer.frameCount * sizeof(int16_t);
-            if (mConfig.inputCfg.channels == CHANNEL_STEREO) {
-                size *= 2;
+            size_t frameCnt = mConfig.inputCfg.buffer.frameCount * 2;  //always stereo here
+            int16_t *in = mConfig.inputCfg.buffer.s16;
+            int16_t *out = mConfig.outputCfg.buffer.s16;
+            for (size_t i = 0; i < frameCnt; i++) {
+                out[i] = clamp16((int32_t)out[i] + (int32_t)in[i]);
             }
-            memcpy(mConfig.outputCfg.buffer.raw, mConfig.inputCfg.buffer.raw, size);
         }
     }
 }