From c55694c51b570d84ad63bfb5dc7bdec75fee57da Mon Sep 17 00:00:00 2001
From: Koichiro Iwao
Date: Sat, 16 Nov 2024 00:00:00 +0900
Subject: [PATCH 1/3] Set different frame capture interval for H.264 and RFX
and pass them to xorgxrdp.
---
common/xrdp_client_info.h | 7 ++++++-
common/xrdp_constants.h | 5 +++++
xrdp/xrdp.ini.in | 4 ++++
xup/xup.c | 28 ++++++++++++++++++++++++++++
4 files changed, 43 insertions(+), 1 deletion(-)
diff --git a/common/xrdp_client_info.h b/common/xrdp_client_info.h
index 32f593cce3..d31495b91f 100644
--- a/common/xrdp_client_info.h
+++ b/common/xrdp_client_info.h
@@ -241,6 +241,11 @@ struct xrdp_client_info
int pad1; /* unused; unicode_input_state */
enum xrdp_capture_code capture_code;
+
+ /* xorgxrdp: frame capture interval (milliseconds) */
+ int rfx_frame_interval;
+ int h264_frame_interval;
+ int normal_frame_interval;
};
enum xrdp_encoder_flags
@@ -260,6 +265,6 @@ enum xrdp_encoder_flags
/* yyyymmdd of last incompatible change to xrdp_client_info */
/* also used for changes to all the xrdp installed headers */
-#define CLIENT_INFO_CURRENT_VERSION 20240514
+#define CLIENT_INFO_CURRENT_VERSION 20241118
#endif
diff --git a/common/xrdp_constants.h b/common/xrdp_constants.h
index 9ab9d17901..c60f1787dd 100644
--- a/common/xrdp_constants.h
+++ b/common/xrdp_constants.h
@@ -86,6 +86,11 @@
#define MCS_SDRQ 25 /* Send Data Request */
#define MCS_SDIN 26 /* Send Data Indication */
+/* xorgxrdp: frame capture interval (milliseconds) */
+#define RFX_FRAME_INTERVAL 32
+#define H264_FRAME_INTERVAL 16
+#define NORMAL_FRAME_INTERVAL 40
+
/******************************************************************************
*
* Constants come from other Microsoft products
diff --git a/xrdp/xrdp.ini.in b/xrdp/xrdp.ini.in
index c240ebfdde..ccbbb1be13 100644
--- a/xrdp/xrdp.ini.in
+++ b/xrdp/xrdp.ini.in
@@ -242,6 +242,10 @@ username=ask
password=ask
port=-1
code=20
+; Frame capture interval (milliseconds)
+h264_frame_interval=16
+rfx_frame_interval=32
+normal_frame_interval=40
[Xvnc]
name=Xvnc
diff --git a/xup/xup.c b/xup/xup.c
index fc96c58f0f..d436e0a02c 100644
--- a/xup/xup.c
+++ b/xup/xup.c
@@ -170,6 +170,22 @@ lib_mod_connect(struct mod *mod)
return 1;
}
+
+ // This is a good place to finalise any parameters that need to
+ // be set.
+ if (mod->client_info.h264_frame_interval <= 0)
+ {
+ mod->client_info.h264_frame_interval = H264_FRAME_INTERVAL;
+ }
+ if (mod->client_info.rfx_frame_interval <= 0)
+ {
+ mod->client_info.rfx_frame_interval = RFX_FRAME_INTERVAL;
+ }
+ if (mod->client_info.normal_frame_interval <= 0)
+ {
+ mod->client_info.normal_frame_interval = NORMAL_FRAME_INTERVAL;
+ }
+
make_stream(s);
g_sprintf(con_port, "%s", mod->port);
@@ -1855,6 +1871,18 @@ lib_mod_set_param(struct mod *mod, const char *name, const char *value)
{
g_strncpy(mod->port, value, 255);
}
+ else if (g_strcasecmp(name, "h264_frame_interval") == 0)
+ {
+ mod->client_info.h264_frame_interval = g_atoi(value);
+ }
+ else if (g_strcasecmp(name, "rfx_frame_interval") == 0)
+ {
+ mod->client_info.rfx_frame_interval = g_atoi(value);
+ }
+ else if (g_strcasecmp(name, "normal_frame_interval") == 0)
+ {
+ mod->client_info.normal_frame_interval = g_atoi(value);
+ }
else if (g_strcasecmp(name, "client_info") == 0)
{
g_memcpy(&(mod->client_info), value, sizeof(mod->client_info));
From 65f9ae4afbd5c8c4c608a9014177542d7d4f51a6 Mon Sep 17 00:00:00 2001
From: Koichiro Iwao
Date: Tue, 19 Nov 2024 21:06:53 +0900
Subject: [PATCH 2/3] Add DEFAULT_ prefix for default frame capture intervals
---
common/xrdp_constants.h | 6 +++---
xup/xup.c | 6 +++---
2 files changed, 6 insertions(+), 6 deletions(-)
diff --git a/common/xrdp_constants.h b/common/xrdp_constants.h
index c60f1787dd..d1e5a1d927 100644
--- a/common/xrdp_constants.h
+++ b/common/xrdp_constants.h
@@ -87,9 +87,9 @@
#define MCS_SDIN 26 /* Send Data Indication */
/* xorgxrdp: frame capture interval (milliseconds) */
-#define RFX_FRAME_INTERVAL 32
-#define H264_FRAME_INTERVAL 16
-#define NORMAL_FRAME_INTERVAL 40
+#define DEFAULT_RFX_FRAME_INTERVAL 32
+#define DEFAULT_H264_FRAME_INTERVAL 16
+#define DEFAULT_NORMAL_FRAME_INTERVAL 40
/******************************************************************************
*
diff --git a/xup/xup.c b/xup/xup.c
index d436e0a02c..2f8d0dad77 100644
--- a/xup/xup.c
+++ b/xup/xup.c
@@ -175,15 +175,15 @@ lib_mod_connect(struct mod *mod)
// be set.
if (mod->client_info.h264_frame_interval <= 0)
{
- mod->client_info.h264_frame_interval = H264_FRAME_INTERVAL;
+ mod->client_info.h264_frame_interval = DEFAULT_H264_FRAME_INTERVAL;
}
if (mod->client_info.rfx_frame_interval <= 0)
{
- mod->client_info.rfx_frame_interval = RFX_FRAME_INTERVAL;
+ mod->client_info.rfx_frame_interval = DEFAULT_RFX_FRAME_INTERVAL;
}
if (mod->client_info.normal_frame_interval <= 0)
{
- mod->client_info.normal_frame_interval = NORMAL_FRAME_INTERVAL;
+ mod->client_info.normal_frame_interval = DEFAULT_NORMAL_FRAME_INTERVAL;
}
make_stream(s);
From 56b4ca051e31650c836cab76eaf3e195117269bb Mon Sep 17 00:00:00 2001
From: Koichiro Iwao
Date: Tue, 19 Nov 2024 21:07:41 +0900
Subject: [PATCH 3/3] Frame capture intervals are not private to xrdp
---
common/xrdp_client_info.h | 10 +++++-----
1 file changed, 5 insertions(+), 5 deletions(-)
diff --git a/common/xrdp_client_info.h b/common/xrdp_client_info.h
index d31495b91f..390d6adb98 100644
--- a/common/xrdp_client_info.h
+++ b/common/xrdp_client_info.h
@@ -192,6 +192,11 @@ struct xrdp_client_info
char variant[16];
char options[256];
+ /* xorgxrdp: frame capture interval (milliseconds) */
+ int rfx_frame_interval;
+ int h264_frame_interval;
+ int normal_frame_interval;
+
/* ==================================================================== */
/* Private to xrdp below this line */
/* ==================================================================== */
@@ -241,11 +246,6 @@ struct xrdp_client_info
int pad1; /* unused; unicode_input_state */
enum xrdp_capture_code capture_code;
-
- /* xorgxrdp: frame capture interval (milliseconds) */
- int rfx_frame_interval;
- int h264_frame_interval;
- int normal_frame_interval;
};
enum xrdp_encoder_flags