diff options
| author | magumagu <magumagu9@gmail.com> | 2014-05-31 13:35:46 -0700 |
|---|---|---|
| committer | magumagu <magumagu9@gmail.com> | 2014-05-31 13:35:46 -0700 |
| commit | 87a804fdfc6ccc1c2eb0ca07d3c116a99d7e27a4 (patch) | |
| tree | 4c8357b7d2ff9f2c9c334adc7e903951c6f57cea /Source/Core/AudioCommon | |
| parent | d0201335c67e60fc00f149b8c3c70f60c36ea435 (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')
| -rw-r--r-- | Source/Core/AudioCommon/DSoundStream.cpp | 26 | ||||
| -rw-r--r-- | Source/Core/AudioCommon/DSoundStream.h | 5 |
2 files changed, 11 insertions, 20 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); } diff --git a/Source/Core/AudioCommon/DSoundStream.h b/Source/Core/AudioCommon/DSoundStream.h index 7490c6c5e5..d885a17664 100644 --- a/Source/Core/AudioCommon/DSoundStream.h +++ b/Source/Core/AudioCommon/DSoundStream.h @@ -13,14 +13,14 @@ #include <mmsystem.h> #include <dsound.h> -#define BUFSIZE (256 * 8 * 4) +#define BUFSIZE (1024 * 8 * 4) #endif class DSound final : public SoundStream { #ifdef _WIN32 std::thread thread; - HANDLE soundSyncEvent; + Common::Event soundSyncEvent; void *hWnd; IDirectSound8* ds; @@ -66,6 +66,7 @@ public: virtual void Stop(); virtual void Clear(bool mute); static bool isValid() { return true; } + virtual void Update(); #else public: |
