[commit] r9148 - in freeswitch/trunk/src: . mod/formats/mod_shout
Author: anthm Date: Wed Jul 23 18:10:48 2008 New Revision: 9148 Modified: freeswitch/trunk/src/mod/formats/mod_shout/mod_shout.c freeswitch/trunk/src/switch_ivr_play_say.c Log: fix MODFORM-11 (Again) Modified: freeswitch/trunk/src/mod/formats/mod_shout/mod_shout.c ============================================================================== --- freeswitch/trunk/src/mod/formats/mod_shout/mod_shout.c (original) +++ freeswitch/trunk/src/mod/formats/mod_shout/mod_shout.c Wed Jul 23 18:10:48 2008 @@ -248,6 +248,7 @@ x = 0; if (inlen < bytes) { + bytes = inlen; done = 1; } Modified: freeswitch/trunk/src/switch_ivr_play_say.c ============================================================================== --- freeswitch/trunk/src/switch_ivr_play_say.c (original) +++ freeswitch/trunk/src/switch_ivr_play_say.c Wed Jul 23 18:10:48 2008 @@ -729,6 +729,8 @@ const char *timer_name; const char *prebuf; const char *alt = NULL; + int eof = 0; + switch_size_t bread = 0; switch_channel_pre_answer(channel); @@ -953,13 +955,13 @@ if (!switch_channel_ready(channel)) { status = SWITCH_STATUS_FALSE; - break; + break; } if (switch_channel_test_flag(channel, CF_BREAK)) { switch_channel_clear_flag(channel, CF_BREAK); status = SWITCH_STATUS_BREAK; - break; + break; } if (switch_core_session_private_event_count(session)) { @@ -975,7 +977,7 @@ if (!args->input_callback && !args->buf) { status = SWITCH_STATUS_BREAK; done = 1; - break; + break; } switch_channel_dequeue_dtmf(channel, &dtmf); if (args->input_callback) { @@ -997,7 +999,7 @@ if (status != SWITCH_STATUS_SUCCESS) { done = 1; - break; + break; } } @@ -1008,20 +1010,28 @@ memset(abuf, 0, framelen); olen = ilen; do_speed = 0; - } else if (fh->sp_audio_buffer && (switch_buffer_inuse(fh->sp_audio_buffer) > (switch_size_t) (framelen))) { - switch_buffer_read(fh->sp_audio_buffer, abuf, framelen); - olen = asis ? framelen : ilen; + } else if (fh->sp_audio_buffer && (eof || (switch_buffer_inuse(fh->sp_audio_buffer) > (switch_size_t) (framelen)))) { + if (!(bread = switch_buffer_read(fh->sp_audio_buffer, abuf, framelen))) { + break; + } + olen = asis ? bread : bread / 2; do_speed = 0; - } else if (fh->audio_buffer && (switch_buffer_inuse(fh->audio_buffer) > (switch_size_t) (framelen))) { - switch_buffer_read(fh->audio_buffer, abuf, framelen); - olen = asis ? framelen : ilen; + } else if (fh->audio_buffer && (eof || (switch_buffer_inuse(fh->audio_buffer) > (switch_size_t) (framelen)))) { + if (!(bread = switch_buffer_read(fh->audio_buffer, abuf, framelen))) { + break; + } + olen = asis ? bread : bread / 2; } else { + if (eof) { + break; + } olen = FILE_STARTSAMPLES; if (!asis) { olen /= 2; } if (switch_core_file_read(fh, abuf, &olen) != SWITCH_STATUS_SUCCESS) { - break; + eof++; + continue; } switch_buffer_write(fh->audio_buffer, abuf, asis ? olen : olen * 2); olen = switch_buffer_read(fh->audio_buffer, abuf, framelen); @@ -1031,7 +1041,7 @@ } if (done || olen <= 0) { - break; + break; } if (!asis) { @@ -1134,16 +1144,16 @@ continue; } else if (status != SWITCH_STATUS_SUCCESS) { done = 1; - break; + break; } if (done) { - break; + break; } if (timer_name) { if (switch_core_timer_next(&timer) != SWITCH_STATUS_SUCCESS) { - break; + break; } } else { /* time off the channel (if you must) */ switch_frame_t *read_frame; @@ -1155,7 +1165,7 @@ tstatus = switch_core_session_read_frame(session, &read_frame, SWITCH_IO_FLAG_NONE, 0); if (!SWITCH_READ_ACCEPTABLE(tstatus)) { - break; + break; } if (args && (args->read_frame_callback)) { @@ -1166,7 +1176,7 @@ } switch_clear_flag(fh, SWITCH_FILE_CALLBACK); if (!ok) { - break; + break; } } }
participants (1)
-
Freeswitch SVN