接上一节
来看AudioSystem::getOutputFrameCount(&afFrameCount, mStreamType),他的作用是查询硬件内部缓冲的大小。所以要跟audioflinger打交道。
再看看是怎么得到framcount的,貌似和audiopolicy打交道了
status_t AudioSystem::getOutputFrameCount(int* frameCount, int streamType)
{
OutputDescriptor *outputDesc;
audio_io_handle_t output;
if (streamType == DEFAULT) {
streamType = MUSIC;
}
output = getOutput((stream_type)streamType);
if (output == 0) {
return PERMISSION_DENIED;
}
gLock.lock();
outputDesc = AudioSystem::gOutputs.valueFor(output);
if (outputDesc == 0) {
gLock.unlock();
const sp<IAudioFlinger>& af = AudioSystem::get_audio_flinger();
if (af == 0) return PERMISSION_DENIED;
*frameCount = af->frameCount(output);
} else {
*frameCount = outputDesc->frameCount;
gLock.unlock();
}
LOGI("getOutputFrameCount() streamType %d, output %d, frameCount %d", streamType, output, *frameCount);
return NO_ERROR;
}
再往下看,AudioSystem::getOutputSamplingRate(&afSampleRate, mStreamType),查询采样率,一般返回的是所支持的最高采样率。
然后计算帧数,fra