From 374925d9ba2d2633d253ea69ff2f91f6456ef3ba Mon Sep 17 00:00:00 2001 From: Anthony Minessale Date: Fri, 25 Sep 2009 18:25:45 +0000 Subject: [PATCH] improve bad timestamp detection git-svn-id: http://svn.freeswitch.org/svn/freeswitch/trunk@14979 d0543943-73ff-0310-b7d9-9358b9ac24b2 --- src/mod/endpoints/mod_sofia/mod_sofia.c | 9 ++++++--- src/mod/endpoints/mod_sofia/mod_sofia.h | 2 +- 2 files changed, 7 insertions(+), 4 deletions(-) diff --git a/src/mod/endpoints/mod_sofia/mod_sofia.c b/src/mod/endpoints/mod_sofia/mod_sofia.c index dbf874928b..1d1e35cfd3 100644 --- a/src/mod/endpoints/mod_sofia/mod_sofia.c +++ b/src/mod/endpoints/mod_sofia/mod_sofia.c @@ -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: diff --git a/src/mod/endpoints/mod_sofia/mod_sofia.h b/src/mod/endpoints/mod_sofia/mod_sofia.h index 1152c3d53f..c5922da5cc 100644 --- a/src/mod/endpoints/mod_sofia/mod_sofia.h +++ b/src/mod/endpoints/mod_sofia/mod_sofia.h @@ -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 };