summaryrefslogtreecommitdiff
path: root/crates/renderer/src/overlay
diff options
context:
space:
mode:
Diffstat (limited to 'crates/renderer/src/overlay')
-rw-r--r--crates/renderer/src/overlay/handcam.rs43
-rw-r--r--crates/renderer/src/overlay/model.rs2
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"),