Sha256: 7b23d957ac58d3052e2717fda088a745b52ad7e0d46e97f9399317f971eaf931
Contents?: true
Size: 1.45 KB
Versions: 2
Compression:
Stored size: 1.45 KB
Contents
# frozen_string_literal: true module Lolcommits class CaptureLinux < Capturer MPLAYER_FPS = 25 def capture_device_string @capture_device.nil? ? nil : "-tv device=\"#{@capture_device}\"" end def capture debug 'LinuxCapturer: making tmp directory' tmpdir = Dir.mktmpdir # Default delay is 1s delay = capture_delay != 0 ? capture_delay : 1 # 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 'LinuxCapturer: 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 'LinuxCapturer: 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 'LinuxCapturer: failed to capture any image' else FileUtils.mv(all_frames.last, snapshot_location) debug 'LinuxCapturer: cleaning up' end FileUtils.rm_rf(tmpdir) end end end
Version data entries
2 entries across 2 versions & 1 rubygems
Version | Path |
---|---|
lolcommits-0.13.1 | lib/lolcommits/capturer/capture_linux.rb |
lolcommits-0.13.0 | lib/lolcommits/capturer/capture_linux.rb |