extern crate scrap;
fn main() {
use scrap::{Capturer, Display};
use std::io::Write;
use std::io::ErrorKind::WouldBlock;
use std::process::{Command, Stdio};
let d = Display::primary().unwrap();
let (w, h) = (d.width(), d.height());
let child = Command::new("ffplay")
.args(&[
"-f", "rawvideo",
"-pixel_format", "bgr0",
"-video_size", &format!("{}x{}", w, h),
"-framerate", "60",
"-"
])
.stdin(Stdio::piped())
.spawn()
.expect("This example requires ffplay.");
let mut capturer = Capturer::new(d).unwrap();
let mut out = child.stdin.unwrap();
loop {
match capturer.frame() {
Ok(frame) => {
let stride = frame.len() / h;
let rowlen = 4 * w;
for row in frame.chunks(stride) {
let row = &row[..rowlen];
out.write_all(row).unwrap();
}
}
Err(ref e) if e.kind() == WouldBlock => {
}
Err(_) => {
break;
}
}
}
}