diff options
| author | liamwhite <liamwhite@users.noreply.github.com> | 2023-04-10 09:23:48 -0400 |
|---|---|---|
| committer | GitHub <noreply@github.com> | 2023-04-10 09:23:48 -0400 |
| commit | 4f77275cd515162dd1b3dccb96296c4d4a370c8e (patch) | |
| tree | 627b16fa209715ff81943f0adb7b51f2a168efa2 /src/audio_core/sink/sink_stream.cpp | |
| parent | 47b80da9064f91d89b11a09192e1fc2fd5f57e69 (diff) | |
| parent | 8908663f1279c690bc19710da7e33d44314641b4 (diff) | |
Merge pull request #10027 from bylaws/master
Add some explicit latency to sample count reporting
Diffstat (limited to 'src/audio_core/sink/sink_stream.cpp')
| -rw-r--r-- | src/audio_core/sink/sink_stream.cpp | 8 |
1 files changed, 4 insertions, 4 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() { |
