]> sjero.net Git - linphone/blobdiff - coreapi/misc.c
add special case to compute aac network birate
[linphone] / coreapi / misc.c
index 927c3b55a2636b55eef5402285c54be1a59f22a5..5d4c0ebcc2d365915ece80841e5ac2c1f1e7b858 100644 (file)
@@ -43,7 +43,7 @@ Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA  02111-1307, USA.
 #include <net/if.h>
 #include <ifaddrs.h>
 #endif
-
+#include <math.h>
 
 #if !defined(WIN32)
 
@@ -234,17 +234,26 @@ static int get_codec_bitrate(LinphoneCore *lc, const PayloadType *pt){
        return pt->normal_bitrate;
 }
 
+/*
+ *((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)/(50*8))+UDP_HDR_SZ+RTP_HDR_SZ+IP4_HDR_SZ;
+       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_in_call(LinphoneCall *call, const PayloadType *pt){
-       call->audio_bw=(int)(get_audio_payload_bandwidth(call->core,pt)/1000.0);
+       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);
 }
 
@@ -876,7 +885,7 @@ void linphone_core_update_ice_from_remote_media_description(LinphoneCall *call,
                for (i = 0; i < md->n_total_streams; i++) {
                        const SalStreamDescription *stream = &md->streams[i];
                        IceCheckList *cl = ice_session_check_list(call->ice_session, i);
-                       if (cl == NULL) {
+                       if ((cl == NULL) && (i < md->n_active_streams)) {
                                cl = ice_check_list_new();
                                ice_session_add_check_list(call->ice_session, cl);
                                switch (stream->type) {
@@ -1005,6 +1014,9 @@ unsigned int linphone_core_get_audio_features(LinphoneCore *lc){
        return ret;
 }
 
+bool_t linphone_core_tone_indications_enabled(LinphoneCore*lc){
+       return lp_config_get_int(lc->config,"sound","tone_indications",1);
+}
 
 #ifdef HAVE_GETIFADDRS