summaryrefslogtreecommitdiff
path: root/Source/Core/AudioCommon/WASAPIStream.h
diff options
context:
space:
mode:
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
+};