Loading include/media/AudioRecord.h +13 −0 Original line number Diff line number Diff line Loading @@ -100,6 +100,19 @@ public: typedef void (*callback_t)(int event, void* user, void *info); /* Returns the minimum frame count required for the successful creation of * an AudioRecord object. * Returned status (from utils/Errors.h) can be: * - NO_ERROR: successful operation * - NO_INIT: audio server or audio hardware not initialized * - BAD_VALUE: unsupported configuration */ static status_t getMinFrameCount(int* frameCount, uint32_t sampleRate, int format, int channelCount); /* Constructs an uninitialized AudioRecord. No connection with * AudioFlinger takes place. */ Loading media/libmedia/AudioRecord.cpp +38 −25 Original line number Diff line number Diff line Loading @@ -41,6 +41,38 @@ #define UNLIKELY( exp ) (__builtin_expect( (exp) != 0, false )) namespace android { // --------------------------------------------------------------------------- // static status_t AudioRecord::getMinFrameCount( int* frameCount, uint32_t sampleRate, int format, int channelCount) { size_t size = 0; if (AudioSystem::getInputBufferSize(sampleRate, format, channelCount, &size) != NO_ERROR) { LOGE("AudioSystem could not query the input buffer size."); return NO_INIT; } if (size == 0) { LOGE("Unsupported configuration: sampleRate %d, format %d, channelCount %d", sampleRate, format, channelCount); return BAD_VALUE; } // We double the size of input buffer for ping pong use of record buffer. size <<= 1; if (AudioSystem::isLinearPCM(format)) { size /= channelCount * (format == AudioSystem::PCM_16_BIT ? 2 : 1); } *frameCount = size; return NO_ERROR; } // --------------------------------------------------------------------------- Loading Loading @@ -132,29 +164,11 @@ status_t AudioRecord::set( } // validate framecount size_t inputBuffSizeInBytes = -1; if (AudioSystem::getInputBufferSize(sampleRate, format, channelCount, &inputBuffSizeInBytes) != NO_ERROR) { LOGE("AudioSystem could not query the input buffer size."); return NO_INIT; } if (inputBuffSizeInBytes == 0) { LOGE("Recording parameters are not supported: sampleRate %d, channelCount %d, format %d", sampleRate, channelCount, format); return BAD_VALUE; } int frameSizeInBytes = channelCount * (format == AudioSystem::PCM_16_BIT ? 2 : 1); if (AudioSystem::isLinearPCM(format)) { frameSizeInBytes = channelCount * (format == AudioSystem::PCM_16_BIT ? sizeof(int16_t) : sizeof(int8_t)); } else { frameSizeInBytes = sizeof(int8_t); int minFrameCount = 0; status_t status = getMinFrameCount(&minFrameCount, sampleRate, format, channelCount); if (status != NO_ERROR) { return status; } // We use 2* size of input buffer for ping pong use of record buffer. int minFrameCount = 2 * inputBuffSizeInBytes / frameSizeInBytes; LOGV("AudioRecord::set() minFrameCount = %d", minFrameCount); if (frameCount == 0) { Loading @@ -170,9 +184,8 @@ status_t AudioRecord::set( mSessionId = sessionId; // create the IAudioRecord status_t status = openRecord(sampleRate, format, channelCount, status = openRecord(sampleRate, format, channelCount, frameCount, flags, input); if (status != NO_ERROR) { return status; } Loading Loading
include/media/AudioRecord.h +13 −0 Original line number Diff line number Diff line Loading @@ -100,6 +100,19 @@ public: typedef void (*callback_t)(int event, void* user, void *info); /* Returns the minimum frame count required for the successful creation of * an AudioRecord object. * Returned status (from utils/Errors.h) can be: * - NO_ERROR: successful operation * - NO_INIT: audio server or audio hardware not initialized * - BAD_VALUE: unsupported configuration */ static status_t getMinFrameCount(int* frameCount, uint32_t sampleRate, int format, int channelCount); /* Constructs an uninitialized AudioRecord. No connection with * AudioFlinger takes place. */ Loading
media/libmedia/AudioRecord.cpp +38 −25 Original line number Diff line number Diff line Loading @@ -41,6 +41,38 @@ #define UNLIKELY( exp ) (__builtin_expect( (exp) != 0, false )) namespace android { // --------------------------------------------------------------------------- // static status_t AudioRecord::getMinFrameCount( int* frameCount, uint32_t sampleRate, int format, int channelCount) { size_t size = 0; if (AudioSystem::getInputBufferSize(sampleRate, format, channelCount, &size) != NO_ERROR) { LOGE("AudioSystem could not query the input buffer size."); return NO_INIT; } if (size == 0) { LOGE("Unsupported configuration: sampleRate %d, format %d, channelCount %d", sampleRate, format, channelCount); return BAD_VALUE; } // We double the size of input buffer for ping pong use of record buffer. size <<= 1; if (AudioSystem::isLinearPCM(format)) { size /= channelCount * (format == AudioSystem::PCM_16_BIT ? 2 : 1); } *frameCount = size; return NO_ERROR; } // --------------------------------------------------------------------------- Loading Loading @@ -132,29 +164,11 @@ status_t AudioRecord::set( } // validate framecount size_t inputBuffSizeInBytes = -1; if (AudioSystem::getInputBufferSize(sampleRate, format, channelCount, &inputBuffSizeInBytes) != NO_ERROR) { LOGE("AudioSystem could not query the input buffer size."); return NO_INIT; } if (inputBuffSizeInBytes == 0) { LOGE("Recording parameters are not supported: sampleRate %d, channelCount %d, format %d", sampleRate, channelCount, format); return BAD_VALUE; } int frameSizeInBytes = channelCount * (format == AudioSystem::PCM_16_BIT ? 2 : 1); if (AudioSystem::isLinearPCM(format)) { frameSizeInBytes = channelCount * (format == AudioSystem::PCM_16_BIT ? sizeof(int16_t) : sizeof(int8_t)); } else { frameSizeInBytes = sizeof(int8_t); int minFrameCount = 0; status_t status = getMinFrameCount(&minFrameCount, sampleRate, format, channelCount); if (status != NO_ERROR) { return status; } // We use 2* size of input buffer for ping pong use of record buffer. int minFrameCount = 2 * inputBuffSizeInBytes / frameSizeInBytes; LOGV("AudioRecord::set() minFrameCount = %d", minFrameCount); if (frameCount == 0) { Loading @@ -170,9 +184,8 @@ status_t AudioRecord::set( mSessionId = sessionId; // create the IAudioRecord status_t status = openRecord(sampleRate, format, channelCount, status = openRecord(sampleRate, format, channelCount, frameCount, flags, input); if (status != NO_ERROR) { return status; } Loading