]> git.ipfire.org Git - thirdparty/freeswitch.git/commitdiff
jitter buffer sanity checks
authorAnthony Minessale <anthm@freeswitch.org>
Fri, 18 Mar 2011 03:29:16 +0000 (22:29 -0500)
committerAnthony Minessale <anthm@freeswitch.org>
Fri, 18 Mar 2011 03:29:16 +0000 (22:29 -0500)
src/mod/endpoints/mod_sofia/mod_sofia.c
src/mod/endpoints/mod_sofia/sofia_glue.c
src/switch_rtp.c

index f50e057d5f5fea927bb875a1a61eb67d67ddef9e..93e0588b11feaf6ceffa12fde1b0eb14c6ded120 100644 (file)
@@ -1373,6 +1373,9 @@ static switch_status_t sofia_receive_message(switch_core_session_t *session, swi
                                        
                                        if ((len = atoi(msg->string_arg))) {
                                                qlen = len / (tech_pvt->read_impl.microseconds_per_packet / 1000);
+                                               if (qlen < 1) {
+                                                       qlen = 3;
+                                               }
                                        }
                                        
                                        if (qlen) {
@@ -1393,6 +1396,9 @@ static switch_status_t sofia_receive_message(switch_core_session_t *session, swi
                                }
 
                                if (qlen) {
+                                       if (maxqlen < qlen) {
+                                               maxqlen = qlen * 5;
+                                       }
                                        if (switch_rtp_activate_jitter_buffer(tech_pvt->rtp_session, qlen, maxqlen,
                                                                                                                  tech_pvt->read_impl.samples_per_packet, 
                                                                                                                  tech_pvt->read_impl.samples_per_second, max_drift) == SWITCH_STATUS_SUCCESS) {
index 3ca14e921de2c51d3293494ac0e24e8cd70ea0f4..44cf96b6e92cea1f51afe28f1bdcfbf77e50f44e 100644 (file)
@@ -3196,10 +3196,17 @@ switch_status_t sofia_glue_activate_rtp(private_object_t *tech_pvt, switch_rtp_f
                                
                                qlen = jb_msec / (tech_pvt->read_impl.microseconds_per_packet / 1000);
 
+                               if (qlen < 1) {
+                                       qlen = 3;
+                               }
+
                                if (maxlen) {
                                        maxqlen = maxlen / (tech_pvt->read_impl.microseconds_per_packet / 1000);
                                }
 
+                               if (maxqlen < qlen) {
+                                       maxqlen = qlen * 5;
+                               }
                                if (switch_rtp_activate_jitter_buffer(tech_pvt->rtp_session, qlen, maxqlen,
                                                                                                          tech_pvt->read_impl.samples_per_packet, 
                                                                                                          tech_pvt->read_impl.samples_per_second, max_drift) == SWITCH_STATUS_SUCCESS) {
index e81812a463f8dcb7d53ec5286ed5f5f0813e22b2..0398ba91c10a4a3e2ac0807d2e101a6bebe7a589 100644 (file)
@@ -1919,6 +1919,14 @@ SWITCH_DECLARE(switch_status_t) switch_rtp_activate_jitter_buffer(switch_rtp_t *
                return SWITCH_STATUS_FALSE;
        }
 
+       if (queue_frames < 1) {
+               queue_frames = 3;
+       }
+
+       if (max_queue_frames < queue_frames) {
+               max_queue_frames = queue_frames * 3;
+       }
+
        READ_INC(rtp_session);
        if (rtp_session->jb) {
                stfu_n_resize(rtp_session->jb, queue_frames);