From: System Administrator Date: Thu, 26 May 2011 03:16:24 +0000 (-0400) Subject: allow -1 as silence generation divisor to specify only zeroes silence X-Git-Tag: v1.2-rc1~108^2~11^2~40^2~34 X-Git-Url: http://git.ipfire.org/cgi-bin/gitweb.cgi?a=commitdiff_plain;h=294a57fbcbaaaff3c6401d3e9c1523e3dfa9f0e8;p=thirdparty%2Ffreeswitch.git allow -1 as silence generation divisor to specify only zeroes silence --- diff --git a/src/include/switch_ivr.h b/src/include/switch_ivr.h index 9b353f3ded..6df047e9cc 100644 --- a/src/include/switch_ivr.h +++ b/src/include/switch_ivr.h @@ -62,6 +62,12 @@ SWITCH_BEGIN_EXTERN_C struct switch_unicast_conninfo { }; typedef struct switch_unicast_conninfo switch_unicast_conninfo_t; +#define SWITCH_IVR_VERIFY_SILENCE_DIVISOR(divisor) \ + do { \ + if ((divisor) <= 0 && (divisor) != -1) { \ + divisor = 400; \ + } \ + } while(0); /** * @defgroup switch_ivr IVR Library diff --git a/src/switch_ivr.c b/src/switch_ivr.c index 5a082763b2..81be1893f1 100644 --- a/src/switch_ivr.c +++ b/src/switch_ivr.c @@ -154,7 +154,13 @@ SWITCH_DECLARE(switch_status_t) switch_ivr_sleep(switch_core_session_t *session, return SWITCH_STATUS_SUCCESS; } - if (ms > 100 && (var = switch_channel_get_variable(channel, SWITCH_SEND_SILENCE_WHEN_IDLE_VARIABLE)) && (sval = atoi(var))) { + var = switch_channel_get_variable(channel, SWITCH_SEND_SILENCE_WHEN_IDLE_VARIABLE); + if (var) { + sval = atoi(var); + SWITCH_IVR_VERIFY_SILENCE_DIVISOR(sval); + } + + if (ms > 100 && sval) { switch_core_session_get_read_impl(session, &imp); if (switch_core_codec_init(&codec, diff --git a/src/switch_ivr_originate.c b/src/switch_ivr_originate.c index 92137ea5d8..33951d5a97 100644 --- a/src/switch_ivr_originate.c +++ b/src/switch_ivr_originate.c @@ -910,9 +910,7 @@ SWITCH_DECLARE(switch_status_t) switch_ivr_wait_for_answer(switch_core_session_t ringback.silence = atoi(p); } } - if (ringback.silence <= 0) { - ringback.silence = 400; - } + SWITCH_IVR_VERIFY_SILENCE_DIVISOR(ringback.silence); } else { switch_buffer_create_dynamic(&ringback.audio_buffer, 512, 1024, 0); switch_buffer_set_loops(ringback.audio_buffer, -1); diff --git a/src/switch_resample.c b/src/switch_resample.c index 9c7f9b95d2..7355384915 100644 --- a/src/switch_resample.c +++ b/src/switch_resample.c @@ -190,6 +190,11 @@ SWITCH_DECLARE(void) switch_generate_sln_silence(int16_t *data, uint32_t samples assert(divisor); + if (divisor == (uint32_t)-1) { + memset(data, 0, sizeof(*data)); + return; + } + for (i = 0; i < samples; i++, sum_rnd = 0) { for (x = 0; x < 6; x++) { rnd2 = rnd2 * 31821U + 13849U;