lots of vision stuff from Ben
diff --git a/vision/bmp_stream/bmp.rb b/vision/bmp_stream/bmp.rb
new file mode 100644
index 0000000..122c9de
--- /dev/null
+++ b/vision/bmp_stream/bmp.rb
@@ -0,0 +1,11 @@
+class BMPHeader
+	def initialize(width,height)
+		@width = width
+		@height = height
+	end
+	def text()
+		size = @width * @height * 3
+		return ["BM",size + 54,"\0\0\0\0",54,40,@width,
+			@height,1,24,0,size,2835,2835,0,0].pack("a2Ia4IIIIssIIIIII")
+	end
+end
diff --git a/vision/bmp_stream/bmp_dump.rb b/vision/bmp_stream/bmp_dump.rb
new file mode 100644
index 0000000..6c5133c
--- /dev/null
+++ b/vision/bmp_stream/bmp_dump.rb
@@ -0,0 +1,45 @@
+require "socket"
+
+require "bmp"
+sock = TCPSocket.new(ARGV[0] || "fitpc",8020)
+$width = 640 / 2
+$height = 480 / 2
+$header = BMPHeader.new($width,$height).text()
+
+
+
+require "rubygems"
+require "gtk2"
+
+
+$image = Gtk::Image.new()
+$window = Gtk::Window.new()
+$window.add($image)
+$window.show_all()
+$window.signal_connect("delete-event") { Gtk.main_quit}
+
+loader = Gdk::PixbufLoader.new
+loader.write($header)
+data = sock.read($width * $height * 3)
+loader.last_write(data)
+loader.close
+$image.pixbuf = loader.pixbuf
+$oldtime = Time.now
+i = 0
+Gtk.idle_add do
+	loader = Gdk::PixbufLoader.new
+	loader.write($header)
+	data = sock.read($width * $height * 3)
+#	(640 * 480).times do |i| #BGR -> RGB
+#		b,g,r = data[i * 3 + 0],data[i * 3 + 1],data[i * 3 + 2]
+#		data[i * 3 + 0],data[i * 3 + 1],data[i * 3 + 2] = r,g,b
+#	end
+	loader.last_write(data)
+	loader.close
+	new_time = Time.now()
+	puts 1 / (new_time - $oldtime)
+	$oldtime = new_time
+	$image.pixbuf = loader.pixbuf
+end
+
+Gtk.main()
diff --git a/vision/bmp_stream/bmp_stream_from_file.rb b/vision/bmp_stream/bmp_stream_from_file.rb
new file mode 100644
index 0000000..3324484
--- /dev/null
+++ b/vision/bmp_stream/bmp_stream_from_file.rb
@@ -0,0 +1,43 @@
+require "socket"
+$header = File.open("header.bmp") { |f| f.read(54)} 
+
+
+sock = File.open("output.bmp_stream")
+#TCPSocket.new(ARGV[0] || "fitpc",8020)
+
+
+
+require "rubygems"
+require "gtk2"
+
+
+$image = Gtk::Image.new()
+$window = Gtk::Window.new()
+$window.add($image)
+$window.show_all()
+$window.signal_connect("delete-event") { Gtk.main_quit}
+
+loader = Gdk::PixbufLoader.new
+loader.write($header)
+data = sock.read(320 * 240 * 3)
+loader.last_write(data)
+loader.close
+$image.pixbuf = loader.pixbuf
+$oldtime = Time.now
+Gtk.timeout_add(1000) do 
+	loader = Gdk::PixbufLoader.new
+	loader.write($header)
+	data = sock.read(320 * 240 * 3)
+#	(640 * 480).times do |i| #BGR -> RGB
+#		b,g,r = data[i * 3 + 0],data[i * 3 + 1],data[i * 3 + 2]
+#		data[i * 3 + 0],data[i * 3 + 1],data[i * 3 + 2] = r,g,b
+#	end
+	loader.last_write(data)
+	loader.close
+	new_time = Time.now()
+	puts 1.0 / (new_time - $oldtime)
+	$oldtime = new_time
+	$image.pixbuf = loader.pixbuf
+end
+
+Gtk.main()
diff --git a/vision/bmp_stream/bmp_stream_to_file.rb b/vision/bmp_stream/bmp_stream_to_file.rb
new file mode 100644
index 0000000..962bb2d
--- /dev/null
+++ b/vision/bmp_stream/bmp_stream_to_file.rb
@@ -0,0 +1,20 @@
+require "socket"
+$header = File.open("header.bmp") { |f| f.read(54)} 
+
+
+sock = TCPSocket.new(ARGV[0] || "fitpc",8020)
+
+
+
+require "rubygems"
+require "gtk2"
+
+
+
+File.open("output.bmp_stream","w+") do |file|
+	400.times do |i|
+		data = sock.read(320 * 240 * 3)
+		file.print(data)
+		puts "frame: #{i}"
+	end
+end