2013-11-05 11:44:26 -04:30
|
|
|
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;
|
2013-11-28 15:48:17 -04:30
|
|
|
private boolean imgProduced;
|
|
|
|
|
private boolean imgConsumed;
|
2013-11-05 11:44:26 -04:30
|
|
|
|
|
|
|
|
private CameraImageMonitor(){
|
2013-11-28 15:48:17 -04:30
|
|
|
imgProduced = false;
|
|
|
|
|
imgConsumed = false;
|
2013-11-05 11:44:26 -04:30
|
|
|
}
|
|
|
|
|
|
|
|
|
|
private static class SingletonHolder{
|
|
|
|
|
public static final CameraImageMonitor INSTANCE = new CameraImageMonitor();
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
public static CameraImageMonitor getInstance(){
|
|
|
|
|
return SingletonHolder.INSTANCE;
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
public void setImageData(byte[] image){
|
2013-11-28 15:48:17 -04:30
|
|
|
if(imgConsumed){
|
|
|
|
|
Logger.log_d(TAG, CLASS_NAME + ".setImageData() :: Copying new image.");
|
|
|
|
|
synchronized(this.image){
|
|
|
|
|
//this.image = new byte[image.length];
|
|
|
|
|
//System.arraycopy(image, 0, this.image, 0, image.length);
|
|
|
|
|
this.image = image;
|
|
|
|
|
imgProduced = true;
|
|
|
|
|
imgConsumed = false;
|
|
|
|
|
this.image.notifyAll();
|
|
|
|
|
}
|
|
|
|
|
Logger.log_d(TAG, CLASS_NAME + ".setImageData() :: Data copy finished.");
|
|
|
|
|
}else{
|
|
|
|
|
Logger.log_d(TAG, CLASS_NAME + ".setImageData() :: Old image still valid, ignoring new image.");
|
2013-11-05 11:44:26 -04:30
|
|
|
}
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
public byte[] getImageData(){
|
|
|
|
|
byte[] returnImg;
|
2013-11-21 10:13:38 -04:30
|
|
|
Logger.log_d(TAG, CLASS_NAME + ".getImageData() :: Entry point.");
|
2013-11-05 11:44:26 -04:30
|
|
|
synchronized(image){
|
2013-11-28 15:48:17 -04:30
|
|
|
while(!imgProduced){
|
|
|
|
|
Logger.log_d(TAG, CLASS_NAME + ".getImageData() :: Waiting for new image.");
|
|
|
|
|
try{ image.wait(); }catch(InterruptedException ie){ }
|
2013-11-05 11:44:26 -04:30
|
|
|
}
|
2013-11-28 15:48:17 -04:30
|
|
|
Logger.log_d(TAG, CLASS_NAME + ".getImageData() :: Retrieving new image.");
|
|
|
|
|
returnImg = image;
|
|
|
|
|
imgProduced = false;
|
|
|
|
|
imgConsumed = true;
|
2013-11-05 11:44:26 -04:30
|
|
|
}
|
2013-11-28 15:48:17 -04:30
|
|
|
Logger.log_d(TAG, CLASS_NAME + ".getImageData() :: New image retrieved.");
|
2013-11-05 11:44:26 -04:30
|
|
|
return returnImg;
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
public synchronized boolean hasChanged(){
|
2013-11-28 15:48:17 -04:30
|
|
|
return imgProduced;
|
2013-11-05 11:44:26 -04:30
|
|
|
}
|
|
|
|
|
}
|