HLE: Fix integer sign inconcistency accross the codebase (#2222)
* Make all title id instances unsigned * Replace address and size with ulong instead of signed types Long overdue change. Also change some logics here and there to optimize with the new memory manager. * Address Ac_K's comments * Remove uneeded cast all around * Fixes some others misalignment
This commit is contained in:
parent
c46f6879ff
commit
305f06eb71
73 changed files with 707 additions and 716 deletions
|
@ -45,7 +45,7 @@ namespace Ryujinx.HLE.HOS.Services.Audio.AudioIn
|
|||
// AppendAudioInBuffer(u64 tag, buffer<nn::audio::AudioInBuffer, 5>)
|
||||
public ResultCode AppendAudioInBuffer(ServiceCtx context)
|
||||
{
|
||||
long position = context.Request.SendBuff[0].Position;
|
||||
ulong position = context.Request.SendBuff[0].Position;
|
||||
|
||||
ulong bufferTag = context.RequestData.ReadUInt64();
|
||||
|
||||
|
@ -74,8 +74,8 @@ namespace Ryujinx.HLE.HOS.Services.Audio.AudioIn
|
|||
// GetReleasedAudioInBuffers() -> (u32 count, buffer<u64, 6> tags)
|
||||
public ResultCode GetReleasedAudioInBuffers(ServiceCtx context)
|
||||
{
|
||||
long position = context.Request.ReceiveBuff[0].Position;
|
||||
long size = context.Request.ReceiveBuff[0].Size;
|
||||
ulong position = context.Request.ReceiveBuff[0].Position;
|
||||
ulong size = context.Request.ReceiveBuff[0].Size;
|
||||
|
||||
using (WritableRegion outputRegion = context.Memory.GetWritableRegion((ulong)position, (int)size))
|
||||
{
|
||||
|
@ -102,7 +102,7 @@ namespace Ryujinx.HLE.HOS.Services.Audio.AudioIn
|
|||
// AppendUacInBuffer(u64 tag, handle<copy, unknown>, buffer<nn::audio::AudioInBuffer, 5>)
|
||||
public ResultCode AppendUacInBuffer(ServiceCtx context)
|
||||
{
|
||||
long position = context.Request.SendBuff[0].Position;
|
||||
ulong position = context.Request.SendBuff[0].Position;
|
||||
|
||||
ulong bufferTag = context.RequestData.ReadUInt64();
|
||||
uint handle = (uint)context.Request.HandleDesc.ToCopy[0];
|
||||
|
@ -116,7 +116,7 @@ namespace Ryujinx.HLE.HOS.Services.Audio.AudioIn
|
|||
// AppendAudioInBufferAuto(u64 tag, buffer<nn::audio::AudioInBuffer, 0x21>)
|
||||
public ResultCode AppendAudioInBufferAuto(ServiceCtx context)
|
||||
{
|
||||
(long position, _) = context.Request.GetBufferType0x21();
|
||||
(ulong position, _) = context.Request.GetBufferType0x21();
|
||||
|
||||
ulong bufferTag = context.RequestData.ReadUInt64();
|
||||
|
||||
|
@ -129,9 +129,9 @@ namespace Ryujinx.HLE.HOS.Services.Audio.AudioIn
|
|||
// GetReleasedAudioInBuffersAuto() -> (u32 count, buffer<u64, 0x22> tags)
|
||||
public ResultCode GetReleasedAudioInBuffersAuto(ServiceCtx context)
|
||||
{
|
||||
(long position, long size) = context.Request.GetBufferType0x22();
|
||||
(ulong position, ulong size) = context.Request.GetBufferType0x22();
|
||||
|
||||
using (WritableRegion outputRegion = context.Memory.GetWritableRegion((ulong)position, (int)size))
|
||||
using (WritableRegion outputRegion = context.Memory.GetWritableRegion(position, (int)size))
|
||||
{
|
||||
ResultCode result = _impl.GetReleasedBuffers(MemoryMarshal.Cast<byte, ulong>(outputRegion.Memory.Span), out uint releasedCount);
|
||||
|
||||
|
@ -145,7 +145,7 @@ namespace Ryujinx.HLE.HOS.Services.Audio.AudioIn
|
|||
// AppendUacInBufferAuto(u64 tag, handle<copy, event>, buffer<nn::audio::AudioInBuffer, 0x21>)
|
||||
public ResultCode AppendUacInBufferAuto(ServiceCtx context)
|
||||
{
|
||||
(long position, _) = context.Request.GetBufferType0x21();
|
||||
(ulong position, _) = context.Request.GetBufferType0x21();
|
||||
|
||||
ulong bufferTag = context.RequestData.ReadUInt64();
|
||||
uint handle = (uint)context.Request.HandleDesc.ToCopy[0];
|
||||
|
|
|
@ -27,10 +27,10 @@ namespace Ryujinx.HLE.HOS.Services.Audio
|
|||
{
|
||||
string[] deviceNames = _impl.ListAudioIns(false);
|
||||
|
||||
long position = context.Request.ReceiveBuff[0].Position;
|
||||
long size = context.Request.ReceiveBuff[0].Size;
|
||||
ulong position = context.Request.ReceiveBuff[0].Position;
|
||||
ulong size = context.Request.ReceiveBuff[0].Size;
|
||||
|
||||
long basePosition = position;
|
||||
ulong basePosition = position;
|
||||
|
||||
int count = 0;
|
||||
|
||||
|
@ -38,15 +38,15 @@ namespace Ryujinx.HLE.HOS.Services.Audio
|
|||
{
|
||||
byte[] buffer = Encoding.ASCII.GetBytes(name);
|
||||
|
||||
if ((position - basePosition) + buffer.Length > size)
|
||||
if ((position - basePosition) + (ulong)buffer.Length > size)
|
||||
{
|
||||
Logger.Error?.Print(LogClass.ServiceAudio, $"Output buffer size {size} too small!");
|
||||
|
||||
break;
|
||||
}
|
||||
|
||||
context.Memory.Write((ulong)position, buffer);
|
||||
MemoryHelper.FillWithZeros(context.Memory, position + buffer.Length, AudioInNameSize - buffer.Length);
|
||||
context.Memory.Write(position, buffer);
|
||||
MemoryHelper.FillWithZeros(context.Memory, position + (ulong)buffer.Length, AudioInNameSize - buffer.Length);
|
||||
|
||||
position += AudioInNameSize;
|
||||
count++;
|
||||
|
@ -65,15 +65,15 @@ namespace Ryujinx.HLE.HOS.Services.Audio
|
|||
AudioInputConfiguration inputConfiguration = context.RequestData.ReadStruct<AudioInputConfiguration>();
|
||||
ulong appletResourceUserId = context.RequestData.ReadUInt64();
|
||||
|
||||
long deviceNameInputPosition = context.Request.SendBuff[0].Position;
|
||||
long deviceNameInputSize = context.Request.SendBuff[0].Size;
|
||||
ulong deviceNameInputPosition = context.Request.SendBuff[0].Position;
|
||||
ulong deviceNameInputSize = context.Request.SendBuff[0].Size;
|
||||
|
||||
long deviceNameOutputPosition = context.Request.ReceiveBuff[0].Position;
|
||||
long deviceNameOutputSize = context.Request.ReceiveBuff[0].Size;
|
||||
ulong deviceNameOutputPosition = context.Request.ReceiveBuff[0].Position;
|
||||
ulong deviceNameOutputSize = context.Request.ReceiveBuff[0].Size;
|
||||
|
||||
uint processHandle = (uint)context.Request.HandleDesc.ToCopy[0];
|
||||
|
||||
string inputDeviceName = MemoryHelper.ReadAsciiString(context.Memory, deviceNameInputPosition, deviceNameInputSize);
|
||||
string inputDeviceName = MemoryHelper.ReadAsciiString(context.Memory, deviceNameInputPosition, (long)deviceNameInputSize);
|
||||
|
||||
ResultCode resultCode = _impl.OpenAudioIn(context, out string outputDeviceName, out AudioOutputConfiguration outputConfiguration, out IAudioIn obj, inputDeviceName, ref inputConfiguration, appletResourceUserId, processHandle);
|
||||
|
||||
|
@ -83,8 +83,8 @@ namespace Ryujinx.HLE.HOS.Services.Audio
|
|||
|
||||
byte[] outputDeviceNameRaw = Encoding.ASCII.GetBytes(outputDeviceName);
|
||||
|
||||
context.Memory.Write((ulong)deviceNameOutputPosition, outputDeviceNameRaw);
|
||||
MemoryHelper.FillWithZeros(context.Memory, deviceNameOutputPosition + outputDeviceNameRaw.Length, AudioInNameSize - outputDeviceNameRaw.Length);
|
||||
context.Memory.Write(deviceNameOutputPosition, outputDeviceNameRaw);
|
||||
MemoryHelper.FillWithZeros(context.Memory, deviceNameOutputPosition + (ulong)outputDeviceNameRaw.Length, AudioInNameSize - outputDeviceNameRaw.Length);
|
||||
|
||||
MakeObject(context, new AudioInServer(obj));
|
||||
}
|
||||
|
@ -98,9 +98,9 @@ namespace Ryujinx.HLE.HOS.Services.Audio
|
|||
{
|
||||
string[] deviceNames = _impl.ListAudioIns(false);
|
||||
|
||||
(long position, long size) = context.Request.GetBufferType0x22();
|
||||
(ulong position, ulong size) = context.Request.GetBufferType0x22();
|
||||
|
||||
long basePosition = position;
|
||||
ulong basePosition = position;
|
||||
|
||||
int count = 0;
|
||||
|
||||
|
@ -108,15 +108,15 @@ namespace Ryujinx.HLE.HOS.Services.Audio
|
|||
{
|
||||
byte[] buffer = Encoding.ASCII.GetBytes(name);
|
||||
|
||||
if ((position - basePosition) + buffer.Length > size)
|
||||
if ((position - basePosition) + (ulong)buffer.Length > size)
|
||||
{
|
||||
Logger.Error?.Print(LogClass.ServiceAudio, $"Output buffer size {size} too small!");
|
||||
|
||||
break;
|
||||
}
|
||||
|
||||
context.Memory.Write((ulong)position, buffer);
|
||||
MemoryHelper.FillWithZeros(context.Memory, position + buffer.Length, AudioInNameSize - buffer.Length);
|
||||
context.Memory.Write(position, buffer);
|
||||
MemoryHelper.FillWithZeros(context.Memory, position + (ulong)buffer.Length, AudioInNameSize - buffer.Length);
|
||||
|
||||
position += AudioInNameSize;
|
||||
count++;
|
||||
|
@ -135,12 +135,12 @@ namespace Ryujinx.HLE.HOS.Services.Audio
|
|||
AudioInputConfiguration inputConfiguration = context.RequestData.ReadStruct<AudioInputConfiguration>();
|
||||
ulong appletResourceUserId = context.RequestData.ReadUInt64();
|
||||
|
||||
(long deviceNameInputPosition, long deviceNameInputSize) = context.Request.GetBufferType0x21();
|
||||
(long deviceNameOutputPosition, long deviceNameOutputSize) = context.Request.GetBufferType0x22();
|
||||
(ulong deviceNameInputPosition, ulong deviceNameInputSize) = context.Request.GetBufferType0x21();
|
||||
(ulong deviceNameOutputPosition, ulong deviceNameOutputSize) = context.Request.GetBufferType0x22();
|
||||
|
||||
uint processHandle = (uint)context.Request.HandleDesc.ToCopy[0];
|
||||
|
||||
string inputDeviceName = MemoryHelper.ReadAsciiString(context.Memory, deviceNameInputPosition, deviceNameInputSize);
|
||||
string inputDeviceName = MemoryHelper.ReadAsciiString(context.Memory, deviceNameInputPosition, (long)deviceNameInputSize);
|
||||
|
||||
ResultCode resultCode = _impl.OpenAudioIn(context, out string outputDeviceName, out AudioOutputConfiguration outputConfiguration, out IAudioIn obj, inputDeviceName, ref inputConfiguration, appletResourceUserId, processHandle);
|
||||
|
||||
|
@ -150,8 +150,8 @@ namespace Ryujinx.HLE.HOS.Services.Audio
|
|||
|
||||
byte[] outputDeviceNameRaw = Encoding.ASCII.GetBytes(outputDeviceName);
|
||||
|
||||
context.Memory.Write((ulong)deviceNameOutputPosition, outputDeviceNameRaw);
|
||||
MemoryHelper.FillWithZeros(context.Memory, deviceNameOutputPosition + outputDeviceNameRaw.Length, AudioInNameSize - outputDeviceNameRaw.Length);
|
||||
context.Memory.Write(deviceNameOutputPosition, outputDeviceNameRaw);
|
||||
MemoryHelper.FillWithZeros(context.Memory, deviceNameOutputPosition + (ulong)outputDeviceNameRaw.Length, AudioInNameSize - outputDeviceNameRaw.Length);
|
||||
|
||||
MakeObject(context, new AudioInServer(obj));
|
||||
}
|
||||
|
@ -165,9 +165,9 @@ namespace Ryujinx.HLE.HOS.Services.Audio
|
|||
{
|
||||
string[] deviceNames = _impl.ListAudioIns(true);
|
||||
|
||||
(long position, long size) = context.Request.GetBufferType0x22();
|
||||
(ulong position, ulong size) = context.Request.GetBufferType0x22();
|
||||
|
||||
long basePosition = position;
|
||||
ulong basePosition = position;
|
||||
|
||||
int count = 0;
|
||||
|
||||
|
@ -175,15 +175,15 @@ namespace Ryujinx.HLE.HOS.Services.Audio
|
|||
{
|
||||
byte[] buffer = Encoding.ASCII.GetBytes(name);
|
||||
|
||||
if ((position - basePosition) + buffer.Length > size)
|
||||
if ((position - basePosition) + (ulong)buffer.Length > size)
|
||||
{
|
||||
Logger.Error?.Print(LogClass.ServiceAudio, $"Output buffer size {size} too small!");
|
||||
|
||||
break;
|
||||
}
|
||||
|
||||
context.Memory.Write((ulong)position, buffer);
|
||||
MemoryHelper.FillWithZeros(context.Memory, position + buffer.Length, AudioInNameSize - buffer.Length);
|
||||
context.Memory.Write(position, buffer);
|
||||
MemoryHelper.FillWithZeros(context.Memory, position + (ulong)buffer.Length, AudioInNameSize - buffer.Length);
|
||||
|
||||
position += AudioInNameSize;
|
||||
count++;
|
||||
|
@ -205,15 +205,15 @@ namespace Ryujinx.HLE.HOS.Services.Audio
|
|||
AudioInputConfiguration inputConfiguration = context.RequestData.ReadStruct<AudioInputConfiguration>();
|
||||
ulong appletResourceUserId = context.RequestData.ReadUInt64();
|
||||
|
||||
long deviceNameInputPosition = context.Request.SendBuff[0].Position;
|
||||
long deviceNameInputSize = context.Request.SendBuff[0].Size;
|
||||
ulong deviceNameInputPosition = context.Request.SendBuff[0].Position;
|
||||
ulong deviceNameInputSize = context.Request.SendBuff[0].Size;
|
||||
|
||||
long deviceNameOutputPosition = context.Request.ReceiveBuff[0].Position;
|
||||
long deviceNameOutputSize = context.Request.ReceiveBuff[0].Size;
|
||||
ulong deviceNameOutputPosition = context.Request.ReceiveBuff[0].Position;
|
||||
ulong deviceNameOutputSize = context.Request.ReceiveBuff[0].Size;
|
||||
|
||||
uint processHandle = (uint)context.Request.HandleDesc.ToCopy[0];
|
||||
|
||||
string inputDeviceName = MemoryHelper.ReadAsciiString(context.Memory, deviceNameInputPosition, deviceNameInputSize);
|
||||
string inputDeviceName = MemoryHelper.ReadAsciiString(context.Memory, deviceNameInputPosition, (long)deviceNameInputSize);
|
||||
|
||||
ResultCode resultCode = _impl.OpenAudioIn(context, out string outputDeviceName, out AudioOutputConfiguration outputConfiguration, out IAudioIn obj, inputDeviceName, ref inputConfiguration, appletResourceUserId, processHandle);
|
||||
|
||||
|
@ -223,8 +223,8 @@ namespace Ryujinx.HLE.HOS.Services.Audio
|
|||
|
||||
byte[] outputDeviceNameRaw = Encoding.ASCII.GetBytes(outputDeviceName);
|
||||
|
||||
context.Memory.Write((ulong)deviceNameOutputPosition, outputDeviceNameRaw);
|
||||
MemoryHelper.FillWithZeros(context.Memory, deviceNameOutputPosition + outputDeviceNameRaw.Length, AudioInNameSize - outputDeviceNameRaw.Length);
|
||||
context.Memory.Write(deviceNameOutputPosition, outputDeviceNameRaw);
|
||||
MemoryHelper.FillWithZeros(context.Memory, deviceNameOutputPosition + (ulong)outputDeviceNameRaw.Length, AudioInNameSize - outputDeviceNameRaw.Length);
|
||||
|
||||
MakeObject(context, new AudioInServer(obj));
|
||||
}
|
||||
|
|
|
@ -45,7 +45,7 @@ namespace Ryujinx.HLE.HOS.Services.Audio.AudioOut
|
|||
// AppendAudioOutBuffer(u64 bufferTag, buffer<nn::audio::AudioOutBuffer, 5> buffer)
|
||||
public ResultCode AppendAudioOutBuffer(ServiceCtx context)
|
||||
{
|
||||
long position = context.Request.SendBuff[0].Position;
|
||||
ulong position = context.Request.SendBuff[0].Position;
|
||||
|
||||
ulong bufferTag = context.RequestData.ReadUInt64();
|
||||
|
||||
|
@ -74,10 +74,10 @@ namespace Ryujinx.HLE.HOS.Services.Audio.AudioOut
|
|||
// GetReleasedAudioOutBuffers() -> (u32 count, buffer<u64, 6> tags)
|
||||
public ResultCode GetReleasedAudioOutBuffers(ServiceCtx context)
|
||||
{
|
||||
long position = context.Request.ReceiveBuff[0].Position;
|
||||
long size = context.Request.ReceiveBuff[0].Size;
|
||||
ulong position = context.Request.ReceiveBuff[0].Position;
|
||||
ulong size = context.Request.ReceiveBuff[0].Size;
|
||||
|
||||
using (WritableRegion outputRegion = context.Memory.GetWritableRegion((ulong)position, (int)size))
|
||||
using (WritableRegion outputRegion = context.Memory.GetWritableRegion(position, (int)size))
|
||||
{
|
||||
ResultCode result = _impl.GetReleasedBuffers(MemoryMarshal.Cast<byte, ulong>(outputRegion.Memory.Span), out uint releasedCount);
|
||||
|
||||
|
@ -102,7 +102,7 @@ namespace Ryujinx.HLE.HOS.Services.Audio.AudioOut
|
|||
// AppendAudioOutBufferAuto(u64 tag, buffer<nn::audio::AudioOutBuffer, 0x21>)
|
||||
public ResultCode AppendAudioOutBufferAuto(ServiceCtx context)
|
||||
{
|
||||
(long position, _) = context.Request.GetBufferType0x21();
|
||||
(ulong position, _) = context.Request.GetBufferType0x21();
|
||||
|
||||
ulong bufferTag = context.RequestData.ReadUInt64();
|
||||
|
||||
|
@ -115,9 +115,9 @@ namespace Ryujinx.HLE.HOS.Services.Audio.AudioOut
|
|||
// GetReleasedAudioOutBuffersAuto() -> (u32 count, buffer<u64, 0x22> tags)
|
||||
public ResultCode GetReleasedAudioOutBuffersAuto(ServiceCtx context)
|
||||
{
|
||||
(long position, long size) = context.Request.GetBufferType0x22();
|
||||
(ulong position, ulong size) = context.Request.GetBufferType0x22();
|
||||
|
||||
using (WritableRegion outputRegion = context.Memory.GetWritableRegion((ulong)position, (int)size))
|
||||
using (WritableRegion outputRegion = context.Memory.GetWritableRegion(position, (int)size))
|
||||
{
|
||||
ResultCode result = _impl.GetReleasedBuffers(MemoryMarshal.Cast<byte, ulong>(outputRegion.Memory.Span), out uint releasedCount);
|
||||
|
||||
|
|
|
@ -27,10 +27,10 @@ namespace Ryujinx.HLE.HOS.Services.Audio
|
|||
{
|
||||
string[] deviceNames = _impl.ListAudioOuts();
|
||||
|
||||
long position = context.Request.ReceiveBuff[0].Position;
|
||||
long size = context.Request.ReceiveBuff[0].Size;
|
||||
ulong position = context.Request.ReceiveBuff[0].Position;
|
||||
ulong size = context.Request.ReceiveBuff[0].Size;
|
||||
|
||||
long basePosition = position;
|
||||
ulong basePosition = position;
|
||||
|
||||
int count = 0;
|
||||
|
||||
|
@ -38,15 +38,15 @@ namespace Ryujinx.HLE.HOS.Services.Audio
|
|||
{
|
||||
byte[] buffer = Encoding.ASCII.GetBytes(name);
|
||||
|
||||
if ((position - basePosition) + buffer.Length > size)
|
||||
if ((position - basePosition) + (ulong)buffer.Length > size)
|
||||
{
|
||||
Logger.Error?.Print(LogClass.ServiceAudio, $"Output buffer size {size} too small!");
|
||||
|
||||
break;
|
||||
}
|
||||
|
||||
context.Memory.Write((ulong)position, buffer);
|
||||
MemoryHelper.FillWithZeros(context.Memory, position + buffer.Length, AudioOutNameSize - buffer.Length);
|
||||
context.Memory.Write(position, buffer);
|
||||
MemoryHelper.FillWithZeros(context.Memory, position + (ulong)buffer.Length, AudioOutNameSize - buffer.Length);
|
||||
|
||||
position += AudioOutNameSize;
|
||||
count++;
|
||||
|
@ -65,15 +65,15 @@ namespace Ryujinx.HLE.HOS.Services.Audio
|
|||
AudioInputConfiguration inputConfiguration = context.RequestData.ReadStruct<AudioInputConfiguration>();
|
||||
ulong appletResourceUserId = context.RequestData.ReadUInt64();
|
||||
|
||||
long deviceNameInputPosition = context.Request.SendBuff[0].Position;
|
||||
long deviceNameInputSize = context.Request.SendBuff[0].Size;
|
||||
ulong deviceNameInputPosition = context.Request.SendBuff[0].Position;
|
||||
ulong deviceNameInputSize = context.Request.SendBuff[0].Size;
|
||||
|
||||
long deviceNameOutputPosition = context.Request.ReceiveBuff[0].Position;
|
||||
long deviceNameOutputSize = context.Request.ReceiveBuff[0].Size;
|
||||
ulong deviceNameOutputPosition = context.Request.ReceiveBuff[0].Position;
|
||||
ulong deviceNameOutputSize = context.Request.ReceiveBuff[0].Size;
|
||||
|
||||
uint processHandle = (uint)context.Request.HandleDesc.ToCopy[0];
|
||||
|
||||
string inputDeviceName = MemoryHelper.ReadAsciiString(context.Memory, deviceNameInputPosition, deviceNameInputSize);
|
||||
string inputDeviceName = MemoryHelper.ReadAsciiString(context.Memory, deviceNameInputPosition, (long)deviceNameInputSize);
|
||||
|
||||
ResultCode resultCode = _impl.OpenAudioOut(context, out string outputDeviceName, out AudioOutputConfiguration outputConfiguration, out IAudioOut obj, inputDeviceName, ref inputConfiguration, appletResourceUserId, processHandle);
|
||||
|
||||
|
@ -83,8 +83,8 @@ namespace Ryujinx.HLE.HOS.Services.Audio
|
|||
|
||||
byte[] outputDeviceNameRaw = Encoding.ASCII.GetBytes(outputDeviceName);
|
||||
|
||||
context.Memory.Write((ulong)deviceNameOutputPosition, outputDeviceNameRaw);
|
||||
MemoryHelper.FillWithZeros(context.Memory, deviceNameOutputPosition + outputDeviceNameRaw.Length, AudioOutNameSize - outputDeviceNameRaw.Length);
|
||||
context.Memory.Write(deviceNameOutputPosition, outputDeviceNameRaw);
|
||||
MemoryHelper.FillWithZeros(context.Memory, deviceNameOutputPosition + (ulong)outputDeviceNameRaw.Length, AudioOutNameSize - outputDeviceNameRaw.Length);
|
||||
|
||||
MakeObject(context, new AudioOutServer(obj));
|
||||
}
|
||||
|
@ -98,9 +98,9 @@ namespace Ryujinx.HLE.HOS.Services.Audio
|
|||
{
|
||||
string[] deviceNames = _impl.ListAudioOuts();
|
||||
|
||||
(long position, long size) = context.Request.GetBufferType0x22();
|
||||
(ulong position, ulong size) = context.Request.GetBufferType0x22();
|
||||
|
||||
long basePosition = position;
|
||||
ulong basePosition = position;
|
||||
|
||||
int count = 0;
|
||||
|
||||
|
@ -108,15 +108,15 @@ namespace Ryujinx.HLE.HOS.Services.Audio
|
|||
{
|
||||
byte[] buffer = Encoding.ASCII.GetBytes(name);
|
||||
|
||||
if ((position - basePosition) + buffer.Length > size)
|
||||
if ((position - basePosition) + (ulong)buffer.Length > size)
|
||||
{
|
||||
Logger.Error?.Print(LogClass.ServiceAudio, $"Output buffer size {size} too small!");
|
||||
|
||||
break;
|
||||
}
|
||||
|
||||
context.Memory.Write((ulong)position, buffer);
|
||||
MemoryHelper.FillWithZeros(context.Memory, position + buffer.Length, AudioOutNameSize - buffer.Length);
|
||||
context.Memory.Write(position, buffer);
|
||||
MemoryHelper.FillWithZeros(context.Memory, position + (ulong)buffer.Length, AudioOutNameSize - buffer.Length);
|
||||
|
||||
position += AudioOutNameSize;
|
||||
count++;
|
||||
|
@ -135,12 +135,12 @@ namespace Ryujinx.HLE.HOS.Services.Audio
|
|||
AudioInputConfiguration inputConfiguration = context.RequestData.ReadStruct<AudioInputConfiguration>();
|
||||
ulong appletResourceUserId = context.RequestData.ReadUInt64();
|
||||
|
||||
(long deviceNameInputPosition, long deviceNameInputSize) = context.Request.GetBufferType0x21();
|
||||
(long deviceNameOutputPosition, long deviceNameOutputSize) = context.Request.GetBufferType0x22();
|
||||
(ulong deviceNameInputPosition, ulong deviceNameInputSize) = context.Request.GetBufferType0x21();
|
||||
(ulong deviceNameOutputPosition, ulong deviceNameOutputSize) = context.Request.GetBufferType0x22();
|
||||
|
||||
uint processHandle = (uint)context.Request.HandleDesc.ToCopy[0];
|
||||
|
||||
string inputDeviceName = MemoryHelper.ReadAsciiString(context.Memory, deviceNameInputPosition, deviceNameInputSize);
|
||||
string inputDeviceName = MemoryHelper.ReadAsciiString(context.Memory, deviceNameInputPosition, (long)deviceNameInputSize);
|
||||
|
||||
ResultCode resultCode = _impl.OpenAudioOut(context, out string outputDeviceName, out AudioOutputConfiguration outputConfiguration, out IAudioOut obj, inputDeviceName, ref inputConfiguration, appletResourceUserId, processHandle);
|
||||
|
||||
|
@ -150,8 +150,8 @@ namespace Ryujinx.HLE.HOS.Services.Audio
|
|||
|
||||
byte[] outputDeviceNameRaw = Encoding.ASCII.GetBytes(outputDeviceName);
|
||||
|
||||
context.Memory.Write((ulong)deviceNameOutputPosition, outputDeviceNameRaw);
|
||||
MemoryHelper.FillWithZeros(context.Memory, deviceNameOutputPosition + outputDeviceNameRaw.Length, AudioOutNameSize - outputDeviceNameRaw.Length);
|
||||
context.Memory.Write(deviceNameOutputPosition, outputDeviceNameRaw);
|
||||
MemoryHelper.FillWithZeros(context.Memory, deviceNameOutputPosition + (ulong)outputDeviceNameRaw.Length, AudioOutNameSize - outputDeviceNameRaw.Length);
|
||||
|
||||
MakeObject(context, new AudioOutServer(obj));
|
||||
}
|
||||
|
|
|
@ -25,10 +25,10 @@ namespace Ryujinx.HLE.HOS.Services.Audio.AudioRenderer
|
|||
{
|
||||
string[] deviceNames = _impl.ListAudioDeviceName();
|
||||
|
||||
long position = context.Request.ReceiveBuff[0].Position;
|
||||
long size = context.Request.ReceiveBuff[0].Size;
|
||||
ulong position = context.Request.ReceiveBuff[0].Position;
|
||||
ulong size = context.Request.ReceiveBuff[0].Size;
|
||||
|
||||
long basePosition = position;
|
||||
ulong basePosition = position;
|
||||
|
||||
int count = 0;
|
||||
|
||||
|
@ -36,15 +36,15 @@ namespace Ryujinx.HLE.HOS.Services.Audio.AudioRenderer
|
|||
{
|
||||
byte[] buffer = Encoding.ASCII.GetBytes(name);
|
||||
|
||||
if ((position - basePosition) + buffer.Length > size)
|
||||
if ((position - basePosition) + (ulong)buffer.Length > size)
|
||||
{
|
||||
Logger.Error?.Print(LogClass.ServiceAudio, $"Output buffer size {size} too small!");
|
||||
|
||||
break;
|
||||
}
|
||||
|
||||
context.Memory.Write((ulong)position, buffer);
|
||||
MemoryHelper.FillWithZeros(context.Memory, position + buffer.Length, AudioDeviceNameSize - buffer.Length);
|
||||
context.Memory.Write(position, buffer);
|
||||
MemoryHelper.FillWithZeros(context.Memory, position + (ulong)buffer.Length, AudioDeviceNameSize - buffer.Length);
|
||||
|
||||
position += AudioDeviceNameSize;
|
||||
count++;
|
||||
|
@ -61,10 +61,10 @@ namespace Ryujinx.HLE.HOS.Services.Audio.AudioRenderer
|
|||
{
|
||||
float volume = context.RequestData.ReadSingle();
|
||||
|
||||
long position = context.Request.SendBuff[0].Position;
|
||||
long size = context.Request.SendBuff[0].Size;
|
||||
ulong position = context.Request.SendBuff[0].Position;
|
||||
ulong size = context.Request.SendBuff[0].Size;
|
||||
|
||||
string deviceName = MemoryHelper.ReadAsciiString(context.Memory, position, size);
|
||||
string deviceName = MemoryHelper.ReadAsciiString(context.Memory, position, (long)size);
|
||||
|
||||
return _impl.SetAudioDeviceOutputVolume(deviceName, volume);
|
||||
}
|
||||
|
@ -73,10 +73,10 @@ namespace Ryujinx.HLE.HOS.Services.Audio.AudioRenderer
|
|||
// GetAudioDeviceOutputVolume(buffer<bytes, 5> name) -> f32 volume
|
||||
public ResultCode GetAudioDeviceOutputVolume(ServiceCtx context)
|
||||
{
|
||||
long position = context.Request.SendBuff[0].Position;
|
||||
long size = context.Request.SendBuff[0].Size;
|
||||
ulong position = context.Request.SendBuff[0].Position;
|
||||
ulong size = context.Request.SendBuff[0].Size;
|
||||
|
||||
string deviceName = MemoryHelper.ReadAsciiString(context.Memory, position, size);
|
||||
string deviceName = MemoryHelper.ReadAsciiString(context.Memory, position, (long)size);
|
||||
|
||||
ResultCode result = _impl.GetAudioDeviceOutputVolume(deviceName, out float volume);
|
||||
|
||||
|
@ -94,14 +94,14 @@ namespace Ryujinx.HLE.HOS.Services.Audio.AudioRenderer
|
|||
{
|
||||
string name = _impl.GetActiveAudioDeviceName();
|
||||
|
||||
long position = context.Request.ReceiveBuff[0].Position;
|
||||
long size = context.Request.ReceiveBuff[0].Size;
|
||||
ulong position = context.Request.ReceiveBuff[0].Position;
|
||||
ulong size = context.Request.ReceiveBuff[0].Size;
|
||||
|
||||
byte[] deviceNameBuffer = Encoding.ASCII.GetBytes(name + "\0");
|
||||
|
||||
if ((ulong)deviceNameBuffer.Length <= (ulong)size)
|
||||
if ((ulong)deviceNameBuffer.Length <= size)
|
||||
{
|
||||
context.Memory.Write((ulong)position, deviceNameBuffer);
|
||||
context.Memory.Write(position, deviceNameBuffer);
|
||||
}
|
||||
else
|
||||
{
|
||||
|
@ -146,9 +146,9 @@ namespace Ryujinx.HLE.HOS.Services.Audio.AudioRenderer
|
|||
{
|
||||
string[] deviceNames = _impl.ListAudioDeviceName();
|
||||
|
||||
(long position, long size) = context.Request.GetBufferType0x22();
|
||||
(ulong position, ulong size) = context.Request.GetBufferType0x22();
|
||||
|
||||
long basePosition = position;
|
||||
ulong basePosition = position;
|
||||
|
||||
int count = 0;
|
||||
|
||||
|
@ -156,15 +156,15 @@ namespace Ryujinx.HLE.HOS.Services.Audio.AudioRenderer
|
|||
{
|
||||
byte[] buffer = Encoding.ASCII.GetBytes(name);
|
||||
|
||||
if ((position - basePosition) + buffer.Length > size)
|
||||
if ((position - basePosition) + (ulong)buffer.Length > size)
|
||||
{
|
||||
Logger.Error?.Print(LogClass.ServiceAudio, $"Output buffer size {size} too small!");
|
||||
|
||||
break;
|
||||
}
|
||||
|
||||
context.Memory.Write((ulong)position, buffer);
|
||||
MemoryHelper.FillWithZeros(context.Memory, position + buffer.Length, AudioDeviceNameSize - buffer.Length);
|
||||
context.Memory.Write(position, buffer);
|
||||
MemoryHelper.FillWithZeros(context.Memory, position + (ulong)buffer.Length, AudioDeviceNameSize - buffer.Length);
|
||||
|
||||
position += AudioDeviceNameSize;
|
||||
count++;
|
||||
|
@ -181,9 +181,9 @@ namespace Ryujinx.HLE.HOS.Services.Audio.AudioRenderer
|
|||
{
|
||||
float volume = context.RequestData.ReadSingle();
|
||||
|
||||
(long position, long size) = context.Request.GetBufferType0x21();
|
||||
(ulong position, ulong size) = context.Request.GetBufferType0x21();
|
||||
|
||||
string deviceName = MemoryHelper.ReadAsciiString(context.Memory, position, size);
|
||||
string deviceName = MemoryHelper.ReadAsciiString(context.Memory, position, (long)size);
|
||||
|
||||
return _impl.SetAudioDeviceOutputVolume(deviceName, volume);
|
||||
}
|
||||
|
@ -192,9 +192,9 @@ namespace Ryujinx.HLE.HOS.Services.Audio.AudioRenderer
|
|||
// GetAudioDeviceOutputVolumeAuto(buffer<bytes, 0x21> name) -> f32
|
||||
public ResultCode GetAudioDeviceOutputVolumeAuto(ServiceCtx context)
|
||||
{
|
||||
(long position, long size) = context.Request.GetBufferType0x21();
|
||||
(ulong position, ulong size) = context.Request.GetBufferType0x21();
|
||||
|
||||
string deviceName = MemoryHelper.ReadAsciiString(context.Memory, position, size);
|
||||
string deviceName = MemoryHelper.ReadAsciiString(context.Memory, position, (long)size);
|
||||
|
||||
ResultCode result = _impl.GetAudioDeviceOutputVolume(deviceName, out float volume);
|
||||
|
||||
|
@ -212,13 +212,13 @@ namespace Ryujinx.HLE.HOS.Services.Audio.AudioRenderer
|
|||
{
|
||||
string name = _impl.GetActiveAudioDeviceName();
|
||||
|
||||
(long position, long size) = context.Request.GetBufferType0x22();
|
||||
(ulong position, ulong size) = context.Request.GetBufferType0x22();
|
||||
|
||||
byte[] deviceNameBuffer = Encoding.UTF8.GetBytes(name + '\0');
|
||||
|
||||
if ((ulong)deviceNameBuffer.Length <= (ulong)size)
|
||||
if ((ulong)deviceNameBuffer.Length <= size)
|
||||
{
|
||||
context.Memory.Write((ulong)position, deviceNameBuffer);
|
||||
context.Memory.Write(position, deviceNameBuffer);
|
||||
}
|
||||
else
|
||||
{
|
||||
|
@ -268,10 +268,10 @@ namespace Ryujinx.HLE.HOS.Services.Audio.AudioRenderer
|
|||
// GetAudioSystemMasterVolumeSetting(buffer<bytes, 5> name) -> f32
|
||||
public ResultCode GetAudioSystemMasterVolumeSetting(ServiceCtx context)
|
||||
{
|
||||
long position = context.Request.SendBuff[0].Position;
|
||||
long size = context.Request.SendBuff[0].Size;
|
||||
ulong position = context.Request.SendBuff[0].Position;
|
||||
ulong size = context.Request.SendBuff[0].Size;
|
||||
|
||||
string deviceName = MemoryHelper.ReadAsciiString(context.Memory, position, size);
|
||||
string deviceName = MemoryHelper.ReadAsciiString(context.Memory, position, (long)size);
|
||||
|
||||
ResultCode result = _impl.GetAudioSystemMasterVolumeSetting(deviceName, out float systemMasterVolume);
|
||||
|
||||
|
|
|
@ -57,16 +57,16 @@ namespace Ryujinx.HLE.HOS.Services.Audio.AudioRenderer
|
|||
// -> (buffer<nn::audio::detail::AudioRendererUpdateDataHeader, 6> output, buffer<nn::audio::detail::AudioRendererUpdateDataHeader, 6> performanceOutput)
|
||||
public ResultCode RequestUpdate(ServiceCtx context)
|
||||
{
|
||||
long inputPosition = context.Request.SendBuff[0].Position;
|
||||
long inputSize = context.Request.SendBuff[0].Size;
|
||||
ulong inputPosition = context.Request.SendBuff[0].Position;
|
||||
ulong inputSize = context.Request.SendBuff[0].Size;
|
||||
|
||||
long outputPosition = context.Request.ReceiveBuff[0].Position;
|
||||
long outputSize = context.Request.ReceiveBuff[0].Size;
|
||||
ulong outputPosition = context.Request.ReceiveBuff[0].Position;
|
||||
ulong outputSize = context.Request.ReceiveBuff[0].Size;
|
||||
|
||||
long performanceOutputPosition = context.Request.ReceiveBuff[1].Position;
|
||||
long performanceOutputSize = context.Request.ReceiveBuff[1].Size;
|
||||
ulong performanceOutputPosition = context.Request.ReceiveBuff[1].Position;
|
||||
ulong performanceOutputSize = context.Request.ReceiveBuff[1].Size;
|
||||
|
||||
ReadOnlyMemory<byte> input = context.Memory.GetSpan((ulong)inputPosition, (int)inputSize).ToArray();
|
||||
ReadOnlyMemory<byte> input = context.Memory.GetSpan(inputPosition, (int)inputSize).ToArray();
|
||||
|
||||
Memory<byte> output = new byte[outputSize];
|
||||
Memory<byte> performanceOutput = new byte[performanceOutputSize];
|
||||
|
@ -78,8 +78,8 @@ namespace Ryujinx.HLE.HOS.Services.Audio.AudioRenderer
|
|||
|
||||
if (result == ResultCode.Success)
|
||||
{
|
||||
context.Memory.Write((ulong)outputPosition, output.Span);
|
||||
context.Memory.Write((ulong)performanceOutputPosition, performanceOutput.Span);
|
||||
context.Memory.Write(outputPosition, output.Span);
|
||||
context.Memory.Write(performanceOutputPosition, performanceOutput.Span);
|
||||
}
|
||||
else
|
||||
{
|
||||
|
@ -149,11 +149,11 @@ namespace Ryujinx.HLE.HOS.Services.Audio.AudioRenderer
|
|||
// -> (buffer<nn::audio::detail::AudioRendererUpdateDataHeader, 0x22> output, buffer<nn::audio::detail::AudioRendererUpdateDataHeader, 0x22> performanceOutput)
|
||||
public ResultCode RequestUpdateAuto(ServiceCtx context)
|
||||
{
|
||||
(long inputPosition, long inputSize) = context.Request.GetBufferType0x21();
|
||||
(long outputPosition, long outputSize) = context.Request.GetBufferType0x22(0);
|
||||
(long performanceOutputPosition, long performanceOutputSize) = context.Request.GetBufferType0x22(1);
|
||||
(ulong inputPosition, ulong inputSize) = context.Request.GetBufferType0x21();
|
||||
(ulong outputPosition, ulong outputSize) = context.Request.GetBufferType0x22(0);
|
||||
(ulong performanceOutputPosition, ulong performanceOutputSize) = context.Request.GetBufferType0x22(1);
|
||||
|
||||
ReadOnlyMemory<byte> input = context.Memory.GetSpan((ulong)inputPosition, (int)inputSize).ToArray();
|
||||
ReadOnlyMemory<byte> input = context.Memory.GetSpan(inputPosition, (int)inputSize).ToArray();
|
||||
|
||||
Memory<byte> output = new byte[outputSize];
|
||||
Memory<byte> performanceOutput = new byte[performanceOutputSize];
|
||||
|
@ -165,8 +165,8 @@ namespace Ryujinx.HLE.HOS.Services.Audio.AudioRenderer
|
|||
|
||||
if (result == ResultCode.Success)
|
||||
{
|
||||
context.Memory.Write((ulong)outputPosition, output.Span);
|
||||
context.Memory.Write((ulong)performanceOutputPosition, performanceOutput.Span);
|
||||
context.Memory.Write(outputPosition, output.Span);
|
||||
context.Memory.Write(performanceOutputPosition, performanceOutput.Span);
|
||||
}
|
||||
|
||||
return result;
|
||||
|
|
|
@ -106,24 +106,24 @@ namespace Ryujinx.HLE.HOS.Services.Audio.HardwareOpusDecoderManager
|
|||
{
|
||||
ResultCode result;
|
||||
|
||||
long inPosition = context.Request.SendBuff[0].Position;
|
||||
long inSize = context.Request.SendBuff[0].Size;
|
||||
long outputPosition = context.Request.ReceiveBuff[0].Position;
|
||||
long outputSize = context.Request.ReceiveBuff[0].Size;
|
||||
ulong inPosition = context.Request.SendBuff[0].Position;
|
||||
ulong inSize = context.Request.SendBuff[0].Size;
|
||||
ulong outputPosition = context.Request.ReceiveBuff[0].Position;
|
||||
ulong outputSize = context.Request.ReceiveBuff[0].Size;
|
||||
|
||||
byte[] buffer = new byte[inSize];
|
||||
|
||||
context.Memory.Read((ulong)inPosition, buffer);
|
||||
context.Memory.Read(inPosition, buffer);
|
||||
|
||||
using (BinaryReader inputStream = new BinaryReader(new MemoryStream(buffer)))
|
||||
{
|
||||
result = DecodeInterleavedInternal(inputStream, out short[] outPcmData, outputSize, out uint outConsumed, out int outSamples);
|
||||
result = DecodeInterleavedInternal(inputStream, out short[] outPcmData, (long)outputSize, out uint outConsumed, out int outSamples);
|
||||
|
||||
if (result == ResultCode.Success)
|
||||
{
|
||||
byte[] pcmDataBytes = new byte[outPcmData.Length * sizeof(short)];
|
||||
Buffer.BlockCopy(outPcmData, 0, pcmDataBytes, 0, pcmDataBytes.Length);
|
||||
context.Memory.Write((ulong)outputPosition, pcmDataBytes);
|
||||
context.Memory.Write(outputPosition, pcmDataBytes);
|
||||
|
||||
context.ResponseData.Write(outConsumed);
|
||||
context.ResponseData.Write(outSamples);
|
||||
|
@ -139,24 +139,24 @@ namespace Ryujinx.HLE.HOS.Services.Audio.HardwareOpusDecoderManager
|
|||
{
|
||||
ResultCode result;
|
||||
|
||||
long inPosition = context.Request.SendBuff[0].Position;
|
||||
long inSize = context.Request.SendBuff[0].Size;
|
||||
long outputPosition = context.Request.ReceiveBuff[0].Position;
|
||||
long outputSize = context.Request.ReceiveBuff[0].Size;
|
||||
ulong inPosition = context.Request.SendBuff[0].Position;
|
||||
ulong inSize = context.Request.SendBuff[0].Size;
|
||||
ulong outputPosition = context.Request.ReceiveBuff[0].Position;
|
||||
ulong outputSize = context.Request.ReceiveBuff[0].Size;
|
||||
|
||||
byte[] buffer = new byte[inSize];
|
||||
|
||||
context.Memory.Read((ulong)inPosition, buffer);
|
||||
context.Memory.Read(inPosition, buffer);
|
||||
|
||||
using (BinaryReader inputStream = new BinaryReader(new MemoryStream(buffer)))
|
||||
{
|
||||
result = DecodeInterleavedInternal(inputStream, out short[] outPcmData, outputSize, out uint outConsumed, out int outSamples);
|
||||
result = DecodeInterleavedInternal(inputStream, out short[] outPcmData, (long)outputSize, out uint outConsumed, out int outSamples);
|
||||
|
||||
if (result == ResultCode.Success)
|
||||
{
|
||||
byte[] pcmDataBytes = new byte[outPcmData.Length * sizeof(short)];
|
||||
Buffer.BlockCopy(outPcmData, 0, pcmDataBytes, 0, pcmDataBytes.Length);
|
||||
context.Memory.Write((ulong)outputPosition, pcmDataBytes);
|
||||
context.Memory.Write(outputPosition, pcmDataBytes);
|
||||
|
||||
context.ResponseData.Write(outConsumed);
|
||||
context.ResponseData.Write(outSamples);
|
||||
|
@ -177,24 +177,24 @@ namespace Ryujinx.HLE.HOS.Services.Audio.HardwareOpusDecoderManager
|
|||
|
||||
_reset = context.RequestData.ReadBoolean();
|
||||
|
||||
long inPosition = context.Request.SendBuff[0].Position;
|
||||
long inSize = context.Request.SendBuff[0].Size;
|
||||
long outputPosition = context.Request.ReceiveBuff[0].Position;
|
||||
long outputSize = context.Request.ReceiveBuff[0].Size;
|
||||
ulong inPosition = context.Request.SendBuff[0].Position;
|
||||
ulong inSize = context.Request.SendBuff[0].Size;
|
||||
ulong outputPosition = context.Request.ReceiveBuff[0].Position;
|
||||
ulong outputSize = context.Request.ReceiveBuff[0].Size;
|
||||
|
||||
byte[] buffer = new byte[inSize];
|
||||
|
||||
context.Memory.Read((ulong)inPosition, buffer);
|
||||
context.Memory.Read(inPosition, buffer);
|
||||
|
||||
using (BinaryReader inputStream = new BinaryReader(new MemoryStream(buffer)))
|
||||
{
|
||||
result = DecodeInterleavedInternal(inputStream, out short[] outPcmData, outputSize, out uint outConsumed, out int outSamples);
|
||||
result = DecodeInterleavedInternal(inputStream, out short[] outPcmData, (long)outputSize, out uint outConsumed, out int outSamples);
|
||||
|
||||
if (result == ResultCode.Success)
|
||||
{
|
||||
byte[] pcmDataBytes = new byte[outPcmData.Length * sizeof(short)];
|
||||
Buffer.BlockCopy(outPcmData, 0, pcmDataBytes, 0, pcmDataBytes.Length);
|
||||
context.Memory.Write((ulong)outputPosition, pcmDataBytes);
|
||||
context.Memory.Write(outputPosition, pcmDataBytes);
|
||||
|
||||
context.ResponseData.Write(outConsumed);
|
||||
context.ResponseData.Write(outSamples);
|
||||
|
@ -215,24 +215,24 @@ namespace Ryujinx.HLE.HOS.Services.Audio.HardwareOpusDecoderManager
|
|||
|
||||
_reset = context.RequestData.ReadBoolean();
|
||||
|
||||
long inPosition = context.Request.SendBuff[0].Position;
|
||||
long inSize = context.Request.SendBuff[0].Size;
|
||||
long outputPosition = context.Request.ReceiveBuff[0].Position;
|
||||
long outputSize = context.Request.ReceiveBuff[0].Size;
|
||||
ulong inPosition = context.Request.SendBuff[0].Position;
|
||||
ulong inSize = context.Request.SendBuff[0].Size;
|
||||
ulong outputPosition = context.Request.ReceiveBuff[0].Position;
|
||||
ulong outputSize = context.Request.ReceiveBuff[0].Size;
|
||||
|
||||
byte[] buffer = new byte[inSize];
|
||||
|
||||
context.Memory.Read((ulong)inPosition, buffer);
|
||||
context.Memory.Read(inPosition, buffer);
|
||||
|
||||
using (BinaryReader inputStream = new BinaryReader(new MemoryStream(buffer)))
|
||||
{
|
||||
result = DecodeInterleavedInternal(inputStream, out short[] outPcmData, outputSize, out uint outConsumed, out int outSamples);
|
||||
result = DecodeInterleavedInternal(inputStream, out short[] outPcmData, (long)outputSize, out uint outConsumed, out int outSamples);
|
||||
|
||||
if (result == ResultCode.Success)
|
||||
{
|
||||
byte[] pcmDataBytes = new byte[outPcmData.Length * sizeof(short)];
|
||||
Buffer.BlockCopy(outPcmData, 0, pcmDataBytes, 0, pcmDataBytes.Length);
|
||||
context.Memory.Write((ulong)outputPosition, pcmDataBytes);
|
||||
context.Memory.Write(outputPosition, pcmDataBytes);
|
||||
|
||||
context.ResponseData.Write(outConsumed);
|
||||
context.ResponseData.Write(outSamples);
|
||||
|
|
Loading…
Add table
Add a link
Reference in a new issue