diff options
author | Ac_K <Acoustik666@gmail.com> | 2020-11-20 21:59:01 +0100 |
---|---|---|
committer | GitHub <noreply@github.com> | 2020-11-20 21:59:01 +0100 |
commit | 57c4e6ef21d1f281b172aedcfd993a2ac43456ef (patch) | |
tree | 8ee5e5b42ab14bd8df52e823f3fcb4027e5ed873 /Ryujinx.Audio/Renderers/SoundIo/SoundIoAudioTrack.cs | |
parent | 9493cdfe553d77d8f37927ef2acf87cfbab1c467 (diff) |
audout: Implement and fix some calls (#1725)
* audout: Implement GetAudioOutBufferCount, GetAudioOutPlayedSampleCount and FlushAudioOutBuffers
This PR implement audout service calls:
- GetAudioOutBufferCount
- GetAudioOutPlayedSampleCount
- FlushAudioOutBuffers
The RE calls just give some hints about no extra checks.
Since we use a totally different implementation because of our backend, I can't do something better for now.
SetAudioOutVolume and GetAudioOutVolume are fixed too by set/get the volume of the current opened track, previous implementation was wrong.
This fix #1133, fix #1258 and fix #1519.
Thanks to @jduncanator for this help during the implementation and all his precious advices.
* Fix some debug leftovers
* Address jD feedback
Diffstat (limited to 'Ryujinx.Audio/Renderers/SoundIo/SoundIoAudioTrack.cs')
-rw-r--r-- | Ryujinx.Audio/Renderers/SoundIo/SoundIoAudioTrack.cs | 34 |
1 files changed, 34 insertions, 0 deletions
diff --git a/Ryujinx.Audio/Renderers/SoundIo/SoundIoAudioTrack.cs b/Ryujinx.Audio/Renderers/SoundIo/SoundIoAudioTrack.cs index 6fdeb991..52c4ebc9 100644 --- a/Ryujinx.Audio/Renderers/SoundIo/SoundIoAudioTrack.cs +++ b/Ryujinx.Audio/Renderers/SoundIo/SoundIoAudioTrack.cs @@ -54,6 +54,16 @@ namespace Ryujinx.Audio.SoundIo /// </summary> public ConcurrentQueue<long> ReleasedBuffers { get; private set; } + /// <summary> + /// Buffer count of the track + /// </summary> + public uint BufferCount => (uint)m_ReservedBuffers.Count; + + /// <summary> + /// Played sample count of the track + /// </summary> + public ulong PlayedSampleCount { get; private set; } + private int _hardwareChannels; private int _virtualChannels; @@ -430,6 +440,8 @@ namespace Ryujinx.Audio.SoundIo AudioStream.EndWrite(); + PlayedSampleCount += (ulong)samples.Length; + UpdateReleasedBuffers(samples.Length); } @@ -572,6 +584,28 @@ namespace Ryujinx.Audio.SoundIo } /// <summary> + /// Flush all track buffers + /// </summary> + public bool FlushBuffers() + { + m_Buffer.Clear(); + + if (m_ReservedBuffers.Count > 0) + { + foreach (var buffer in m_ReservedBuffers) + { + ReleasedBuffers.Enqueue(buffer.Tag); + } + + OnBufferReleased(); + + return true; + } + + return false; + } + + /// <summary> /// Closes the <see cref="SoundIoAudioTrack"/> /// </summary> public void Close() |