diff options
author | Ricardo Garcia <rago@google.com> | 2015-04-30 18:39:16 -0700 |
---|---|---|
committer | Ricardo Garcia <rago@google.com> | 2015-06-22 16:08:40 -0700 |
commit | 6c7f062d3149d6890daaee64828959ad6f61ea54 (patch) | |
tree | dcab2e17178bf6d01ead75fad5df883961a6e195 /services | |
parent | fa907d4ee326c7bb9cbb4882ab7c0ec42bbceee3 (diff) | |
download | frameworks_av-6c7f062d3149d6890daaee64828959ad6f61ea54.zip frameworks_av-6c7f062d3149d6890daaee64828959ad6f61ea54.tar.gz frameworks_av-6c7f062d3149d6890daaee64828959ad6f61ea54.tar.bz2 |
Using centralized isAudioPlaybackRateValid to validate parameters
Centralized validation code
bug: 20701446
Change-Id: I9d9941c7639c05b2afe069ff4f858c693c910bfe
Diffstat (limited to 'services')
-rw-r--r-- | services/audioflinger/AudioMixer.cpp | 10 | ||||
-rw-r--r-- | services/audioflinger/BufferProviders.cpp | 8 | ||||
-rw-r--r-- | services/audioflinger/BufferProviders.h | 1 |
3 files changed, 9 insertions, 10 deletions
diff --git a/services/audioflinger/AudioMixer.cpp b/services/audioflinger/AudioMixer.cpp index 01efc53..8a9a837 100644 --- a/services/audioflinger/AudioMixer.cpp +++ b/services/audioflinger/AudioMixer.cpp @@ -733,13 +733,9 @@ void AudioMixer::setParameter(int name, int target, int param, void *value) case PLAYBACK_RATE: { const AudioPlaybackRate *playbackRate = reinterpret_cast<AudioPlaybackRate*>(value); - ALOG_ASSERT(AUDIO_TIMESTRETCH_SPEED_MIN <= playbackRate->mSpeed - && playbackRate->mSpeed <= AUDIO_TIMESTRETCH_SPEED_MAX, - "bad speed %f", playbackRate->mSpeed); - ALOG_ASSERT(AUDIO_TIMESTRETCH_PITCH_MIN <= playbackRate->mPitch - && playbackRate->mPitch <= AUDIO_TIMESTRETCH_PITCH_MAX, - "bad pitch %f", playbackRate->mPitch); - //TODO: use function from AudioResamplerPublic.h to test validity. + ALOGW_IF(!isAudioPlaybackRateValid(*playbackRate), + "bad parameters speed %f, pitch %f",playbackRate->mSpeed, + playbackRate->mPitch); if (track.setPlaybackRate(*playbackRate)) { ALOGV("setParameter(TIMESTRETCH, PLAYBACK_RATE, STRETCH_MODE, FALLBACK_MODE " "%f %f %d %d", diff --git a/services/audioflinger/BufferProviders.cpp b/services/audioflinger/BufferProviders.cpp index 8a580e8..3566ee2 100644 --- a/services/audioflinger/BufferProviders.cpp +++ b/services/audioflinger/BufferProviders.cpp @@ -332,7 +332,8 @@ TimestretchBufferProvider::TimestretchBufferProvider(int32_t channelCount, mLocalBufferData(NULL), mRemaining(0), mSonicStream(sonicCreateStream(sampleRate, mChannelCount)), - mFallbackFailErrorShown(false) + mFallbackFailErrorShown(false), + mAudioPlaybackRateValid(false) { LOG_ALWAYS_FATAL_IF(mSonicStream == NULL, "TimestretchBufferProvider can't allocate Sonic stream"); @@ -460,6 +461,8 @@ status_t TimestretchBufferProvider::setPlaybackRate(const AudioPlaybackRate &pla sonicSetSpeed(mSonicStream, mPlaybackRate.mSpeed); //TODO: pitch is ignored for now //TODO: optimize: if parameters are the same, don't do any extra computation. + + mAudioPlaybackRateValid = isAudioPlaybackRateValid(mPlaybackRate); return OK; } @@ -479,8 +482,7 @@ void TimestretchBufferProvider::processFrames(void *dstBuffer, size_t *dstFrames *srcFrames = targetSrc + 1; } - if (mPlaybackRate.mSpeed< TIMESTRETCH_SONIC_SPEED_MIN || - mPlaybackRate.mSpeed > TIMESTRETCH_SONIC_SPEED_MAX ) { + if (!mAudioPlaybackRateValid) { //fallback mode if (*dstFrames > 0) { switch(mPlaybackRate.mFallbackMode) { diff --git a/services/audioflinger/BufferProviders.h b/services/audioflinger/BufferProviders.h index 4970b6c..4bc895c 100644 --- a/services/audioflinger/BufferProviders.h +++ b/services/audioflinger/BufferProviders.h @@ -188,6 +188,7 @@ private: sonicStream mSonicStream; // handle to sonic timestretch object //FIXME: this dependency should be abstracted out bool mFallbackFailErrorShown; // log fallback error only once + bool mAudioPlaybackRateValid; // flag for current parameters validity }; // ---------------------------------------------------------------------------- |