mirror of
https://github.com/Ryujinx/Ryujinx.git
synced 2024-10-21 04:59:59 +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.
63 lines
2.4 KiB
C#
63 lines
2.4 KiB
C#
using Ryujinx.Audio.Renderer.Dsp.State;
|
|
using Ryujinx.Audio.Renderer.Parameter;
|
|
using System;
|
|
|
|
namespace Ryujinx.Audio.Renderer.Dsp.Command
|
|
{
|
|
public class GroupedBiquadFilterCommand : ICommand
|
|
{
|
|
public bool Enabled { get; set; }
|
|
|
|
public int NodeId { get; }
|
|
|
|
public CommandType CommandType => CommandType.GroupedBiquadFilter;
|
|
|
|
public ulong EstimatedProcessingTime { get; set; }
|
|
|
|
private BiquadFilterParameter[] _parameters;
|
|
private Memory<BiquadFilterState> _biquadFilterStates;
|
|
private int _inputBufferIndex;
|
|
private int _outputBufferIndex;
|
|
private bool[] _isInitialized;
|
|
|
|
public GroupedBiquadFilterCommand(int baseIndex, ReadOnlySpan<BiquadFilterParameter> filters, Memory<BiquadFilterState> biquadFilterStateMemory, int inputBufferOffset, int outputBufferOffset, ReadOnlySpan<bool> isInitialized, int nodeId)
|
|
{
|
|
_parameters = filters.ToArray();
|
|
_biquadFilterStates = biquadFilterStateMemory;
|
|
_inputBufferIndex = baseIndex + inputBufferOffset;
|
|
_outputBufferIndex = baseIndex + outputBufferOffset;
|
|
_isInitialized = isInitialized.ToArray();
|
|
|
|
Enabled = true;
|
|
NodeId = nodeId;
|
|
}
|
|
|
|
public void Process(CommandList context)
|
|
{
|
|
Span<BiquadFilterState> states = _biquadFilterStates.Span;
|
|
|
|
ReadOnlySpan<float> inputBuffer = context.GetBuffer(_inputBufferIndex);
|
|
Span<float> outputBuffer = context.GetBuffer(_outputBufferIndex);
|
|
|
|
for (int i = 0; i < _parameters.Length; i++)
|
|
{
|
|
if (!_isInitialized[i])
|
|
{
|
|
states[i] = new BiquadFilterState();
|
|
}
|
|
}
|
|
|
|
// NOTE: Nintendo also implements a hot path for double biquad filters, but no generic path when the command definition suggests it could be done.
|
|
// As such we currently only implement a generic path for simplicity.
|
|
// TODO: Implement double biquad filters fast path.
|
|
if (_parameters.Length == 1)
|
|
{
|
|
BiquadFilterHelper.ProcessBiquadFilter(ref _parameters[0], ref states[0], outputBuffer, inputBuffer, context.SampleCount);
|
|
}
|
|
else
|
|
{
|
|
BiquadFilterHelper.ProcessBiquadFilter(_parameters, states, outputBuffer, inputBuffer, context.SampleCount);
|
|
}
|
|
}
|
|
}
|
|
} |