From 5f99594c163b5d9ddb9bbbd459e22764ebd8f23e Mon Sep 17 00:00:00 2001 From: letz Date: Tue, 20 Dec 2005 12:03:54 +0000 Subject: 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 --- drivers/coreaudio/coreaudio_driver.c | 65 ++++++++++++++++++++++++++++++++++-- 1 file changed, 63 insertions(+), 2 deletions(-) (limited to 'drivers/coreaudio/coreaudio_driver.c') 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; } } -- cgit v1.2.1