[gnome-remote-desktop] session-rdp: Also set and use the refresh rate for RDP surfaces



commit aac4dcf53127e6d01ef4bc7214c429a29bf1f819
Author: Pascal Nowack <Pascal Nowack gmx de>
Date:   Tue Apr 6 16:54:51 2021 +0200

    session-rdp: Also set and use the refresh rate for RDP surfaces
    
    Currently, hardcoded to 30 FPS. Use the value also for the maximum
    framerate in the PipeWire class.

 src/grd-rdp-pipewire-stream.c | 6 ++++--
 src/grd-rdp-pipewire-stream.h | 1 +
 src/grd-session-rdp.c         | 4 ++++
 3 files changed, 9 insertions(+), 2 deletions(-)
---
diff --git a/src/grd-rdp-pipewire-stream.c b/src/grd-rdp-pipewire-stream.c
index 61a5300..4bba33d 100644
--- a/src/grd-rdp-pipewire-stream.c
+++ b/src/grd-rdp-pipewire-stream.c
@@ -440,6 +440,7 @@ static const struct pw_stream_events stream_events = {
 
 static gboolean
 connect_to_stream (GrdRdpPipeWireStream  *stream,
+                   uint32_t               refresh_rate,
                    GError               **error)
 {
   struct pw_stream *pipewire_stream;
@@ -459,7 +460,7 @@ connect_to_stream (GrdRdpPipeWireStream  *stream,
   min_rect = SPA_RECTANGLE (1, 1);
   max_rect = SPA_RECTANGLE (INT32_MAX, INT32_MAX);
   min_framerate = SPA_FRACTION (1, 1);
-  max_framerate = SPA_FRACTION (30, 1);
+  max_framerate = SPA_FRACTION (refresh_rate, 1);
 
   pod_builder = SPA_POD_BUILDER_INIT (params_buffer, sizeof (params_buffer));
   params[0] = spa_pod_builder_add_object (
@@ -523,6 +524,7 @@ static const struct pw_core_events core_events = {
 GrdRdpPipeWireStream *
 grd_rdp_pipewire_stream_new (GrdSessionRdp  *session_rdp,
                              uint32_t        src_node_id,
+                             uint32_t        refresh_rate,
                              GError        **error)
 {
   g_autoptr (GrdRdpPipeWireStream) stream = NULL;
@@ -565,7 +567,7 @@ grd_rdp_pipewire_stream_new (GrdSessionRdp  *session_rdp,
                         &core_events,
                         stream);
 
-  if (!connect_to_stream (stream, error))
+  if (!connect_to_stream (stream, refresh_rate, error))
     return NULL;
 
   return g_steal_pointer (&stream);
diff --git a/src/grd-rdp-pipewire-stream.h b/src/grd-rdp-pipewire-stream.h
index dca92c3..69b7592 100644
--- a/src/grd-rdp-pipewire-stream.h
+++ b/src/grd-rdp-pipewire-stream.h
@@ -32,6 +32,7 @@ G_DECLARE_FINAL_TYPE (GrdRdpPipeWireStream, grd_rdp_pipewire_stream,
 
 GrdRdpPipeWireStream *grd_rdp_pipewire_stream_new (GrdSessionRdp  *session_rdp,
                                                    uint32_t        src_node_id,
+                                                   uint32_t        refresh_rate,
                                                    GError        **error);
 
 #endif /* GRD_RDP_PIPEWIRE_STREAM_H */
diff --git a/src/grd-session-rdp.c b/src/grd-session-rdp.c
index 33424ae..2d44e86 100644
--- a/src/grd-session-rdp.c
+++ b/src/grd-session-rdp.c
@@ -1617,6 +1617,7 @@ rdp_peer_post_connect (freerdp_peer *peer)
   rdp_settings->PointerCacheSize = MIN (rdp_settings->PointerCacheSize, 100);
 
   session_rdp->rdp_surface = g_malloc0 (sizeof (GrdRdpSurface));
+  session_rdp->rdp_surface->refresh_rate = 30;
 
   if (rdp_settings->SupportGraphicsPipeline)
     {
@@ -2050,11 +2051,14 @@ grd_session_rdp_stream_ready (GrdSession *session,
 {
   GrdSessionRdp *session_rdp = GRD_SESSION_RDP (session);
   uint32_t pipewire_node_id;
+  uint16_t refresh_rate;
   g_autoptr (GError) error = NULL;
 
   pipewire_node_id = grd_stream_get_pipewire_node_id (stream);
+  refresh_rate = session_rdp->rdp_surface->refresh_rate;
   session_rdp->pipewire_stream = grd_rdp_pipewire_stream_new (session_rdp,
                                                               pipewire_node_id,
+                                                              refresh_rate,
                                                               &error);
   if (!session_rdp->pipewire_stream)
     {


[Date Prev][Date Next]   [Thread Prev][Thread Next]   [Thread Index] [Date Index] [Author Index]