AudioDeviceLinuxPulse::PlayThreadProcess
AudioDeviceBuffer::RequestPlayoutData
因为 将 AudioDeviceBuffer注册了audioCallback
WebRtc_Word32 AudioDeviceBuffer::RegisterAudioCallback(AudioTransport* audioCallback)
{
CriticalSectionScoped lock(&_critSectCb);
_ptrCbAudioTransport = audioCallback;
return 0;
}
VoEBaseImpl::NeedMorePlayData
// Register the AudioTransport implementation
if (_shared->audio_device()->RegisterAudioCallback(this) != 0)
{
_shared->SetLastError(VE_AUDIO_DEVICE_MODULE_ERROR, kTraceWarning,
"Init() failed to register audio callback for the ADM");
}
所以_ptrCbAudioTransport->NeedMorePlayData会调用到VoEBaseImpl::NeedMorePlayData
res = _ptrCbAudioTransport->NeedMorePlayData(_playSamples,
playBytesPerSample,
playChannels,
playSampleRate,
&_playBuffer[0],
nSamplesOut,
&elapsed_time_ms,
&ntp_time_ms);
VoEBaseImpl::NeedMorePlayData
OutputMixer::MixActiveChannels
AudioConferenceMixerImpl::Process
AudioConferenceMixerImpl::UpdateToMix
Channel::GetAudioFrame
AudioCodingModuleImpl::PlayoutData10Ms
ACMNetEQ::RecOut
WebRtcNetEQ_RecOut
WebRtcNetEQ_RecOutInternal
WebRtcNetEQ_DSP2MCUinterrupt
WebRtcNetEQ_SignalMcu
WebRtcNetEQ_PacketBufferExtract
WebRtcNetEQ_BufstatsDecision
WebRtcNetEQ_DSPInit
FuncDecode
OutputMixer::DoOperationsOnCombinedSignal
AudioProcessingImpl::AnalyzeReverseStream
OutputMixer::GetMixedAudio
RemixAndResample
AudioDeviceBuffer::GetPlayoutData
AudioDeviceLinuxPulse::EnableWriteCallback
AudioDeviceLinuxPulse::PaStreamWriteCallbackHandler
LATE(pa_stream_peek)(_recStream, &sampleData, &sampleDataSize)
if (LATE(pa_stream_write)( _playStream,(void *) &_playBuffer[_playbackBufferUnused],write, NULL, (int64_t) 0,PA_SEEK_RELATIVE) != PA_OK)