From e4c70dd7ad50b3debd56281c66ec08dfe6d0a3f8 Mon Sep 17 00:00:00 2001 From: Sylvain Berfini Date: Mon, 22 May 2017 17:32:09 +0200 Subject: [PATCH] Added test for video bandwidth estimator --- tester/call_single_tester.c | 1 + tester/liblinphone_tester.h | 1 + tester/quality_reporting_tester.c | 38 ++++++++++++++++++++++++++++++- 3 files changed, 39 insertions(+), 1 deletion(-) diff --git a/tester/call_single_tester.c b/tester/call_single_tester.c index 416a5c74b..a078e6f21 100644 --- a/tester/call_single_tester.c +++ b/tester/call_single_tester.c @@ -89,6 +89,7 @@ static void rtcp_received(stats* counters, mblk_t *packet) { do{ if (rtcp_is_type(packet, RTCP_RTPFB)){ if (rtcp_RTPFB_get_type(packet) == RTCP_RTPFB_TMMBR) { + counters->number_of_tmmbr_received++; counters->last_tmmbr_value_received = (int)rtcp_RTPFB_tmmbr_get_max_bitrate(packet); } } diff --git a/tester/liblinphone_tester.h b/tester/liblinphone_tester.h index cf180625c..15f55b0d6 100644 --- a/tester/liblinphone_tester.h +++ b/tester/liblinphone_tester.h @@ -259,6 +259,7 @@ typedef struct _stats { int current_bandwidth_index[2] /*audio and video only*/; int number_of_rtcp_generic_nack; + int number_of_tmmbr_received; int last_tmmbr_value_received; }stats; diff --git a/tester/quality_reporting_tester.c b/tester/quality_reporting_tester.c index 055813480..5d3818e2e 100644 --- a/tester/quality_reporting_tester.c +++ b/tester/quality_reporting_tester.c @@ -429,6 +429,41 @@ static void quality_reporting_interval_report_video_and_rtt(void) { } #endif +static void video_bandwidth_estimation(void){ + LinphoneCoreManager *marie = linphone_core_manager_new("marie_rc"); + LinphoneCoreManager *pauline = linphone_core_manager_new("pauline_rc"); + LinphoneVideoPolicy pol = {0}; + OrtpNetworkSimulatorParams simparams = { 0 }; + + linphone_core_set_video_device(marie->lc, "Mire: Mire (synthetic moving picture)"); + linphone_core_enable_video_capture(marie->lc, TRUE); + linphone_core_enable_video_display(marie->lc, TRUE); + linphone_core_enable_video_capture(pauline->lc, TRUE); + linphone_core_enable_video_display(pauline->lc, TRUE); + + pol.automatically_accept = TRUE; + pol.automatically_initiate = TRUE; + linphone_core_set_video_policy(marie->lc, &pol); + linphone_core_set_video_policy(pauline->lc, &pol); + + linphone_core_set_preferred_video_size_by_name(marie->lc, "vga"); + simparams.mode = OrtpNetworkSimulatorOutbound; + simparams.enabled = TRUE; + simparams.max_bandwidth = 300000; + linphone_core_set_network_simulator_params(marie->lc, &simparams); + + if (BC_ASSERT_TRUE(call(marie, pauline))){ + /*wait for the first TMMBR*/ + BC_ASSERT_TRUE(wait_for_until(marie->lc, pauline->lc, &marie->stat.number_of_tmmbr_received, 1, 50000)); + BC_ASSERT_GREATER((float)marie->stat.last_tmmbr_value_received, 270000.f, float, "%f"); + BC_ASSERT_LOWER((float)marie->stat.last_tmmbr_value_received, 330000.f, float, "%f"); + + end_call(marie, pauline); + } + linphone_core_manager_destroy(marie); + linphone_core_manager_destroy(pauline); +} + test_t quality_reporting_tests[] = { TEST_NO_TAG("Not used if no config", quality_reporting_not_used_without_config), TEST_NO_TAG("Call term session report not sent if call did not start", quality_reporting_not_sent_if_call_not_started), @@ -440,7 +475,8 @@ test_t quality_reporting_tests[] = { TEST_NO_TAG("Interval report if interval is configured with video and realtime text", quality_reporting_interval_report_video_and_rtt), TEST_NO_TAG("Session report sent if video stopped during call", quality_reporting_session_report_if_video_stopped), #endif - TEST_NO_TAG("Sent using custom route", quality_reporting_sent_using_custom_route) + TEST_NO_TAG("Sent using custom route", quality_reporting_sent_using_custom_route), + TEST_NO_TAG("Video bandwidth estimation", video_bandwidth_estimation) }; test_suite_t quality_reporting_test_suite = {"QualityReporting", NULL, NULL, liblinphone_tester_before_each, liblinphone_tester_after_each,