-
Notifications
You must be signed in to change notification settings - Fork 3
/
Copy pathWriterQ.cpp
49 lines (45 loc) · 1.14 KB
/
WriterQ.cpp
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
#include "WriterQ.h"
#include <windows.h>
CWriterQ::CWriterQ( uint8 seconds ,
uint32 sps ,
uint8 quantumSize)
{
Quantum_Size = quantumSize ;
QueueSize = seconds*sps ;
writeIndex = 0 ;
pointer = new uint8 [QueueSize*Quantum_Size] ;
}
CWriterQ::~CWriterQ(void)
{
delete [] pointer;
}
void CWriterQ::Add2Queue(uint8* buffer,uint32 size)
{
uint32 remaining;
if(writeIndex + size < QueueSize)
{
memcpy(pointer+(Quantum_Size*writeIndex),buffer,size*Quantum_Size);
}
else
{
remaining = QueueSize - writeIndex;
memcpy(pointer+(Quantum_Size*writeIndex),buffer,remaining*Quantum_Size);
memcpy(pointer,buffer+(remaining*Quantum_Size),(size-remaining)*Quantum_Size);
}
writeIndex += size ;
writeIndex %= QueueSize ;
}
void CWriterQ::RemoveFromQueue(uint8* buffer,uint32 index,uint32 size)
{
uint32 remaining;
if( index + size < QueueSize )
{
memcpy(buffer,pointer+(index*Quantum_Size),size*Quantum_Size);
}
else
{
remaining = QueueSize - index;
memcpy(buffer,pointer+(index*Quantum_Size),remaining*Quantum_Size);
memcpy(buffer+(remaining*Quantum_Size),pointer,(size-remaining)*Quantum_Size);
}
}