From 70dca7aaa4ece4ca6c128f32cfdbd79c97ece4d9 Mon Sep 17 00:00:00 2001 From: Lordmau5 Date: Sat, 30 Jun 2018 17:38:50 +0200 Subject: [PATCH] Implement GetReleasedAudioOutBufferAuto properly --- Ryujinx.HLE/OsHle/Services/Aud/IAudioOut.cs | 69 +++++++++++---------- 1 file changed, 37 insertions(+), 32 deletions(-) diff --git a/Ryujinx.HLE/OsHle/Services/Aud/IAudioOut.cs b/Ryujinx.HLE/OsHle/Services/Aud/IAudioOut.cs index ef8bd89ba2..44c79b9ae6 100644 --- a/Ryujinx.HLE/OsHle/Services/Aud/IAudioOut.cs +++ b/Ryujinx.HLE/OsHle/Services/Aud/IAudioOut.cs @@ -24,15 +24,15 @@ namespace Ryujinx.HLE.OsHle.Services.Aud { m_Commands = new Dictionary() { - { 0, GetAudioOutState }, - { 1, StartAudioOut }, - { 2, StopAudioOut }, - { 3, AppendAudioOutBuffer }, - { 4, RegisterBufferEvent }, - { 5, GetReleasedAudioOutBuffer }, - { 6, ContainsAudioOutBuffer }, - { 7, AppendAudioOutBufferEx }, - { 8, GetReleasedAudioOutBufferEx } + { 0, GetAudioOutState }, + { 1, StartAudioOut }, + { 2, StopAudioOut }, + { 3, AppendAudioOutBuffer }, + { 4, RegisterBufferEvent }, + { 5, GetReleasedAudioOutBuffer }, + { 6, ContainsAudioOutBuffer }, + { 7, AppendAudioOutBufferEx }, + { 8, GetReleasedAudioOutBufferAuto } }; this.AudioOut = AudioOut; @@ -92,6 +92,34 @@ namespace Ryujinx.HLE.OsHle.Services.Aud long Position = Context.Request.ReceiveBuff[0].Position; long Size = Context.Request.ReceiveBuff[0].Size; + return GetReleasedAudioOutBufferImpl(Context, Position, Size); + } + + public long ContainsAudioOutBuffer(ServiceCtx Context) + { + long Tag = Context.RequestData.ReadInt64(); + + Context.ResponseData.Write(AudioOut.ContainsBuffer(Track, Tag) ? 1 : 0); + + return 0; + } + + public long AppendAudioOutBufferEx(ServiceCtx Context) + { + Context.Ns.Log.PrintStub(LogClass.ServiceAudio, "Stubbed."); + + return 0; + } + + public long GetReleasedAudioOutBufferAuto(ServiceCtx Context) + { + (long Position, long Size) = Context.Request.GetBufferType0x22(); + + return GetReleasedAudioOutBufferImpl(Context, Position, Size); + } + + public long GetReleasedAudioOutBufferImpl(ServiceCtx Context, long Position, long Size) + { uint Count = (uint)((ulong)Size >> 3); long[] ReleasedBuffers = AudioOut.GetReleasedBuffers(Track, (int)Count); @@ -113,29 +141,6 @@ namespace Ryujinx.HLE.OsHle.Services.Aud return 0; } - public long ContainsAudioOutBuffer(ServiceCtx Context) - { - long Tag = Context.RequestData.ReadInt64(); - - Context.ResponseData.Write(AudioOut.ContainsBuffer(Track, Tag) ? 1 : 0); - - return 0; - } - - public long AppendAudioOutBufferEx(ServiceCtx Context) - { - Context.Ns.Log.PrintStub(LogClass.ServiceAudio, "Stubbed."); - - return 0; - } - - public long GetReleasedAudioOutBufferEx(ServiceCtx Context) - { - Context.Ns.Log.PrintStub(LogClass.ServiceAudio, "Stubbed."); - - return 0; - } - public void Dispose() { Dispose(true);