From: Anthony Minessale Date: Wed, 6 Jan 2010 18:09:30 +0000 (+0000) Subject: fix pa play bug X-Git-Tag: v1.0.6~846 X-Git-Url: http://git.ipfire.org/cgi-bin/gitweb.cgi?a=commitdiff_plain;h=2d015e2644e4a58dd89cbb35303fac87d03d46f1;p=thirdparty%2Ffreeswitch.git fix pa play bug git-svn-id: http://svn.freeswitch.org/svn/freeswitch/trunk@16188 d0543943-73ff-0310-b7d9-9358b9ac24b2 --- diff --git a/src/mod/endpoints/mod_portaudio/mod_portaudio.c b/src/mod/endpoints/mod_portaudio/mod_portaudio.c index a16ca2730d..16ecd65df4 100644 --- a/src/mod/endpoints/mod_portaudio/mod_portaudio.c +++ b/src/mod/endpoints/mod_portaudio/mod_portaudio.c @@ -2010,7 +2010,8 @@ SWITCH_STANDARD_API(pa_cmd) char *playfile = NULL; int samples = 0; int seconds = 5; - + int wrote = 0; + if (globals.call_list) { switch_log_printf(SWITCH_CHANNEL_LOG, SWITCH_LOG_INFO, "ERROR: Cannot use this command this while a call is in progress\n"); goto done; @@ -2034,27 +2035,32 @@ SWITCH_STANDARD_API(pa_cmd) if (argv[2]) { int i = atoi(argv[2]); - if (i > 0) { + if (i >= 0) { seconds = i; } } samples = globals.read_codec.implementation->actual_samples_per_second * seconds; - stream->write_function(stream, "playback test [%s] %d second(s) %d samples @%dkhz", - playfile, seconds, samples, globals.read_codec.implementation->actual_samples_per_second); - while (switch_core_file_read(&fh, abuf, &olen) == SWITCH_STATUS_SUCCESS) { WriteAudioStream(globals.audio_stream, abuf, (long) olen, &globals.read_timer); - switch_core_timer_next(&globals.read_timer); - samples -= (int) olen; - if (samples <= 0) { - break; + wrote += (int) olen; + if (samples) { + samples -= (int) olen; + if (samples <= 0) { + break; + } } olen = globals.read_codec.implementation->samples_per_packet; } - + switch_core_file_close(&fh); deactivate_audio_device(); + + seconds = wrote / globals.read_codec.implementation->actual_samples_per_second; + stream->write_function(stream, "playback test [%s] %d second(s) %d samples @%dkhz", + playfile, seconds, wrote, globals.read_codec.implementation->actual_samples_per_second); + + } else { stream->write_function(stream, "Cannot play requested file %s\n", argv[1]); }