package org.mobicents.media.server.impl.dsp.audio.g729;
/**
* This is just a buffer that stores temporary info. FIFO/old info get's overwritten.
* Used to compensate irregularly delivered RTP packets.
*
* @author vralev
*
*/
public class CircularBuffer {
private byte[] buffer;
private int cursor = 0;
private int availableData = 0;
public CircularBuffer(int size) {
buffer = new byte[size];
}
synchronized public void addData(byte[] data) {
boolean zeros = false;
//for(int q=0; q<data.length; q++) if(data[q]!=0) zeros = false;
if(!zeros) {
for(int q=0; q<data.length; q++) {
buffer[(cursor+q)%buffer.length] = data[q];
}
availableData += data.length;
if(availableData > buffer.length) availableData = buffer.length;
}
}
synchronized public byte[] getData(int size) {
if(availableData<size) return null;
byte[] data = new byte[size];
for(int q=0; q<data.length; q++) {
data[q] = buffer[(cursor+q)%buffer.length];
}
cursor = (cursor + data.length)%buffer.length;
availableData -= size;
return data;
}
}