diff options
author | Glenn Kasten <gkasten@google.com> | 2014-02-25 19:20:10 +0000 |
---|---|---|
committer | Android (Google) Code Review <android-gerrit@google.com> | 2014-02-25 19:20:11 +0000 |
commit | 9f474b7824abb0d5408d02e365cf37a986663979 (patch) | |
tree | 153354d59d0ef95f88832ba25e30a133964334b6 | |
parent | 172abfe2cc30104282f8e65b82e9c9758adc83da (diff) | |
parent | b42f318d9733f88c7eb9bedfd33b086b8ea5dff5 (diff) | |
download | frameworks_av-9f474b7824abb0d5408d02e365cf37a986663979.zip frameworks_av-9f474b7824abb0d5408d02e365cf37a986663979.tar.gz frameworks_av-9f474b7824abb0d5408d02e365cf37a986663979.tar.bz2 |
Merge "Simplify and cleanup error handling in AudioRecord::getMinFrameCount"
-rw-r--r-- | include/media/AudioSystem.h | 1 | ||||
-rw-r--r-- | media/libmedia/AudioRecord.cpp | 27 |
2 files changed, 11 insertions, 17 deletions
diff --git a/include/media/AudioSystem.h b/include/media/AudioSystem.h index fd86737..28fdfd4 100644 --- a/include/media/AudioSystem.h +++ b/include/media/AudioSystem.h @@ -118,6 +118,7 @@ public: static bool routedToA2dpOutput(audio_stream_type_t streamType); + // return status NO_ERROR implies *buffSize > 0 static status_t getInputBufferSize(uint32_t sampleRate, audio_format_t format, audio_channel_mask_t channelMask, size_t* buffSize); diff --git a/media/libmedia/AudioRecord.cpp b/media/libmedia/AudioRecord.cpp index b6b6d14..eaa52ca 100644 --- a/media/libmedia/AudioRecord.cpp +++ b/media/libmedia/AudioRecord.cpp @@ -41,30 +41,22 @@ status_t AudioRecord::getMinFrameCount( return BAD_VALUE; } - // default to 0 in case of error - *frameCount = 0; - - size_t size = 0; + size_t size; status_t status = AudioSystem::getInputBufferSize(sampleRate, format, channelMask, &size); if (status != NO_ERROR) { - ALOGE("AudioSystem could not query the input buffer size; status %d", status); - return NO_INIT; + ALOGE("AudioSystem could not query the input buffer size for sampleRate %u, format %#x, " + "channelMask %#x; status %d", sampleRate, format, channelMask, status); + return status; } - if (size == 0) { + // We double the size of input buffer for ping pong use of record buffer. + // Assumes audio_is_linear_pcm(format) + if ((*frameCount = (size * 2) / (popcount(channelMask) * audio_bytes_per_sample(format))) == 0) { ALOGE("Unsupported configuration: sampleRate %u, format %#x, channelMask %#x", sampleRate, format, channelMask); return BAD_VALUE; } - // We double the size of input buffer for ping pong use of record buffer. - size <<= 1; - - // Assumes audio_is_linear_pcm(format) - uint32_t channelCount = popcount(channelMask); - size /= channelCount * audio_bytes_per_sample(format); - - *frameCount = size; return NO_ERROR; } @@ -215,11 +207,12 @@ status_t AudioRecord::set( mFrameSize = channelCount * audio_bytes_per_sample(format); // validate framecount - size_t minFrameCount = 0; + size_t minFrameCount; status_t status = AudioRecord::getMinFrameCount(&minFrameCount, sampleRate, format, channelMask); if (status != NO_ERROR) { - ALOGE("getMinFrameCount() failed; status %d", status); + ALOGE("getMinFrameCount() failed for sampleRate %u, format %#x, channelMask %#x; status %d", + sampleRate, format, channelMask, status); return status; } ALOGV("AudioRecord::set() minFrameCount = %d", minFrameCount); |