128 lines
3.9 KiB
Diff
128 lines
3.9 KiB
Diff
From f97b689c5c67cee36025a7b0a9210deb8b373b03 Mon Sep 17 00:00:00 2001
|
|
From: =?UTF-8?q?Jonas=20=C3=85dahl?= <jadahl@gmail.com>
|
|
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?= <jadahl@gmail.com>
|
|
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?= <jadahl@gmail.com>
|
|
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
|
|
|