35 lines
1.3 KiB
C#
35 lines
1.3 KiB
C#
using VoiceCat.Codec;
|
|||
|
|
using VoiceCat.Dsp;
|
||
|
|
|
||
|
|
namespace VoiceCat.Tests;
|
||
|
|
|
||
|
|
public sealed class MediaAllocationTests
|
||
|
|
{
|
||
|
|
[Fact]
|
||
|
|
public void SteadyStateCodecAndDspDoNotAllocateManagedMemory()
|
||
|
|
{
|
||
|
|
using var encoder = new OpusEncoder();
|
||
|
|
using var decoder = new OpusDecoder();
|
||
|
|
using var denoiser = new RnnoiseProcessor();
|
||
|
|
var vad = new EnergyVadProcessor();
|
||
|
|
short[] pcm = new short[960];
|
||
|
|
short[] decoded = new short[960];
|
||
|
|
byte[] packet = new byte[4000];
|
||
|
|
CodecTests.FillTone(pcm, 960, 1, 48000, 0);
|
||
|
|
for (int i = 0; i < 100; i++) Cycle(encoder, decoder, denoiser, vad, pcm, decoded, packet);
|
||
|
|
long before = GC.GetAllocatedBytesForCurrentThread();
|
||
|
|
for (int i = 0; i < 1000; i++) Cycle(encoder, decoder, denoiser, vad, pcm, decoded, packet);
|
||
|
|
long allocated = GC.GetAllocatedBytesForCurrentThread() - before;
|
||
|
|
Assert.Equal(0, allocated);
|
||
|
|
}
|
||
|
|
|
||
|
|
private static void Cycle(OpusEncoder encoder, OpusDecoder decoder, RnnoiseProcessor denoiser,
|
||
|
|
EnergyVadProcessor vad, short[] pcm, short[] decoded, byte[] packet)
|
||
|
|
{
|
||
|
|
int bytes = encoder.Encode(pcm, packet);
|
||
|
|
decoder.Decode(packet.AsSpan(0, bytes), decoded, 960);
|
||
|
|
denoiser.Process(decoded);
|
||
|
|
vad.Process(decoded);
|
||
|
|
}
|
||
|
|
}
|