diff --git a/src/portal/ptl_screencast.rs b/src/portal/ptl_screencast.rs index e1aa2b5c..8c1c449c 100644 --- a/src/portal/ptl_screencast.rs +++ b/src/portal/ptl_screencast.rs @@ -87,6 +87,7 @@ pub struct StartedScreencast { node: Rc, port: Rc, buffers: RefCell>, + buffers_valid: Cell, dpy: Rc, jay_screencast: Rc, } @@ -142,6 +143,7 @@ impl PwClientNodeOwner for StartingScreencast { node: self.node.clone(), port, buffers: Default::default(), + buffers_valid: Cell::new(false), dpy: self.dpy.clone(), jay_screencast: jsc, }); @@ -161,6 +163,7 @@ impl PwClientNodeOwner for StartedScreencast { fn use_buffers(&self, port: &Rc) { self.node .send_port_output_buffers(port, &self.buffers.borrow_mut()); + self.buffers_valid.set(true); } fn start(self: Rc) { @@ -303,10 +306,15 @@ impl UsrJayScreencastOwner for StartedScreencast { self.node.send_port_update(&self.port, true); self.node.send_active(true); *self.buffers.borrow_mut() = buffers; + self.buffers_valid.set(false); } fn ready(&self, ev: &Ready) { let idx = ev.idx as usize; + if !self.buffers_valid.get() { + self.jay_screencast.release_buffer(idx); + return; + } unsafe { let mut used = false; if let Some(io) = self.port.io_buffers.lock().values().next() {