mirror of
https://github.com/Ryujinx/Ryujinx.git
synced 2024-12-30 05:36:00 +00:00
1825bd87b4
This is the first commit of a series of reformat around the codebase as discussed internally some weeks ago. This project being one that isn't touched that much, it shouldn't cause conflict with any opened PRs.
84 lines
No EOL
2.4 KiB
C#
84 lines
No EOL
2.4 KiB
C#
using System;
|
|
using System.Diagnostics;
|
|
|
|
namespace Ryujinx.Audio.Renderer.Server.Upsampler
|
|
{
|
|
/// <summary>
|
|
/// Upsampler manager.
|
|
/// </summary>
|
|
public class UpsamplerManager
|
|
{
|
|
/// <summary>
|
|
/// Work buffer for upsampler.
|
|
/// </summary>
|
|
private Memory<float> _upSamplerWorkBuffer;
|
|
|
|
/// <summary>
|
|
/// Global lock of the object.
|
|
/// </summary>
|
|
private object Lock = new object();
|
|
|
|
/// <summary>
|
|
/// The upsamplers instances.
|
|
/// </summary>
|
|
private UpsamplerState[] _upsamplers;
|
|
|
|
/// <summary>
|
|
/// The count of upsamplers.
|
|
/// </summary>
|
|
private uint _count;
|
|
|
|
/// <summary>
|
|
/// Create a new <see cref="UpsamplerManager"/>.
|
|
/// </summary>
|
|
/// <param name="upSamplerWorkBuffer">Work buffer for upsampler.</param>
|
|
/// <param name="count">The count of upsamplers.</param>
|
|
public UpsamplerManager(Memory<float> upSamplerWorkBuffer, uint count)
|
|
{
|
|
_upSamplerWorkBuffer = upSamplerWorkBuffer;
|
|
_count = count;
|
|
|
|
_upsamplers = new UpsamplerState[_count];
|
|
}
|
|
|
|
/// <summary>
|
|
/// Allocate a new <see cref="UpsamplerState"/>.
|
|
/// </summary>
|
|
/// <returns>A new <see cref="UpsamplerState"/> or null if out of memory.</returns>
|
|
public UpsamplerState Allocate()
|
|
{
|
|
int workBufferOffset = 0;
|
|
|
|
lock (Lock)
|
|
{
|
|
for (int i = 0; i < _count; i++)
|
|
{
|
|
if (_upsamplers[i] == null)
|
|
{
|
|
_upsamplers[i] = new UpsamplerState(this, i, _upSamplerWorkBuffer.Slice(workBufferOffset, Constants.UpSampleEntrySize), Constants.TargetSampleCount);
|
|
|
|
return _upsamplers[i];
|
|
}
|
|
|
|
workBufferOffset += Constants.UpSampleEntrySize;
|
|
}
|
|
}
|
|
|
|
return null;
|
|
}
|
|
|
|
/// <summary>
|
|
/// Free a <see cref="UpsamplerState"/> at the given index.
|
|
/// </summary>
|
|
/// <param name="index">The index of the <see cref="UpsamplerState"/> to free.</param>
|
|
public void Free(int index)
|
|
{
|
|
lock (Lock)
|
|
{
|
|
Debug.Assert(_upsamplers[index] != null);
|
|
|
|
_upsamplers[index] = null;
|
|
}
|
|
}
|
|
}
|
|
} |