Started coding the image transfer protocol.
This commit is contained in:
@@ -16,6 +16,7 @@
|
||||
package ve.ucv.ciens.ccg.nxtcam.camera;
|
||||
|
||||
import ve.ucv.ciens.ccg.nxtcam.utils.Logger;
|
||||
import android.graphics.Rect;
|
||||
|
||||
public class CameraImageMonitor{
|
||||
private final String TAG = "CAM_MONITOR";
|
||||
@@ -23,13 +24,15 @@ public class CameraImageMonitor{
|
||||
|
||||
private Object imageMonitor;
|
||||
private byte[] image;
|
||||
private boolean imgProduced;
|
||||
private boolean imgConsumed;
|
||||
private boolean imageProduced;
|
||||
private boolean imageConsumed;
|
||||
private Rect imageSize;
|
||||
|
||||
private CameraImageMonitor(){
|
||||
imgProduced = false;
|
||||
imgConsumed = true;
|
||||
imageProduced = false;
|
||||
imageConsumed = true;
|
||||
imageMonitor = new Object();
|
||||
imageSize = null;
|
||||
}
|
||||
|
||||
private static class SingletonHolder{
|
||||
@@ -40,13 +43,21 @@ public class CameraImageMonitor{
|
||||
return SingletonHolder.INSTANCE;
|
||||
}
|
||||
|
||||
public void setImageParameters(int width, int height){
|
||||
imageSize = new Rect(0, 0, width, height);
|
||||
}
|
||||
|
||||
public Rect getImageParameters(){
|
||||
return imageSize;
|
||||
}
|
||||
|
||||
public void setImageData(byte[] image){
|
||||
if(imgConsumed){
|
||||
if(imageConsumed){
|
||||
Logger.log_d(TAG, CLASS_NAME + ".setImageData() :: Copying new image.");
|
||||
synchronized(this.imageMonitor){
|
||||
this.image = image;
|
||||
imgProduced = true;
|
||||
imgConsumed = false;
|
||||
imageProduced = true;
|
||||
imageConsumed = false;
|
||||
this.imageMonitor.notifyAll();
|
||||
}
|
||||
Logger.log_d(TAG, CLASS_NAME + ".setImageData() :: Data copy finished.");
|
||||
@@ -59,20 +70,20 @@ public class CameraImageMonitor{
|
||||
byte[] returnImg;
|
||||
Logger.log_d(TAG, CLASS_NAME + ".getImageData() :: Entry point.");
|
||||
synchronized(imageMonitor){
|
||||
while(!imgProduced){
|
||||
while(!imageProduced){
|
||||
Logger.log_d(TAG, CLASS_NAME + ".getImageData() :: Waiting for new image.");
|
||||
try{ imageMonitor.wait(); }catch(InterruptedException ie){ }
|
||||
}
|
||||
Logger.log_d(TAG, CLASS_NAME + ".getImageData() :: Retrieving new image.");
|
||||
returnImg = image;
|
||||
imgProduced = false;
|
||||
imgConsumed = true;
|
||||
imageProduced = false;
|
||||
imageConsumed = true;
|
||||
}
|
||||
Logger.log_d(TAG, CLASS_NAME + ".getImageData() :: New image retrieved.");
|
||||
return returnImg;
|
||||
}
|
||||
|
||||
public synchronized boolean hasChanged(){
|
||||
return imgConsumed;
|
||||
return imageConsumed;
|
||||
}
|
||||
}
|
||||
|
||||
Reference in New Issue
Block a user