From a7421a923752686ab304592c81bff99b91416559 Mon Sep 17 00:00:00 2001 From: CentOS Sources Date: Tue, 30 Mar 2021 14:03:48 -0400 Subject: [PATCH] import gnome-remote-desktop-0.1.8-3.el8 --- SOURCES/cursor-only-frame-fixes.patch | 127 ++++++++++++++++++++++++++ SPECS/gnome-remote-desktop.spec | 9 +- 2 files changed, 135 insertions(+), 1 deletion(-) create mode 100644 SOURCES/cursor-only-frame-fixes.patch diff --git a/SOURCES/cursor-only-frame-fixes.patch b/SOURCES/cursor-only-frame-fixes.patch new file mode 100644 index 0000000..228ff15 --- /dev/null +++ b/SOURCES/cursor-only-frame-fixes.patch @@ -0,0 +1,127 @@ +From f97b689c5c67cee36025a7b0a9210deb8b373b03 Mon Sep 17 00:00:00 2001 +From: =?UTF-8?q?Jonas=20=C3=85dahl?= +Date: Fri, 3 Jul 2020 17:03:52 +0200 +Subject: [PATCH 1/3] session-vnc: Add API to flush + +When no damage is to be reported, but e.g. cursor moved, we need to +flush, so add API to make this possible. + +(cherry picked from commit 25e61a7ed3631687aed4310824e7810088e63b37) +--- + src/grd-session-vnc.c | 6 ++++++ + src/grd-session-vnc.h | 2 ++ + 2 files changed, 8 insertions(+) + +diff --git a/src/grd-session-vnc.c b/src/grd-session-vnc.c +index 9fcbb69..7950d1e 100644 +--- a/src/grd-session-vnc.c ++++ b/src/grd-session-vnc.c +@@ -179,6 +179,12 @@ grd_session_vnc_take_buffer (GrdSessionVnc *session_vnc, + rfbProcessEvents (session_vnc->rfb_screen, 0); + } + ++void ++grd_session_vnc_flush (GrdSessionVnc *session_vnc) ++{ ++ rfbProcessEvents (session_vnc->rfb_screen, 0); ++} ++ + void + grd_session_vnc_set_cursor (GrdSessionVnc *session_vnc, + rfbCursorPtr rfb_cursor) +diff --git a/src/grd-session-vnc.h b/src/grd-session-vnc.h +index 294860e..a065857 100644 +--- a/src/grd-session-vnc.h ++++ b/src/grd-session-vnc.h +@@ -49,6 +49,8 @@ void grd_session_vnc_queue_resize_framebuffer (GrdSessionVnc *session_vnc, + void grd_session_vnc_take_buffer (GrdSessionVnc *session_vnc, + void *data); + ++void grd_session_vnc_flush (GrdSessionVnc *session_vnc); ++ + void grd_session_vnc_set_cursor (GrdSessionVnc *session_vnc, + rfbCursorPtr rfb_cursor); + +-- +2.26.2 + + +From 8a050b66be76d73725ac7665295160ab6c40b0f5 Mon Sep 17 00:00:00 2001 +From: =?UTF-8?q?Jonas=20=C3=85dahl?= +Date: Fri, 3 Jul 2020 17:12:58 +0200 +Subject: [PATCH 2/3] vnc-pipewire-stream: Properly process cursor-change-only + frames + +Such frames will have the buffer data size set to 0, as it is empty, but +may contain metadata carrying the cursor update. + +(cherry picked from commit c04762a450ea9a21730db26c296c1283e121dc08) +--- + src/grd-vnc-pipewire-stream.c | 6 +++--- + 1 file changed, 3 insertions(+), 3 deletions(-) + +diff --git a/src/grd-vnc-pipewire-stream.c b/src/grd-vnc-pipewire-stream.c +index a3f5fb6..7519377 100644 +--- a/src/grd-vnc-pipewire-stream.c ++++ b/src/grd-vnc-pipewire-stream.c +@@ -312,7 +312,6 @@ process_buffer (GrdVncPipeWireStream *stream, + size_t size; + uint8_t *map; + void *src_data; +- int y; + struct spa_meta_cursor *spa_meta_cursor; + g_autofree GrdVncFrame *frame = NULL; + +@@ -320,8 +319,8 @@ process_buffer (GrdVncPipeWireStream *stream, + + if (buffer->datas[0].chunk->size == 0) + { +- g_warning ("Received empty buffer"); +- return NULL; ++ map = NULL; ++ src_data = NULL; + } + else if (buffer->datas[0].type == SPA_DATA_MemFd) + { +@@ -367,6 +366,7 @@ process_buffer (GrdVncPipeWireStream *stream, + int src_stride; + int dst_stride; + int height; ++ int y; + + src_stride = buffer->datas[0].chunk->stride; + dst_stride = grd_session_vnc_get_framebuffer_stride (stream->session); +-- +2.26.2 + + +From eac6368d8411c586007df8b1a2d85df3da1b55c5 Mon Sep 17 00:00:00 2001 +From: =?UTF-8?q?Jonas=20=C3=85dahl?= +Date: Fri, 3 Jul 2020 17:13:58 +0200 +Subject: [PATCH 3/3] vnc-pipewire-stream: Flush connection if no new pixel + buffer + +Otherwise we'll wait on input until we flush out our new cursor move +only output. + +(cherry picked from commit 3394e34c3c502d63636bb852c062855c46736a6f) +--- + src/grd-vnc-pipewire-stream.c | 2 ++ + 1 file changed, 2 insertions(+) + +diff --git a/src/grd-vnc-pipewire-stream.c b/src/grd-vnc-pipewire-stream.c +index 7519377..791b71d 100644 +--- a/src/grd-vnc-pipewire-stream.c ++++ b/src/grd-vnc-pipewire-stream.c +@@ -299,6 +299,8 @@ do_render (struct spa_loop *loop, + + if (frame->data) + grd_session_vnc_take_buffer (stream->session, frame->data); ++ else ++ grd_session_vnc_flush (stream->session); + + g_free (frame); + +-- +2.26.2 + diff --git a/SPECS/gnome-remote-desktop.spec b/SPECS/gnome-remote-desktop.spec index c561994..3590d90 100644 --- a/SPECS/gnome-remote-desktop.spec +++ b/SPECS/gnome-remote-desktop.spec @@ -2,7 +2,7 @@ Name: gnome-remote-desktop Version: 0.1.8 -Release: 2%{?dist} +Release: 3%{?dist} Summary: GNOME Remote Desktop screen share service License: GPLv2+ @@ -20,6 +20,9 @@ Patch3: 0001-stream-log-a-warning-on-error.patch Patch4: 0002-vnc-pipewire-stream-Only-try-to-copy-frame-pixels-if.patch Patch5: 0001-vnc-pipewire-stream-Remove-assert.patch +# Cursor only frame fixes (#1837406) +Patch6: cursor-only-frame-fixes.patch + BuildRequires: git BuildRequires: gcc BuildRequires: meson >= 0.36.0 @@ -78,6 +81,10 @@ GNOME desktop environment. %changelog +* Wed Jul 15 2020 Jonas Ådahl - 0.1.8-3 +- Backport cursor only frame fixes + Related: #1837406 + * Thu Jun 18 2020 Jonas Ådahl - 0.1.8-2 - Don't crash on metadata only buffers Resolves: #1847062