From 9065f3c9765123f5f5bc503407c493fdb7c79488 Mon Sep 17 00:00:00 2001 From: LLLL Colonq Date: Tue, 9 Jun 2026 03:20:53 -0400 Subject: Initial handcam stuff --- crates/renderer/src/overlay/handcam.rs | 43 ++++++++++++++++++++++++++++++++++ crates/renderer/src/overlay/model.rs | 2 +- 2 files changed, 44 insertions(+), 1 deletion(-) create mode 100644 crates/renderer/src/overlay/handcam.rs (limited to 'crates/renderer/src/overlay') 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, +} +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(()) + } +} 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"), -- cgit v1.2.3