AudioRecord::getMinFrameCount
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)
如果说在我们调用的时候这个锁处于一个已经被注销的状态。是一定拿不到的。