diff options
| author | Ac_K <Acoustik666@gmail.com> | 2018-06-17 04:16:16 +0000 |
|---|---|---|
| committer | GitHub <noreply@github.com> | 2018-06-17 04:16:16 +0000 |
| commit | 3c4dafff3fd37daf1a3ab5fab9357cfee46c9a6b (patch) | |
| tree | 99e9a4316492420639ef5b4fd2e72c8134253ff7 | |
| parent | e581abb2f5b2435d9c86f53cf2fb69257ec62eaf (diff) | |
| parent | 5a3449f5d933a4d8f9c214ca910e830b563fae8d (diff) | |
Merge pull request #152 from greggameplayer/patch-5
Implement ListAudioOutsAuto & OpenAudioOutAuto
| -rw-r--r-- | Ryujinx.HLE/OsHle/Services/Aud/IAudioOutManager.cs | 67 |
1 files changed, 45 insertions, 22 deletions
diff --git a/Ryujinx.HLE/OsHle/Services/Aud/IAudioOutManager.cs b/Ryujinx.HLE/OsHle/Services/Aud/IAudioOutManager.cs index a6b30835..18aedb32 100644 --- a/Ryujinx.HLE/OsHle/Services/Aud/IAudioOutManager.cs +++ b/Ryujinx.HLE/OsHle/Services/Aud/IAudioOutManager.cs @@ -20,16 +20,45 @@ namespace Ryujinx.HLE.OsHle.Services.Aud { m_Commands = new Dictionary<int, ServiceProcessRequest>() { - { 0, ListAudioOuts }, - { 1, OpenAudioOut } + { 0, ListAudioOuts }, + { 1, OpenAudioOut }, + { 2, ListAudioOutsAuto }, + { 3, OpenAudioOutAuto } }; } public long ListAudioOuts(ServiceCtx Context) + { + ListAudioOutsMethod(Context, Context.Request.ReceiveBuff[0].Position, Context.Request.ReceiveBuff[0].Size); + + return 0; + } + + public long OpenAudioOut(ServiceCtx Context) + { + OpenAudioOutMethod(Context, Context.Request.SendBuff[0].Position, Context.Request.SendBuff[0].Size, + Context.Request.ReceiveBuff[0].Position, Context.Request.ReceiveBuff[0].Size); + + return 0; + } + + public long ListAudioOutsAuto(ServiceCtx Context) + { + ListAudioOutsMethod(Context, Context.Request.GetBufferType0x22().Position, Context.Request.GetBufferType0x22().Size); + + return 0; + } + + public long OpenAudioOutAuto(ServiceCtx Context) { - long Position = Context.Request.ReceiveBuff[0].Position; - long Size = Context.Request.ReceiveBuff[0].Size; + OpenAudioOutMethod(Context, Context.Request.GetBufferType0x21().Position, Context.Request.GetBufferType0x21().Size, + Context.Request.GetBufferType0x22().Position, Context.Request.GetBufferType0x22().Size); + return 0; + } + + public void ListAudioOutsMethod(ServiceCtx Context, long Position, long Size) + { int NameCount = 0; byte[] DeviceNameBuffer = Encoding.ASCII.GetBytes(DefaultAudioOutput + "\0"); @@ -46,37 +75,33 @@ namespace Ryujinx.HLE.OsHle.Services.Aud } Context.ResponseData.Write(NameCount); - - return 0; } - - public long OpenAudioOut(ServiceCtx Context) + + public void OpenAudioOutMethod(ServiceCtx Context, long SendPosition, long SendSize, long ReceivePosition, long ReceiveSize) { IAalOutput AudioOut = Context.Ns.AudioOut; - + string DeviceName = AMemoryHelper.ReadAsciiString( Context.Memory, - Context.Request.SendBuff[0].Position, - Context.Request.SendBuff[0].Size); - + SendPosition, + SendSize + ); + if (DeviceName == string.Empty) { DeviceName = DefaultAudioOutput; } - long Position = Context.Request.ReceiveBuff[0].Position; - long Size = Context.Request.ReceiveBuff[0].Size; - byte[] DeviceNameBuffer = Encoding.ASCII.GetBytes(DeviceName + "\0"); - if ((ulong)DeviceNameBuffer.Length <= (ulong)Size) + if ((ulong)DeviceNameBuffer.Length <= (ulong)ReceiveSize) { - Context.Memory.WriteBytes(Position, DeviceNameBuffer); + Context.Memory.WriteBytes(ReceivePosition, DeviceNameBuffer); } else { - Context.Ns.Log.PrintError(LogClass.ServiceAudio, $"Output buffer size {Size} too small!"); - } + Context.Ns.Log.PrintError(LogClass.ServiceAudio, $"Output buffer size {ReceiveSize} too small!"); + } int SampleRate = Context.RequestData.ReadInt32(); int Channels = Context.RequestData.ReadInt32(); @@ -108,8 +133,6 @@ namespace Ryujinx.HLE.OsHle.Services.Aud Context.ResponseData.Write(Channels); Context.ResponseData.Write((int)Format); Context.ResponseData.Write((int)PlaybackState.Stopped); - - return 0; } } -}
\ No newline at end of file +} |
