diff options
author | Andy Hung <hunga@google.com> | 2015-03-27 18:39:59 -0700 |
---|---|---|
committer | Andy Hung <hunga@google.com> | 2015-03-31 15:31:40 -0700 |
commit | 5cbb5785a58655e21f5f7805274b8c78b986216b (patch) | |
tree | beb100fe401a58aea703ba57875c81dba7133d38 /media/libmedia/AudioTrack.cpp | |
parent | 91e5e043d766e39b0840f2ca2e658e2fe58987e7 (diff) | |
download | frameworks_av-5cbb5785a58655e21f5f7805274b8c78b986216b.zip frameworks_av-5cbb5785a58655e21f5f7805274b8c78b986216b.tar.gz frameworks_av-5cbb5785a58655e21f5f7805274b8c78b986216b.tar.bz2 |
Reject sample rate changes for fast tracks
This is needed for a SoundPool fix.
Bug: 19970735
Change-Id: I46b69e059aabf0d06b16b31ea436bb71f7146750
Diffstat (limited to 'media/libmedia/AudioTrack.cpp')
-rw-r--r-- | media/libmedia/AudioTrack.cpp | 10 |
1 files changed, 7 insertions, 3 deletions
diff --git a/media/libmedia/AudioTrack.cpp b/media/libmedia/AudioTrack.cpp index 98f64fe..ce30c62 100644 --- a/media/libmedia/AudioTrack.cpp +++ b/media/libmedia/AudioTrack.cpp @@ -667,14 +667,18 @@ void AudioTrack::getAuxEffectSendLevel(float* level) const status_t AudioTrack::setSampleRate(uint32_t rate) { - if (mIsTimed || isOffloadedOrDirect()) { + AutoMutex lock(mLock); + if (rate == mSampleRate) { + return NO_ERROR; + } + if (mIsTimed || isOffloadedOrDirect_l() || (mFlags & AUDIO_OUTPUT_FLAG_FAST)) { return INVALID_OPERATION; } - - AutoMutex lock(mLock); if (mOutput == AUDIO_IO_HANDLE_NONE) { return NO_INIT; } + // NOTE: it is theoretically possible, but highly unlikely, that a device change + // could mean a previously allowed sampling rate is no longer allowed. uint32_t afSamplingRate; if (AudioSystem::getSamplingRate(mOutput, &afSamplingRate) != NO_ERROR) { return NO_INIT; |