summaryrefslogtreecommitdiff
path: root/Source/Core/AudioCommon/WASAPIStream.h
diff options
context:
space:
mode:
authorspycrab <spycrab@users.noreply.github.com>2018-02-10 21:03:27 +0100
committerspycrab <spycrab@users.noreply.github.com>2018-05-26 13:08:10 +0200
commita196dfe50d1d8a2fcd2ffbe5c8eea10687f1698f (patch)
tree74a4c496557048d4f505e66ec5337f82aed44f89 /Source/Core/AudioCommon/WASAPIStream.h
parent92ec97f8997fbd511406c09d83a79728cae5ec08 (diff)
AudioCommon: Implement WASAPI
Diffstat (limited to 'Source/Core/AudioCommon/WASAPIStream.h')
-rw-r--r--Source/Core/AudioCommon/WASAPIStream.h52
1 files changed, 52 insertions, 0 deletions
diff --git a/Source/Core/AudioCommon/WASAPIStream.h b/Source/Core/AudioCommon/WASAPIStream.h
new file mode 100644
index 0000000000..54becb68c0
--- /dev/null
+++ b/Source/Core/AudioCommon/WASAPIStream.h
@@ -0,0 +1,52 @@
+// Copyright 2018 Dolphin Emulator Project
+// Licensed under GPLv2+
+// Refer to the license.txt file included.
+
+#pragma once
+
+#ifdef _WIN32
+// clang-format off
+#include <Windows.h>
+#include <mmreg.h>
+// clang-format on
+#endif
+
+#include <atomic>
+#include <string>
+#include <thread>
+#include <vector>
+
+#include "AudioCommon/SoundStream.h"
+
+struct IAudioClient;
+struct IAudioRenderClient;
+struct IMMDevice;
+struct IMMDeviceEnumerator;
+
+class WASAPIStream final : public SoundStream
+{
+#ifdef _WIN32
+public:
+ explicit WASAPIStream();
+ ~WASAPIStream();
+ bool Init() override;
+ bool SetRunning(bool running) override;
+ void SoundLoop() override;
+
+ static bool isValid();
+ static std::vector<std::string> GetAvailableDevices();
+ static IMMDevice* GetDeviceByName(std::string name);
+
+private:
+ u32 m_frames_in_buffer = 0;
+ std::atomic<bool> m_running = false;
+ std::atomic<bool> m_stopped = false;
+ std::thread m_thread;
+
+ IAudioClient* m_audio_client = nullptr;
+ IAudioRenderClient* m_audio_renderer = nullptr;
+ IMMDeviceEnumerator* m_enumerator = nullptr;
+ HANDLE m_need_data_event = nullptr;
+ WAVEFORMATEXTENSIBLE m_format;
+#endif // _WIN32
+};