Author: anthm Date: Wed Oct 29 11:57:57 2008 New Revision: 10189 Modified: freeswitch/trunk/src/switch_core_codec.c freeswitch/trunk/src/switch_ivr_bridge.c Log: fix FSCORE-212 Modified: freeswitch/trunk/src/switch_core_codec.c ============================================================================== --- freeswitch/trunk/src/switch_core_codec.c (original) +++ freeswitch/trunk/src/switch_core_codec.c Wed Oct 29 11:57:57 2008 @@ -45,6 +45,10 @@ SWITCH_DECLARE(void) switch_core_session_unset_read_codec(switch_core_session_t *session) { session->real_read_codec = session->read_codec = NULL; + session->raw_read_frame.codec = session->read_codec; + session->raw_write_frame.codec = session->read_codec; + session->enc_read_frame.codec = session->read_codec; + session->enc_write_frame.codec = session->read_codec; } SWITCH_DECLARE(void) switch_core_session_unset_write_codec(switch_core_session_t *session) @@ -60,33 +64,37 @@ char tmp[30]; switch_status_t status = SWITCH_STATUS_SUCCESS; - if (!codec || !codec->implementation) { + if (codec && !codec->implementation) { + codec = NULL; + } + + if (codec) { + if (!session->real_read_codec) { + session->read_codec = session->real_read_codec = codec; + session->read_impl = *codec->implementation; + } else { + session->read_codec = codec; + session->read_impl = *codec->implementation; + } + } else { + if (session->read_codec == session->real_read_codec) { + goto end; + } if (session->real_read_codec) { session->read_codec = session->real_read_codec; + session->read_impl = *session->real_read_codec->implementation; switch_log_printf(SWITCH_CHANNEL_LOG, SWITCH_LOG_DEBUG, "Restore original codec.\n"); } else { - switch_log_printf(SWITCH_CHANNEL_LOG, SWITCH_LOG_ERROR, "Cannot set UNINITIALIZED codec!\n"); status = SWITCH_STATUS_FALSE; goto end; } - } else { - - if (!session->real_read_codec) { - session->read_codec = session->real_read_codec = codec; - } else { - session->read_codec = codec; - } } - + if (!session->read_codec) { - switch_log_printf(SWITCH_CHANNEL_LOG, SWITCH_LOG_ERROR, "No READ codec!\n"); status = SWITCH_STATUS_FALSE; goto end; } - session->read_impl = *session->read_codec->implementation; - - if (session->read_codec && session->read_impl.decoded_bytes_per_packet) { if (switch_event_create(&event, SWITCH_EVENT_CODEC) == SWITCH_STATUS_SUCCESS) { switch_channel_event_set_data(session->channel, event); @@ -101,8 +109,7 @@ switch_channel_set_variable(channel, "read_codec", session->read_impl.iananame); switch_snprintf(tmp, sizeof(tmp), "%d", session->read_impl.actual_samples_per_second); switch_channel_set_variable(channel, "read_rate", tmp); - - + session->raw_read_frame.codec = session->read_codec; session->raw_write_frame.codec = session->read_codec; session->enc_read_frame.codec = session->read_codec; Modified: freeswitch/trunk/src/switch_ivr_bridge.c ============================================================================== --- freeswitch/trunk/src/switch_ivr_bridge.c (original) +++ freeswitch/trunk/src/switch_ivr_bridge.c Wed Oct 29 11:57:57 2008 @@ -445,6 +445,7 @@ switch_channel_set_private(channel, "_bridge_", NULL); if (bd->session == session && *bd->b_uuid) { audio_bridge_thread(NULL, (void *) bd); + switch_core_session_reset(session, SWITCH_TRUE); } else { switch_channel_hangup(channel, SWITCH_CAUSE_DESTINATION_OUT_OF_ORDER); } @@ -563,7 +564,7 @@ switch_channel_clear_flag(channel, CF_TRANSFER); switch_channel_clear_flag(other_channel, CF_TRANSFER); switch_core_session_reset(session, SWITCH_TRUE); - switch_core_session_reset(other_session, SWITCH_TRUE); + ready_a = switch_channel_ready(channel); ready_b = switch_channel_ready(other_channel);
participants (1)
-
Freeswitch SVN