Extract CRingBuffer

This commit is contained in:
Flamefire committed 2014-05-01 00:15:47 +02:00
1 parent a46681c22b
commit 2e209e0f70
3 files changed
+80 -77

No files matched your search

@@ -0,0 +1,79 @@
using System;
namespace Vocaluxe.Lib.Sound.Playback
{
class CRingBuffer
{
private readonly byte[] _Data;
private readonly int _Size;
private int _ReadPos;
private int _WritePos;
private int _BytesNotRead;
public int BytesNotRead
{
get { return _BytesNotRead; }
}
public CRingBuffer(int size)
{
_Size = size;
_Data = new byte[size];
Reset();
}
public void Reset()
{
_ReadPos = 0;
_WritePos = 0;
_BytesNotRead = 0;
}
public void Write(byte[] data)
{
int start = 0;
int end = data.Length;
if (end - start > _Size)
start = end - _Size;
int lenTotal = end - start;
int len = Math.Min(lenTotal, _Size - _WritePos);
Buffer.BlockCopy(data, start, _Data, _WritePos, len);
_WritePos += len;
if (_WritePos >= _Size)
{
_WritePos = 0;
start += len;
len = end - start;
if (len > 0)
{
Buffer.BlockCopy(data, start, _Data, _WritePos, len);
_WritePos += len;
}
}
_BytesNotRead += lenTotal;
}
public void Read(byte[] data)
{
int lenTotal = Math.Min(data.Length, _BytesNotRead);
if (lenTotal == 0)
return;
int len = Math.Min(lenTotal, _Size - _ReadPos);
Buffer.BlockCopy(_Data, _ReadPos, data, 0, len);
_ReadPos += len;
if (_ReadPos >= _Size)
{
_ReadPos = 0;
int start = len;
len = lenTotal - len;
if (len > 0)
{
Buffer.BlockCopy(_Data, _ReadPos, data, start, len);
_ReadPos += len;
}
}
_BytesNotRead -= lenTotal;
}
}
}
-77
View File
@@ -15,8 +15,6 @@
// along with Vocaluxe. If not, see <http://www.gnu.org/licenses/>.
#endregion
using System;
namespace Vocaluxe.Lib.Sound.Playback
{
public enum EStreamAction
@@ -75,79 +73,4 @@ namespace Vocaluxe.Lib.Sound.Playback
void Update();
#endregion Stream Handling
}
class CRingBuffer
{
private readonly byte[] _Data;
private readonly int _Size;
private int _ReadPos;
private int _WritePos;
private int _BytesNotRead;
public int BytesNotRead
{
get { return _BytesNotRead; }
}
public CRingBuffer(int size)
{
_Size = size;
_Data = new byte[size];
Reset();
}
public void Reset()
{
_ReadPos = 0;
_WritePos = 0;
_BytesNotRead = 0;
}
public void Write(byte[] data)
{
int start = 0;
int end = data.Length;
if (end - start > _Size)
start = end - _Size;
int lenTotal = end - start;
int len = Math.Min(lenTotal, _Size - _WritePos);
Buffer.BlockCopy(data, start, _Data, _WritePos, len);
_WritePos += len;
if (_WritePos >= _Size)
{
_WritePos = 0;
start += len;
len = end - start;
if (len > 0)
{
Buffer.BlockCopy(data, start, _Data, _WritePos, len);
_WritePos += len;
}
}
_BytesNotRead += lenTotal;
}
public void Read(byte[] data)
{
int lenTotal = Math.Min(data.Length, _BytesNotRead);
if (lenTotal == 0)
return;
int len = Math.Min(lenTotal, _Size - _ReadPos);
Buffer.BlockCopy(_Data, _ReadPos, data, 0, len);
_ReadPos += len;
if (_ReadPos >= _Size)
{
_ReadPos = 0;
int start = len;
len = lenTotal - len;
if (len > 0)
{
Buffer.BlockCopy(_Data, _ReadPos, data, start, len);
_ReadPos += len;
}
}
_BytesNotRead -= lenTotal;
}
}
}
+1
View File
@@ -219,6 +219,7 @@
<Compile Include="Base\CPlaylistElement.cs" />
<Compile Include="Base\CRecord.cs" />
<Compile Include="COSFunctions.cs" />
<Compile Include="Lib\Sound\Playback\CRingBuffer.cs" />
<Compile Include="Lib\Sound\Playback\GstreamerSharp\CGstreamerSharpAudioStream.cs" />
<Compile Include="Lib\Sound\Playback\OpenAL\COpenAlStream.cs" />
<Compile Include="Lib\Sound\Playback\PortAudio\CPortAudioStream.cs" />