diff options
Diffstat (limited to 'media')
| -rw-r--r-- | media/libmedia/AudioSystem.cpp | 8 | ||||
| -rw-r--r-- | media/libmedia/AudioTrack.cpp | 4 | 
2 files changed, 12 insertions, 0 deletions
diff --git a/media/libmedia/AudioSystem.cpp b/media/libmedia/AudioSystem.cpp index bb91fa9..853a5f6 100644 --- a/media/libmedia/AudioSystem.cpp +++ b/media/libmedia/AudioSystem.cpp @@ -727,6 +727,14 @@ status_t AudioSystem::isStreamActive(int stream, bool* state, uint32_t inPastMs)  } +void AudioSystem::clearAudioConfigCache() +{ +    Mutex::Autolock _l(gLock); +    LOGV("clearAudioConfigCache()"); +    gStreamOutputMap.clear(); +    gOutputs.clear(); +} +  // ---------------------------------------------------------------------------  void AudioSystem::AudioPolicyServiceClient::binderDied(const wp<IBinder>& who) { diff --git a/media/libmedia/AudioTrack.cpp b/media/libmedia/AudioTrack.cpp index cecedb5..3b6c64d 100644 --- a/media/libmedia/AudioTrack.cpp +++ b/media/libmedia/AudioTrack.cpp @@ -1164,6 +1164,10 @@ status_t AudioTrack::restoreTrack_l(audio_track_cblk_t*& cblk, bool fromStart)          cblk->cv.broadcast();          cblk->lock.unlock(); +        // refresh the audio configuration cache in this process to make sure we get new +        // output parameters in getOutput_l() and createTrack_l() +        AudioSystem::clearAudioConfigCache(); +          // if the new IAudioTrack is created, createTrack_l() will modify the          // following member variables: mAudioTrack, mCblkMemory and mCblk.          // It will also delete the strong references on previous IAudioTrack and IMemory  | 
