summaryrefslogtreecommitdiffstats
path: root/services
diff options
context:
space:
mode:
authorGlenn Kasten <gkasten@google.com>2014-02-27 21:29:46 +0000
committerAndroid (Google) Code Review <android-gerrit@google.com>2014-02-27 21:29:46 +0000
commit8897759002677a7072a51a7f0b7cc63761c5f2d4 (patch)
tree0262364113e0ce2e521e28e29e117ee09fa26633 /services
parent54c90d60e6d0d4cdaeab829a48c445bef53ba0d7 (diff)
parent53b5d098b7d5d4412b9b9fe08daaf84c56b716e9 (diff)
downloadframeworks_av-8897759002677a7072a51a7f0b7cc63761c5f2d4.zip
frameworks_av-8897759002677a7072a51a7f0b7cc63761c5f2d4.tar.gz
frameworks_av-8897759002677a7072a51a7f0b7cc63761c5f2d4.tar.bz2
Merge "Move up AudioFlinger::createTrack and openRecord parameter checks"
Diffstat (limited to 'services')
-rw-r--r--services/audioflinger/AudioFlinger.cpp33
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);