Handle the timer wrapping in the wave and null output devices

This commit is contained in:
Chris Robinson 2010-11-21 11:34:16 -08:00
parent 57a03bc2b5
commit c58469e234
2 changed files with 8 additions and 6 deletions

View File

@ -55,9 +55,10 @@ static ALuint NullProc(ALvoid *ptr)
avail = (ALuint64)(now-start) * Device->Frequency / 1000;
if(avail < done)
{
AL_PRINT("Timer wrapped\n");
aluHandleDisconnect(Device);
break;
/* Timer wrapped. Add the remainder of the cycle to the available
* count and reset the number of samples done */
avail += 0xFFFFFFFFu*Device->Frequency/1000 - done;
done = 0;
}
if(avail-done < Device->UpdateSize)
{

View File

@ -106,9 +106,10 @@ static ALuint WaveProc(ALvoid *ptr)
avail = (ALuint64)(now-start) * pDevice->Frequency / 1000;
if(avail < done)
{
AL_PRINT("Timer wrapped\n");
aluHandleDisconnect(pDevice);
break;
/* Timer wrapped. Add the remainder of the cycle to the available
* count and reset the number of samples done */
avail += 0xFFFFFFFFu*pDevice->Frequency/1000 - done;
done = 0;
}
if(avail-done < pDevice->UpdateSize)
{