diff options
author | Chris Robinson <[email protected]> | 2010-08-02 22:34:19 -0700 |
---|---|---|
committer | Chris Robinson <[email protected]> | 2010-08-02 22:34:19 -0700 |
commit | 1504cf8812e5dc666e747337c1ec002a7637de1b (patch) | |
tree | e28a48e9cd98d98a68d9568c4c093a16973f8cb6 /Alc/null.c | |
parent | 3bece35bbdd34d05bc06c59320f834a96dc53ef0 (diff) |
Use millisecond resolution for the Null and Wave Writer backends
Diffstat (limited to 'Alc/null.c')
-rw-r--r-- | Alc/null.c | 14 |
1 files changed, 11 insertions, 3 deletions
@@ -31,6 +31,7 @@ typedef struct { ALuint size; ALuint startTime; + ALuint64 baseTime; volatile int killNow; ALvoid *thread; @@ -114,8 +115,7 @@ static ALCboolean null_reset_playback(ALCdevice *device) } SetDefaultWFXChannelOrder(device); - device->TimeRes = (ALuint64)device->UpdateSize * 1000000000 / - device->Frequency; + device->TimeRes = 1000000; data->startTime = timeGetTime(); data->thread = StartThread(NullProc, device); @@ -132,6 +132,7 @@ static ALCboolean null_reset_playback(ALCdevice *device) static void null_stop_playback(ALCdevice *device) { null_data *data = (null_data*)device->ExtraData; + ALuint ext; if(!data->thread) return; @@ -142,6 +143,9 @@ static void null_stop_playback(ALCdevice *device) data->killNow = 0; + ext = timeGetTime() - data->startTime; + data->baseTime += (ALuint64)ext * 1000000; + free(data->buffer); data->buffer = NULL; } @@ -156,7 +160,11 @@ static ALCboolean null_open_capture(ALCdevice *device, const ALCchar *deviceName static ALuint64 null_get_time(ALCdevice *Device) { - return Device->SamplesPlayed * 1000000000 / Device->Frequency; + null_data *data = (null_data*)Device->ExtraData; + ALuint ext = 0; + if(data->thread) + ext = timeGetTime() - data->startTime; + return data->baseTime + ((ALuint64)ext * 1000000); } |