static double get_audio_payload_bandwidth(LinphoneCore *lc, const PayloadType *pt){ double npacket=50; double packet_size; int bitrate; bitrate=get_codec_bitrate(lc,pt); packet_size= (((double)bitrate)/(50*8))+UDP_HDR_SZ+RTP_HDR_SZ+IP4_HDR_SZ; return packet_size*8.0*npacket; }
/* *((codec-birate*ptime/8) + RTP header + UDP header + IP header)*8/ptime; *ptime=1/npacket */ static double get_audio_payload_bandwidth(LinphoneCore *lc, const PayloadType *pt){ double npacket=50; double packet_size; int bitrate; if (strcmp(payload_type_get_mime(&payload_type_aaceld_44k), payload_type_get_mime(pt))==0) { /*special case of aac 44K because ptime= 10ms*/ npacket=100; } bitrate=get_codec_bitrate(lc,pt); packet_size= (((double)bitrate)/(npacket*8))+UDP_HDR_SZ+RTP_HDR_SZ+IP4_HDR_SZ; return packet_size*8.0*npacket; }
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); } }