Browse Source

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
tags/0.109.0
letz 20 years ago
parent
commit
5f99594c16
2 changed files with 64 additions and 3 deletions
  1. +1
    -1
      configure.ac
  2. +63
    -2
      drivers/coreaudio/coreaudio_driver.c

+ 1
- 1
configure.ac View File

@@ -15,7 +15,7 @@ dnl changes are made
dnl ---
JACK_MAJOR_VERSION=0
JACK_MINOR_VERSION=100
JACK_MICRO_VERSION=7
JACK_MICRO_VERSION=8

dnl ---
dnl HOWTO: updating the jack protocol version


+ 63
- 2
drivers/coreaudio/coreaudio_driver.c View File

@@ -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;
}
}



Loading…
Cancel
Save