diff options
| author | Eric Laurent <elaurent@google.com> | 2015-07-13 15:52:35 +0000 | 
|---|---|---|
| committer | Android (Google) Code Review <android-gerrit@google.com> | 2015-07-13 15:52:36 +0000 | 
| commit | 4b33e0838fdb1b5e545449add02005916b512c99 (patch) | |
| tree | e38ce9db4984ec035c05ffa7832e2bad50fe2bd2 | |
| parent | 9ad9e7471629f7b9061569a50555a1722047f38d (diff) | |
| parent | 0f0631eb55b1f0a7f4b62212b78a3faa0b49919b (diff) | |
| download | frameworks_av-4b33e0838fdb1b5e545449add02005916b512c99.zip frameworks_av-4b33e0838fdb1b5e545449add02005916b512c99.tar.gz frameworks_av-4b33e0838fdb1b5e545449add02005916b512c99.tar.bz2  | |
Merge "audioflinger: flush HAL when transitioning to next direct track" into mnc-dev
| -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;  | 
