From 5cc769ad2ea515b790bbc04f940b37390c912f70 Mon Sep 17 00:00:00 2001 From: Miguel Astor Date: Wed, 8 Jan 2014 15:21:37 -0430 Subject: [PATCH] Basic video streaming finished. --- .../ccg/nxtcam/camera/CameraImageMonitor.java | 1 + .../ciens/ccg/nxtcam/camera/CameraPreview.java | 18 ++++++++++++++---- .../nxtcam/network/VideoStreamingThread.java | 15 ++++++++++++++- .../ccg/nxtcam/utils/ProjectConstants.java | 2 +- 4 files changed, 30 insertions(+), 6 deletions(-) diff --git a/src/ve/ucv/ciens/ccg/nxtcam/camera/CameraImageMonitor.java b/src/ve/ucv/ciens/ccg/nxtcam/camera/CameraImageMonitor.java index 3c47dd8..b5a9419 100644 --- a/src/ve/ucv/ciens/ccg/nxtcam/camera/CameraImageMonitor.java +++ b/src/ve/ucv/ciens/ccg/nxtcam/camera/CameraImageMonitor.java @@ -60,6 +60,7 @@ public class CameraImageMonitor{ imageConsumed = false; this.imageMonitor.notifyAll(); } + System.gc(); 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."); diff --git a/src/ve/ucv/ciens/ccg/nxtcam/camera/CameraPreview.java b/src/ve/ucv/ciens/ccg/nxtcam/camera/CameraPreview.java index ede90a7..176aa17 100644 --- a/src/ve/ucv/ciens/ccg/nxtcam/camera/CameraPreview.java +++ b/src/ve/ucv/ciens/ccg/nxtcam/camera/CameraPreview.java @@ -105,12 +105,22 @@ public class CameraPreview extends SurfaceView implements SurfaceHolder.Callback requestLayout(); camParams = camera.getParameters(); - Size optimal = getOptimalPreviewSize(camParams.getSupportedPreviewSizes(), w, h); + camParams.getSupportedPreviewSizes(); + List sizes = camParams.getSupportedPreviewSizes(); + + /*for(Size size: sizes){ + Logger.log_d(TAG, CLASS_NAME + ".surfaceChanged() :: Supported preview size (" + size.width + ", " + size.height + ")"); + } + + Size optimal = getOptimalPreviewSize(sizes, w, h); Logger.log_d(TAG, CLASS_NAME + ".surfaceChanged() :: Preview size set at (" + optimal.width + ", " + optimal.height + ")"); - camParams.setPreviewSize(optimal.width, optimal.height); + camParams.setPreviewSize(optimal.width, optimal.height);*/ + camParams.setPreviewSize(720, 480); camera.setParameters(camParams); - previewWidth = optimal.width; - previewHeight = optimal.height; + /*previewWidth = optimal.width; + previewHeight = optimal.height;*/ + previewWidth = 720; + previewHeight = 480; android.hardware.Camera.CameraInfo info = new android.hardware.Camera.CameraInfo(); android.hardware.Camera.getCameraInfo(0, info); diff --git a/src/ve/ucv/ciens/ccg/nxtcam/network/VideoStreamingThread.java b/src/ve/ucv/ciens/ccg/nxtcam/network/VideoStreamingThread.java index 93dd089..76c2f68 100644 --- a/src/ve/ucv/ciens/ccg/nxtcam/network/VideoStreamingThread.java +++ b/src/ve/ucv/ciens/ccg/nxtcam/network/VideoStreamingThread.java @@ -49,6 +49,7 @@ public class VideoStreamingThread extends Thread{ private final ByteArrayOutputStream outputStream = new ByteArrayOutputStream(); public VideoStreamingThread(String serverIp){ + super("Video Streaming Thread"); this.serverIp = serverIp; pause = false; done = false; @@ -189,6 +190,9 @@ public class VideoStreamingThread extends Thread{ }else{ while(!done){ sendImage(); + try{ + sleep(50L); + }catch(InterruptedException ie){} } } @@ -202,6 +206,10 @@ public class VideoStreamingThread extends Thread{ Rect imageSize; image = camMonitor.getImageData(); + if(image == null){ + Logger.log_e(TAG, CLASS_NAME + ".sendImage() :: image is null, skipping frame."); + return; + } imageSize = camMonitor.getImageParameters(); // Compress the image as Jpeg. @@ -219,7 +227,7 @@ public class VideoStreamingThread extends Thread{ Logger.log_d(TAG, CLASS_NAME + ".sendImage() :: Sending message."); writer.writeObject(message); writer.flush(); - Logger.log_e(TAG, CLASS_NAME + ".sendImage() :: Message sent successfully: "); + Logger.log_d(TAG, CLASS_NAME + ".sendImage() :: Message sent successfully: "); }catch(IOException io){ Logger.log_e(TAG, CLASS_NAME + ".sendImage() :: Error sending image to the server: " + io.getMessage()); @@ -227,6 +235,11 @@ public class VideoStreamingThread extends Thread{ }finally{ Logger.log_d(TAG, CLASS_NAME + ".sendImage() :: Cleaning."); outputStream.reset(); + image = null; + yuvImage = null; + message = null; + imageSize = null; + System.gc(); } } diff --git a/src/ve/ucv/ciens/ccg/nxtcam/utils/ProjectConstants.java b/src/ve/ucv/ciens/ccg/nxtcam/utils/ProjectConstants.java index 8569302..649bbd6 100644 --- a/src/ve/ucv/ciens/ccg/nxtcam/utils/ProjectConstants.java +++ b/src/ve/ucv/ciens/ccg/nxtcam/utils/ProjectConstants.java @@ -32,5 +32,5 @@ public abstract class ProjectConstants { // Activity results. public static final int RESULT_CAMERA_FAILURE = Activity.RESULT_FIRST_USER + 1; - public static final boolean DEBUG = true; + public static final boolean DEBUG = false; }