diff options
author | Tilghman Lesher <tilghman@meg.abyt.es> | 2010-12-07 22:54:00 +0000 |
---|---|---|
committer | Tilghman Lesher <tilghman@meg.abyt.es> | 2010-12-07 22:54:00 +0000 |
commit | 5656e5020fcf11ebf7df5636a7e9bce8036eabcb (patch) | |
tree | ba2263be8256b93cb6e760ea2bc5a22fd5e151f6 /utils | |
parent | 997816819bb66dcab31660b850781be72b984333 (diff) |
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
Diffstat (limited to 'utils')
-rw-r--r-- | utils/muted.c | 76 |
1 files changed, 60 insertions, 16 deletions
diff --git a/utils/muted.c b/utils/muted.c index 1202237b8..211766e53 100644 --- a/utils/muted.c +++ b/utils/muted.c @@ -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(;;) { |