1. 介紹
這個函數是C++一側使用的函數,在錄音開始前獲得最小FrameCount的大小。
status_t status = AudioRecord::getMinFrameCount(&minFrameCount, sampleRateHz, audioFormat, channelConfig)
獲得的minFrameCount會存到第一個參數中。后三個參數會被傳遞給AudioSystem::getInputBufferSize,比如我這邊傳下面三個具體數字:
sampleRateHz = 48000;
audioFormat = AUDIO_FORMAT_PCM_16_BIT;
channelConfig = AUDIO_CHANNEL_IN_STEREO; // 1或者2
在AudioSystem.cpp
中,AudioSystem::getInputBufferSize會去找:
const sp<AudioFlingerClient> afc = getAudioFlingerClient();
return afc->getInputBufferSize(sampleRate, format, channelMask, buffSize);
AudioFlingerClient中對應的getInputBufferSize。
2. 遇到的問題
FORTIFY: pthread_mutex_lock called on a destroyed mutex
在c++中寫一個線程直接調用這個函數會報上面的錯誤。意思是:FORTIFY:對已銷毀的互斥體調用pthread_mutex_lock 。
仔細追代碼就會發現在AudioFlingerClient::getInputBufferSize中有鎖的操作。
Mutex::Autolock _l(mLock)
如果說在我們調用的時候這個鎖處於一個已經被注銷的狀態。是一定拿不到的。