]> git.ipfire.org Git - thirdparty/freeswitch.git/commitdiff
improve bad timestamp detection
authorAnthony Minessale <anthony.minessale@gmail.com>
Fri, 25 Sep 2009 18:25:45 +0000 (18:25 +0000)
committerAnthony Minessale <anthony.minessale@gmail.com>
Fri, 25 Sep 2009 18:25:45 +0000 (18:25 +0000)
git-svn-id: http://svn.freeswitch.org/svn/freeswitch/trunk@14979 d0543943-73ff-0310-b7d9-9358b9ac24b2

src/mod/endpoints/mod_sofia/mod_sofia.c
src/mod/endpoints/mod_sofia/mod_sofia.h

index dbf874928b3d7ece215df72541b5ad6bc63ee15f..1d1e35cfd304158c28e0ef4578378c88dcafe0a7 100644 (file)
@@ -761,16 +761,16 @@ static switch_status_t sofia_read_frame(switch_core_session_t *session, switch_f
                                                return SWITCH_STATUS_GENERR;
                                        }
                                        
-                                       if (sofia_test_pflag(tech_pvt->profile, PFLAG_AUTOFIX_TIMING) && tech_pvt->check_frames++ < MAX_CODEC_CHECK_FRAMES) {
+                                       if ((tech_pvt->read_frame.datalen % 10) == 0 &&
+                                               sofia_test_pflag(tech_pvt->profile, PFLAG_AUTOFIX_TIMING) && tech_pvt->check_frames++ < MAX_CODEC_CHECK_FRAMES) {
                                                if (!tech_pvt->read_impl.encoded_bytes_per_packet) {
                                                        tech_pvt->check_frames = MAX_CODEC_CHECK_FRAMES;
                                                        goto skip;
                                                }
-
+                                               
                                                if (tech_pvt->last_ts && tech_pvt->read_frame.datalen != tech_pvt->read_impl.encoded_bytes_per_packet) {
                                                        switch_size_t codec_ms = (int)(tech_pvt->read_frame.timestamp - 
                                                                                                                   tech_pvt->last_ts) / (tech_pvt->read_impl.samples_per_second / 1000);
-
                                                        if ((codec_ms % 10) != 0) {
                                                                tech_pvt->check_frames = MAX_CODEC_CHECK_FRAMES;
                                                                goto skip;
@@ -871,6 +871,9 @@ static switch_status_t sofia_read_frame(switch_core_session_t *session, switch_f
                                                        tech_pvt->mismatch_count = 0;
                                                }
                                                tech_pvt->last_ts = tech_pvt->read_frame.timestamp;
+                                       } else {
+                                               tech_pvt->mismatch_count = 0;
+                                               tech_pvt->last_ts = 0;
                                        }
                                skip:
                                        
index 1152c3d53fc9734ff474461d24a158ddcb4b91d4..c5922da5cc6921df3b767797221c8957df3dea09 100644 (file)
@@ -53,7 +53,7 @@
 #endif
 
 #define MAX_CODEC_CHECK_FRAMES 50
-#define MAX_MISMATCH_FRAMES 3
+#define MAX_MISMATCH_FRAMES 5
 #define MODNAME "mod_sofia"
 #define SOFIA_DEFAULT_CONTACT_USER MODNAME
 static const switch_state_handler_table_t noop_state_handler = { 0 };