Merged revisions 297821 via svnmerge from

https://origsvn.digium.com/svn/asterisk/branches/1.8

................
  r297821 | tilghman | 2010-12-07 16:51:05 -0600 (Tue, 07 Dec 2010) | 18 lines
  
  Merged revisions 297819 via svnmerge from 
  https://origsvn.digium.com/svn/asterisk/branches/1.6.2
  
  ................
    r297819 | tilghman | 2010-12-07 16:40:45 -0600 (Tue, 07 Dec 2010) | 11 lines
    
    Merged revisions 297818 via svnmerge from 
    https://origsvn.digium.com/svn/asterisk/branches/1.4
    
    ........
      r297818 | tilghman | 2010-12-07 16:35:50 -0600 (Tue, 07 Dec 2010) | 4 lines
      
      Use non-deprecated APIs for CoreAudio
      
      Review: https://reviewboard.asterisk.org/r/1040/
    ........
  ................
................


git-svn-id: https://origsvn.digium.com/svn/asterisk/trunk@297822 65c4cc65-6c06-0410-ace0-fbb531ad65f3
This commit is contained in:
Tilghman Lesher
2010-12-07 22:54:00 +00:00
parent 997816819b
commit 5656e5020f
4 changed files with 107 additions and 21 deletions

View File

@@ -39,6 +39,9 @@
#ifdef __Darwin__
#include <CoreAudio/AudioHardware.h>
#include <sys/types.h>
#include <pwd.h>
#include <sys/stat.h>
#elif defined(__linux__) || defined(__FreeBSD__) || defined(__GLIBC__)
#include <sys/soundcard.h>
#endif
@@ -54,7 +57,9 @@
#include <netinet/in.h>
#include <arpa/inet.h>
static char *config = "/etc/muted.conf";
#define ast_strlen_zero(a) (!(*(a)))
static char *config = "/etc/asterisk/muted.conf";
static char host[256] = "";
static char user[256] = "";
@@ -349,17 +354,25 @@ static float getvol(void)
AudioDeviceID device;
UInt32 size;
UInt32 channels[2];
AudioObjectPropertyAddress OutputAddr = { kAudioHardwarePropertyDefaultOutputDevice, kAudioObjectPropertyScopeGlobal, kAudioObjectPropertyElementMaster };
AudioObjectPropertyAddress ChannelAddr = { kAudioDevicePropertyPreferredChannelsForStereo, kAudioDevicePropertyScopeOutput, kAudioObjectPropertyElementWildcard };
AudioObjectPropertyAddress VolumeAddr = { kAudioDevicePropertyVolumeScalar, kAudioDevicePropertyScopeOutput, };
size = sizeof(device);
err = AudioHardwareGetProperty(kAudioHardwarePropertyDefaultOutputDevice, &size, &device);
err = AudioObjectGetPropertyData(kAudioObjectSystemObject, &OutputAddr, 0, NULL, &size, &device);
size = sizeof(channels);
if (!err)
err = AudioDeviceGetProperty(device, 0, false, kAudioDevicePropertyPreferredChannelsForStereo, &size, &channels);
if (!err) {
err = AudioObjectGetPropertyData(device, &ChannelAddr, 0, NULL, &size, &channels);
}
size = sizeof(vol);
if (!err)
err = AudioDeviceGetProperty(device, channels[0], false, kAudioDevicePropertyVolumeScalar, &size, &volumeL);
if (!err)
err = AudioDeviceGetProperty(device, channels[1], false, kAudioDevicePropertyVolumeScalar, &size, &volumeR);
if (!err) {
VolumeAddr.mElement = channels[0];
err = AudioObjectGetPropertyData(device, &VolumeAddr, 0, NULL, &size, &volumeL);
}
if (!err) {
VolumeAddr.mElement = channels[1];
err = AudioObjectGetPropertyData(device, &VolumeAddr, 0, NULL, &size, &volumeR);
}
if (!err)
vol = (volumeL < volumeR) ? volumeR : volumeL;
else {
@@ -385,16 +398,23 @@ static int setvol(float vol)
AudioDeviceID device;
UInt32 size;
UInt32 channels[2];
AudioObjectPropertyAddress OutputAddr = { kAudioHardwarePropertyDefaultOutputDevice, kAudioObjectPropertyScopeGlobal, kAudioObjectPropertyElementMaster };
AudioObjectPropertyAddress ChannelAddr = { kAudioDevicePropertyPreferredChannelsForStereo, kAudioDevicePropertyScopeOutput, kAudioObjectPropertyElementWildcard };
AudioObjectPropertyAddress VolumeAddr = { kAudioDevicePropertyVolumeScalar, kAudioDevicePropertyScopeOutput, };
size = sizeof(device);
err = AudioHardwareGetProperty(kAudioHardwarePropertyDefaultOutputDevice, &size, &device);
err = AudioObjectGetPropertyData(kAudioObjectSystemObject, &OutputAddr, 0, NULL, &size, &device);
size = sizeof(channels);
err = AudioDeviceGetProperty(device, 0, false, kAudioDevicePropertyPreferredChannelsForStereo, &size, &channels);
err = AudioObjectGetPropertyData(device, &ChannelAddr, 0, NULL, &size, &channels);
size = sizeof(vol);
if (!err)
err = AudioDeviceSetProperty(device, 0, channels[0], false, kAudioDevicePropertyVolumeScalar, size, &volumeL);
if (!err)
err = AudioDeviceSetProperty(device, 0, channels[1], false, kAudioDevicePropertyVolumeScalar, size, &volumeR);
if (!err) {
VolumeAddr.mElement = channels[0];
err = AudioObjectSetPropertyData(device, &VolumeAddr, 0, NULL, size, &volumeL);
}
if (!err) {
VolumeAddr.mElement = channels[1];
err = AudioObjectSetPropertyData(device, &VolumeAddr, 0, NULL, size, &volumeR);
}
if (err) {
#endif
@@ -692,9 +712,33 @@ int main(int argc, char *argv[])
exit(1);
}
#else
fprintf(stderr, "Mac OS X detected. Use 'launchd -d muted -f' to launch.\n");
const char *found = NULL, *paths[] = {
"/Library/LaunchAgents/org.asterisk.muted.plist",
"/Library/LaunchDaemons/org.asterisk.muted.plist",
"contrib/init.d/org.asterisk.muted.plist",
"<path-to-asterisk-source>/contrib/init.d/org.asterisk.muted.plist" };
char userpath[256];
struct stat unused;
struct passwd *pwd = getpwuid(getuid());
int i;
snprintf(userpath, sizeof(userpath), "%s%s", pwd->pw_dir, paths[0]);
if (!stat(userpath, &unused)) {
found = userpath;
}
if (!found) {
for (i = 0; i < 3; i++) {
if (!stat(paths[i], &unused)) {
found = paths[i];
break;
}
}
}
fprintf(stderr, "Mac OS X detected. Use 'launchctl load -w %s' to launch.\n", found ? found : paths[3]);
exit(1);
#endif
#endif /* !defined(HAVE_SBIN_LAUNCHD */
}
#endif
for(;;) {