summaryrefslogtreecommitdiff
path: root/drivers/coreaudio/coreaudio_driver.c
diff options
context:
space:
mode:
authorletz <letz@0c269be4-1314-0410-8aa9-9f06e86f4224>2005-12-20 12:03:54 +0000
committerletz <letz@0c269be4-1314-0410-8aa9-9f06e86f4224>2005-12-20 12:03:54 +0000
commit5f99594c163b5d9ddb9bbbd459e22764ebd8f23e (patch)
treec95c1a16a313a5ac6454e3ef8409134a1d76e7ba /drivers/coreaudio/coreaudio_driver.c
parent7d34e50c522e9f548813e35b48cb38efb12c994b (diff)
downloadjack1-5f99594c163b5d9ddb9bbbd459e22764ebd8f23e.tar.gz
CoreAudio driver: add -d parameter to display avilable Coreaudio devices
git-svn-id: svn+ssh://jackaudio.org/trunk/jack@928 0c269be4-1314-0410-8aa9-9f06e86f4224
Diffstat (limited to 'drivers/coreaudio/coreaudio_driver.c')
-rwxr-xr-xdrivers/coreaudio/coreaudio_driver.c65
1 files changed, 63 insertions, 2 deletions
diff --git a/drivers/coreaudio/coreaudio_driver.c b/drivers/coreaudio/coreaudio_driver.c
index 9cbb134..1e7b584 100755
--- a/drivers/coreaudio/coreaudio_driver.c
+++ b/drivers/coreaudio/coreaudio_driver.c
@@ -40,6 +40,7 @@
Jun 14, 2005: S.Letz: Since the "-I" parameter is not used anymore, rename the "systemic" latencies management parametes "-I" and "-O" like for the ALSA driver.
Aug 16, 2005: S.Letz: Remove get_device_id_from_num, use get_default_device instead. If the -n option is not used or the device name cannot
be found, the default device is used. Note: the default device can be used only if both default input and default output are the same.
+ Dec 19, 2005: S.Letz: Add -d option (display_device_names).
*/
@@ -50,7 +51,7 @@
const int CAVersion = 3;
-#define PRINTDEBUG 1
+//#define PRINTDEBUG 1
static void JCALog(char *fmt, ...)
{
@@ -155,6 +156,54 @@ static OSStatus get_default_device(AudioDeviceID * id)
}
}
+static OSStatus display_device_names()
+{
+ UInt32 size;
+ Boolean isWritable;
+ int i, deviceNum;
+ OSStatus err;
+ CFStringRef UIname;
+
+ err = AudioHardwareGetPropertyInfo(kAudioHardwarePropertyDevices, &size, &isWritable);
+ if (err != noErr)
+ return err;
+
+ deviceNum = size/sizeof(AudioDeviceID);
+ AudioDeviceID devices[deviceNum];
+
+ err = AudioHardwareGetProperty(kAudioHardwarePropertyDevices, &size, devices);
+ if (err != noErr)
+ return err;
+
+ for (i = 0; i < deviceNum; i++) {
+ char device_name[256];
+ char internal_name[256];
+
+ size = sizeof(CFStringRef);
+ UIname = NULL;
+ err = AudioDeviceGetProperty(devices[i], 0, false, kAudioDevicePropertyDeviceUID, &size, &UIname);
+ if (err == noErr) {
+ CFStringGetCString(UIname, internal_name, 256, CFStringGetSystemEncoding());
+ } else {
+ goto error;
+ }
+
+ size = 256;
+ err = AudioDeviceGetProperty(devices[i], 0, false, kAudioDevicePropertyDeviceName, &size, device_name);
+ if (err != noErr)
+ return err;
+
+ printf("Device name = \'%s\', internal_name = \'%s\' (to be used as -n parameter)\n", device_name, internal_name);
+ }
+
+ return noErr;
+
+error:
+ if (UIname != NULL)
+ CFRelease(UIname);
+ return err;
+}
+
static OSStatus render(void *inRefCon,
AudioUnitRenderActionFlags *ioActionFlags,
const AudioTimeStamp *inTimeStamp,
@@ -758,7 +807,7 @@ jack_driver_desc_t *driver_get_descriptor()
desc = calloc(1, sizeof(jack_driver_desc_t));
strcpy(desc->name, "coreaudio");
- desc->nparams = 11;
+ desc->nparams = 12;
desc->params = calloc(desc->nparams, sizeof(jack_driver_param_desc_t));
i = 0;
@@ -849,6 +898,14 @@ jack_driver_desc_t *driver_get_descriptor()
strcpy(desc->params[i].short_desc, "Extra output latency");
strcpy(desc->params[i].long_desc, desc->params[i].short_desc);
+ i++;
+ strcpy(desc->params[i].name, "devices");
+ desc->params[i].character = 'd';
+ desc->params[i].type = JackDriverParamBool;
+ desc->params[i].value.i = TRUE;
+ strcpy(desc->params[i].short_desc, "Display available CoreAudio devices");
+ strcpy(desc->params[i].long_desc, desc->params[i].short_desc);
+
return desc;
}
@@ -916,6 +973,10 @@ jack_driver_t *driver_initialize(jack_client_t * client,
case 'O':
systemic_output_latency = param->value.ui;
break;
+
+ case 'd':
+ display_device_names();
+ break;
}
}