Commit 3c94dd0b authored by Simon Morlat's avatar Simon Morlat

repair linphone_core_check_payload_type_usability() and add non regression test.

parent fa1c36dd
...@@ -224,7 +224,7 @@ void linphone_core_update_allocated_audio_bandwidth(LinphoneCore *lc){ ...@@ -224,7 +224,7 @@ void linphone_core_update_allocated_audio_bandwidth(LinphoneCore *lc){
} }
} }
bool_t linphone_core_is_payload_type_usable_for_bandwidth(LinphoneCore *lc, const PayloadType *pt, int bandwidth_limit) bool_t linphone_core_is_payload_type_usable_for_bandwidth(LinphoneCore *lc, const PayloadType *pt, int bandwidth_limit)
{ {
double codec_band; double codec_band;
bool_t ret=FALSE; bool_t ret=FALSE;
...@@ -233,8 +233,8 @@ bool_t linphone_core_is_payload_type_usable_for_bandwidth(LinphoneCore *lc, cons ...@@ -233,8 +233,8 @@ bool_t linphone_core_is_payload_type_usable_for_bandwidth(LinphoneCore *lc, cons
case PAYLOAD_AUDIO_CONTINUOUS: case PAYLOAD_AUDIO_CONTINUOUS:
case PAYLOAD_AUDIO_PACKETIZED: case PAYLOAD_AUDIO_PACKETIZED:
codec_band=get_audio_payload_bandwidth(lc,pt,bandwidth_limit); codec_band=get_audio_payload_bandwidth(lc,pt,bandwidth_limit);
ret=bandwidth_is_greater(bandwidth_limit*1000,codec_band); ret=bandwidth_is_greater(bandwidth_limit,codec_band);
//ms_message("Payload %s: %g",pt->mime_type,codec_band); /*ms_message("Payload %s: codec_bandwidth=%g, bandwidth_limit=%i",pt->mime_type,codec_band,bandwidth_limit);*/
break; break;
case PAYLOAD_VIDEO: case PAYLOAD_VIDEO:
if (bandwidth_limit!=0) {/* infinite (-1) or strictly positive*/ if (bandwidth_limit!=0) {/* infinite (-1) or strictly positive*/
...@@ -248,7 +248,9 @@ bool_t linphone_core_is_payload_type_usable_for_bandwidth(LinphoneCore *lc, cons ...@@ -248,7 +248,9 @@ bool_t linphone_core_is_payload_type_usable_for_bandwidth(LinphoneCore *lc, cons
/* return TRUE if codec can be used with bandwidth, FALSE else*/ /* return TRUE if codec can be used with bandwidth, FALSE else*/
bool_t linphone_core_check_payload_type_usability(LinphoneCore *lc, const PayloadType *pt){ bool_t linphone_core_check_payload_type_usability(LinphoneCore *lc, const PayloadType *pt){
bool_t ret=linphone_core_is_payload_type_usable_for_bandwidth(lc, pt, linphone_core_get_payload_type_bitrate(lc,pt)); int maxbw=get_min_bandwidth(linphone_core_get_download_bandwidth(lc),
linphone_core_get_upload_bandwidth(lc));
bool_t ret=linphone_core_is_payload_type_usable_for_bandwidth(lc, pt, maxbw);
if ((pt->type==PAYLOAD_AUDIO_CONTINUOUS || pt->type==PAYLOAD_AUDIO_PACKETIZED) if ((pt->type==PAYLOAD_AUDIO_CONTINUOUS || pt->type==PAYLOAD_AUDIO_PACKETIZED)
&& lc->sound_conf.capt_sndcard && lc->sound_conf.capt_sndcard
&& !(ms_snd_card_get_capabilities(lc->sound_conf.capt_sndcard) & MS_SND_CARD_CAP_BUILTIN_ECHO_CANCELLER) && !(ms_snd_card_get_capabilities(lc->sound_conf.capt_sndcard) & MS_SND_CARD_CAP_BUILTIN_ECHO_CANCELLER)
......
...@@ -349,14 +349,15 @@ static MS2_INLINE int get_min_bandwidth(int dbw, int ubw){ ...@@ -349,14 +349,15 @@ static MS2_INLINE int get_min_bandwidth(int dbw, int ubw){
} }
static MS2_INLINE bool_t bandwidth_is_greater(int bw1, int bw2){ static MS2_INLINE bool_t bandwidth_is_greater(int bw1, int bw2){
if (bw1<0) return TRUE; if (bw1<=0) return TRUE;
else if (bw2<0) return FALSE; else if (bw2<=0) return FALSE;
else return bw1>=bw2; else return bw1>=bw2;
} }
static MS2_INLINE int get_remaining_bandwidth_for_video(int total, int audio){ static MS2_INLINE int get_remaining_bandwidth_for_video(int total, int audio){
if (total<=0) return 0; int ret = total-audio-10;
return total-audio-10; if (ret < 0) ret = 0;
return ret;
} }
static MS2_INLINE void set_string(char **dest, const char *src){ static MS2_INLINE void set_string(char **dest, const char *src){
......
...@@ -265,6 +265,30 @@ static void devices_reload_test(void) { ...@@ -265,6 +265,30 @@ static void devices_reload_test(void) {
linphone_core_manager_destroy(mgr); linphone_core_manager_destroy(mgr);
} }
static void codec_usability_test(void) {
LinphoneCoreManager *mgr = linphone_core_manager_new2("empty_rc", FALSE);
PayloadType *pt = linphone_core_find_payload_type(mgr->lc, "PCMU", 8000, -1);
BC_ASSERT_TRUE(pt!=NULL);
if (!pt) goto end;
/*no limit*/
linphone_core_set_upload_bandwidth(mgr->lc, 0);
linphone_core_set_download_bandwidth(mgr->lc, 0);
BC_ASSERT_TRUE(linphone_core_check_payload_type_usability(mgr->lc, pt));
/*low limit*/
linphone_core_set_upload_bandwidth(mgr->lc, 50);
linphone_core_set_download_bandwidth(mgr->lc, 50);
BC_ASSERT_FALSE(linphone_core_check_payload_type_usability(mgr->lc, pt));
/*reasonable limit*/
linphone_core_set_upload_bandwidth(mgr->lc, 200);
linphone_core_set_download_bandwidth(mgr->lc, 200);
BC_ASSERT_TRUE(linphone_core_check_payload_type_usability(mgr->lc, pt));
end:
linphone_core_manager_destroy(mgr);
}
test_t setup_tests[] = { test_t setup_tests[] = {
{ "Version check", linphone_version_test }, { "Version check", linphone_version_test },
{ "Linphone Address", linphone_address_test }, { "Linphone Address", linphone_address_test },
...@@ -278,7 +302,8 @@ test_t setup_tests[] = { ...@@ -278,7 +302,8 @@ test_t setup_tests[] = {
{ "LPConfig zero_len value from file", linphone_lpconfig_from_file_zerolen_value }, { "LPConfig zero_len value from file", linphone_lpconfig_from_file_zerolen_value },
{ "LPConfig zero_len value from XML", linphone_lpconfig_from_xml_zerolen_value }, { "LPConfig zero_len value from XML", linphone_lpconfig_from_xml_zerolen_value },
{ "Chat room", chat_root_test }, { "Chat room", chat_root_test },
{ "Devices reload", devices_reload_test } { "Devices reload", devices_reload_test },
{ "Codec usability", codec_usability_test }
}; };
test_suite_t setup_test_suite = { test_suite_t setup_test_suite = {
......
Markdown is supported
0% or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment