aboutsummaryrefslogtreecommitdiff
path: root/src/audio_core/sink/cubeb_sink.cpp
diff options
context:
space:
mode:
authorcrueter <crueter@eden-emu.dev>2025-07-27 19:46:54 +0200
committercrueter <crueter@eden-emu.dev>2025-07-27 19:46:54 +0200
commit0b29fb7c8ad3f83bf59233311498fdbfc74cd680 (patch)
tree5f18286b964c95b302656cdd770cdc19f0ea354f /src/audio_core/sink/cubeb_sink.cpp
parentb2914247c3f6bff2b2aa0f17d46f7b197ab1821d (diff)
[audio_core] Revert EA3835 audio sink changes (#136)
Fixes diablo/totk audio stutters Signed-off-by: crueter <crueter@eden-emu.dev> Reviewed-on: https://git.eden-emu.dev/eden-emu/eden/pulls/136
Diffstat (limited to 'src/audio_core/sink/cubeb_sink.cpp')
-rw-r--r--src/audio_core/sink/cubeb_sink.cpp46
1 files changed, 46 insertions, 0 deletions
diff --git a/src/audio_core/sink/cubeb_sink.cpp b/src/audio_core/sink/cubeb_sink.cpp
index 7f4b1c365a..a33162b806 100644
--- a/src/audio_core/sink/cubeb_sink.cpp
+++ b/src/audio_core/sink/cubeb_sink.cpp
@@ -1,3 +1,6 @@
+// SPDX-FileCopyrightText: Copyright 2025 Eden Emulator Project
+// SPDX-License-Identifier: GPL-3.0-or-later
+
// SPDX-FileCopyrightText: Copyright 2018 yuzu Emulator Project
// SPDX-License-Identifier: GPL-2.0-or-later
@@ -334,6 +337,48 @@ std::vector<std::string> ListCubebSinkDevices(bool capture) {
return device_list;
}
+/* REVERSION TO 3833 - function GetCubebLatency REINTRODUCED FROM 3833 - DIABLO 3 FIX */
+u32 GetCubebLatency() {
+ cubeb* ctx;
+
+#ifdef _WIN32
+ auto com_init_result = CoInitializeEx(nullptr, COINIT_MULTITHREADED);
+#endif
+
+ // Init cubeb
+ if (cubeb_init(&ctx, "yuzu Latency Getter", nullptr) != CUBEB_OK) {
+ LOG_CRITICAL(Audio_Sink, "cubeb_init failed");
+ // Return a large latency so we choose SDL instead.
+ return 10000u;
+ }
+
+#ifdef _WIN32
+ if (SUCCEEDED(com_init_result)) {
+ CoUninitialize();
+ }
+#endif
+
+ // Get min latency
+ cubeb_stream_params params{};
+ params.rate = TargetSampleRate;
+ params.channels = 2;
+ params.format = CUBEB_SAMPLE_S16LE;
+ params.prefs = CUBEB_STREAM_PREF_NONE;
+ params.layout = CUBEB_LAYOUT_STEREO;
+
+ u32 latency{0};
+ const auto latency_error = cubeb_get_min_latency(ctx, &params, &latency);
+ if (latency_error != CUBEB_OK) {
+ LOG_CRITICAL(Audio_Sink, "Error getting minimum latency, error: {}", latency_error);
+ latency = TargetSampleCount * 2;
+ }
+ latency = std::max(latency, TargetSampleCount * 2);
+ cubeb_destroy(ctx);
+ return latency;
+}
+
+// REVERTED back to 3833 - Below namespace section and function IsCubebSuitable() removed, reverting to GetCubebLatency() above. - DIABLO 3 FIX
+/*
namespace {
static long TmpDataCallback(cubeb_stream*, void*, const void*, void*, long) {
return TargetSampleCount;
@@ -400,5 +445,6 @@ bool IsCubebSuitable() {
return true;
#endif
}
+*/
} // namespace AudioCore::Sink