|
|
@@ -24,15 +24,15 @@ namespace Ryujinx.HLE.OsHle.Services.Aud
|
|
|
{
|
|
|
m_Commands = new Dictionary<int, ServiceProcessRequest>()
|
|
|
{
|
|
|
- { 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, AppendAudioOutBufferAuto },
|
|
|
+ { 8, GetReleasedAudioOutBufferAuto }
|
|
|
};
|
|
|
|
|
|
this.AudioOut = AudioOut;
|
|
|
@@ -62,12 +62,50 @@ namespace Ryujinx.HLE.OsHle.Services.Aud
|
|
|
}
|
|
|
|
|
|
public long AppendAudioOutBuffer(ServiceCtx Context)
|
|
|
+ {
|
|
|
+ return AppendAudioOutBufferImpl(Context, Context.Request.SendBuff[0].Position);
|
|
|
+ }
|
|
|
+
|
|
|
+ public long RegisterBufferEvent(ServiceCtx Context)
|
|
|
+ {
|
|
|
+ int Handle = Context.Process.HandleTable.OpenHandle(ReleaseEvent);
|
|
|
+
|
|
|
+ Context.Response.HandleDesc = IpcHandleDesc.MakeCopy(Handle);
|
|
|
+
|
|
|
+ return 0;
|
|
|
+ }
|
|
|
+
|
|
|
+ public long GetReleasedAudioOutBuffer(ServiceCtx Context)
|
|
|
+ {
|
|
|
+ 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 AppendAudioOutBufferAuto(ServiceCtx Context)
|
|
|
+ {
|
|
|
+ (long Position, long Size) = Context.Request.GetBufferType0x21();
|
|
|
+
|
|
|
+ return AppendAudioOutBufferImpl(Context, Position);
|
|
|
+ }
|
|
|
+
|
|
|
+ public long AppendAudioOutBufferImpl(ServiceCtx Context, long Position)
|
|
|
{
|
|
|
long Tag = Context.RequestData.ReadInt64();
|
|
|
|
|
|
AudioOutData Data = AMemoryHelper.Read<AudioOutData>(
|
|
|
Context.Memory,
|
|
|
- Context.Request.SendBuff[0].Position);
|
|
|
+ Position);
|
|
|
|
|
|
byte[] Buffer = Context.Memory.ReadBytes(
|
|
|
Data.SampleBufferPtr,
|
|
|
@@ -78,20 +116,15 @@ namespace Ryujinx.HLE.OsHle.Services.Aud
|
|
|
return 0;
|
|
|
}
|
|
|
|
|
|
- public long RegisterBufferEvent(ServiceCtx Context)
|
|
|
+ public long GetReleasedAudioOutBufferAuto(ServiceCtx Context)
|
|
|
{
|
|
|
- int Handle = Context.Process.HandleTable.OpenHandle(ReleaseEvent);
|
|
|
+ (long Position, long Size) = Context.Request.GetBufferType0x22();
|
|
|
|
|
|
- Context.Response.HandleDesc = IpcHandleDesc.MakeCopy(Handle);
|
|
|
-
|
|
|
- return 0;
|
|
|
+ return GetReleasedAudioOutBufferImpl(Context, Position, Size);
|
|
|
}
|
|
|
|
|
|
- public long GetReleasedAudioOutBuffer(ServiceCtx Context)
|
|
|
+ public long GetReleasedAudioOutBufferImpl(ServiceCtx Context, long Position, long Size)
|
|
|
{
|
|
|
- long Position = Context.Request.ReceiveBuff[0].Position;
|
|
|
- long Size = Context.Request.ReceiveBuff[0].Size;
|
|
|
-
|
|
|
uint Count = (uint)((ulong)Size >> 3);
|
|
|
|
|
|
long[] ReleasedBuffers = AudioOut.GetReleasedBuffers(Track, (int)Count);
|
|
|
@@ -113,29 +146,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);
|