52 lines
		
	
	
		
			1.3 KiB
		
	
	
	
		
			Rust
		
	
	
	
	
	
			
		
		
	
	
			52 lines
		
	
	
		
			1.3 KiB
		
	
	
	
		
			Rust
		
	
	
	
	
	
extern crate scrap;
 | 
						|
 | 
						|
fn main() {
 | 
						|
    use scrap::{Capturer, Display};
 | 
						|
    use std::io::ErrorKind::WouldBlock;
 | 
						|
    use std::io::Write;
 | 
						|
    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, false).unwrap();
 | 
						|
    let mut out = child.stdin.unwrap();
 | 
						|
 | 
						|
    loop {
 | 
						|
        match capturer.frame(0) {
 | 
						|
            Ok(frame) => {
 | 
						|
                // Write the frame, removing end-of-row padding.
 | 
						|
                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 => {
 | 
						|
                // Wait for the frame.
 | 
						|
            }
 | 
						|
            Err(_) => {
 | 
						|
                // We're done here.
 | 
						|
                break;
 | 
						|
            }
 | 
						|
        }
 | 
						|
    }
 | 
						|
}
 |