use teleia::*; use crate::overlay; const WIDTH: usize = 1920; const HEIGHT: usize = 1080; const BLOCK_SIZE: usize = 16; const BWIDTH: usize = WIDTH / BLOCK_SIZE; const BHEIGHT: usize = HEIGHT / BLOCK_SIZE; pub struct Overlay { camera: nokhwa::Camera, texbuf: Vec, } impl Overlay { pub fn new(ctx: &context::Context) -> Self { let index = nokhwa::utils::CameraIndex::Index(0); let requested = nokhwa::utils::RequestedFormat::new::( nokhwa::utils::RequestedFormatType::AbsoluteHighestFrameRate ); let mut camera = nokhwa::Camera::new(index, requested).expect("failed to open webcam"); camera.open_stream().expect("failed to open stream"); Self { camera, texbuf: vec![0; WIDTH * HEIGHT * 4], } } } impl overlay::Overlay for Overlay { fn handle_binary(&mut self, ctx: &context::Context, st: &mut state::State, ost: &mut overlay::State, msg: &net::fig::BinaryMessage) -> Erm<()> { Ok(()) } fn update(&mut self, ctx: &context::Context, st: &mut state::State, ost: &mut overlay::State) -> Erm<()> { let frame = self.camera.frame().unwrap(); frame.decode_image_to_buffer::(&mut self.texbuf) .expect("failed to decode frame"); Ok(()) } fn render(&mut self, ctx: &context::Context, st: &mut state::State, ost: &mut overlay::State) -> Erm<()> { Ok(()) } }