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/wave.c | |
parent | 3bece35bbdd34d05bc06c59320f834a96dc53ef0 (diff) |
Use millisecond resolution for the Null and Wave Writer backends
Diffstat (limited to 'Alc/wave.c')
-rw-r--r-- | Alc/wave.c | 14 |
1 files changed, 11 insertions, 3 deletions
@@ -36,6 +36,7 @@ typedef struct { ALuint size; ALuint startTime; + ALuint64 baseTime; volatile int killNow; ALvoid *thread; @@ -282,9 +283,8 @@ static ALCboolean wave_reset_playback(ALCdevice *device) return ALC_FALSE; } - device->TimeRes = (ALuint64)device->UpdateSize * 1000000000 / - device->Frequency; SetDefaultWFXChannelOrder(device); + device->TimeRes = 1000000; data->startTime = timeGetTime(); data->thread = StartThread(WaveProc, device); @@ -302,6 +302,7 @@ static void wave_stop_playback(ALCdevice *device) { wave_data *data = (wave_data*)device->ExtraData; ALuint dataLen; + ALuint ext; long size; if(!data->thread) @@ -313,6 +314,9 @@ static void wave_stop_playback(ALCdevice *device) data->killNow = 0; + ext = timeGetTime() - data->startTime; + data->baseTime += (ALuint64)ext * 1000000; + free(data->buffer); data->buffer = NULL; @@ -348,7 +352,11 @@ static ALCboolean wave_open_capture(ALCdevice *pDevice, const ALCchar *deviceNam static ALuint64 wave_get_time(ALCdevice *Device) { - return Device->SamplesPlayed * 1000000000 / Device->Frequency; + wave_data *data = (wave_data*)Device->ExtraData; + ALuint ext = 0; + if(data->thread) + ext = timeGetTime() - data->startTime; + return data->baseTime + ((ALuint64)ext * 1000000); } |