From 3f4fb8f73a6635dbdca9dd11738c3a793f53ac65 Mon Sep 17 00:00:00 2001
From: Mary <mary@mary.zone>
Date: Wed, 6 Apr 2022 09:12:38 +0200
Subject: amadeus: Update to REV11 (#3230)

This should implement all ABI changes from REV11 on 14.0.0

As Nintendo changed the channel disposition for "legacy" effects (Delay, Reverb and Reverb 3D) to match the standard channel mapping, I took the liberty to just remap to the old disposition for now.
The proper changes will be handled at a later date with a complete rewriting of those 3 effects to be more readable (see https://github.com/Ryujinx/Ryujinx/pull/3205 for the first iteration of it).
---
 .../CommandProcessingTimeEstimatorVersion5.cs      | 253 +++++++++++++++++++++
 1 file changed, 253 insertions(+)
 create mode 100644 Ryujinx.Audio/Renderer/Server/CommandProcessingTimeEstimatorVersion5.cs

(limited to 'Ryujinx.Audio/Renderer/Server/CommandProcessingTimeEstimatorVersion5.cs')

diff --git a/Ryujinx.Audio/Renderer/Server/CommandProcessingTimeEstimatorVersion5.cs b/Ryujinx.Audio/Renderer/Server/CommandProcessingTimeEstimatorVersion5.cs
new file mode 100644
index 00000000..6b55a909
--- /dev/null
+++ b/Ryujinx.Audio/Renderer/Server/CommandProcessingTimeEstimatorVersion5.cs
@@ -0,0 +1,253 @@
+//
+// Copyright (c) 2019-2022 Ryujinx
+//
+// This program is free software: you can redistribute it and/or modify
+// it under the terms of the GNU Lesser General Public License as published by
+// the Free Software Foundation, either version 3 of the License, or
+// (at your option) any later version.
+//
+// This program is distributed in the hope that it will be useful,
+// but WITHOUT ANY WARRANTY; without even the implied warranty of
+// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+// GNU Lesser General Public License for more details.
+//
+// You should have received a copy of the GNU Lesser General Public License
+// along with this program.  If not, see <https://www.gnu.org/licenses/>.
+//
+
+using Ryujinx.Audio.Renderer.Dsp.Command;
+using System;
+using System.Diagnostics;
+
+namespace Ryujinx.Audio.Renderer.Server
+{
+    /// <summary>
+    /// <see cref="ICommandProcessingTimeEstimator"/> version 5. (added with REV11)
+    /// </summary>
+    public class CommandProcessingTimeEstimatorVersion5 : CommandProcessingTimeEstimatorVersion4
+    {
+        public CommandProcessingTimeEstimatorVersion5(uint sampleCount, uint bufferCount) : base(sampleCount, bufferCount) { }
+
+        public override uint Estimate(DelayCommand command)
+        {
+            Debug.Assert(_sampleCount == 160 || _sampleCount == 240);
+
+            if (_sampleCount == 160)
+            {
+                if (command.Enabled)
+                {
+                    switch (command.Parameter.ChannelCount)
+                    {
+                        case 1:
+                            return 8929;
+                        case 2:
+                            return 25501;
+                        case 4:
+                            return 47760;
+                        case 6:
+                            return 82203;
+                        default:
+                            throw new NotImplementedException($"{command.Parameter.ChannelCount}");
+                    }
+                }
+                else
+                {
+                    switch (command.Parameter.ChannelCount)
+                    {
+                        case 1:
+                            return (uint)1295.20f;
+                        case 2:
+                            return (uint)1213.60f;
+                        case 4:
+                            return (uint)942.03f;
+                        case 6:
+                            return (uint)1001.6f;
+                        default:
+                            throw new NotImplementedException($"{command.Parameter.ChannelCount}");
+                    }
+                }
+            }
+
+            if (command.Enabled)
+            {
+                switch (command.Parameter.ChannelCount)
+                {
+                    case 1:
+                        return 11941;
+                    case 2:
+                        return 37197;
+                    case 4:
+                        return 69750;
+                    case 6:
+                        return 12004;
+                    default:
+                        throw new NotImplementedException($"{command.Parameter.ChannelCount}");
+                }
+            }
+            else
+            {
+                switch (command.Parameter.ChannelCount)
+                {
+                    case 1:
+                        return (uint)997.67f;
+                    case 2:
+                        return (uint)977.63f;
+                    case 4:
+                        return (uint)792.31f;
+                    case 6:
+                        return (uint)875.43f;
+                    default:
+                        throw new NotImplementedException($"{command.Parameter.ChannelCount}");
+                }
+            }
+        }
+
+        public override uint Estimate(ReverbCommand command)
+        {
+            Debug.Assert(_sampleCount == 160 || _sampleCount == 240);
+
+            if (_sampleCount == 160)
+            {
+                if (command.Enabled)
+                {
+                    switch (command.Parameter.ChannelCount)
+                    {
+                        case 1:
+                            return 81475;
+                        case 2:
+                            return 84975;
+                        case 4:
+                            return 91625;
+                        case 6:
+                            return 95332;
+                        default:
+                            throw new NotImplementedException($"{command.Parameter.ChannelCount}");
+                    }
+                }
+                else
+                {
+                    switch (command.Parameter.ChannelCount)
+                    {
+                        case 1:
+                            return (uint)536.30f;
+                        case 2:
+                            return (uint)588.80f;
+                        case 4:
+                            return (uint)643.70f;
+                        case 6:
+                            return (uint)706.0f;
+                        default:
+                            throw new NotImplementedException($"{command.Parameter.ChannelCount}");
+                    }
+                }
+            }
+
+            if (command.Enabled)
+            {
+                switch (command.Parameter.ChannelCount)
+                {
+                    case 1:
+                        return 120170;
+                    case 2:
+                        return 125260;
+                    case 4:
+                        return 135750;
+                    case 6:
+                        return 141130;
+                    default:
+                        throw new NotImplementedException($"{command.Parameter.ChannelCount}");
+                }
+            }
+            else
+            {
+                switch (command.Parameter.ChannelCount)
+                {
+                    case 1:
+                        return (uint)617.64f;
+                    case 2:
+                        return (uint)659.54f;
+                    case 4:
+                        return (uint)711.44f;
+                    case 6:
+                        return (uint)778.07f;
+                    default:
+                        throw new NotImplementedException($"{command.Parameter.ChannelCount}");
+                }
+            }
+        }
+
+        public override uint Estimate(Reverb3dCommand command)
+        {
+            Debug.Assert(_sampleCount == 160 || _sampleCount == 240);
+
+            if (_sampleCount == 160)
+            {
+                if (command.Enabled)
+                {
+                    switch (command.Parameter.ChannelCount)
+                    {
+                        case 1:
+                            return 116750;
+                        case 2:
+                            return 125910;
+                        case 4:
+                            return 146340;
+                        case 6:
+                            return 165810;
+                        default:
+                            throw new NotImplementedException($"{command.Parameter.ChannelCount}");
+                    }
+                }
+                else
+                {
+                    switch (command.Parameter.ChannelCount)
+                    {
+                        case 1:
+                            return 735;
+                        case 2:
+                            return (uint)766.62f;
+                        case 4:
+                            return (uint)834.07f;
+                        case 6:
+                            return (uint)875.44f;
+                        default:
+                            throw new NotImplementedException($"{command.Parameter.ChannelCount}");
+                    }
+                }
+            }
+
+            if (command.Enabled)
+            {
+                switch (command.Parameter.ChannelCount)
+                {
+                    case 1:
+                        return 170290;
+                    case 2:
+                        return 183880;
+                    case 4:
+                        return 214700;
+                    case 6:
+                        return 243850;
+                    default:
+                        throw new NotImplementedException($"{command.Parameter.ChannelCount}");
+                }
+            }
+            else
+            {
+                switch (command.Parameter.ChannelCount)
+                {
+                    case 1:
+                        return (uint)508.47f;
+                    case 2:
+                        return (uint)582.45f;
+                    case 4:
+                        return (uint)626.42f;
+                    case 6:
+                        return (uint)682.47f;
+                    default:
+                        throw new NotImplementedException($"{command.Parameter.ChannelCount}");
+                }
+            }
+        }
+    }
+}
-- 
cgit v1.2.3-70-g09d2