55 lines
1.5 KiB
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;
|
|
}
|
|
}
|