auto import from //branches/cupcake/...@125939
diff --git a/libs/audioflinger/A2dpAudioInterface.cpp b/libs/audioflinger/A2dpAudioInterface.cpp
index d54795c..b2a8e96 100644
--- a/libs/audioflinger/A2dpAudioInterface.cpp
+++ b/libs/audioflinger/A2dpAudioInterface.cpp
@@ -79,11 +79,6 @@
     return NULL;
 }
 
-status_t A2dpAudioInterface::standby()
-{
-    return 0;
-}
-
 status_t A2dpAudioInterface::setMicMute(bool state)
 {
     return 0;
@@ -123,8 +118,8 @@
 // ----------------------------------------------------------------------------
 
 A2dpAudioInterface::A2dpAudioStreamOut::A2dpAudioStreamOut() :
-    mFd(-1), mStartCount(0), mRetryCount(0), mData(NULL),
-    mInitialized(false), mBufferRemaining(0)
+    mFd(-1), mStandby(false), mStartCount(0), mRetryCount(0), mData(NULL),
+    mInitialized(false)
 {
 }
 
@@ -155,26 +150,50 @@
 
 ssize_t A2dpAudioInterface::A2dpAudioStreamOut::write(const void* buffer, size_t bytes)
 {    
+    status_t status = NO_INIT;
+    size_t remaining = bytes;
+
     if (!mInitialized) {
-        int ret = a2dp_init("00:00:00:00:00:00", 44100, 2, &mData);
-        if (ret)
-            return ret;
+        status = a2dp_init("00:00:00:00:00:00", 44100, 2, &mData);
+        if (status < 0) {
+            LOGE("a2dp_init failed err: %d\n", status);
+            goto Error;
+        }
         mInitialized = true;
     }
     
-    size_t remaining = bytes;
     while (remaining > 0) {
-        int written = a2dp_write(mData, buffer, remaining);        
-        remaining -= written;
-        buffer = ((char *)buffer) + written;
+        status = a2dp_write(mData, buffer, remaining);
+        if (status <= 0) {
+            LOGE("a2dp_write failed err: %d\n", status);
+            goto Error;
+        }
+        remaining -= status;
+        buffer = ((char *)buffer) + status;
     }
+
+    mStandby = false;
     
     return bytes;
+
+Error:   
+    // Simulate audio output timing in case of error
+    usleep(bytes * 1000000 / frameSize() / sampleRate());
+
+    return status;
 }
 
 status_t A2dpAudioInterface::A2dpAudioStreamOut::standby()
 {
-    return 0;
+    int result = 0;
+
+    if (!mStandby) {
+        result = a2dp_stop(mData);
+        if (result == 0)
+            mStandby = true;
+    }
+
+    return result;
 }
 
 status_t A2dpAudioInterface::A2dpAudioStreamOut::dump(int fd, const Vector<String16>& args)