aboutsummaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorgreggameplayer <33609333+greggameplayer@users.noreply.github.com>2018-06-15 17:41:07 +0200
committerGitHub <noreply@github.com>2018-06-15 17:41:07 +0200
commite40db09bed7fa670c66c15fef1e7a29a82234afc (patch)
tree586f4b81c6c2d4507d1cc09da3093ab2f233e511
parent4397049c6ae40c739d4c1d0d1eb262ba212fb0e4 (diff)
add a new Method for OpenAudioOut & OpenAudioOutAuto
-rw-r--r--Ryujinx.HLE/OsHle/Services/Aud/IAudioOutManager.cs136
1 files changed, 50 insertions, 86 deletions
diff --git a/Ryujinx.HLE/OsHle/Services/Aud/IAudioOutManager.cs b/Ryujinx.HLE/OsHle/Services/Aud/IAudioOutManager.cs
index 5ca399f6..cb1cf63b 100644
--- a/Ryujinx.HLE/OsHle/Services/Aud/IAudioOutManager.cs
+++ b/Ryujinx.HLE/OsHle/Services/Aud/IAudioOutManager.cs
@@ -36,12 +36,57 @@ namespace Ryujinx.HLE.OsHle.Services.Aud
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)
+ {
+ OpenAudioOutMethod(Context, Context.Request.GetBufferType0x21().Position, Context.Request.GetBufferType0x21().Size,
+ Context.Request.GetBufferType0x22().Position, Context.Request.GetBufferType0x22().Size);
+
+ return 0;
+ }
+
+ public long ListAudioOutsMethod(ServiceCtx Context, long Position, long Size)
+ {
+ int NameCount = 0;
+
+ byte[] DeviceNameBuffer = Encoding.ASCII.GetBytes(DefaultAudioOutput + "\0");
+
+ if ((ulong)DeviceNameBuffer.Length <= (ulong)Size)
+ {
+ Context.Memory.WriteBytes(Position, DeviceNameBuffer);
+
+ NameCount++;
+ }
+ else
+ {
+ Context.Ns.Log.PrintError(LogClass.ServiceAudio, $"Output buffer size {Size} too small!");
+ }
+
+ Context.ResponseData.Write(NameCount);
+
+ return 0;
+ }
+
+ public long 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)
@@ -49,18 +94,15 @@ namespace Ryujinx.HLE.OsHle.Services.Aud
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!");
}
@@ -97,83 +139,5 @@ namespace Ryujinx.HLE.OsHle.Services.Aud
return 0;
}
-
- public long ListAudioOutsAuto(ServiceCtx Context)
- {
- ListAudioOutsMethod(Context, Context.Request.GetBufferType0x22().Position, Context.Request.GetBufferType0x22().Size);
-
- return 0;
- }
-
- public long OpenAudioOutAuto(ServiceCtx Context)
- {
- IAalOutput AudioOut = Context.Ns.AudioOut;
-
- string DeviceName = AMemoryHelper.ReadAsciiString(
- Context.Memory,
- Context.Request.GetBufferType0x21().Position,
- Context.Request.GetBufferType0x21().Size
- );
-
- if (DeviceName == string.Empty)
- {
- DeviceName = DefaultAudioOutput;
- }
-
- long Position = Context.Request.GetBufferType0x22().Position;
- long Size = Context.Request.GetBufferType0x22().Size;
-
- byte[] DeviceNameBuffer = Encoding.ASCII.GetBytes(DeviceName + "\0");
-
- if ((ulong)DeviceNameBuffer.Length <= (ulong)Size)
- {
- Context.Memory.WriteBytes(Position, DeviceNameBuffer);
- }
- else
- {
- Context.Ns.Log.PrintError(LogClass.ServiceAudio, $"Output buffer size {Size} too small!");
- }
-
- int AudioParams1 = Context.RequestData.ReadInt32();
- int AudioParams2 = Context.RequestData.ReadInt32();
- int AudioParams3 = Context.RequestData.ReadInt32();
- int AudioParams4 = Context.RequestData.ReadInt32();
-
- KEvent ReleaseEvent = new KEvent();
-
- ReleaseCallback Callback = () =>
- {
- ReleaseEvent.WaitEvent.Set();
- };
-
- //TODO: add makeobject (object currently unknown)
-
- Context.ResponseData.Write(AudioParams1);
- Context.ResponseData.Write(AudioParams2);
-
- return 0;
- }
-
- public long ListAudioOutsMethod(ServiceCtx Context, long Position, long Size)
- {
- int NameCount = 0;
-
- byte[] DeviceNameBuffer = Encoding.ASCII.GetBytes(DefaultAudioOutput + "\0");
-
- if ((ulong)DeviceNameBuffer.Length <= (ulong)Size)
- {
- Context.Memory.WriteBytes(Position, DeviceNameBuffer);
-
- NameCount++;
- }
- else
- {
- Context.Ns.Log.PrintError(LogClass.ServiceAudio, $"Output buffer size {Size} too small!");
- }
-
- Context.ResponseData.Write(NameCount);
-
- return 0;
- }
}
}