aboutsummaryrefslogtreecommitdiff
path: root/src/Ryujinx.Audio/Renderer/Parameter
diff options
context:
space:
mode:
Diffstat (limited to 'src/Ryujinx.Audio/Renderer/Parameter')
-rw-r--r--src/Ryujinx.Audio/Renderer/Parameter/Effect/CompressorParameter.cs11
-rw-r--r--src/Ryujinx.Audio/Renderer/Parameter/Effect/CompressorStatistics.cs38
-rw-r--r--src/Ryujinx.Audio/Renderer/Parameter/ISplitterDestinationInParameter.cs5
-rw-r--r--src/Ryujinx.Audio/Renderer/Parameter/SplitterDestinationInParameterVersion1.cs9
-rw-r--r--src/Ryujinx.Audio/Renderer/Parameter/SplitterDestinationInParameterVersion2.cs9
5 files changed, 68 insertions, 4 deletions
diff --git a/src/Ryujinx.Audio/Renderer/Parameter/Effect/CompressorParameter.cs b/src/Ryujinx.Audio/Renderer/Parameter/Effect/CompressorParameter.cs
index b403f137..c00118e4 100644
--- a/src/Ryujinx.Audio/Renderer/Parameter/Effect/CompressorParameter.cs
+++ b/src/Ryujinx.Audio/Renderer/Parameter/Effect/CompressorParameter.cs
@@ -90,9 +90,16 @@ namespace Ryujinx.Audio.Renderer.Parameter.Effect
public bool MakeupGainEnabled;
/// <summary>
- /// Reserved/padding.
+ /// Indicate if the compressor effect should output statistics.
/// </summary>
- private Array2<byte> _reserved;
+ [MarshalAs(UnmanagedType.I1)]
+ public bool StatisticsEnabled;
+
+ /// <summary>
+ /// Indicate to the DSP that the user did a statistics reset.
+ /// </summary>
+ [MarshalAs(UnmanagedType.I1)]
+ public bool StatisticsReset;
/// <summary>
/// Check if the <see cref="ChannelCount"/> is valid.
diff --git a/src/Ryujinx.Audio/Renderer/Parameter/Effect/CompressorStatistics.cs b/src/Ryujinx.Audio/Renderer/Parameter/Effect/CompressorStatistics.cs
new file mode 100644
index 00000000..65335e2d
--- /dev/null
+++ b/src/Ryujinx.Audio/Renderer/Parameter/Effect/CompressorStatistics.cs
@@ -0,0 +1,38 @@
+using Ryujinx.Common.Memory;
+using System.Runtime.InteropServices;
+
+namespace Ryujinx.Audio.Renderer.Parameter.Effect
+{
+ /// <summary>
+ /// Effect result state for <seealso cref="Common.EffectType.Compressor"/>.
+ /// </summary>
+ [StructLayout(LayoutKind.Sequential, Pack = 1)]
+ public struct CompressorStatistics
+ {
+ /// <summary>
+ /// Maximum input mean value since last reset.
+ /// </summary>
+ public float MaximumMean;
+
+ /// <summary>
+ /// Minimum output gain since last reset.
+ /// </summary>
+ public float MinimumGain;
+
+ /// <summary>
+ /// Last processed input sample, per channel.
+ /// </summary>
+ public Array6<float> LastSamples;
+
+ /// <summary>
+ /// Reset the statistics.
+ /// </summary>
+ /// <param name="channelCount">Number of channels to reset.</param>
+ public void Reset(ushort channelCount)
+ {
+ MaximumMean = 0.0f;
+ MinimumGain = 1.0f;
+ LastSamples.AsSpan()[..channelCount].Clear();
+ }
+ }
+}
diff --git a/src/Ryujinx.Audio/Renderer/Parameter/ISplitterDestinationInParameter.cs b/src/Ryujinx.Audio/Renderer/Parameter/ISplitterDestinationInParameter.cs
index 807232f2..7ee49f11 100644
--- a/src/Ryujinx.Audio/Renderer/Parameter/ISplitterDestinationInParameter.cs
+++ b/src/Ryujinx.Audio/Renderer/Parameter/ISplitterDestinationInParameter.cs
@@ -29,6 +29,11 @@ namespace Ryujinx.Audio.Renderer.Parameter
bool IsUsed { get; }
/// <summary>
+ /// Set to true to force resetting the previous mix volumes.
+ /// </summary>
+ bool ResetPrevVolume { get; }
+
+ /// <summary>
/// Mix buffer volumes.
/// </summary>
/// <remarks>Used when a splitter id is specified in the mix.</remarks>
diff --git a/src/Ryujinx.Audio/Renderer/Parameter/SplitterDestinationInParameterVersion1.cs b/src/Ryujinx.Audio/Renderer/Parameter/SplitterDestinationInParameterVersion1.cs
index 029c001e..f346efcb 100644
--- a/src/Ryujinx.Audio/Renderer/Parameter/SplitterDestinationInParameterVersion1.cs
+++ b/src/Ryujinx.Audio/Renderer/Parameter/SplitterDestinationInParameterVersion1.cs
@@ -38,9 +38,15 @@ namespace Ryujinx.Audio.Renderer.Parameter
public bool IsUsed;
/// <summary>
+ /// Set to true to force resetting the previous mix volumes.
+ /// </summary>
+ [MarshalAs(UnmanagedType.I1)]
+ public bool ResetPrevVolume;
+
+ /// <summary>
/// Reserved/padding.
/// </summary>
- private unsafe fixed byte _reserved[3];
+ private unsafe fixed byte _reserved[2];
[StructLayout(LayoutKind.Sequential, Size = sizeof(float) * Constants.MixBufferCountMax, Pack = 1)]
private struct MixArray { }
@@ -58,6 +64,7 @@ namespace Ryujinx.Audio.Renderer.Parameter
readonly Array2<BiquadFilterParameter> ISplitterDestinationInParameter.BiquadFilters => default;
readonly bool ISplitterDestinationInParameter.IsUsed => IsUsed;
+ readonly bool ISplitterDestinationInParameter.ResetPrevVolume => ResetPrevVolume;
/// <summary>
/// The expected constant of any input header.
diff --git a/src/Ryujinx.Audio/Renderer/Parameter/SplitterDestinationInParameterVersion2.cs b/src/Ryujinx.Audio/Renderer/Parameter/SplitterDestinationInParameterVersion2.cs
index 312be8b7..1d867919 100644
--- a/src/Ryujinx.Audio/Renderer/Parameter/SplitterDestinationInParameterVersion2.cs
+++ b/src/Ryujinx.Audio/Renderer/Parameter/SplitterDestinationInParameterVersion2.cs
@@ -43,9 +43,15 @@ namespace Ryujinx.Audio.Renderer.Parameter
public bool IsUsed;
/// <summary>
+ /// Set to true to force resetting the previous mix volumes.
+ /// </summary>
+ [MarshalAs(UnmanagedType.I1)]
+ public bool ResetPrevVolume;
+
+ /// <summary>
/// Reserved/padding.
/// </summary>
- private unsafe fixed byte _reserved[11];
+ private unsafe fixed byte _reserved[10];
[StructLayout(LayoutKind.Sequential, Size = sizeof(float) * Constants.MixBufferCountMax, Pack = 1)]
private struct MixArray { }
@@ -63,6 +69,7 @@ namespace Ryujinx.Audio.Renderer.Parameter
readonly Array2<BiquadFilterParameter> ISplitterDestinationInParameter.BiquadFilters => BiquadFilters;
readonly bool ISplitterDestinationInParameter.IsUsed => IsUsed;
+ readonly bool ISplitterDestinationInParameter.ResetPrevVolume => ResetPrevVolume;
/// <summary>
/// The expected constant of any input header.