diff options
author | Glenn Kasten <gkasten@google.com> | 2014-02-05 10:00:23 -0800 |
---|---|---|
committer | Glenn Kasten <gkasten@google.com> | 2014-02-27 13:25:35 -0800 |
commit | 53b5d098b7d5d4412b9b9fe08daaf84c56b716e9 (patch) | |
tree | ca7d7dd39481b7d2651495587fbdbf1c1f0e087a /services/audioflinger | |
parent | 3d2e09f0221693de08129edd02adf340a44e7a38 (diff) | |
download | frameworks_av-53b5d098b7d5d4412b9b9fe08daaf84c56b716e9.zip frameworks_av-53b5d098b7d5d4412b9b9fe08daaf84c56b716e9.tar.gz frameworks_av-53b5d098b7d5d4412b9b9fe08daaf84c56b716e9.tar.bz2 |
Move up AudioFlinger::createTrack and openRecord parameter checks
Perform the basic sample rate, format, and channel masks tests as
early as possible. Now the thread methods only need to do the thread
type-specific checks.
Change-Id: I57d8319a228dda0446ca9b3ddcb7c9f67f28238c
Diffstat (limited to 'services/audioflinger')
-rw-r--r-- | services/audioflinger/AudioFlinger.cpp | 33 |
1 files changed, 32 insertions, 1 deletions
diff --git a/services/audioflinger/AudioFlinger.cpp b/services/audioflinger/AudioFlinger.cpp index 7615086..db81ff0 100644 --- a/services/audioflinger/AudioFlinger.cpp +++ b/services/audioflinger/AudioFlinger.cpp @@ -527,9 +527,24 @@ sp<IAudioTrack> AudioFlinger::createTrack( goto Exit; } + // further sample rate checks are performed by createTrack_l() depending on the thread type + if (sampleRate == 0) { + ALOGE("createTrack() invalid sample rate %u", sampleRate); + lStatus = BAD_VALUE; + goto Exit; + } + + // further channel mask checks are performed by createTrack_l() depending on the thread type + if (!audio_is_output_channel(channelMask)) { + ALOGE("createTrack() invalid channel mask %#x", channelMask); + lStatus = BAD_VALUE; + goto Exit; + } + // client is responsible for conversion of 8-bit PCM to 16-bit PCM, // and we don't yet support 8.24 or 32-bit PCM - if (audio_is_linear_pcm(format) && format != AUDIO_FORMAT_PCM_16_BIT) { + if (!audio_is_valid_format(format) || + (audio_is_linear_pcm(format) && format != AUDIO_FORMAT_PCM_16_BIT)) { ALOGE("createTrack() invalid format %#x", format); lStatus = BAD_VALUE; goto Exit; @@ -1320,12 +1335,28 @@ sp<IAudioRecord> AudioFlinger::openRecord( goto Exit; } + // further sample rate checks are performed by createRecordTrack_l() + if (sampleRate == 0) { + ALOGE("openRecord() invalid sample rate %u", sampleRate); + lStatus = BAD_VALUE; + goto Exit; + } + + // FIXME when we support more formats, add audio_is_valid_format(format) + // and any explicit restrictions if audio_is_linear_pcm(format) if (format != AUDIO_FORMAT_PCM_16_BIT) { ALOGE("openRecord() invalid format %#x", format); lStatus = BAD_VALUE; goto Exit; } + // further channel mask checks are performed by createRecordTrack_l() + if (!audio_is_input_channel(channelMask)) { + ALOGE("openRecord() invalid channel mask %#x", channelMask); + lStatus = BAD_VALUE; + goto Exit; + } + // add client to list { // scope for mLock Mutex::Autolock _l(mLock); |