Skip to content

Commit

Permalink
GFX: allow H264-only or RFX-only setup
Browse files Browse the repository at this point in the history
  • Loading branch information
metalefty committed Aug 23, 2024
1 parent 0c9a677 commit 8970693
Show file tree
Hide file tree
Showing 8 changed files with 111 additions and 4 deletions.
3 changes: 2 additions & 1 deletion tests/xrdp/Makefile.am
Original file line number Diff line number Diff line change
Expand Up @@ -25,8 +25,9 @@ EXTRA_DIST = \
gfx/gfx.toml\
gfx/gfx_codec_order_undefined.toml \
gfx/gfx_codec_h264_preferred.toml \
gfx/gfx_codec_h264_only.toml \
gfx/gfx_codec_rfx_preferred.toml

gfx/gfx_codec_rfx_only.toml

TESTS = test_xrdp
check_PROGRAMS = test_xrdp
Expand Down
18 changes: 18 additions & 0 deletions tests/xrdp/gfx/gfx_codec_h264_only.toml
Original file line number Diff line number Diff line change
@@ -0,0 +1,18 @@
[codec]
order = [ "H264" ]

[x264.default]
preset = "ultrafast"
tune = "zerolatency"
profile = "main" # profile is forced to baseline if preset == ultrafast
vbv_max_bitrate = 0
vbv_buffer_size = 0
fps_num = 24
fps_den = 1

[x264.lan]
[x264.wan]
[x264.broadband_high]
[x264.satellite]
[x264.broadband_low]
[x264.modem]
17 changes: 16 additions & 1 deletion tests/xrdp/gfx/gfx_codec_h264_preferred.toml
Original file line number Diff line number Diff line change
@@ -1,3 +1,18 @@
[codec]

order = [ "H264", "RFX" ]

[x264.default]
preset = "ultrafast"
tune = "zerolatency"
profile = "main" # profile is forced to baseline if preset == ultrafast
vbv_max_bitrate = 0
vbv_buffer_size = 0
fps_num = 24
fps_den = 1

[x264.lan]
[x264.wan]
[x264.broadband_high]
[x264.satellite]
[x264.broadband_low]
[x264.modem]
17 changes: 16 additions & 1 deletion tests/xrdp/gfx/gfx_codec_order_undefined.toml
Original file line number Diff line number Diff line change
@@ -1,3 +1,18 @@
[codec]

order = [ ]

[x264.default]
preset = "ultrafast"
tune = "zerolatency"
profile = "main" # profile is forced to baseline if preset == ultrafast
vbv_max_bitrate = 0
vbv_buffer_size = 0
fps_num = 24
fps_den = 1

[x264.lan]
[x264.wan]
[x264.broadband_high]
[x264.satellite]
[x264.broadband_low]
[x264.modem]
18 changes: 18 additions & 0 deletions tests/xrdp/gfx/gfx_codec_rfx_only.toml
Original file line number Diff line number Diff line change
@@ -0,0 +1,18 @@
[codec]
order = [ "RFX" ]

[x264.default]
preset = "ultrafast"
tune = "zerolatency"
profile = "main" # profile is forced to baseline if preset == ultrafast
vbv_max_bitrate = 0
vbv_buffer_size = 0
fps_num = 24
fps_den = 1

[x264.lan]
[x264.wan]
[x264.broadband_high]
[x264.satellite]
[x264.broadband_low]
[x264.modem]
17 changes: 16 additions & 1 deletion tests/xrdp/gfx/gfx_codec_rfx_preferred.toml
Original file line number Diff line number Diff line change
@@ -1,3 +1,18 @@
[codec]

order = [ "RFX", "H264" ]

[x264.default]
preset = "ultrafast"
tune = "zerolatency"
profile = "main" # profile is forced to baseline if preset == ultrafast
vbv_max_bitrate = 0
vbv_buffer_size = 0
fps_num = 24
fps_den = 1

[x264.lan]
[x264.wan]
[x264.broadband_high]
[x264.satellite]
[x264.broadband_low]
[x264.modem]
16 changes: 16 additions & 0 deletions tests/xrdp/test_tconfig.c
Original file line number Diff line number Diff line change
Expand Up @@ -37,14 +37,30 @@ START_TEST(test_tconfig_gfx_codec_order)

/* H264 earlier */
tconfig_load_gfx("./gfx/gfx_codec_h264_preferred.toml", &gfxconfig);
ck_assert_int_gt(gfxconfig.codec.h264_idx, -1);
ck_assert_int_gt(gfxconfig.codec.rfx_idx, -1);
ck_assert_int_lt(gfxconfig.codec.h264_idx, gfxconfig.codec.rfx_idx);

/* H264 only */
tconfig_load_gfx("./gfx/gfx_codec_h264_only.toml", &gfxconfig);
ck_assert_int_gt(gfxconfig.codec.h264_idx, -1);
ck_assert_int_eq(gfxconfig.codec.rfx_idx, -1);

/* RFX earlier */
tconfig_load_gfx("./gfx/gfx_codec_rfx_preferred.toml", &gfxconfig);
ck_assert_int_gt(gfxconfig.codec.h264_idx, -1);
ck_assert_int_gt(gfxconfig.codec.rfx_idx, -1);
ck_assert_int_lt(gfxconfig.codec.rfx_idx, gfxconfig.codec.h264_idx);

/* RFX only */
tconfig_load_gfx("./gfx/gfx_codec_rfx_only.toml", &gfxconfig);
ck_assert_int_eq(gfxconfig.codec.h264_idx, -1);
ck_assert_int_gt(gfxconfig.codec.rfx_idx, -1);

/* RFX is preferred if order undefined */
tconfig_load_gfx("./gfx/gfx_codec_order_undefined.toml", &gfxconfig);
ck_assert_int_gt(gfxconfig.codec.h264_idx, -1);
ck_assert_int_gt(gfxconfig.codec.rfx_idx, -1);
ck_assert_int_lt(gfxconfig.codec.h264_idx, gfxconfig.codec.rfx_idx);
}
END_TEST
Expand Down
9 changes: 9 additions & 0 deletions xrdp/xrdp_tconfig.c
Original file line number Diff line number Diff line change
Expand Up @@ -201,11 +201,19 @@ tconfig_load_gfx_x264_ct(toml_table_t *tfile, const int connection_type,

static int tconfig_load_gfx_order(toml_table_t *tfile, struct xrdp_tconfig_gfx *config)
{
/*
* This config loader is not responsible to check if xrdp is built with
* H264/RFX support. Just loads configurations as-is.
*/

TCLOG(LOG_LEVEL_DEBUG, "tconfig_load_gfx_order:");

int h264_found = 0;
int rfx_found = 0;

config->codec.h264_idx = -1;
config->codec.rfx_idx = -1;

toml_table_t *codec = toml_table_in(tfile, "codec");
if (!codec)
{
Expand Down Expand Up @@ -253,6 +261,7 @@ static int tconfig_load_gfx_order(toml_table_t *tfile, struct xrdp_tconfig_gfx *
return 0;

return_default_codec_order:
/* prefer H264 if no priority found */
config->codec.h264_idx = 0;
config->codec.rfx_idx = 1;

Expand Down

0 comments on commit 8970693

Please sign in to comment.