Commit a446ef28 authored by David Fuhrmann's avatar David Fuhrmann

auhal: workaround bug (in core audio?) which leads to shortend device names

Also fixes a memory leak
parent 7f84f44d
...@@ -990,6 +990,7 @@ static void RebuildDeviceList(audio_output_t * p_aout) ...@@ -990,6 +990,7 @@ static void RebuildDeviceList(audio_output_t * p_aout)
bool b_digital = false; bool b_digital = false;
UInt32 i_id = deviceIDs[i]; UInt32 i_id = deviceIDs[i];
propertySize = 0;
/* Retrieve the length of the device name */ /* Retrieve the length of the device name */
err = AudioObjectGetPropertyDataSize(deviceIDs[i], &deviceNameAddress, 0, NULL, &propertySize); err = AudioObjectGetPropertyDataSize(deviceIDs[i], &deviceNameAddress, 0, NULL, &propertySize);
if (err != noErr) { if (err != noErr) {
...@@ -997,6 +998,10 @@ static void RebuildDeviceList(audio_output_t * p_aout) ...@@ -997,6 +998,10 @@ static void RebuildDeviceList(audio_output_t * p_aout)
continue; continue;
} }
// previous function returns to small buffer len, bug in core audio!?
if (propertySize < 100)
propertySize = 100;
/* Retrieve the name of the device */ /* Retrieve the name of the device */
psz_name = (char *)malloc(propertySize); psz_name = (char *)malloc(propertySize);
err = AudioObjectGetPropertyData(deviceIDs[i], &deviceNameAddress, 0, NULL, &propertySize, psz_name); err = AudioObjectGetPropertyData(deviceIDs[i], &deviceNameAddress, 0, NULL, &propertySize, psz_name);
...@@ -1018,9 +1023,11 @@ static void RebuildDeviceList(audio_output_t * p_aout) ...@@ -1018,9 +1023,11 @@ static void RebuildDeviceList(audio_output_t * p_aout)
if (AudioDeviceSupportsDigital(p_aout, deviceIDs[i])) { if (AudioDeviceSupportsDigital(p_aout, deviceIDs[i])) {
b_digital = true; b_digital = true;
msg_Dbg(p_aout, "'%s' supports digital output", psz_name); msg_Dbg(p_aout, "'%s' supports digital output", psz_name);
asprintf(&psz_name, _("%s (Encoded Output)"), psz_name); char *psz_encoded_name = nil;
asprintf(&psz_encoded_name, _("%s (Encoded Output)"), psz_name);
i_id = i_id | AOUT_VAR_SPDIF_FLAG; i_id = i_id | AOUT_VAR_SPDIF_FLAG;
add_device_to_list(p_aout, i_id, psz_name); add_device_to_list(p_aout, i_id, psz_encoded_name);
free(psz_encoded_name);
} }
free(psz_name); free(psz_name);
......
Markdown is supported
0%
or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment