Class: Lolcommits::CaptureLinux
- Defined in:
- lib/lolcommits/capturer/capture_linux.rb
Constant Summary collapse
- MPLAYER_FPS =
25
Instance Attribute Summary
Attributes inherited from Capturer
#capture_delay, #capture_device, #capture_duration, #capture_path
Instance Method Summary collapse
Methods inherited from Capturer
#debug, #initialize, #system_call
Constructor Details
This class inherits a constructor from Lolcommits::Capturer
Instance Method Details
#capture ⇒ Object
7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 |
# File 'lib/lolcommits/capturer/capture_linux.rb', line 7 def capture tmpdir = Dir.mktmpdir # Default delay is 1s delay = capture_delay.zero? ? 1 : capture_delay # There's no way to give a capture delay in mplayer, but a number of frame # mplayer's "delay" is actually a number of frames at 25 fps # multiply the set value (in seconds) by 25 frames = delay.to_i * MPLAYER_FPS debug 'calling out to mplayer to capture image' # mplayer's output is ugly and useless, let's throw it away _stdin, stdout, _stderr = Open3.popen3("mplayer -vo jpeg:outdir=#{tmpdir} #{capture_device_string} -frames #{frames} -fps #{MPLAYER_FPS} tv://") # looks like we still need to read the output for something to happen stdout.read debug 'calling out to mplayer to capture image' # get last frame from tmpdir (regardless of fps) all_frames = Dir.glob("#{tmpdir}/*.jpg").sort_by do |f| File.mtime(f) end if all_frames.empty? debug 'failed to capture any image' else FileUtils.mv(all_frames.last, capture_path) debug 'cleaning up' end FileUtils.rm_rf(tmpdir) end |