Author: anthm Date: Fri Nov 21 11:14:02 2008 New Revision: 10497 Log: tweak Modified: freeswitch/trunk/src/mod/endpoints/mod_sofia/mod_sofia.c freeswitch/trunk/src/switch_core_io.c Modified: freeswitch/trunk/src/mod/endpoints/mod_sofia/mod_sofia.c ============================================================================== --- freeswitch/trunk/src/mod/endpoints/mod_sofia/mod_sofia.c (original) +++ freeswitch/trunk/src/mod/endpoints/mod_sofia/mod_sofia.c Fri Nov 21 11:14:02 2008 @@ -702,9 +702,13 @@ *frame = NULL; return SWITCH_STATUS_GENERR; } + + if (tech_pvt->check_frames++ < MAX_CODEC_CHECK_FRAMES) { + if (!tech_pvt->read_codec.implementation->encoded_bytes_per_packet) { + tech_pvt->check_frames = MAX_CODEC_CHECK_FRAMES; + goto skip; + } - - if (tech_pvt->check_frames < MAX_CODEC_CHECK_FRAMES) { if (tech_pvt->last_ts && tech_pvt->read_frame.datalen != tech_pvt->read_codec.implementation->encoded_bytes_per_packet) { if (++tech_pvt->mismatch_count >= MAX_MISMATCH_FRAMES) { switch_size_t codec_ms = (int)(tech_pvt->read_frame.timestamp - @@ -712,6 +716,7 @@ if ((codec_ms % 10) != 0) { tech_pvt->check_frames = MAX_CODEC_CHECK_FRAMES; + goto skip; } else { if (switch_rtp_ready(tech_pvt->rtp_session) && codec_ms != tech_pvt->codec_ms) { const char *val; @@ -770,13 +775,13 @@ } } - tech_pvt->check_frames++; } } else { tech_pvt->mismatch_count = 0; } tech_pvt->last_ts = tech_pvt->read_frame.timestamp; } + skip: if ((bytes = tech_pvt->read_codec.implementation->encoded_bytes_per_packet)) { frames = (tech_pvt->read_frame.datalen / bytes); Modified: freeswitch/trunk/src/switch_core_io.c ============================================================================== --- freeswitch/trunk/src/switch_core_io.c (original) +++ freeswitch/trunk/src/switch_core_io.c Fri Nov 21 11:14:02 2008 @@ -155,6 +155,8 @@ } if (session->endpoint_interface->io_routines->read_frame) { + switch_mutex_unlock(session->read_codec->mutex); + switch_mutex_unlock(session->codec_read_mutex); if ((status = session->endpoint_interface->io_routines->read_frame(session, frame, flags, stream_id)) == SWITCH_STATUS_SUCCESS) { for (ptr = session->event_hooks.read_frame; ptr; ptr = ptr->next) { if ((status = ptr->read_frame(session, frame, flags, stream_id)) != SWITCH_STATUS_SUCCESS) { @@ -162,6 +164,14 @@ } } } + + if (!session->read_codec) { + *frame = NULL; + return SWITCH_STATUS_FALSE; + } + + switch_mutex_lock(session->codec_read_mutex); + switch_mutex_lock(session->read_codec->mutex); } if (status != SWITCH_STATUS_SUCCESS) {