From 8b94422e3e51d29171c7e8cc02bec1fbec9b29ea Mon Sep 17 00:00:00 2001
From: MerryMage <MerryMage@users.noreply.github.com>
Date: Thu, 28 Apr 2016 14:28:59 +0100
Subject: [PATCH] AudioCore: List of sink types

---
 src/audio_core/CMakeLists.txt   |  2 ++
 src/audio_core/sink_details.cpp | 17 +++++++++++++++++
 src/audio_core/sink_details.h   | 27 +++++++++++++++++++++++++++
 3 files changed, 46 insertions(+)
 create mode 100644 src/audio_core/sink_details.cpp
 create mode 100644 src/audio_core/sink_details.h

diff --git a/src/audio_core/CMakeLists.txt b/src/audio_core/CMakeLists.txt
index 46d3de578..5a2747e78 100644
--- a/src/audio_core/CMakeLists.txt
+++ b/src/audio_core/CMakeLists.txt
@@ -5,6 +5,7 @@ set(SRCS
             hle/filter.cpp
             hle/pipe.cpp
             interpolate.cpp
+            sink_details.cpp
             )
 
 set(HEADERS
@@ -17,6 +18,7 @@ set(HEADERS
             interpolate.h
             null_sink.h
             sink.h
+            sink_details.h
             )
 
 include_directories(../../externals/soundtouch/include)
diff --git a/src/audio_core/sink_details.cpp b/src/audio_core/sink_details.cpp
new file mode 100644
index 000000000..20412daaf
--- /dev/null
+++ b/src/audio_core/sink_details.cpp
@@ -0,0 +1,17 @@
+// Copyright 2016 Citra Emulator Project
+// Licensed under GPLv2 or any later version
+// Refer to the license.txt file included.
+
+#include <memory>
+#include <vector>
+
+#include "audio_core/null_sink.h"
+#include "audio_core/sink_details.h"
+
+namespace AudioCore {
+
+const std::vector<SinkDetails> g_sink_details = {
+    { "null", []() { return std::make_unique<NullSink>(); } },
+};
+
+} // namespace AudioCore
diff --git a/src/audio_core/sink_details.h b/src/audio_core/sink_details.h
new file mode 100644
index 000000000..4b30cf835
--- /dev/null
+++ b/src/audio_core/sink_details.h
@@ -0,0 +1,27 @@
+// Copyright 2016 Citra Emulator Project
+// Licensed under GPLv2 or any later version
+// Refer to the license.txt file included.
+
+#pragma once
+
+#include <functional>
+#include <memory>
+#include <vector>
+
+namespace AudioCore {
+
+class Sink;
+
+struct SinkDetails {
+    SinkDetails(const char* id_, std::function<std::unique_ptr<Sink>()> factory_)
+        : id(id_), factory(factory_) {}
+
+    /// Name for this sink.
+    const char* id;
+    /// A method to call to construct an instance of this type of sink.
+    std::function<std::unique_ptr<Sink>()> factory;
+};
+
+extern const std::vector<SinkDetails> g_sink_details;
+
+} // namespace AudioCore