From 217570f47685e503ab187f77608f8d0328b05cd4 Mon Sep 17 00:00:00 2001 From: 21pages Date: Sun, 9 Apr 2023 08:52:22 +0800 Subject: [PATCH] fix fps control refresh flicking Signed-off-by: 21pages --- src/client/io_loop.rs | 9 ++++----- 1 file changed, 4 insertions(+), 5 deletions(-) diff --git a/src/client/io_loop.rs b/src/client/io_loop.rs index f7530cc37..18a8bfe3d 100644 --- a/src/client/io_loop.rs +++ b/src/client/io_loop.rs @@ -852,7 +852,6 @@ impl Remote { if len < debounce || decode_fps == 0 { return; } - let mut refresh = false; // First setting , or the length of the queue still increases after setting, or exceed the size of the last setting again if ctl.set_times < 10 // enough && (ctl.set_times == 0 @@ -875,14 +874,14 @@ impl Remote { ctl.last_queue_size = len; ctl.set_times += 1; ctl.last_set_instant = Instant::now(); - refresh = true; } // send refresh if ctl.refresh_times < 10 // enough - && (refresh - || (len > self.video_queue.len() / 2 - && ctl.last_refresh_instant.elapsed().as_secs() > 30)) + && (len > self.video_queue.capacity() / 2 + && (ctl.refresh_times == 0 || ctl.last_refresh_instant.elapsed().as_secs() > 30)) { + // Refresh causes client set_display, left frames cause flickering. + while let Some(_) = self.video_queue.pop() {} self.handler.refresh_video(); ctl.refresh_times += 1; ctl.last_refresh_instant = Instant::now();