2022-04-06 09:12:38 +02:00
|
|
|
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}");
|
|
|
|
}
|
|
|
|
}
|
|
|
|
}
|
|
|
|
}
|
2022-07-25 20:46:33 +02:00
|
|
|
}
|