diff options
Diffstat (limited to 'services')
| -rw-r--r-- | services/audioflinger/Threads.cpp | 21 | 
1 files changed, 12 insertions, 9 deletions
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 @@ void AudioFlinger::DirectOutputThread::onAddNewTrack_l()      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 @@ AudioFlinger::PlaybackThread::mixer_state AudioFlinger::DirectOutputThread::prep                      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;  | 
