diff --git a/src/client/io_loop.rs b/src/client/io_loop.rs index 4e86a5a22..d82a6da6c 100644 --- a/src/client/io_loop.rs +++ b/src/client/io_loop.rs @@ -282,8 +282,18 @@ impl Remote { } _ = status_timer.tick() => { if self.watchdog.check(self.is_connected, self.first_frame, self.handler.is_default(), Instant::now()) { - log::warn!("No first video frame received, sending refresh"); - let display = self.handler.lc.read().unwrap().peer_info.as_ref().map(|p| p.current_display).unwrap_or(0); + let (id, display) = { + let lch = self.handler.lc.read().unwrap(); + let display = lch + .peer_info + .as_ref() + .map(|p| p.current_display) + .unwrap_or(0); + (lch.id.clone(), display) + }; + log::warn!( + "No first video frame received, id={id}, display={display}, sending refresh" + ); self.handler.refresh_video(display as _); } @@ -1292,8 +1302,14 @@ impl Remote { if let Ok(msg_in) = Message::parse_from_bytes(&data) { match msg_in.union { Some(message::Union::VideoFrame(vf)) => { + let display = vf.display as usize; if !self.first_frame { self.first_frame = true; + log::info!( + "First video frame received, id={}, display={}", + self.handler.get_id(), + display + ); self.handler.close_success(); self.handler.adapt_size(); self.send_toggle_virtual_display_msg(peer).await; @@ -1301,7 +1317,6 @@ impl Remote { } self.video_format = CodecFormat::from(&vf); - let display = vf.display as usize; if !self.video_threads.contains_key(&display) { self.new_video_thread(display); } diff --git a/src/server/connection.rs b/src/server/connection.rs index 3670fb7cf..98397762c 100644 --- a/src/server/connection.rs +++ b/src/server/connection.rs @@ -3406,6 +3406,12 @@ impl Connection { } fn refresh_video_display(&self, display: Option) { + log::debug!( + "refresh_video_display: conn_id={}, display={:?}, source={:?}", + self.inner.id, + display, + self.video_source() + ); video_service::refresh(); self.server.upgrade().map(|s| { s.read().unwrap().set_video_service_opt( diff --git a/src/server/video_service.rs b/src/server/video_service.rs index 77bfa9ed4..d276a0ef3 100644 --- a/src/server/video_service.rs +++ b/src/server/video_service.rs @@ -650,6 +650,7 @@ fn run(vs: VideoService) -> ResultType<()> { let repeat_encode_max = 10; let mut encode_fail_counter = 0; let mut first_frame = true; + let mut logged_invalid_frame = false; let capture_width = c.width; let capture_height = c.height; let (mut second_instant, mut send_counter) = (Instant::now(), 0); @@ -722,6 +723,24 @@ fn run(vs: VideoService) -> ResultType<()> { let res = match c.frame(spf) { Ok(frame) => { if !frame.valid() { + if !logged_invalid_frame { + logged_invalid_frame = true; + match &frame { + scrap::Frame::PixelBuffer(f) => { + log::debug!( + "capturer returned invalid frame (pixelbuffer), len={}, w={}, h={}, treating as WouldBlock", + f.data().len(), + f.width(), + f.height() + ); + } + scrap::Frame::Texture((texture, _)) => { + log::debug!( + "capturer returned invalid frame (texture={texture:?}), treating as WouldBlock" + ); + } + } + } Err(std::io::Error::new(WouldBlock, "empty frame")) } else { repeat_encode_counter = 0;