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)

 如果說在我們調用的時候這個鎖處於一個已經被注銷的狀態。是一定拿不到的。


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM