Maarten Lankhorst : dsound: Make timer more robust.
Alexandre Julliard
julliard at wine.codeweavers.com
Mon Aug 6 08:03:45 CDT 2007
Module: wine
Branch: master
Commit: abe8c127d9789a99274ea1a5e83e650f3e8fed26
URL: http://source.winehq.org/git/wine.git/?a=commit;h=abe8c127d9789a99274ea1a5e83e650f3e8fed26
Author: Maarten Lankhorst <m.b.lankhorst at gmail.com>
Date: Sat Aug 4 10:41:59 2007 +0200
dsound: Make timer more robust.
---
dlls/dsound/dsound.c | 22 +++++++++++++++++++---
1 files changed, 19 insertions(+), 3 deletions(-)
diff --git a/dlls/dsound/dsound.c b/dlls/dsound/dsound.c
index d154119..cc693cb 100644
--- a/dlls/dsound/dsound.c
+++ b/dlls/dsound/dsound.c
@@ -1514,10 +1514,26 @@ HRESULT DirectSoundDevice_Initialize(DirectSoundDevice ** ppDevice, LPCGUID lpcG
hr = DSOUND_PrimaryCreate(device);
if (hr == DS_OK) {
+ UINT triggertime = DS_TIME_DEL, res = DS_TIME_RES, id;
+ TIMECAPS time;
+
DSOUND_renderer[device->drvdesc.dnDevNode] = device;
- timeBeginPeriod(DS_TIME_RES);
- DSOUND_renderer[device->drvdesc.dnDevNode]->timerID = timeSetEvent(DS_TIME_DEL, DS_TIME_RES, DSOUND_timer,
- (DWORD_PTR)DSOUND_renderer[device->drvdesc.dnDevNode], TIME_PERIODIC | TIME_CALLBACK_FUNCTION | TIME_KILL_SYNCHRONOUS);
+ timeGetDevCaps(&time, sizeof(TIMECAPS));
+ TRACE("Minimum timer resolution: %u, max timer: %u\n", time.wPeriodMin, time.wPeriodMax);
+ if (triggertime < time.wPeriodMin)
+ triggertime = time.wPeriodMin;
+ if (res < time.wPeriodMin)
+ res = time.wPeriodMin;
+ if (timeBeginPeriod(res) == TIMERR_NOCANDO)
+ WARN("Could not set minimum resolution, don't expect sound\n");
+ id = timeSetEvent(triggertime, res, DSOUND_timer, (DWORD_PTR)device, TIME_PERIODIC | TIME_KILL_SYNCHRONOUS);
+ if (!id)
+ {
+ WARN("Timer not created! Retrying without TIME_KILL_SYNCHRONOUS\n");
+ id = timeSetEvent(triggertime, res, DSOUND_timer, (DWORD_PTR)device, TIME_PERIODIC);
+ if (!id) ERR("Could not create timer, sound playback will not occur\n");
+ }
+ DSOUND_renderer[device->drvdesc.dnDevNode]->timerID = id;
} else {
WARN("DSOUND_PrimaryCreate failed\n");
}
More information about the wine-cvs
mailing list