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;
 | ||
|  |             }
 | ||
|  |         }
 | ||
|  |     }
 | ||
|  | }
 |