aboutsummaryrefslogtreecommitdiffstats
path: root/Alc/null.c
diff options
context:
space:
mode:
authorChris Robinson <[email protected]>2010-08-02 22:34:19 -0700
committerChris Robinson <[email protected]>2010-08-02 22:34:19 -0700
commit1504cf8812e5dc666e747337c1ec002a7637de1b (patch)
treee28a48e9cd98d98a68d9568c4c093a16973f8cb6 /Alc/null.c
parent3bece35bbdd34d05bc06c59320f834a96dc53ef0 (diff)
Use millisecond resolution for the Null and Wave Writer backends
Diffstat (limited to 'Alc/null.c')
-rw-r--r--Alc/null.c14
1 files changed, 11 insertions, 3 deletions
diff --git a/Alc/null.c b/Alc/null.c
index c110b3ae..4357a5ca 100644
--- a/Alc/null.c
+++ b/Alc/null.c
@@ -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);
}