bool OBS::QueryNewAudio() { bool bAudioBufferFilled = false; while (!bAudioBufferFilled) { bool bGotAudio = false; if ((desktopAudio->QueryAudio2(curDesktopVol)) != NoAudioAvailable) { QueryAudioBuffers(true); bGotAudio = true; } bAudioBufferFilled = desktopAudio->GetBufferedTime() >= App->bufferingTime; if (!bGotAudio && bAudioBufferFilled) QueryAudioBuffers(false); if (bAudioBufferFilled || !bGotAudio) break; } /* wait until buffers are completely filled before accounting for burst */ if (!bAudioBufferFilled) { QWORD timestamp; int burst = 0; // No more desktop data, drain auxilary/mic buffers until they're dry to prevent burst data OSEnterMutex(hAuxAudioMutex); for(UINT i=0; i<auxAudioSources.Num(); i++) { while (auxAudioSources[i]->QueryAudio2(auxAudioSources[i]->GetVolume(), true) != NoAudioAvailable) burst++; if (auxAudioSources[i]->GetLatestTimestamp(timestamp)) auxAudioSources[i]->SortAudio(timestamp); /*if (burst > 10) Log(L"Burst happened for %s", auxAudioSources[i]->GetDeviceName2());*/ } OSLeaveMutex(hAuxAudioMutex); burst = 0; if (micAudio) { while (micAudio->QueryAudio2(curMicVol, true) != NoAudioAvailable) burst++; /*if (burst > 10) Log(L"Burst happened for %s", micAudio->GetDeviceName2());*/ if (micAudio->GetLatestTimestamp(timestamp)) micAudio->SortAudio(timestamp); } } return bAudioBufferFilled; }
bool OBS::QueryNewAudio() { bool bAudioBufferFilled = false; while (!bAudioBufferFilled) { bool bGotAudio = false; if ((desktopAudio->QueryAudio(curDesktopVol)) != NoAudioAvailable) { QueryAudioBuffers(true); bGotAudio = true; } bAudioBufferFilled = desktopAudio->GetBufferedTime() >= App->bufferingTime; if (!bGotAudio && bAudioBufferFilled) QueryAudioBuffers(false); if (bAudioBufferFilled || !bGotAudio) break; } return bAudioBufferFilled; }
bool OBS::QueryNewAudio() { bool bAudioBufferFilled = false; while (!bAudioBufferFilled) { bool bGotAudio = false; //don't let the audio get backed up too far, as this breaks things if (desktopAudio->GetBufferedTime() > App->bufferingTime * 1.5) { if (!audioWarningId) audioWarningId = App->AddStreamInfo(TEXT("Audio is processing too slow. Free up CPU, reduce the number of audio sources or avoid resampling."), StreamInfoPriority_Critical); bAudioBufferFilled = true; } else { if (audioWarningId && desktopAudio->GetBufferedTime() <= App->bufferingTime) { App->RemoveStreamInfo(audioWarningId); audioWarningId = 0; } if ((desktopAudio->QueryAudio2(curDesktopVol)) != NoAudioAvailable) { QueryAudioBuffers(true); bGotAudio = true; } bAudioBufferFilled = desktopAudio->GetBufferedTime() >= App->bufferingTime; } if (!bGotAudio && bAudioBufferFilled) QueryAudioBuffers(false); if (bAudioBufferFilled || !bGotAudio) break; } /* wait until buffers are completely filled before accounting for burst */ if (!bAudioBufferFilled) { QWORD timestamp; int burst = 0; // No more desktop data, drain auxilary/mic buffers until they're dry to prevent burst data OSEnterMutex(hAuxAudioMutex); for(UINT i=0; i<auxAudioSources.Num(); i++) { while (auxAudioSources[i]->QueryAudio2(auxAudioSources[i]->GetVolume(), true) != NoAudioAvailable) burst++; if (auxAudioSources[i]->GetLatestTimestamp(timestamp)) auxAudioSources[i]->SortAudio(timestamp); /*if (burst > 10) Log(L"Burst happened for %s", auxAudioSources[i]->GetDeviceName2());*/ } OSLeaveMutex(hAuxAudioMutex); burst = 0; if (micAudio) { while (micAudio->QueryAudio2(curMicVol, true) != NoAudioAvailable) burst++; /*if (burst > 10) Log(L"Burst happened for %s", micAudio->GetDeviceName2());*/ if (micAudio->GetLatestTimestamp(timestamp)) micAudio->SortAudio(timestamp); } } return bAudioBufferFilled; }