diff options
Diffstat (limited to 'crates/renderer/src/overlay')
| -rw-r--r-- | crates/renderer/src/overlay/handcam.rs | 43 | ||||
| -rw-r--r-- | crates/renderer/src/overlay/model.rs | 2 |
2 files changed, 44 insertions, 1 deletions
diff --git a/crates/renderer/src/overlay/handcam.rs b/crates/renderer/src/overlay/handcam.rs new file mode 100644 index 0000000..fadbf24 --- /dev/null +++ b/crates/renderer/src/overlay/handcam.rs @@ -0,0 +1,43 @@ +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<u8>, +} +impl Overlay { + pub fn new(ctx: &context::Context) -> Self { + let index = nokhwa::utils::CameraIndex::Index(0); + let requested = nokhwa::utils::RequestedFormat::new::<nokhwa::pixel_format::RgbAFormat>( + 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::<nokhwa::pixel_format::RgbAFormat>(&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(()) + } +} diff --git a/crates/renderer/src/overlay/model.rs b/crates/renderer/src/overlay/model.rs index 9c4b51b..06140ed 100644 --- a/crates/renderer/src/overlay/model.rs +++ b/crates/renderer/src/overlay/model.rs @@ -12,7 +12,7 @@ pub struct Terminal { model_fb: framebuffer::Framebuffer, } impl Terminal { - pub fn new(ctx: &context::Context) -> Self { + pub fn new(ctx: &context::Context, _st: &mut state::State) -> Self { Self { ost: overlay::State::new(ctx), output: std::io::stdout().into_raw_mode().expect("failed to set raw mode"), |
