summaryrefslogtreecommitdiffstats
path: root/src/audio_core
diff options
context:
space:
mode:
authorliamwhite <liamwhite@users.noreply.github.com>2023-04-10 15:23:48 +0200
committerGitHub <noreply@github.com>2023-04-10 15:23:48 +0200
commit4f77275cd515162dd1b3dccb96296c4d4a370c8e (patch)
tree627b16fa209715ff81943f0adb7b51f2a168efa2 /src/audio_core
parentMerge pull request #10035 from liamwhite/long-long (diff)
parentUse GetGlobalTimeNs as opposed to clock ticks (diff)
downloadyuzu-4f77275cd515162dd1b3dccb96296c4d4a370c8e.tar
yuzu-4f77275cd515162dd1b3dccb96296c4d4a370c8e.tar.gz
yuzu-4f77275cd515162dd1b3dccb96296c4d4a370c8e.tar.bz2
yuzu-4f77275cd515162dd1b3dccb96296c4d4a370c8e.tar.lz
yuzu-4f77275cd515162dd1b3dccb96296c4d4a370c8e.tar.xz
yuzu-4f77275cd515162dd1b3dccb96296c4d4a370c8e.tar.zst
yuzu-4f77275cd515162dd1b3dccb96296c4d4a370c8e.zip
Diffstat (limited to 'src/audio_core')
-rw-r--r--src/audio_core/sink/sink_stream.cpp8
-rw-r--r--src/audio_core/sink/sink_stream.h2
2 files changed, 5 insertions, 5 deletions
diff --git a/src/audio_core/sink/sink_stream.cpp b/src/audio_core/sink/sink_stream.cpp
index f99dbd8ec..13ba26e74 100644
--- a/src/audio_core/sink/sink_stream.cpp
+++ b/src/audio_core/sink/sink_stream.cpp
@@ -252,8 +252,7 @@ void SinkStream::ProcessAudioOutAndRender(std::span<s16> output_buffer, std::siz
{
std::scoped_lock lk{sample_count_lock};
- last_sample_count_update_time =
- Core::Timing::CyclesToUs(system.CoreTiming().GetClockTicks());
+ last_sample_count_update_time = system.CoreTiming().GetGlobalTimeNs();
min_played_sample_count = max_played_sample_count;
max_played_sample_count += actual_frames_written;
}
@@ -261,12 +260,13 @@ void SinkStream::ProcessAudioOutAndRender(std::span<s16> output_buffer, std::siz
u64 SinkStream::GetExpectedPlayedSampleCount() {
std::scoped_lock lk{sample_count_lock};
- auto cur_time{Core::Timing::CyclesToUs(system.CoreTiming().GetClockTicks())};
+ auto cur_time{system.CoreTiming().GetGlobalTimeNs()};
auto time_delta{cur_time - last_sample_count_update_time};
auto exp_played_sample_count{min_played_sample_count +
(TargetSampleRate * time_delta) / std::chrono::seconds{1}};
- return std::min<u64>(exp_played_sample_count, max_played_sample_count);
+ // Add 15ms of latency in sample reporting to allow for some leeway in scheduler timings
+ return std::min<u64>(exp_played_sample_count, max_played_sample_count) + TargetSampleCount * 3;
}
void SinkStream::WaitFreeSpace() {
diff --git a/src/audio_core/sink/sink_stream.h b/src/audio_core/sink/sink_stream.h
index 23e289c7b..21b5b40a1 100644
--- a/src/audio_core/sink/sink_stream.h
+++ b/src/audio_core/sink/sink_stream.h
@@ -246,7 +246,7 @@ private:
/// Maximum number of total samples that can be played since the last callback
u64 max_played_sample_count{};
/// The time the two above tracking variables were last written to
- std::chrono::microseconds last_sample_count_update_time{};
+ std::chrono::nanoseconds last_sample_count_update_time{};
/// Set by the audio render/in/out system which uses this stream
f32 system_volume{1.0f};
/// Set via IAudioDevice service calls