Donate to e Foundation | Murena handsets with /e/OS | Own a part of Murena! Learn more

Commit 5446e541 authored by Glenn Kasten's avatar Glenn Kasten
Browse files

Cleanup AudioSystem::getInputBufferSize error handling and caching

Previously, if the IAudioFlinger::getInputBufferSize failed,
it would return NO_ERROR but a zero buffer size value, which could
confuse the caller.  Now it returns BAD_VALUE in this case.

Also it would still cache the zero buffer size.  Now it does
not cache on failure.

Removed over-initialization of the cache globals.

Change-Id: I6835fcb56fe52535e018fc8c0c242115221b5d85
parent 4d973f38
Loading
Loading
Loading
Loading
+10 −4
Original line number Diff line number Diff line
@@ -40,10 +40,10 @@ audio_error_callback AudioSystem::gAudioErrorCallback = NULL;
DefaultKeyedVector<audio_io_handle_t, AudioSystem::OutputDescriptor *> AudioSystem::gOutputs(0);

// Cached values for recording queries, all protected by gLock
uint32_t AudioSystem::gPrevInSamplingRate = 16000;
audio_format_t AudioSystem::gPrevInFormat = AUDIO_FORMAT_PCM_16_BIT;
audio_channel_mask_t AudioSystem::gPrevInChannelMask = AUDIO_CHANNEL_IN_MONO;
size_t AudioSystem::gInBuffSize = 0;
uint32_t AudioSystem::gPrevInSamplingRate;
audio_format_t AudioSystem::gPrevInFormat;
audio_channel_mask_t AudioSystem::gPrevInChannelMask;
size_t AudioSystem::gInBuffSize = 0;    // zero indicates cache is invalid


// establish binder interface to AudioFlinger service
@@ -359,6 +359,12 @@ status_t AudioSystem::getInputBufferSize(uint32_t sampleRate, audio_format_t for
            return PERMISSION_DENIED;
        }
        inBuffSize = af->getInputBufferSize(sampleRate, format, channelMask);
        if (inBuffSize == 0) {
            ALOGE("AudioSystem::getInputBufferSize failed sampleRate %d format %x channelMask %x",
                    sampleRate, format, channelMask);
            return BAD_VALUE;
        }
        // A benign race is possible here: we could overwrite a fresher cache entry
        gLock.lock();
        // save the request params
        gPrevInSamplingRate = sampleRate;