]> git.ipfire.org Git - thirdparty/freeswitch.git/commitdiff
allow -1 as silence generation divisor to specify only zeroes silence
authorSystem Administrator <moises.silva@gmail.com>
Thu, 26 May 2011 03:16:24 +0000 (23:16 -0400)
committerSystem Administrator <moises.silva@gmail.com>
Thu, 26 May 2011 03:16:24 +0000 (23:16 -0400)
src/include/switch_ivr.h
src/switch_ivr.c
src/switch_ivr_originate.c
src/switch_resample.c

index 9b353f3dedd237e27c2bbc529c56b7def9077c03..6df047e9ccaa4317994fc09cf72e8a314c7d4ae8 100644 (file)
@@ -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
index 5a082763b2df686c9812d3e55bf0ac68c4743442..81be1893f197405e1451cd64fd23c0d8b10198f8 100644 (file)
@@ -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,
index 92137ea5d8fe1760cedba95295a2f618c84778d2..33951d5a97539085b221268fb829dd8c640d244e 100644 (file)
@@ -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);
index 9c7f9b95d2281734ebdb1371d35704f973a45906..7355384915eb4624b3d408503a8a470b7325f8e5 100644 (file)
@@ -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;