48 ring->frame_size = frame_size;
49 ring->length = length+1;
72 s = (ring->write_pos-ring->read_pos+ring->length) % ring->length;
84 remain = (ring->read_pos-ring->write_pos-1+ring->length) % ring->length;
85 if(remain < len) len = remain;
89 remain = ring->length - ring->write_pos;
92 memcpy(ring->mem+(ring->write_pos*ring->frame_size), data,
93 remain*ring->frame_size);
94 memcpy(ring->mem, data+(remain*ring->frame_size),
95 (len-remain)*ring->frame_size);
98 memcpy(ring->mem+(ring->write_pos*ring->frame_size), data,
99 len*ring->frame_size);
101 ring->write_pos +=
len;
102 ring->write_pos %= ring->length;
114 remain = ring->length - ring->read_pos;
117 memcpy(data, ring->mem+(ring->read_pos*ring->frame_size), remain*ring->frame_size);
118 memcpy(data+(remain*ring->frame_size), ring->mem, (len-remain)*ring->frame_size);
121 memcpy(data, ring->mem+(ring->read_pos*ring->frame_size), len*ring->frame_size);
123 ring->read_pos +=
len;
124 ring->read_pos %= ring->length;
ALsizei RingBufferSize(RingBuffer *ring)
void InitializeCriticalSection(CRITICAL_SECTION *cs)
struct RingBuffer RingBuffer
GLint GLenum GLsizei GLsizei GLsizei GLint GLsizei const GLvoid * data
RingBuffer * CreateRingBuffer(ALsizei frame_size, ALsizei length)
pthread_mutex_t CRITICAL_SECTION
void EnterCriticalSection(CRITICAL_SECTION *cs)
void DeleteCriticalSection(CRITICAL_SECTION *cs)
void ReadRingBuffer(RingBuffer *ring, ALubyte *data, ALsizei len)
void LeaveCriticalSection(CRITICAL_SECTION *cs)
void DestroyRingBuffer(RingBuffer *ring)
void WriteRingBuffer(RingBuffer *ring, const ALubyte *data, ALsizei len)