--- src/capture/wayland.rs +++ src/capture/wayland.rs @@ -4,8 +4,7 @@ use ashpd::desktop::screencast::{Screencast, CursorMode, PersistMode, SourceType}; use std::os::unix::io::RawFd; pub struct WaylandCapture { - fd: RawFd, - node_id: u32, + stream: crate::capture::wayland_stream::PipeWireStream, } @@ -37,13 +36,13 @@ node_id = stream.node_id(); } - Ok(Self { fd, node_id }) + let stream = crate::capture::wayland_stream::PipeWireStream::new(node_id, fd)?; + Ok(Self { stream }) } } impl FrameSource for WaylandCapture { fn next_frame(&mut self) -> Result> { - // Wait, Wayland capture requires a pipewire stream running in a background thread to yield buffers. - // For Phase 1, we are mocking this out until Phase 2 is built. - Ok(Frame::DmaBuf { width: 1920, height: 1080, format: 0, fd: self.fd, stride: 0, offset: 0 }) + self.stream.receiver.recv().map_err(|e| Box::new(e) as Box) } }