summaryrefslogtreecommitdiff
path: root/Source/Core/AudioCommon/DSoundStream.cpp
diff options
context:
space:
mode:
authormagumagu <magumagu9@gmail.com>2014-05-31 13:35:46 -0700
committermagumagu <magumagu9@gmail.com>2014-05-31 13:35:46 -0700
commit87a804fdfc6ccc1c2eb0ca07d3c116a99d7e27a4 (patch)
tree4c8357b7d2ff9f2c9c334adc7e903951c6f57cea /Source/Core/AudioCommon/DSoundStream.cpp
parentd0201335c67e60fc00f149b8c3c70f60c36ea435 (diff)
Revert "DSound: use DSound notifications to produce sound."
This reverts commit 4990b8910bc0fe5d576f92396f761a79b3f1a7e3. The commit is causing substantial performance issues for the DSound backend which I somehow didn't catch during testing.
Diffstat (limited to 'Source/Core/AudioCommon/DSoundStream.cpp')
-rw-r--r--Source/Core/AudioCommon/DSoundStream.cpp26
1 files changed, 8 insertions, 18 deletions
diff --git a/Source/Core/AudioCommon/DSoundStream.cpp b/Source/Core/AudioCommon/DSoundStream.cpp
index d25ebf5804..df96a9551f 100644
--- a/Source/Core/AudioCommon/DSoundStream.cpp
+++ b/Source/Core/AudioCommon/DSoundStream.cpp
@@ -29,7 +29,7 @@ bool DSound::CreateBuffer()
// Fill out DSound buffer description.
dsbdesc.dwSize = sizeof(DSBUFFERDESC);
- dsbdesc.dwFlags = DSBCAPS_GETCURRENTPOSITION2 | DSBCAPS_CTRLVOLUME | DSBCAPS_GLOBALFOCUS | DSBCAPS_CTRLPOSITIONNOTIFY;
+ dsbdesc.dwFlags = DSBCAPS_GETCURRENTPOSITION2 | DSBCAPS_CTRLVOLUME | DSBCAPS_GLOBALFOCUS;
dsbdesc.dwBufferBytes = bufferSize = BUFSIZE;
dsbdesc.lpwfxFormat = (WAVEFORMATEX *)&pcmwf;
dsbdesc.guid3DAlgorithm = DS3DALG_DEFAULT;
@@ -39,20 +39,6 @@ bool DSound::CreateBuffer()
{
dsBuffer->SetCurrentPosition(0);
dsBuffer->SetVolume(m_volume);
-
- soundSyncEvent = CreateEvent(NULL, TRUE, FALSE, TEXT("DSound Buffer Notification"));
-
- IDirectSoundNotify *dsnotify;
- dsBuffer->QueryInterface(IID_IDirectSoundNotify, (void**)&dsnotify);
- DSBPOSITIONNOTIFY notify_positions[3];
- for (unsigned i = 0; i < ARRAYSIZE(notify_positions); ++i)
- {
- notify_positions[i].dwOffset = i * (BUFSIZE / ARRAYSIZE(notify_positions));
- notify_positions[i].hEventNotify = soundSyncEvent;
- }
- dsnotify->SetNotificationPositions(ARRAYSIZE(notify_positions), notify_positions);
- dsnotify->Release();
-
return true;
}
else
@@ -117,7 +103,7 @@ void DSound::SoundLoop()
WriteDataToBuffer(lastPos, (char*)realtimeBuffer, numBytesToRender);
lastPos = ModBufferSize(lastPos + numBytesToRender);
}
- WaitForSingleObject(soundSyncEvent, INFINITE);
+ soundSyncEvent.Wait();
}
}
@@ -150,6 +136,11 @@ void DSound::SetVolume(int volume)
dsBuffer->SetVolume(m_volume);
}
+void DSound::Update()
+{
+ soundSyncEvent.Set();
+}
+
void DSound::Clear(bool mute)
{
m_muted = mute;
@@ -171,12 +162,11 @@ void DSound::Stop()
{
threadData = 1;
// kick the thread if it's waiting
- SetEvent(soundSyncEvent);
+ soundSyncEvent.Set();
thread.join();
dsBuffer->Stop();
dsBuffer->Release();
ds->Release();
- CloseHandle(soundSyncEvent);
}