rdp: Allow configuring the refresh rate
We currently hardcode a 60Hz update rate for the rdp backend. In some cases it may be useful to override this to increase the rate for a faster monitor, or to decrease it to reduce network traffic. Co-authored-by: Steve Pronovost <spronovo@microsoft.com> Co-authored-by: Brenton DeGeer <brdegeer@microsoft.com> Signed-off-by: Hideyuki Nagase <hideyukn@microsoft.com> Signed-off-by: Steve Pronovost <spronovo@microsoft.com> Signed-off-by: Brenton DeGeer <brdegeer@microsoft.com>
This commit is contained in:
parent
bd214edf26
commit
cf5ddd05cb
@ -2777,6 +2777,7 @@ weston_rdp_backend_config_init(struct weston_rdp_backend_config *config)
|
||||
config->no_clients_resize = 0;
|
||||
config->force_no_compression = 0;
|
||||
config->remotefx_codec = true;
|
||||
config->refresh_rate = RDP_DEFAULT_FREQ;
|
||||
}
|
||||
|
||||
static int
|
||||
@ -2784,6 +2785,7 @@ load_rdp_backend(struct weston_compositor *c,
|
||||
int *argc, char *argv[], struct weston_config *wc)
|
||||
{
|
||||
struct weston_rdp_backend_config config = {{ 0, }};
|
||||
struct weston_config_section *section;
|
||||
int ret = 0;
|
||||
bool no_remotefx_codec = false;
|
||||
|
||||
@ -2812,6 +2814,10 @@ load_rdp_backend(struct weston_compositor *c,
|
||||
config.remotefx_codec = !no_remotefx_codec;
|
||||
|
||||
wet_set_simple_head_configurator(c, rdp_backend_output_configure);
|
||||
section = weston_config_get_section(wc, "rdp", NULL, NULL);
|
||||
weston_config_section_get_int(section, "refresh-rate",
|
||||
&config.refresh_rate,
|
||||
RDP_DEFAULT_FREQ);
|
||||
|
||||
ret = weston_compositor_load_backend(c, WESTON_BACKEND_RDP,
|
||||
&config.base);
|
||||
|
@ -34,6 +34,7 @@ extern "C" {
|
||||
#include <libweston/plugin-registry.h>
|
||||
|
||||
#define WESTON_RDP_OUTPUT_API_NAME "weston_rdp_output_api_v1"
|
||||
#define RDP_DEFAULT_FREQ 60
|
||||
|
||||
struct weston_rdp_output_api {
|
||||
/** Initialize a RDP output with specified width and height.
|
||||
@ -68,6 +69,7 @@ struct weston_rdp_backend_config {
|
||||
int force_no_compression;
|
||||
bool remotefx_codec;
|
||||
int external_listener_fd;
|
||||
int refresh_rate;
|
||||
};
|
||||
|
||||
#ifdef __cplusplus
|
||||
|
@ -311,6 +311,7 @@ rdp_insert_new_mode(struct weston_output *output, int width, int height, int rat
|
||||
static struct weston_mode *
|
||||
ensure_matching_mode(struct weston_output *output, struct weston_mode *target)
|
||||
{
|
||||
struct rdp_backend *b = to_rdp_backend(output->compositor);
|
||||
struct weston_mode *local;
|
||||
|
||||
wl_list_for_each(local, &output->mode_list, link) {
|
||||
@ -318,7 +319,7 @@ ensure_matching_mode(struct weston_output *output, struct weston_mode *target)
|
||||
return local;
|
||||
}
|
||||
|
||||
return rdp_insert_new_mode(output, target->width, target->height, RDP_MODE_FREQ);
|
||||
return rdp_insert_new_mode(output, target->width, target->height, b->rdp_monitor_refresh_rate);
|
||||
}
|
||||
|
||||
static int
|
||||
@ -379,6 +380,7 @@ rdp_output_set_size(struct weston_output *base,
|
||||
int width, int height)
|
||||
{
|
||||
struct rdp_output *output = to_rdp_output(base);
|
||||
struct rdp_backend *rdpBackend = to_rdp_backend(base->compositor);
|
||||
struct weston_head *head;
|
||||
struct weston_mode *currentMode;
|
||||
struct weston_mode initMode;
|
||||
@ -399,8 +401,7 @@ rdp_output_set_size(struct weston_output *base,
|
||||
initMode.flags = WL_OUTPUT_MODE_CURRENT | WL_OUTPUT_MODE_PREFERRED;
|
||||
initMode.width = width;
|
||||
initMode.height = height;
|
||||
initMode.refresh = RDP_MODE_FREQ;
|
||||
|
||||
initMode.refresh = rdpBackend->rdp_monitor_refresh_rate;
|
||||
currentMode = ensure_matching_mode(&output->base, &initMode);
|
||||
if (!currentMode)
|
||||
return -1;
|
||||
@ -1370,6 +1371,9 @@ rdp_backend_create(struct weston_compositor *compositor,
|
||||
|
||||
/* After here, rdp_debug() is ready to be used */
|
||||
|
||||
b->rdp_monitor_refresh_rate = config->refresh_rate * 1000;
|
||||
rdp_debug(b, "RDP backend: WESTON_RDP_MONITOR_REFRESH_RATE: %d\n", b->rdp_monitor_refresh_rate);
|
||||
|
||||
compositor->backend = &b->base;
|
||||
|
||||
if (config->server_cert && config->server_key) {
|
||||
@ -1485,6 +1489,7 @@ config_init_to_defaults(struct weston_rdp_backend_config *config)
|
||||
config->force_no_compression = 0;
|
||||
config->remotefx_codec = true;
|
||||
config->external_listener_fd = -1;
|
||||
config->refresh_rate = RDP_DEFAULT_FREQ;
|
||||
}
|
||||
|
||||
WL_EXPORT int
|
||||
|
@ -49,7 +49,6 @@
|
||||
|
||||
#define MAX_FREERDP_FDS 32
|
||||
#define DEFAULT_AXIS_STEP_DISTANCE 10
|
||||
#define RDP_MODE_FREQ 60 * 1000
|
||||
#define DEFAULT_PIXEL_FORMAT PIXEL_FORMAT_BGRA32
|
||||
|
||||
struct rdp_output;
|
||||
@ -72,6 +71,7 @@ struct rdp_backend {
|
||||
int force_no_compression;
|
||||
bool remotefx_codec;
|
||||
int external_listener_fd;
|
||||
int rdp_monitor_refresh_rate;
|
||||
};
|
||||
|
||||
enum peer_item_flags {
|
||||
|
@ -24,6 +24,19 @@ backend will announce security options based on which files have been given.
|
||||
The RDP backend is multi-seat aware, so if two clients connect on the backend,
|
||||
they will get their own seat.
|
||||
|
||||
.\" ***************************************************************
|
||||
.SH CONFIGURATION
|
||||
.
|
||||
The RDP backend uses the following entries from
|
||||
.BR weston.ini .
|
||||
.SS Section rdp
|
||||
.TP
|
||||
\fBrefresh-rate\fR=\fIrate\fR
|
||||
Specifies the desktop redraw rate in Hz. If unspecified, the default is 60Hz. Changing
|
||||
this may be useful if you have a faster than 60Hz display, or if you want to reduce updates to
|
||||
reduce network traffic.
|
||||
|
||||
|
||||
.\" ***************************************************************
|
||||
.SH OPTIONS
|
||||
.
|
||||
|
Loading…
x
Reference in New Issue
Block a user