allow users of RTP to know when the peer endpoint is (apparently) behind a NAT
[asterisk/asterisk.git] / muted.c
diff --git a/muted.c b/muted.c
index fd0b130..baeb63e 100755 (executable)
--- a/muted.c
+++ b/muted.c
@@ -8,7 +8,7 @@
  * Mark Spencer <markster@digium.com>
  * 
  * Updated for Mac OSX CoreAudio 
- * by Josh Roberson <josh@asteraisgi.com>
+ * by Josh Roberson <josh@asteriasgi.com>
  *
  * Distributed under the terms of the GNU General Public License version 2.0 
  *
@@ -325,7 +325,6 @@ static float getvol(void)
                err = AudioDeviceGetProperty(device, channels[0], false, kAudioDevicePropertyVolumeScalar, &size, &volumeL);
        if (!err)
                err = AudioDeviceGetProperty(device, channels[1], false, kAudioDevicePropertyVolumeScalar, &size, &volumeR);
-       printf("volumeL = %f - volumeR = %f\n", volumeL, volumeR);
        if (!err)
                vol = (volumeL < volumeR) ? volumeR : volumeL;
        else {
@@ -379,30 +378,46 @@ static float oldvol = 0;
 static float mutevol = 0;
 #endif
 
+#ifndef __Darwin__
 static int mutedlevel(int orig, int mutelevel)
 {
        int l = orig >> 8;
        int r = orig & 0xff;
        l = (float)(mutelevel) * (float)(l) / 100.0;
        r = (float)(mutelevel) * (float)(r) / 100.0;
+
        return (l << 8) | r;
+#else
+static float mutedlevel(float orig, float mutelevel)
+{
+       float master = orig;
+       master = mutelevel * master / 100.0;
+       return master;
+#endif
+       
 }
 
 static void mute(void)
 {
 #ifndef __Darwin__
        int vol;
+       int start;
+       int x;
 #else
        float vol;
+       float start = 1.0;
+       float x;
 #endif
-       int start;
-       int x;
        vol = getvol();
        oldvol = vol;
-       if (smoothfade) 
+       if (smoothfade)
+#ifdef __Darwin__ 
+               start = mutelevel;
+#else
                start = 100;
        else
                start = mutelevel;
+#endif
        for (x=start;x>=mutelevel;x-=stepsize) {
                mutevol = mutedlevel(vol, x);
                setvol(mutevol);
@@ -424,23 +439,31 @@ static void unmute(void)
 {
 #ifdef __Darwin__
        float vol;
+       float start;
+       float x;
 #else
        int vol;
-#endif
        int start;
        int x;
+#endif
        vol = getvol();
        if (debug)
 #ifdef __Darwin__
                printf("Unmute from '%f' (should be '%f') to '%f'!\n", vol, mutevol, oldvol);
+       mutevol = vol;
+       if (vol == mutevol) {
 #else
                printf("Unmute from '%04x' (should be '%04x') to '%04x'!\n", vol, mutevol, oldvol);
-#endif
        if ((int)vol == mutevol) {
+#endif
                if (smoothfade)
                        start = mutelevel;
                else
+#ifdef __Darwin__
+                       start = 1.0;
+#else
                        start = 100;
+#endif
                for (x=start;x<100;x+=stepsize) {
                        mutevol = mutedlevel(oldvol, x);
                        setvol(mutevol);