auto import from //branches/cupcake/...@127101
diff --git a/include/media/AudioRecord.h b/include/media/AudioRecord.h
index 71744be..dd585c9 100644
--- a/include/media/AudioRecord.h
+++ b/include/media/AudioRecord.h
@@ -275,7 +275,7 @@
             STOPPED = 1
         };
 
-            status_t    obtainBuffer(Buffer* audioBuffer, bool blocking);
+            status_t    obtainBuffer(Buffer* audioBuffer, int32_t waitCount);
             void        releaseBuffer(Buffer* audioBuffer);
 
 
diff --git a/include/media/AudioTrack.h b/include/media/AudioTrack.h
index f382451..fd62daa 100644
--- a/include/media/AudioTrack.h
+++ b/include/media/AudioTrack.h
@@ -358,7 +358,7 @@
             STOPPED = 1
         };
 
-            status_t    obtainBuffer(Buffer* audioBuffer, bool blocking);
+            status_t    obtainBuffer(Buffer* audioBuffer, int32_t waitCount);
             void        releaseBuffer(Buffer* audioBuffer);
 
 
diff --git a/include/media/ToneGenerator.h b/include/media/ToneGenerator.h
index 0ddfb8e..0cfdeec 100644
--- a/include/media/ToneGenerator.h
+++ b/include/media/ToneGenerator.h
@@ -134,7 +134,7 @@
     Condition mWaitCbkCond; // condition enabling interface to wait for audio callback completion after a change is requested
     float mVolume;  // Volume applied to audio track
     int mStreamType; // Audio stream used for output
-    int mProcessSize;  // Size of audio blocks generated at a time by audioCallback() (in PCM frames).
+    unsigned int mProcessSize;  // Size of audio blocks generated at a time by audioCallback() (in PCM frames).
 
     bool initAudioTrack();
     static void audioCallback(int event, void* user, void *info);
diff --git a/include/private/media/AudioTrackShared.h b/include/private/media/AudioTrackShared.h
index 72ed281..1991aa7 100644
--- a/include/private/media/AudioTrackShared.h
+++ b/include/private/media/AudioTrackShared.h
@@ -28,6 +28,11 @@
 
 #define MAX_SAMPLE_RATE     65535
 #define THREAD_PRIORITY_AUDIO_CLIENT (ANDROID_PRIORITY_AUDIO)
+// Maximum cumulated timeout milliseconds before restarting audioflinger thread
+#define MAX_STARTUP_TIMEOUT_MS  3000    // Longer timeout period at startup to cope with A2DP init time
+#define MAX_RUN_TIMEOUT_MS      1000
+#define WAIT_PERIOD_MS          10
+
 
 struct audio_track_cblk_t
 {
@@ -55,9 +60,11 @@
                 int16_t     flowControlFlag; // underrun (out) or overrrun (in) indication
                 uint8_t     out;        // out equals 1 for AudioTrack and 0 for AudioRecord
                 uint8_t     forceReady; 
+                uint16_t    bufferTimeoutMs; // Maximum cumulated timeout before restarting audioflinger
+                uint16_t    waitTimeMs;      // Cumulated wait time
                 // Padding ensuring that data buffer starts on a cache line boundary (32 bytes). 
                 // See AudioFlinger::TrackBase constructor
-                int32_t     Padding[4];
+                int32_t     Padding[3];
                 
                             audio_track_cblk_t();
                 uint32_t    stepUser(uint32_t frameCount);