git-svn-id: https://robotics.mvla.net/svn/frc971/2013/trunk/src@4140 f308d9b7-e957-4cde-b6ac-9a88185e7312
diff --git a/971CV/src/org/frc971/HTTPClient.java b/971CV/src/org/frc971/HTTPClient.java
index 37d6214..c6f1b9e 100644
--- a/971CV/src/org/frc971/HTTPClient.java
+++ b/971CV/src/org/frc971/HTTPClient.java
@@ -10,17 +10,25 @@
 
 import com.googlecode.javacv.cpp.opencv_core.IplImage;
 
+import aos.ChannelImageGetter;
+import aos.JPEGDecoder;
+
+import java.nio.channels.SocketChannel;
+import java.nio.ByteBuffer;
+
 public class HTTPClient {
 	//Connects to HTTP Server on robot and receives images
 	
 	private final static boolean LOCAL_DEBUG = true;
 	
-	private Socket sock;
-	private BufferedReader sock_in;
-	private PrintWriter sock_out;
+	private SocketChannel sock = SocketChannel.open();
+	private Socket core_sock = sock.socket();
 	
 	private String LastBoundary = "";
 	
+	private BufferedReader sock_in;
+	private PrintWriter sock_out;
+	
 	private void WriteDebug(String message) {
 		//small helper function to write debug messages
 		if (LOCAL_DEBUG)
@@ -32,7 +40,7 @@
 		StringBuilder recvd = new StringBuilder();
 		String message = "";
 		try {
-			sock.setSoTimeout(5000);
+			core_sock.setSoTimeout(10000);
 		}
 		catch (SocketException e) {
 			System.err.println("Warning: Could not set socket timeout.");
@@ -72,16 +80,16 @@
 		//Initialize socket connection to robot
 		try {
 			WriteDebug("Connecting to server...");
-			sock = new Socket("192.168.0.178", 9714);
-			sock_in = new BufferedReader(new InputStreamReader(sock.getInputStream()));
-			sock_out = new PrintWriter(sock.getOutputStream(), true);
+			sock.connect(new InetSocketAddress("192.168.0.137", 9714));
+			sock_in = new BufferedReader(new InputStreamReader(core_sock.getInputStream()));
+			sock_out = new PrintWriter(core_sock.getOutputStream(), true);
 			//Write headers
 			//HTTPStreamer does not actually use the headers, so we can just write terminating chars.
 			WriteDebug("Writing headers...");
 			sock_out.println("\r\n\r\n");
 			//Receive headers
 			WriteDebug("Reading headers...");
-			ReadtoBoundary("cross\r\n");
+			ReadtoBoundary("donotcross\r\n");
 			WriteDebug("Now receiving data.");
 		}
 		catch (UnknownHostException e) {
@@ -95,7 +103,7 @@
 		
 	}
 	public ImageWithTimestamp GetFrame() {
-		//read all current data from socket, in case of processing bottleneck
+		/*//read all current data from socket, in case of processing bottleneck
 		WriteDebug("Emptying TCP stack...");
 		String message = ReadtoBoundary(null);
 		//we must end with a boundary
@@ -142,5 +150,24 @@
 			System.err.println(e.getMessage());
 			return null;
 		}
+		*/
+		//Use Brian's code to extract an image and timestamp from raw server data.
+		ImageWithTimestamp final_image = new ImageWithTimestamp();
+		try {
+			ChannelImageGetter cgetter = new ChannelImageGetter(sock);
+			ByteBuffer binary_image = cgetter.getJPEG();
+			JPEGDecoder decoder = new JPEGDecoder();
+			boolean sorf = decoder.decode(binary_image, final_image.image);
+			if (!sorf) {
+				WriteDebug("Error: JPEG decode failed.");
+				return null;
+			}
+			final_image.timestamp = cgetter.getTimestamp();
+			return final_image;
+		}
+		catch (IOException e) {
+			WriteDebug("Error: Failed to initialize ChannelImageGetter.");
+			return null;
+		}
 	}	
 }
diff --git a/971CV/src/org/frc971/ImageWithTimestamp.java b/971CV/src/org/frc971/ImageWithTimestamp.java
index 21d17e0..633517d 100644
--- a/971CV/src/org/frc971/ImageWithTimestamp.java
+++ b/971CV/src/org/frc971/ImageWithTimestamp.java
@@ -4,5 +4,5 @@
 
 public class ImageWithTimestamp {
 	IplImage image;
-	float timestamp;
+	double timestamp;
 }
diff --git a/971CV/src/org/frc971/private_aos_camera_jar.jar b/971CV/src/org/frc971/private_aos_camera_jar.jar
new file mode 100644
index 0000000..e675c2e
--- /dev/null
+++ b/971CV/src/org/frc971/private_aos_camera_jar.jar
Binary files differ