From 6fde774471629832951e9b9b2e0d758e10f6431d Mon Sep 17 00:00:00 2001 From: Haynes Mathew George Date: Tue, 3 May 2016 16:34:26 -0700 Subject: audioflinger: set flush pending on invalidating offload track On invalidating an offload track, the IAudioTrack instance is destroyed and the offload output is released. If it so happens that APM::getOutputForAttr for the new IAudioTrack is called before OffloadThread::prepareTracks_l checks and removes an invalid track, the same output can get reused. The side effect of this is data present in HAL and below from before the invalidate will be rendered before data from the new seek position is rendered. This is unexpected. To fix this, set hint to issue flush when an offload track is invalidated. Bug: 28566885 CRs-Fixed: 1002438 Change-Id: Ib6c38a3abb600598b87591bac90d03b7150d5216 --- services/audioflinger/Threads.h | 4 +++- 1 file changed, 3 insertions(+), 1 deletion(-) (limited to 'services/audioflinger/Threads.h') diff --git a/services/audioflinger/Threads.h b/services/audioflinger/Threads.h index 48ff77d..8fab1e4 100644 --- a/services/audioflinger/Threads.h +++ b/services/audioflinger/Threads.h @@ -617,7 +617,8 @@ public: virtual bool isValidSyncEvent(const sp& event) const; // called with AudioFlinger lock held - void invalidateTracks(audio_stream_type_t streamType); + void invalidateTracks_l(audio_stream_type_t streamType); + virtual void invalidateTracks(audio_stream_type_t streamType); virtual size_t frameCount() const { return mNormalFrameCount; } @@ -1000,6 +1001,7 @@ protected: virtual bool waitingAsyncCallback(); virtual bool waitingAsyncCallback_l(); + virtual void invalidateTracks(audio_stream_type_t streamType); private: size_t mPausedWriteLength; // length in bytes of write interrupted by pause -- cgit v1.1