diff options
author | Mary-nyan <mary@mary.zone> | 2022-12-06 15:04:25 +0100 |
---|---|---|
committer | GitHub <noreply@github.com> | 2022-12-06 15:04:25 +0100 |
commit | 40311310d1a6d2fde2ee9f04bfa1f21ced7cbee2 (patch) | |
tree | beec52c0a73006552aae3b1d9538240ddc89e6ae /Ryujinx.Audio/Renderer/Server/Effect/CompressorEffect.cs | |
parent | dde9bb5c69d2e1a70df82af8accd3d01fb94b78d (diff) |
amadeus: Add missing compressor effect from REV11 (#4010)1.1.435
* amadeus: Add missing compressor effect from REV11
This was in my reversing notes but seems I completely forgot to
implement it
Also took the opportunity to simplify the Limiter effect a bit.
* Remove some outdated comment
* Address gdkchan's comments
Diffstat (limited to 'Ryujinx.Audio/Renderer/Server/Effect/CompressorEffect.cs')
-rw-r--r-- | Ryujinx.Audio/Renderer/Server/Effect/CompressorEffect.cs | 67 |
1 files changed, 67 insertions, 0 deletions
diff --git a/Ryujinx.Audio/Renderer/Server/Effect/CompressorEffect.cs b/Ryujinx.Audio/Renderer/Server/Effect/CompressorEffect.cs new file mode 100644 index 00000000..f4e5ae82 --- /dev/null +++ b/Ryujinx.Audio/Renderer/Server/Effect/CompressorEffect.cs @@ -0,0 +1,67 @@ +using Ryujinx.Audio.Renderer.Common; +using Ryujinx.Audio.Renderer.Dsp.State; +using Ryujinx.Audio.Renderer.Parameter.Effect; +using Ryujinx.Audio.Renderer.Parameter; +using Ryujinx.Audio.Renderer.Server.MemoryPool; +using System; +using System.Diagnostics; +using System.Runtime.InteropServices; + +namespace Ryujinx.Audio.Renderer.Server.Effect +{ + /// <summary> + /// Server state for a compressor effect. + /// </summary> + public class CompressorEffect : BaseEffect + { + /// <summary> + /// The compressor parameter. + /// </summary> + public CompressorParameter Parameter; + + /// <summary> + /// The compressor state. + /// </summary> + public Memory<CompressorState> State { get; } + + /// <summary> + /// Create a new <see cref="CompressorEffect"/>. + /// </summary> + public CompressorEffect() + { + State = new CompressorState[1]; + } + + public override EffectType TargetEffectType => EffectType.Compressor; + + public override ulong GetWorkBuffer(int index) + { + return GetSingleBuffer(); + } + + public override void Update(out BehaviourParameter.ErrorInfo updateErrorInfo, ref EffectInParameterVersion1 parameter, PoolMapper mapper) + { + // Nintendo doesn't do anything here but we still require updateErrorInfo to be initialised. + updateErrorInfo = new BehaviourParameter.ErrorInfo(); + } + + public override void Update(out BehaviourParameter.ErrorInfo updateErrorInfo, ref EffectInParameterVersion2 parameter, PoolMapper mapper) + { + Debug.Assert(IsTypeValid(ref parameter)); + + UpdateParameterBase(ref parameter); + + Parameter = MemoryMarshal.Cast<byte, CompressorParameter>(parameter.SpecificData)[0]; + IsEnabled = parameter.IsEnabled; + + updateErrorInfo = new BehaviourParameter.ErrorInfo(); + } + + public override void UpdateForCommandGeneration() + { + UpdateUsageStateForCommandGeneration(); + + Parameter.Status = UsageState.Enabled; + } + } +} |