bool_t linphone_core_is_payload_type_usable_for_bandwidth(LinphoneCore *lc, PayloadType *pt, int bandwidth_limit) { double codec_band; bool_t ret=FALSE; switch (pt->type){ case PAYLOAD_AUDIO_CONTINUOUS: case PAYLOAD_AUDIO_PACKETIZED: codec_band=get_audio_payload_bandwidth(lc,pt); ret=bandwidth_is_greater(bandwidth_limit*1000,codec_band); /*hack to avoid using uwb codecs when having low bitrate and video*/ if (bandwidth_is_greater(199,bandwidth_limit)){ if (linphone_core_video_enabled(lc) && pt->clock_rate>16000){ ret=FALSE; } } //ms_message("Payload %s: %g",pt->mime_type,codec_band); break; case PAYLOAD_VIDEO: if (bandwidth_limit!=0) {/* infinite (-1) or strictly positive*/ ret=TRUE; } else ret=FALSE; break; } return ret; }
void linphone_core_update_allocated_audio_bandwidth(LinphoneCore *lc){ const MSList *elem; PayloadType *max=NULL; for(elem=linphone_core_get_audio_codecs(lc);elem!=NULL;elem=elem->next){ PayloadType *pt=(PayloadType*)elem->data; if (payload_type_enabled(pt)){ int pt_bitrate=get_codec_bitrate(lc,pt); if (max==NULL) max=pt; else if (max->normal_bitrate<pt_bitrate){ max=pt; } } } if (max) { lc->audio_bw=(int)(get_audio_payload_bandwidth(lc,max)/1000.0); } }
/* return TRUE if codec can be used with bandwidth, FALSE else*/ bool_t linphone_core_check_payload_type_usability(LinphoneCore *lc, PayloadType *pt) { double codec_band; int allowed_bw,video_bw; bool_t ret=FALSE; linphone_core_update_allocated_audio_bandwidth(lc); allowed_bw=get_min_bandwidth(linphone_core_get_download_bandwidth(lc), linphone_core_get_upload_bandwidth(lc)); if (allowed_bw==0) { allowed_bw=-1; video_bw=1500; /*around 1.5 Mbit/s*/ }else video_bw=get_video_bandwidth(allowed_bw,lc->audio_bw); switch (pt->type){ case PAYLOAD_AUDIO_CONTINUOUS: case PAYLOAD_AUDIO_PACKETIZED: codec_band=get_audio_payload_bandwidth(lc,pt); ret=bandwidth_is_greater(allowed_bw*1000,codec_band); /*hack to avoid using uwb codecs when having low bitrate and video*/ if (bandwidth_is_greater(199,allowed_bw)){ if (linphone_core_video_enabled(lc) && pt->clock_rate>16000){ ret=FALSE; } } //ms_message("Payload %s: %g",pt->mime_type,codec_band); break; case PAYLOAD_VIDEO: if (video_bw>0){ pt->normal_bitrate=video_bw*1000; ret=TRUE; } else ret=FALSE; break; } return ret; }
void linphone_core_update_allocated_audio_bandwidth_in_call(LinphoneCall *call, const PayloadType *pt){ call->audio_bw=(int)(get_audio_payload_bandwidth(call->core,pt)/1000.0); ms_message("Audio bandwidth for this call is %i",call->audio_bw); }
void linphone_core_update_allocated_audio_bandwidth_in_call(LinphoneCall *call, const PayloadType *pt){ call->audio_bw=(int)(ceil(get_audio_payload_bandwidth(call->core,pt)/1000.0)); /*rounding codec bandwidth should be avoid, specially for AMR*/ ms_message("Audio bandwidth for this call is %i",call->audio_bw); }