Merge "audioflinger: flush HAL when transitioning to next direct track" into mnc-dev
diff --git a/services/audioflinger/Threads.cpp b/services/audioflinger/Threads.cpp
index 0880c5d..d9f1a83 100644
--- a/services/audioflinger/Threads.cpp
+++ b/services/audioflinger/Threads.cpp
@@ -4487,9 +4487,16 @@
     sp<Track> previousTrack = mPreviousTrack.promote();
     sp<Track> latestTrack = mLatestActiveTrack.promote();
 
-    if (previousTrack != 0 && latestTrack != 0 &&
-        (previousTrack->sessionId() != latestTrack->sessionId())) {
-        mFlushPending = true;
+    if (previousTrack != 0 && latestTrack != 0) {
+        if (mType == DIRECT) {
+            if (previousTrack.get() != latestTrack.get()) {
+                mFlushPending = true;
+            }
+        } else /* mType == OFFLOAD */ {
+            if (previousTrack->sessionId() != latestTrack->sessionId()) {
+                mFlushPending = true;
+            }
+        }
     }
     PlaybackThread::onAddNewTrack_l();
 }
@@ -4582,12 +4589,8 @@
                     if (track != previousTrack.get()) {
                         // Flush any data still being written from last track
                         mBytesRemaining = 0;
-                        // flush data already sent if changing audio session as audio
-                        // comes from a different source. Also invalidate previous track to force a
-                        // seek when resuming.
-                        if (previousTrack->sessionId() != track->sessionId()) {
-                            previousTrack->invalidate();
-                        }
+                        // Invalidate previous track to force a seek when resuming.
+                        previousTrack->invalidate();
                     }
                 }
                 mPreviousTrack = track;