Author: anthm Date: Wed Feb 21 01:35:55 2007 New Revision: 4341 Modified: freeswitch/trunk/src/mod/codecs/mod_g711/mod_g711.c freeswitch/trunk/src/switch_core.c freeswitch/trunk/src/switch_ivr.c Log: add 120ms to g711, fix errs in g711 alaw defs, tweak buffer in file playback and add kill to hupall Modified: freeswitch/trunk/src/mod/codecs/mod_g711/mod_g711.c ============================================================================== --- freeswitch/trunk/src/mod/codecs/mod_g711/mod_g711.c (original) +++ freeswitch/trunk/src/mod/codecs/mod_g711/mod_g711.c Wed Feb 21 01:35:55 2007 @@ -188,6 +188,26 @@ /* Registration */ +static const switch_codec_implementation_t g711u_8k_120ms_implementation = { + /*.codec_type */ SWITCH_CODEC_TYPE_AUDIO, + /*.ianacode */ 0, + /*.iananame */ "PCMU", + /*.fmtp */ NULL, + /*.samples_per_second */ 8000, + /*.bits_per_second */ 64000, + /*.microseconds_per_frame */ 120000, + /*.samples_per_frame */ 960, + /*.bytes_per_frame */ 1920, + /*.encoded_bytes_per_frame */ 960, + /*.number_of_channels */ 1, + /*.pref_frames_per_packet */ 1, + /*.max_frames_per_packet */ 1, + /*.init */ switch_g711u_init, + /*.encode */ switch_g711u_encode, + /*.decode */ switch_g711u_decode, + /*.destroy */ switch_g711u_destroy +}; + static const switch_codec_implementation_t g711u_8k_60ms_implementation = { /*.codec_type */ SWITCH_CODEC_TYPE_AUDIO, /*.ianacode */ 0, @@ -205,7 +225,8 @@ /*.init */ switch_g711u_init, /*.encode */ switch_g711u_encode, /*.decode */ switch_g711u_decode, - /*.destroy */ switch_g711u_destroy + /*.destroy */ switch_g711u_destroy, + /*.next*/ &g711u_8k_120ms_implementation }; static const switch_codec_implementation_t g711u_8k_30ms_implementation = { @@ -273,6 +294,25 @@ +static const switch_codec_implementation_t g711a_8k_120ms_implementation = { + /*.codec_type */ SWITCH_CODEC_TYPE_AUDIO, + /*.ianacode */ 8, + /*.iananame */ "PCMA", + /*.fmtp */ NULL, + /*.samples_per_second */ 8000, + /*.bits_per_second */ 64000, + /*.microseconds_per_frame */ 120000, + /*.samples_per_frame */ 960, + /*.bytes_per_frame */ 1920, + /*.encoded_bytes_per_frame */ 960, + /*.number_of_channels */ 1, + /*.pref_frames_per_packet */ 1, + /*.max_frames_per_packet */ 1, + /*.init */ switch_g711a_init, + /*.encode */ switch_g711a_encode, + /*.decode */ switch_g711a_decode, + /*.destroy */ switch_g711a_destroy +}; static const switch_codec_implementation_t g711a_8k_60ms_implementation = { /*.codec_type */ SWITCH_CODEC_TYPE_AUDIO, @@ -288,10 +328,11 @@ /*.number_of_channels */ 1, /*.pref_frames_per_packet */ 1, /*.max_frames_per_packet */ 1, - /*.init */ switch_g711u_init, - /*.encode */ switch_g711u_encode, - /*.decode */ switch_g711u_decode, - /*.destroy */ switch_g711u_destroy, + /*.init */ switch_g711a_init, + /*.encode */ switch_g711a_encode, + /*.decode */ switch_g711a_decode, + /*.destroy */ switch_g711a_destroy, + /*.next*/ &g711a_8k_120ms_implementation }; static const switch_codec_implementation_t g711a_8k_30ms_implementation = { @@ -308,10 +349,10 @@ /*.number_of_channels */ 1, /*.pref_frames_per_packet */ 1, /*.max_frames_per_packet */ 1, - /*.init */ switch_g711u_init, - /*.encode */ switch_g711u_encode, - /*.decode */ switch_g711u_decode, - /*.destroy */ switch_g711u_destroy, + /*.init */ switch_g711a_init, + /*.encode */ switch_g711a_encode, + /*.decode */ switch_g711a_decode, + /*.destroy */ switch_g711a_destroy, /*.next*/ &g711a_8k_60ms_implementation }; @@ -350,10 +391,10 @@ /*.number_of_channels */ 1, /*.pref_frames_per_packet */ 1, /*.max_frames_per_packet */ 1, - /*.init */ switch_g711u_init, - /*.encode */ switch_g711u_encode, - /*.decode */ switch_g711u_decode, - /*.destroy */ switch_g711u_destroy, + /*.init */ switch_g711a_init, + /*.encode */ switch_g711a_encode, + /*.decode */ switch_g711a_decode, + /*.destroy */ switch_g711a_destroy, /*.next*/ &g711a_8k_20ms_implementation }; Modified: freeswitch/trunk/src/switch_core.c ============================================================================== --- freeswitch/trunk/src/switch_core.c (original) +++ freeswitch/trunk/src/switch_core.c Wed Feb 21 01:35:55 2007 @@ -693,6 +693,7 @@ session = (switch_core_session_t *) val; channel = switch_core_session_get_channel(session); switch_channel_hangup(channel, cause); + switch_core_session_kill_channel(session, SWITCH_SIG_KILL); } } switch_mutex_unlock(runtime.session_table_mutex); Modified: freeswitch/trunk/src/switch_ivr.c ============================================================================== --- freeswitch/trunk/src/switch_ivr.c (original) +++ freeswitch/trunk/src/switch_ivr.c Wed Feb 21 01:35:55 2007 @@ -1218,6 +1218,14 @@ if (!fh->audio_buffer) { switch_buffer_create_dynamic(&fh->audio_buffer, FILE_BLOCKSIZE, FILE_BUFSIZE, 0); + if (!fh->audio_buffer) { + switch_log_printf(SWITCH_CHANNEL_LOG, SWITCH_LOG_ERROR, "setup buffer failed\n"); + + switch_core_file_close(fh); + switch_core_session_reset(session); + + return SWITCH_STATUS_GENERR; + } } if (asis) { @@ -1334,7 +1342,10 @@ olen = asis ? framelen : ilen; do_speed = 0; } else { - olen = 32 * framelen; + olen = sizeof(abuf); + if (!asis) { + olen /= 2; + } switch_core_file_read(fh, abuf, &olen); switch_buffer_write(fh->audio_buffer, abuf, asis ? olen : olen * 2); olen = switch_buffer_read(fh->audio_buffer, abuf, framelen);