diff options
author | Kelebek1 <eeeedddccc@hotmail.co.uk> | 2022-10-08 20:27:54 +0200 |
---|---|---|
committer | Kelebek1 <eeeedddccc@hotmail.co.uk> | 2022-10-09 14:47:59 +0200 |
commit | 8c9e238a7baef2c3f8a9a608ec8bebeeccfa6676 (patch) | |
tree | 1e13efa4263c8e06c28787175f54e57b39fe33dd /src/audio_core/sink/cubeb_sink.cpp | |
parent | Merge pull request #6142 from lat9nq/prog_meta_ref_bind_address (diff) | |
download | yuzu-8c9e238a7baef2c3f8a9a608ec8bebeeccfa6676.tar yuzu-8c9e238a7baef2c3f8a9a608ec8bebeeccfa6676.tar.gz yuzu-8c9e238a7baef2c3f8a9a608ec8bebeeccfa6676.tar.bz2 yuzu-8c9e238a7baef2c3f8a9a608ec8bebeeccfa6676.tar.lz yuzu-8c9e238a7baef2c3f8a9a608ec8bebeeccfa6676.tar.xz yuzu-8c9e238a7baef2c3f8a9a608ec8bebeeccfa6676.tar.zst yuzu-8c9e238a7baef2c3f8a9a608ec8bebeeccfa6676.zip |
Diffstat (limited to 'src/audio_core/sink/cubeb_sink.cpp')
-rw-r--r-- | src/audio_core/sink/cubeb_sink.cpp | 31 |
1 files changed, 29 insertions, 2 deletions
diff --git a/src/audio_core/sink/cubeb_sink.cpp b/src/audio_core/sink/cubeb_sink.cpp index 36b115ad6..32c1b1cb3 100644 --- a/src/audio_core/sink/cubeb_sink.cpp +++ b/src/audio_core/sink/cubeb_sink.cpp @@ -66,10 +66,10 @@ public: const auto latency_error = cubeb_get_min_latency(ctx, ¶ms, &minimum_latency); if (latency_error != CUBEB_OK) { LOG_CRITICAL(Audio_Sink, "Error getting minimum latency, error: {}", latency_error); - minimum_latency = 256U; + minimum_latency = TargetSampleCount * 2; } - minimum_latency = std::max(minimum_latency, 256u); + minimum_latency = std::max(minimum_latency, TargetSampleCount * 2); LOG_INFO(Service_Audio, "Opening cubeb stream {} type {} with: rate {} channels {} (system channels {}) " @@ -326,4 +326,31 @@ std::vector<std::string> ListCubebSinkDevices(bool capture) { return device_list; } +u32 GetCubebLatency() { + cubeb* ctx; + + 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; + } + + 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, ¶ms, &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; +} + } // namespace AudioCore::Sink |