From: Tilghman Lesher Date: Tue, 7 Dec 2010 22:35:50 +0000 (+0000) Subject: Use non-deprecated APIs for CoreAudio X-Git-Tag: 1.4.39-rc1~3^2~2 X-Git-Url: http://git.ipfire.org/cgi-bin/gitweb.cgi?a=commitdiff_plain;h=f614a52b52669929b7ca031b2e51cf7041a78e1e;p=thirdparty%2Fasterisk.git Use non-deprecated APIs for CoreAudio Review: https://reviewboard.asterisk.org/r/1040/ git-svn-id: https://origsvn.digium.com/svn/asterisk/branches/1.4@297818 65c4cc65-6c06-0410-ace0-fbb531ad65f3 --- diff --git a/Makefile b/Makefile index 25e757e6a0..7e000eb9b7 100644 --- a/Makefile +++ b/Makefile @@ -698,8 +698,13 @@ config: elif [ -f /etc/SuSE-release -o -f /etc/novell-release ]; then \ $(INSTALL) -m 755 contrib/init.d/rc.suse.asterisk $(DESTDIR)/etc/init.d/asterisk; \ if [ -z "$(DESTDIR)" ]; then /sbin/chkconfig --add asterisk; fi; \ - elif [ -d $(DESTDIR)/Library/LaunchDaemons -a ! -f $(DESTDIR)/Library/LaunchDaemons/org.asterisk.asterisk.plist ]; then \ - $(INSTALL) -m 644 contrib/init.d/org.asterisk.asterisk.plist $(DESTDIR)/Library/LaunchDaemons/org.asterisk.asterisk.plist; \ + elif [ -d $(DESTDIR)/Library/LaunchDaemons ]; then \ + if [ ! -f $(DESTDIR)/Library/LaunchDaemons/org.asterisk.asterisk.plist ]; then \ + $(INSTALL) -m 644 contrib/init.d/org.asterisk.asterisk.plist $(DESTDIR)/Library/LaunchDaemons/org.asterisk.asterisk.plist; \ + fi; \ + if [ ! -f $(DESTDIR)/Library/LaunchDaemons/org.asterisk.muted.plist ]; then \ + $(INSTALL) -m 644 contrib/init.d/org.asterisk.muted.plist $(DESTDIR)/Library/LaunchDaemons/org.asterisk.muted.plist; \ + fi; \ elif [ -f /etc/slackware-version ]; then \ echo "Slackware is not currently supported, although an init script does exist for it."; \ else \ diff --git a/contrib/init.d/org.asterisk.muted.plist b/contrib/init.d/org.asterisk.muted.plist new file mode 100644 index 0000000000..b9f1ecf815 --- /dev/null +++ b/contrib/init.d/org.asterisk.muted.plist @@ -0,0 +1,33 @@ + + + + + Label + org.asterisk.muted + Disabled + + UserName + asterisk + GroupName + asterisk + KeepAlive + + RunAtLoad + + Umask + 7 + Program + /usr/sbin/muted + ProgramArguments + + /usr/sbin/muted + -f + + StandardInPath + /dev/null + StandardOutPath + /dev/null + StandardErrorPath + /dev/null + + diff --git a/utils/muted.c b/utils/muted.c index be276fdf49..f69fa93856 100644 --- a/utils/muted.c +++ b/utils/muted.c @@ -37,6 +37,9 @@ #ifdef __Darwin__ #include +#include +#include +#include #elif defined(__linux__) || defined(__FreeBSD__) #include #endif @@ -54,6 +57,8 @@ #include "asterisk/autoconfig.h" +#define ast_strlen_zero(a) (!(*(a))) + static char *config = "/etc/asterisk/muted.conf"; static char host[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,11 +712,35 @@ 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", + "/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 +#endif /* HAVE_WORKING_FORK */ for(;;) { if (wait_event()) { fclose(astf);