ffav 4.3.12

Safe FFmpeg wrapper (FFmpeg 4 compatible fork of the ffmpeg-next crate)
Documentation
use ffav::easy::SimpleReader;
use std::convert::TryInto;
use std::sync::{
    atomic::{AtomicBool, Ordering},
    Arc,
};
use std::time::Instant;

fn main() -> Result<(), Box<dyn std::error::Error>> {
    let early_exit = Arc::new(AtomicBool::new(false));
    let early_exit_cloned = Arc::clone(&early_exit);
    let early_exit_thread = std::thread::spawn(move || {
        let mut buffer = String::new();
        std::io::stdin().read_line(&mut buffer).unwrap();
        early_exit_cloned.store(true, Ordering::SeqCst);
    });

    let mut reader = SimpleReader::open("/tmp/envivio-352x288.264.mp4", None, None)?;
    for (frame, _info) in reader.frames() {
        println!("frame={:#?}", frame);
        let bytes =
            unsafe { std::slice::from_raw_parts(frame.data, frame.size.try_into().unwrap()) };
        println!("bytes={:?}", &bytes[..16]);
    }

    println!("streams()={:#?}", reader.streams());
    for s in reader.streams() {
        println!("codecpar={:#?}", s.codecpar().unwrap());
    }

    early_exit_thread.join().unwrap();

    Ok(())
}