mirror of
https://github.com/claunia/cuetools.net.git
synced 2025-12-16 18:14:25 +00:00
Refactoring of CUETools.Codecs.
This commit is contained in:
142
CUETools.Codecs/AudioSamples.cs
Normal file
142
CUETools.Codecs/AudioSamples.cs
Normal file
@@ -0,0 +1,142 @@
|
||||
using System;
|
||||
|
||||
namespace CUETools.Codecs
|
||||
{
|
||||
public class AudioSamples
|
||||
{
|
||||
public const uint UINT32_MAX = 0xffffffff;
|
||||
|
||||
unsafe public static void Interlace(int* res, int* src1, int* src2, int n)
|
||||
{
|
||||
for (int i = n; i > 0; i--)
|
||||
{
|
||||
*(res++) = *(src1++);
|
||||
*(res++) = *(src2++);
|
||||
}
|
||||
}
|
||||
|
||||
unsafe public static void Deinterlace(int* dst1, int* dst2, int* src, int n)
|
||||
{
|
||||
for (int i = n; i > 0; i--)
|
||||
{
|
||||
*(dst1++) = *(src++);
|
||||
*(dst2++) = *(src++);
|
||||
}
|
||||
}
|
||||
|
||||
unsafe public static bool MemCmp(int* res, int* smp, int n)
|
||||
{
|
||||
for (int i = n; i > 0; i--)
|
||||
if (*(res++) != *(smp++))
|
||||
return true;
|
||||
return false;
|
||||
}
|
||||
|
||||
unsafe public static void MemCpy(uint* res, uint* smp, int n)
|
||||
{
|
||||
for (int i = n; i > 0; i--)
|
||||
*(res++) = *(smp++);
|
||||
}
|
||||
|
||||
unsafe public static void MemCpy(int* res, int* smp, int n)
|
||||
{
|
||||
for (int i = n; i > 0; i--)
|
||||
*(res++) = *(smp++);
|
||||
}
|
||||
|
||||
unsafe public static void MemCpy(long* res, long* smp, int n)
|
||||
{
|
||||
for (int i = n; i > 0; i--)
|
||||
*(res++) = *(smp++);
|
||||
}
|
||||
|
||||
unsafe public static void MemCpy(short* res, short* smp, int n)
|
||||
{
|
||||
for (int i = n; i > 0; i--)
|
||||
*(res++) = *(smp++);
|
||||
}
|
||||
|
||||
unsafe public static void MemCpy(byte* res, byte* smp, int n)
|
||||
{
|
||||
if ((((IntPtr)smp).ToInt64() & 7) == (((IntPtr)res).ToInt64() & 7) && n > 32)
|
||||
{
|
||||
int delta = (int)((8 - (((IntPtr)smp).ToInt64() & 7)) & 7);
|
||||
for (int i = delta; i > 0; i--)
|
||||
*(res++) = *(smp++);
|
||||
n -= delta;
|
||||
|
||||
MemCpy((long*)res, (long*)smp, n >> 3);
|
||||
int n8 = (n >> 3) << 3;
|
||||
n -= n8;
|
||||
smp += n8;
|
||||
res += n8;
|
||||
}
|
||||
if ((((IntPtr)smp).ToInt64() & 3) == (((IntPtr)res).ToInt64() & 3) && n > 16)
|
||||
{
|
||||
int delta = (int)((4 - (((IntPtr)smp).ToInt64() & 3)) & 3);
|
||||
for (int i = delta; i > 0; i--)
|
||||
*(res++) = *(smp++);
|
||||
n -= delta;
|
||||
|
||||
MemCpy((int*)res, (int*)smp, n >> 2);
|
||||
int n4 = (n >> 2) << 2;
|
||||
n -= n4;
|
||||
smp += n4;
|
||||
res += n4;
|
||||
}
|
||||
for (int i = n; i > 0; i--)
|
||||
*(res++) = *(smp++);
|
||||
}
|
||||
|
||||
unsafe public static void MemSet(int* res, int smp, int n)
|
||||
{
|
||||
for (int i = n; i > 0; i--)
|
||||
*(res++) = smp;
|
||||
}
|
||||
|
||||
unsafe public static void MemSet(long* res, long smp, int n)
|
||||
{
|
||||
for (int i = n; i > 0; i--)
|
||||
*(res++) = smp;
|
||||
}
|
||||
|
||||
unsafe public static void MemSet(byte* res, byte smp, int n)
|
||||
{
|
||||
if (IntPtr.Size == 8 && (((IntPtr)res).ToInt64() & 7) == 0 && smp == 0 && n > 8)
|
||||
{
|
||||
MemSet((long*)res, 0, n >> 3);
|
||||
int n8 = (n >> 3) << 3;
|
||||
n -= n8;
|
||||
res += n8;
|
||||
}
|
||||
if ((((IntPtr)res).ToInt64() & 3) == 0 && smp == 0 && n > 4)
|
||||
{
|
||||
MemSet((int*)res, 0, n >> 2);
|
||||
int n4 = (n >> 2) << 2;
|
||||
n -= n4;
|
||||
res += n4;
|
||||
}
|
||||
for (int i = n; i > 0; i--)
|
||||
*(res++) = smp;
|
||||
}
|
||||
|
||||
unsafe public static void MemSet(byte[] res, byte smp, int offs, int n)
|
||||
{
|
||||
fixed (byte* pres = &res[offs])
|
||||
MemSet(pres, smp, n);
|
||||
}
|
||||
|
||||
unsafe public static void MemSet(int[] res, int smp, int offs, int n)
|
||||
{
|
||||
fixed (int* pres = &res[offs])
|
||||
MemSet(pres, smp, n);
|
||||
}
|
||||
|
||||
unsafe public static void MemSet(long[] res, long smp, int offs, int n)
|
||||
{
|
||||
fixed (long* pres = &res[offs])
|
||||
MemSet(pres, smp, n);
|
||||
}
|
||||
}
|
||||
|
||||
}
|
||||
Reference in New Issue
Block a user