/*
* To change this template, choose Tools | Templates
* and open the template in the editor.
*/
package webcamstudio.mixers;
import java.util.ArrayList;
import static webcamstudio.util.Tools.sleep;
/**
*
* @author patrick
*/
public class FrameBuffer {
private static final int BUFFER_SIZE = MasterMixer.BUFFER_SIZE;
private final ArrayList<Frame> buffer = new ArrayList<>();
private boolean abort = false;
private int currentIndex = 0;
private long frameCounter=0;
public FrameBuffer(int imgWidth, int imgHeight,int rate){
for (int i = 0;i<BUFFER_SIZE;i++){
Frame frame = new Frame(imgWidth,imgHeight,rate);
buffer.add(frame);
}
}
public void push(Frame f){
while (!abort && frameCounter >0) {
sleep(30);
}
currentIndex++;
currentIndex %= BUFFER_SIZE;
buffer.get(currentIndex).copyFrame(f); //.copyFrame(f)
frameCounter++;
}
public void doneUpdate(){
currentIndex++;
currentIndex %= BUFFER_SIZE;
frameCounter++;
}
public Frame getFrameToUpdate(){
while (!abort && frameCounter >0) {
sleep(30);
}
return buffer.get((currentIndex+1)%BUFFER_SIZE);
}
public Frame pop(){
while(!abort && frameCounter < 1){
sleep(10);
}
frameCounter--;
return buffer.get(currentIndex);
}
public void clear(){
abort=false;
currentIndex=0;
}
public void abort(){
abort=true;
}
}