diff --git a/macosx/coreaudio/JackCoreAudioDriver.cpp b/macosx/coreaudio/JackCoreAudioDriver.cpp index 056578fd..b9a1e505 100644 --- a/macosx/coreaudio/JackCoreAudioDriver.cpp +++ b/macosx/coreaudio/JackCoreAudioDriver.cpp @@ -158,11 +158,10 @@ static bool CheckAvailableDeviceName(const char* device_name, AudioDeviceID* dev return false; } - if (strcmp(device_name_aux, device_name) == 0) { + if (strncmp(device_name_aux, device_name, strlen(device_name)) == 0) { *device_id = devices[i]; return true; } - } return false; @@ -613,8 +612,15 @@ OSStatus JackCoreAudioDriver::GetDefaultInputDevice(AudioDeviceID* id) } if (inDefault == 0) { - jack_error("Error default input device is 0, please select a correct one !!"); - return -1; + jack_error("Error default input device is 0, will take 'Built-in'..."); + if (CheckAvailableDeviceName("Built-in Microphone", id) + || CheckAvailableDeviceName("Built-in Line", id)) { + jack_log("JackCoreAudioDriver::GetDefaultInputDevice : output = %ld", *id); + return noErr; + } else { + jack_error("Cannot find any input device to use..."); + return -1; + } } jack_log("JackCoreAudioDriver::GetDefaultInputDevice : input = %ld ", inDefault); *id = inDefault; @@ -632,8 +638,14 @@ OSStatus JackCoreAudioDriver::GetDefaultOutputDevice(AudioDeviceID* id) } if (outDefault == 0) { - jack_error("Error default output device is 0, please select a correct one !!"); - return -1; + jack_error("Error default ouput device is 0, will take 'Built-in'..."); + if (CheckAvailableDeviceName("Built-in Output", id)) { + jack_log("JackCoreAudioDriver::GetDefaultOutputDevice : output = %ld", *id); + return noErr; + } else { + jack_error("Cannot find any output device to use..."); + return -1; + } } jack_log("JackCoreAudioDriver::GetDefaultOutputDevice : output = %ld", outDefault); *id = outDefault; @@ -1240,6 +1252,7 @@ int JackCoreAudioDriver::SetupDevices(const char* capture_driver_uid, return -1; } } + if (GetDeviceNameFromID(fDeviceID, capture_driver_name) != noErr || GetDeviceNameFromID(fDeviceID, playback_driver_name) != noErr) { jack_error("Cannot get device name from device ID"); return -1; @@ -1299,6 +1312,7 @@ int JackCoreAudioDriver::SetupDevices(const char* capture_driver_uid, // Capture only } else if (strcmp(capture_driver_uid, "") != 0) { + jack_log("JackCoreAudioDriver::SetupDevices : capture only"); if (GetDeviceIDFromUID(capture_driver_uid, &fDeviceID) != noErr) { jack_log("JackCoreAudioDriver::SetupDevices : will take default input"); @@ -1307,6 +1321,7 @@ int JackCoreAudioDriver::SetupDevices(const char* capture_driver_uid, return -1; } } + if (GetDeviceNameFromID(fDeviceID, capture_driver_name) != noErr) { jack_error("Cannot get device name from device ID"); return -1; @@ -1320,6 +1335,7 @@ int JackCoreAudioDriver::SetupDevices(const char* capture_driver_uid, // Playback only } else if (strcmp(playback_driver_uid, "") != 0) { + jack_log("JackCoreAudioDriver::SetupDevices : playback only"); if (GetDeviceIDFromUID(playback_driver_uid, &fDeviceID) != noErr) { jack_log("JackCoreAudioDriver::SetupDevices : will take default output"); @@ -1328,6 +1344,7 @@ int JackCoreAudioDriver::SetupDevices(const char* capture_driver_uid, return -1; } } + if (GetDeviceNameFromID(fDeviceID, playback_driver_name) != noErr) { jack_error("Cannot get device name from device ID"); return -1;