Files
NxtAR-cam/src/ve/ucv/ciens/ccg/nxtcam/camera/CameraImageMonitor.java

55 lines
1.5 KiB
Java

package ve.ucv.ciens.ccg.nxtcam.camera;
import ve.ucv.ciens.ccg.nxtcam.utils.Logger;
public class CameraImageMonitor{
private final String TAG = "CAM_MONITOR";
private final String CLASS_NAME = CameraImageMonitor.class.getSimpleName();
private byte[] image;
private boolean imgChanged;
private CameraImageMonitor(){
imgChanged = false;
}
private static class SingletonHolder{
public static final CameraImageMonitor INSTANCE = new CameraImageMonitor();
}
public static CameraImageMonitor getInstance(){
return SingletonHolder.INSTANCE;
}
public void setImageData(byte[] image){
Logger.log_d(TAG, CLASS_NAME + ".setImageData() :: Copying new image.");
synchronized(image){
this.image = new byte[image.length];
System.arraycopy(image, 0, this.image, 0, image.length);
imgChanged = true;
image.notifyAll();
}
Logger.log_d(TAG, CLASS_NAME + ".setImageData() :: Data copy finished.");
}
public byte[] getImageData(){
byte[] returnImg;
Logger.log_d(TAG, CLASS_NAME + ".getImageData() :: Entry point.");
synchronized(image){
while(!imgChanged){
Logger.log_d(TAG, CLASS_NAME + ".getImageData() :: Waiting for new data.");
try{ image.wait(); }catch(InterruptedException ie){}
}
Logger.log_d(TAG, CLASS_NAME + ".getImageData() :: Retrieving new data.");
returnImg = image.clone();
imgChanged = false;
}
Logger.log_d(TAG, CLASS_NAME + ".getImageData() :: New data retreived.");
return returnImg;
}
public synchronized boolean hasChanged(){
return imgChanged;
}
}