tests: add tests for OpenH264 params and prefered H264 encoder

(cherry picked from commit 92bd0812a398bc8d966e978cac32d3f80ffb1df2)
This commit is contained in:
Koichiro Iwao
2024-11-28 23:21:20 +09:00
parent 49c50701e2
commit 032b9b070b
6 changed files with 413 additions and 5 deletions
+9 -4
View File
@@ -22,12 +22,17 @@ EXTRA_DIST = \
test1.jpg \
test_alpha_blend.png \
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_h264_preferred.toml \
gfx/gfx_codec_order_undefined.toml \
gfx/gfx_codec_rfx_only.toml \
gfx/gfx_codec_rfx_preferred_odd.toml \
gfx/gfx_codec_rfx_only.toml
gfx/gfx_codec_rfx_preferred.toml \
gfx/gfx_h264_encoder_invalid.toml \
gfx/gfx_h264_encoder_openh264.toml \
gfx/gfx_h264_encoder_undefined.toml \
gfx/gfx_h264_encoder_x264.toml \
gfx/gfx_missing_h264.toml
TESTS = test_xrdp
check_PROGRAMS = test_xrdp
@@ -0,0 +1,86 @@
[codec]
order = [ "H.264", "RFX" ]
# Specify a preferred H.264 encoder, "x264" or "OpenH264".
# This parameter takes effect only when more than one encoder is
# enabled at compile time. If only one encoder is enabled, the encoder
# will be used regardless the value of this parameter.
h264_encoder = "FreeH264"
#
# Configurations for x264
#
[x264.default]
# NOTE: x264 specifies bitrate in unit of kbps.
preset = "ultrafast"
tune = "zerolatency"
profile = "main" # profile is forced to baseline if preset == ultrafast
vbv_max_bitrate = 0
vbv_buffer_size = 0
fps_num = 60
fps_den = 1
[x264.lan]
# inherits default
[x264.wan]
vbv_max_bitrate = 15_000
vbv_buffer_size = 1_500
[x264.broadband_high]
preset = "superfast"
vbv_max_bitrate = 8_000
vbv_buffer_Size = 800
[x264.satellite]
preset = "superfast"
vbv_max_bitrate = 5_000
vbv_buffer_size = 500
[x264.broadband_low]
preset = "veryfast"
vbv_max_bitrate = 1_600
vbv_buffer_size = 66
[x264.modem]
preset = "fast"
vbv_max_bitrate = 1_200
vbv_buffer_size = 50
#
# Configurations for OpenH264
#
[OpenH264.default]
# NOTE: OpenH264 specifies bitrate in unit of bps, not kbps.
EnableFrameSkip = false
TargetBitrate = 20_000_000
MaxBitrate = 0 # unspecified
MaxFrameRate = 60.0
[OpenH264.lan]
# inherits default
[OpenH264.wan]
TargetBitrate = 10_000_000
MaxBitrate = 12_000_000
[OpenH264.broadband_high]
EnableFrameSkip = true
TargetBitrate = 8_000_000
MaxBitrate = 10_000_000
[OpenH264.satellite]
EnableFrameSkip = true
TargetBitrate = 4_000_000
MaxBitrate = 6_000_000
[OpenH264.broadband_low]
EnableFrameSkip = true
TargetBitrate = 1_600_000
MaxBitrate = 1_800_000
[OpenH264.modem]
EnableFrameSkip = true
TargetBitrate = 600_000
MaxBitrate = 1_200_000
@@ -0,0 +1,86 @@
[codec]
order = [ "H.264", "RFX" ]
# Specify a preferred H.264 encoder, "x264" or "OpenH264".
# This parameter takes effect only when more than one encoder is
# enabled at compile time. If only one encoder is enabled, the encoder
# will be used regardless the value of this parameter.
h264_encoder = "OpenH264"
#
# Configurations for x264
#
[x264.default]
# NOTE: x264 specifies bitrate in unit of kbps.
preset = "ultrafast"
tune = "zerolatency"
profile = "main" # profile is forced to baseline if preset == ultrafast
vbv_max_bitrate = 0
vbv_buffer_size = 0
fps_num = 60
fps_den = 1
[x264.lan]
# inherits default
[x264.wan]
vbv_max_bitrate = 15_000
vbv_buffer_size = 1_500
[x264.broadband_high]
preset = "superfast"
vbv_max_bitrate = 8_000
vbv_buffer_Size = 800
[x264.satellite]
preset = "superfast"
vbv_max_bitrate = 5_000
vbv_buffer_size = 500
[x264.broadband_low]
preset = "veryfast"
vbv_max_bitrate = 1_600
vbv_buffer_size = 66
[x264.modem]
preset = "fast"
vbv_max_bitrate = 1_200
vbv_buffer_size = 50
#
# Configurations for OpenH264
#
[OpenH264.default]
# NOTE: OpenH264 specifies bitrate in unit of bps, not kbps.
EnableFrameSkip = false
TargetBitrate = 20_000_000
MaxBitrate = 0 # unspecified
MaxFrameRate = 60.0
[OpenH264.lan]
# inherits default
[OpenH264.wan]
TargetBitrate = 10_000_000
MaxBitrate = 12_000_000
[OpenH264.broadband_high]
EnableFrameSkip = true
TargetBitrate = 8_000_000
MaxBitrate = 10_000_000
[OpenH264.satellite]
EnableFrameSkip = true
TargetBitrate = 4_000_000
MaxBitrate = 6_000_000
[OpenH264.broadband_low]
EnableFrameSkip = true
TargetBitrate = 1_600_000
MaxBitrate = 1_800_000
[OpenH264.modem]
EnableFrameSkip = true
TargetBitrate = 600_000
MaxBitrate = 1_200_000
@@ -0,0 +1,86 @@
[codec]
order = [ "H.264", "RFX" ]
# Specify a preferred H.264 encoder, "x264" or "OpenH264".
# This parameter takes effect only when more than one encoder is
# enabled at compile time. If only one encoder is enabled, the encoder
# will be used regardless the value of this parameter.
#h264_encoder = "OpenH264"
#
# Configurations for x264
#
[x264.default]
# NOTE: x264 specifies bitrate in unit of kbps.
preset = "ultrafast"
tune = "zerolatency"
profile = "main" # profile is forced to baseline if preset == ultrafast
vbv_max_bitrate = 0
vbv_buffer_size = 0
fps_num = 60
fps_den = 1
[x264.lan]
# inherits default
[x264.wan]
vbv_max_bitrate = 15_000
vbv_buffer_size = 1_500
[x264.broadband_high]
preset = "superfast"
vbv_max_bitrate = 8_000
vbv_buffer_Size = 800
[x264.satellite]
preset = "superfast"
vbv_max_bitrate = 5_000
vbv_buffer_size = 500
[x264.broadband_low]
preset = "veryfast"
vbv_max_bitrate = 1_600
vbv_buffer_size = 66
[x264.modem]
preset = "fast"
vbv_max_bitrate = 1_200
vbv_buffer_size = 50
#
# Configurations for OpenH264
#
[OpenH264.default]
# NOTE: OpenH264 specifies bitrate in unit of bps, not kbps.
EnableFrameSkip = false
TargetBitrate = 20_000_000
MaxBitrate = 0 # unspecified
MaxFrameRate = 60.0
[OpenH264.lan]
# inherits default
[OpenH264.wan]
TargetBitrate = 10_000_000
MaxBitrate = 12_000_000
[OpenH264.broadband_high]
EnableFrameSkip = true
TargetBitrate = 8_000_000
MaxBitrate = 10_000_000
[OpenH264.satellite]
EnableFrameSkip = true
TargetBitrate = 4_000_000
MaxBitrate = 6_000_000
[OpenH264.broadband_low]
EnableFrameSkip = true
TargetBitrate = 1_600_000
MaxBitrate = 1_800_000
[OpenH264.modem]
EnableFrameSkip = true
TargetBitrate = 600_000
MaxBitrate = 1_200_000
+86
View File
@@ -0,0 +1,86 @@
[codec]
order = [ "H.264", "RFX" ]
# Specify a preferred H.264 encoder, "x264" or "OpenH264".
# This parameter takes effect only when more than one encoder is
# enabled at compile time. If only one encoder is enabled, the encoder
# will be used regardless the value of this parameter.
h264_encoder = "x264"
#
# Configurations for x264
#
[x264.default]
# NOTE: x264 specifies bitrate in unit of kbps.
preset = "ultrafast"
tune = "zerolatency"
profile = "main" # profile is forced to baseline if preset == ultrafast
vbv_max_bitrate = 0
vbv_buffer_size = 0
fps_num = 60
fps_den = 1
[x264.lan]
# inherits default
[x264.wan]
vbv_max_bitrate = 15_000
vbv_buffer_size = 1_500
[x264.broadband_high]
preset = "superfast"
vbv_max_bitrate = 8_000
vbv_buffer_Size = 800
[x264.satellite]
preset = "superfast"
vbv_max_bitrate = 5_000
vbv_buffer_size = 500
[x264.broadband_low]
preset = "veryfast"
vbv_max_bitrate = 1_600
vbv_buffer_size = 66
[x264.modem]
preset = "fast"
vbv_max_bitrate = 1_200
vbv_buffer_size = 50
#
# Configurations for OpenH264
#
[OpenH264.default]
# NOTE: OpenH264 specifies bitrate in unit of bps, not kbps.
EnableFrameSkip = false
TargetBitrate = 20_000_000
MaxBitrate = 0 # unspecified
MaxFrameRate = 60.0
[OpenH264.lan]
# inherits default
[OpenH264.wan]
TargetBitrate = 10_000_000
MaxBitrate = 12_000_000
[OpenH264.broadband_high]
EnableFrameSkip = true
TargetBitrate = 8_000_000
MaxBitrate = 10_000_000
[OpenH264.satellite]
EnableFrameSkip = true
TargetBitrate = 4_000_000
MaxBitrate = 6_000_000
[OpenH264.broadband_low]
EnableFrameSkip = true
TargetBitrate = 1_600_000
MaxBitrate = 1_800_000
[OpenH264.modem]
EnableFrameSkip = true
TargetBitrate = 600_000
MaxBitrate = 1_200_000
+59
View File
@@ -14,6 +14,56 @@ START_TEST(test_tconfig_gfx_always_success)
}
END_TEST
START_TEST(test_tconfig_gfx_h264_oh264)
{
struct xrdp_tconfig_gfx gfxconfig;
tconfig_load_gfx(GFXCONF_STUBDIR "/gfx_h264_encoder_openh264.toml", &gfxconfig);
/* H.264 encoder is OpenH264 */
ck_assert_int_eq(gfxconfig.h264_encoder, XTC_H264_OPENH264);
}
START_TEST(test_tconfig_gfx_h264_x264)
{
struct xrdp_tconfig_gfx gfxconfig;
tconfig_load_gfx(GFXCONF_STUBDIR "/gfx_h264_encoder_x264.toml", &gfxconfig);
/* H.264 encoder is x264 */
ck_assert_int_eq(gfxconfig.h264_encoder, XTC_H264_X264);
}
START_TEST(test_tconfig_gfx_h264_undefined)
{
struct xrdp_tconfig_gfx gfxconfig;
tconfig_load_gfx(GFXCONF_STUBDIR "/gfx_h264_encoder_undefined.toml", &gfxconfig);
/* H.264 encoder is x264 if undefined */
ck_assert_int_eq(gfxconfig.h264_encoder, XTC_H264_X264);
}
START_TEST(test_tconfig_gfx_h264_invalid)
{
struct xrdp_tconfig_gfx gfxconfig;
tconfig_load_gfx(GFXCONF_STUBDIR "/gfx_h264_encoder_invalid.toml", &gfxconfig);
/* H.264 encoder is x264 if invalid, unknown encoder specified */
ck_assert_int_eq(gfxconfig.h264_encoder, XTC_H264_X264);
}
START_TEST(test_tconfig_gfx_oh264_load_basic)
{
struct xrdp_tconfig_gfx gfxconfig;
int rv = tconfig_load_gfx(GFXCONF_STUBDIR "/gfx.toml", &gfxconfig);
ck_assert_int_eq(rv, 0);
/* default */
ck_assert_int_eq(gfxconfig.openh264_param[0].EnableFrameSkip, 0);
ck_assert_int_eq(gfxconfig.openh264_param[0].TargetBitrate, 20000000);
ck_assert_int_eq(gfxconfig.openh264_param[0].MaxBitrate, 0);
ck_assert_float_eq(gfxconfig.openh264_param[0].MaxFrameRate, 60.0);
}
START_TEST(test_tconfig_gfx_x264_load_basic)
{
struct xrdp_tconfig_gfx gfxconfig;
@@ -111,6 +161,15 @@ make_suite_tconfig_load_gfx(void)
tcase_add_test(tc_tconfig_load_gfx, test_tconfig_gfx_missing_file);
tcase_add_test(tc_tconfig_load_gfx, test_tconfig_gfx_missing_h264);
/* OpenH264 */
tcase_add_test(tc_tconfig_load_gfx, test_tconfig_gfx_oh264_load_basic);
/* H.264 encoder */
tcase_add_test(tc_tconfig_load_gfx, test_tconfig_gfx_h264_oh264);
tcase_add_test(tc_tconfig_load_gfx, test_tconfig_gfx_h264_x264);
tcase_add_test(tc_tconfig_load_gfx, test_tconfig_gfx_h264_undefined);
tcase_add_test(tc_tconfig_load_gfx, test_tconfig_gfx_h264_invalid);
suite_add_tcase(s, tc_tconfig_load_gfx);
return s;