2008-06-28 17:01:33 +02:00
|
|
|
<source lang="ruby">#!/usr/bin/env ruby
|
|
|
|
require 'cucul'
|
|
|
|
require 'V4l'
|
|
|
|
require 'socket'
|
|
|
|
SHRINK_X = 5
|
|
|
|
SHRINK_Y = 10
|
|
|
|
Thread::abort_on_exception = true
|
|
|
|
current = ''
|
|
|
|
current_lock = Mutex.new
|
|
|
|
Thread.new {
|
|
|
|
vid = V4l.new('/dev/video')
|
|
|
|
cucul = Cucul::Canvas.new(vid.width / SHRINK_X, vid.height / SHRINK_Y)
|
|
|
|
d = Cucul::Dither::new(24, vid.width, vid.height, 3 * vid.width, 0xff, 0xff00, 0xff0000, 0)
|
|
|
|
d.antialias = 'prefilter'
|
|
|
|
d.algorithm = 'fstein'
|
|
|
|
d.brightness = 0.5
|
|
|
|
d.gamma = 1.2
|
|
|
|
loop do
|
|
|
|
f = vid.get_frame
|
|
|
|
cucul.dither_bitmap(0, 0, vid.width / SHRINK_X, vid.height / SHRINK_Y, d, f)
|
|
|
|
current_lock.synchronize {
|
|
|
|
current = cucul.export_memory('ansi')
|
|
|
|
}
|
|
|
|
end
|
|
|
|
}
|
|
|
|
s = TCPServer.new(2323)
|
|
|
|
while (c = s.accept)
|
|
|
|
puts "accepted #{c.peeraddr.inspect}"
|
|
|
|
Thread.new {
|
|
|
|
begin
|
|
|
|
loop do
|
|
|
|
current_lock.synchronize {
|
|
|
|
c.puts "\e[2J#{current}"
|
|
|
|
c.flush
|
|
|
|
}
|
2008-06-28 17:03:52 +02:00
|
|
|
sleep 0.5
|
2008-06-28 17:01:33 +02:00
|
|
|
end
|
|
|
|
rescue Errno::EPIPE
|
|
|
|
rescue Errno::ECONNRESET
|
|
|
|
end
|
|
|
|
}
|
|
|
|
end
|
|
|
|
</source>
|
|
|
|
[[Category:Ruby]]
|
2008-06-28 17:03:02 +02:00
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
{{Rübÿ Spëëd Mëtäl Cödïng}}
|