diff options
author | Chris Robinson <[email protected]> | 2010-07-22 08:11:44 -0700 |
---|---|---|
committer | Chris Robinson <[email protected]> | 2010-07-22 08:11:44 -0700 |
commit | 7eb124d99c2cde0ba27c90d01176b34249958974 (patch) | |
tree | dea8e97dc5eb3e0985785fd66943d9267a19d61e | |
parent | 88f236ccd3f2e75d0823414e8c9a4492ddbd2539 (diff) |
Keep count of the number of samples played
-rw-r--r-- | Alc/ALc.c | 9 | ||||
-rw-r--r-- | Alc/ALu.c | 1 | ||||
-rw-r--r-- | OpenAL32/Include/alMain.h | 3 |
3 files changed, 13 insertions, 0 deletions
@@ -1453,6 +1453,7 @@ ALC_API ALCcontext* ALC_APIENTRY alcCreateContext(ALCdevice *device, const ALCin { ALCcontext *ALContext; ALboolean running; + ALuint oldRate; ALuint attrIdx; void *temp; ALuint i; @@ -1467,6 +1468,7 @@ ALC_API ALCcontext* ALC_APIENTRY alcCreateContext(ALCdevice *device, const ALCin } running = ((device->NumContexts > 0) ? AL_TRUE : AL_FALSE); + oldRate = device->Frequency; // Reset Context Last Error code device->LastError = ALC_NO_ERROR; @@ -1540,6 +1542,11 @@ ALC_API ALCcontext* ALC_APIENTRY alcCreateContext(ALCdevice *device, const ALCin } aluInitPanning(device); + // Scale the number of samples played according to the new sample rate + device->SamplesPlayed *= device->Frequency; + device->SamplesPlayed += oldRate-1; + device->SamplesPlayed /= oldRate; + for(i = 0;i < device->NumContexts;i++) { ALCcontext *context = device->Contexts[i]; @@ -1986,6 +1993,8 @@ ALC_API ALCdevice* ALC_APIENTRY alcOpenDevice(const ALCchar *deviceName) device->Contexts = NULL; device->NumContexts = 0; + device->SamplesPlayed = 0; + InitUIntMap(&device->BufferMap); InitUIntMap(&device->EffectMap); InitUIntMap(&device->FilterMap); @@ -1474,6 +1474,7 @@ ALvoid aluMixData(ALCdevice *device, ALvoid *buffer, ALsizei size) } ProcessContext(ALContext); } + device->SamplesPlayed += SamplesToDo; ProcessContext(NULL); //Post processing loop diff --git a/OpenAL32/Include/alMain.h b/OpenAL32/Include/alMain.h index d6fc5c15..d9c369ef 100644 --- a/OpenAL32/Include/alMain.h +++ b/OpenAL32/Include/alMain.h @@ -405,6 +405,9 @@ struct ALCdevice_struct ALCcontext **Contexts; ALuint NumContexts; + // Number of samples rendered by this device + ALuint64 SamplesPlayed; + BackendFuncs *Funcs; void *ExtraData; // For the backend's use |