Started coding the image transfer protocol.

This commit is contained in:
2013-12-17 17:03:02 -04:30
parent 5c2cff3c54
commit aff602d0fc
7 changed files with 226 additions and 36 deletions

View File

@@ -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;
}
}