[Freeswitch-svn] [commit] r10182 - in freeswitch/trunk/src: . include
Author: brian Date: Tue Oct 28 20:04:20 2008 New Revision: 10182 Modified: freeswitch/trunk/src/include/switch_types.h freeswitch/trunk/src/switch_core_codec.c freeswitch/trunk/src/switch_core_io.c freeswitch/trunk/src/switch_core_media_bug.c freeswitch/trunk/src/switch_core_session.c Log: fix FSCORE-210 Modified: freeswitch/trunk/src/include/switch_types.h ============================================================================== --- freeswitch/trunk/src/include/switch_types.h (original) +++ freeswitch/trunk/src/include/switch_types.h Tue Oct 28 20:04:20 2008 @@ -623,7 +623,8 @@ SWITCH_STATUS_NOTFOUND, SWITCH_STATUS_UNLOAD, SWITCH_STATUS_NOUNLOAD, - SWITCH_STATUS_IGNORE + SWITCH_STATUS_IGNORE, + SWITCH_STATUS_NOT_INITALIZED } switch_status_t; Modified: freeswitch/trunk/src/switch_core_codec.c ============================================================================== --- freeswitch/trunk/src/switch_core_codec.c (original) +++ freeswitch/trunk/src/switch_core_codec.c Tue Oct 28 20:04:20 2008 @@ -60,45 +60,34 @@ char tmp[30]; switch_status_t status = SWITCH_STATUS_SUCCESS; - if (codec && !codec->implementation) { - switch_log_printf(SWITCH_CHANNEL_LOG, SWITCH_LOG_ERROR, "Cannot set UNINITIALIZED codec!\n"); - status = SWITCH_STATUS_FALSE; - goto end; - } - - if (!codec || codec == session->real_read_codec) { - + if (!codec || !codec->implementation) { if (session->real_read_codec) { - if (session->real_read_codec->implementation) { - session->read_codec = session->real_read_codec; - session->read_impl = *session->real_read_codec->implementation; - } else { - switch_log_printf(SWITCH_CHANNEL_LOG, SWITCH_LOG_DEBUG, "resetting to uninitilized codec, setting to NULL\n"); - session->read_codec = session->real_read_codec = NULL; - status = SWITCH_STATUS_FALSE; - goto end; - } + session->read_codec = session->real_read_codec; + 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 (codec) { - if (session->read_codec != session->real_read_codec) { - switch_log_printf(SWITCH_CHANNEL_LOG, SWITCH_LOG_ERROR, "Cannot double-set codec!\n"); - status = SWITCH_STATUS_FALSE; - goto end; - } - - session->read_codec = codec; - session->read_impl = *codec->implementation; + } else { if (!session->real_read_codec) { - session->real_read_codec = session->read_codec; + session->read_codec = session->real_read_codec = codec; + } else { + session->read_codec = codec; } } - if (session->read_codec && codec && session->read_impl.decoded_bytes_per_packet) { + 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); switch_event_add_header_string(event, SWITCH_STACK_BOTTOM, "channel-read-codec-name", session->read_impl.iananame); @@ -477,12 +466,12 @@ if (!codec->implementation) { switch_log_printf(SWITCH_CHANNEL_LOG, SWITCH_LOG_ERROR, "Codec is not initialized!\n"); - return SWITCH_STATUS_GENERR; + return SWITCH_STATUS_NOT_INITALIZED; } if (!switch_test_flag(codec, SWITCH_CODEC_FLAG_ENCODE)) { switch_log_printf(SWITCH_CHANNEL_LOG, SWITCH_LOG_ERROR, "Codec encoder is not initialized!\n"); - return SWITCH_STATUS_GENERR; + return SWITCH_STATUS_NOT_INITALIZED; } return codec->implementation->encode(codec, other_codec, decoded_data, decoded_data_len, decoded_rate, encoded_data, encoded_data_len, encoded_rate, @@ -502,12 +491,12 @@ if (!codec->implementation) { switch_log_printf(SWITCH_CHANNEL_LOG, SWITCH_LOG_ERROR, "Codec is not initialized!\n"); - return SWITCH_STATUS_GENERR; + return SWITCH_STATUS_NOT_INITALIZED; } if (!switch_test_flag(codec, SWITCH_CODEC_FLAG_DECODE)) { switch_log_printf(SWITCH_CHANNEL_LOG, SWITCH_LOG_ERROR, "Codec decoder is not initialized!\n"); - return SWITCH_STATUS_GENERR; + return SWITCH_STATUS_NOT_INITALIZED; } return codec->implementation->decode(codec, other_codec, encoded_data, encoded_data_len, encoded_rate, decoded_data, decoded_data_len, decoded_rate, @@ -520,7 +509,7 @@ if (!codec->implementation) { switch_log_printf(SWITCH_CHANNEL_LOG, SWITCH_LOG_WARNING, "Codec is not initialized!\n"); - return SWITCH_STATUS_GENERR; + return SWITCH_STATUS_NOT_INITALIZED; } codec->implementation->destroy(codec); Modified: freeswitch/trunk/src/switch_core_io.c ============================================================================== --- freeswitch/trunk/src/switch_core_io.c (original) +++ freeswitch/trunk/src/switch_core_io.c Tue Oct 28 20:04:20 2008 @@ -296,6 +296,9 @@ read_frame = &session->raw_read_frame; status = SWITCH_STATUS_SUCCESS; break; + case SWITCH_STATUS_NOT_INITALIZED: + switch_log_printf(SWITCH_CHANNEL_LOG, SWITCH_LOG_ERROR, "Codec init error!\n"); + goto done; default: switch_log_printf(SWITCH_CHANNEL_LOG, SWITCH_LOG_ERROR, "Codec %s decoder error!\n", session->read_codec->codec_interface->interface_name); goto done; @@ -437,6 +440,11 @@ *frame = &session->raw_read_frame; status = SWITCH_STATUS_SUCCESS; break; + case SWITCH_STATUS_NOT_INITALIZED: + switch_log_printf(SWITCH_CHANNEL_LOG, SWITCH_LOG_ERROR, "Codec init error!\n"); + *frame = NULL; + status = SWITCH_STATUS_GENERR; + break; default: switch_log_printf(SWITCH_CHANNEL_LOG, SWITCH_LOG_ERROR, "Codec %s encoder error!\n", session->read_codec->codec_interface->interface_name); @@ -650,11 +658,15 @@ status = SWITCH_STATUS_SUCCESS; break; default: + if (status == SWITCH_STATUS_NOT_INITALIZED) { + switch_log_printf(SWITCH_CHANNEL_LOG, SWITCH_LOG_ERROR, "Codec init error!\n"); + return status; + } if (ptime_mismatch) { status = perform_write(session, frame, flags, stream_id); return SWITCH_STATUS_SUCCESS; } - + switch_log_printf(SWITCH_CHANNEL_LOG, SWITCH_LOG_ERROR, "Codec %s decoder error!\n", frame->codec->codec_interface->interface_name); return status; } @@ -799,6 +811,10 @@ write_frame = enc_frame; status = SWITCH_STATUS_SUCCESS; break; + case SWITCH_STATUS_NOT_INITALIZED: + switch_log_printf(SWITCH_CHANNEL_LOG, SWITCH_LOG_ERROR, "Codec init error!\n"); + write_frame = NULL; + return status; default: switch_log_printf(SWITCH_CHANNEL_LOG, SWITCH_LOG_ERROR, "Codec %s encoder error!\n", session->read_codec->codec_interface->interface_name); @@ -886,6 +902,10 @@ write_frame = enc_frame; status = SWITCH_STATUS_SUCCESS; break; + case SWITCH_STATUS_NOT_INITALIZED: + switch_log_printf(SWITCH_CHANNEL_LOG, SWITCH_LOG_ERROR, "Codec init error!\n"); + write_frame = NULL; + return status; default: switch_log_printf(SWITCH_CHANNEL_LOG, SWITCH_LOG_ERROR, "Codec %s encoder error %d!\n", session->read_codec->codec_interface->interface_name, status); Modified: freeswitch/trunk/src/switch_core_media_bug.c ============================================================================== --- freeswitch/trunk/src/switch_core_media_bug.c (original) +++ freeswitch/trunk/src/switch_core_media_bug.c Tue Oct 28 20:04:20 2008 @@ -290,6 +290,7 @@ if (session->bug_codec.implementation) { switch_core_codec_destroy(&session->bug_codec); + memset(&session->bug_codec, 0, sizeof(session->bug_codec)); } return SWITCH_STATUS_FALSE; @@ -346,9 +347,10 @@ switch_thread_rwlock_unlock(session->bug_rwlock); status = switch_core_media_bug_close(&bp); } - + if (!session->bugs && session->bug_codec.implementation) { switch_core_codec_destroy(&session->bug_codec); + memset(&session->bug_codec, 0, sizeof(session->bug_codec)); } return status; Modified: freeswitch/trunk/src/switch_core_session.c ============================================================================== --- freeswitch/trunk/src/switch_core_session.c (original) +++ freeswitch/trunk/src/switch_core_session.c Tue Oct 28 20:04:20 2008 @@ -672,7 +672,7 @@ switch_size_t has; switch_core_session_set_read_codec(session, NULL); - + /* clear resamplers */ switch_mutex_lock(session->resample_mutex); switch_resample_destroy(&session->read_resampler);
participants (1)
-
Freeswitch SVN