PipeWire: Update to the new device info system.

This commit is contained in:
David Reid
2026-01-15 14:42:14 +10:00
parent 434bfc6a0b
commit 91ddce1d17
2 changed files with 38 additions and 9 deletions
+11 -9
View File
@@ -1693,11 +1693,12 @@ static ma_device_enumeration_result ma_context_enumerate_default_device_by_type_
ma_strncpy_s(deviceInfo.name, sizeof(deviceInfo.name), "Default Capture Device", (size_t)-1);
}
/* Data Format. */
deviceInfo.nativeDataFormats[deviceInfo.nativeDataFormatCount].format = ma_format_unknown;
deviceInfo.nativeDataFormats[deviceInfo.nativeDataFormatCount].channels = 0;
deviceInfo.nativeDataFormats[deviceInfo.nativeDataFormatCount].sampleRate = 0;
deviceInfo.nativeDataFormatCount += 1;
/* Data Format. PipeWire supports everything. Its maximum channel count is 64. */
ma_device_info_add_native_data_format_2(&deviceInfo, ma_format_f32, 1, 64, ma_standard_sample_rate_min, ma_standard_sample_rate_max);
ma_device_info_add_native_data_format_2(&deviceInfo, ma_format_s16, 1, 64, ma_standard_sample_rate_min, ma_standard_sample_rate_max);
ma_device_info_add_native_data_format_2(&deviceInfo, ma_format_s32, 1, 64, ma_standard_sample_rate_min, ma_standard_sample_rate_max);
ma_device_info_add_native_data_format_2(&deviceInfo, ma_format_s24, 1, 64, ma_standard_sample_rate_min, ma_standard_sample_rate_max);
ma_device_info_add_native_data_format_2(&deviceInfo, ma_format_u8, 1, 64, ma_standard_sample_rate_min, ma_standard_sample_rate_max);
return callback(deviceType, &deviceInfo, pUserData);
}
@@ -1902,10 +1903,11 @@ static void ma_registry_event_global_add_enumeration_by_type__pipewire(ma_enumer
/* Data Format. Just support everything for now. */
/* TODO: See if there's a reasonable way to query the true "native" format. Maybe just initialize a stream and handle the SPA_PARAM_Format parameter in param_changed()? */
deviceInfo.nativeDataFormats[deviceInfo.nativeDataFormatCount].format = ma_format_unknown;
deviceInfo.nativeDataFormats[deviceInfo.nativeDataFormatCount].channels = 0;
deviceInfo.nativeDataFormats[deviceInfo.nativeDataFormatCount].sampleRate = 0;
deviceInfo.nativeDataFormatCount += 1;
ma_device_info_add_native_data_format_2(&deviceInfo, ma_format_f32, 1, 64, ma_standard_sample_rate_min, ma_standard_sample_rate_max);
ma_device_info_add_native_data_format_2(&deviceInfo, ma_format_s16, 1, 64, ma_standard_sample_rate_min, ma_standard_sample_rate_max);
ma_device_info_add_native_data_format_2(&deviceInfo, ma_format_s32, 1, 64, ma_standard_sample_rate_min, ma_standard_sample_rate_max);
ma_device_info_add_native_data_format_2(&deviceInfo, ma_format_s24, 1, 64, ma_standard_sample_rate_min, ma_standard_sample_rate_max);
ma_device_info_add_native_data_format_2(&deviceInfo, ma_format_u8, 1, 64, ma_standard_sample_rate_min, ma_standard_sample_rate_max);
ma_enumerate_devices_data_pipewire_add(pEnumData, deviceType, &deviceInfo);
+27
View File
@@ -7580,6 +7580,11 @@ typedef struct
} nativeDataFormats[16]; /* Should be big enough for [flags,format] to act as the key. */
} ma_device_info;
MA_API void ma_device_info_add_native_data_format_ex(ma_device_info* pDeviceInfo, ma_uint32 flags, ma_format format, ma_uint32 minChannels, ma_uint32 maxChannels, ma_uint32 minSampleRate, ma_uint32 maxSampleRate);
MA_API void ma_device_info_add_native_data_format_2(ma_device_info* pDeviceInfo, ma_format format, ma_uint32 minChannels, ma_uint32 maxChannels, ma_uint32 minSampleRate, ma_uint32 maxSampleRate);
struct ma_device_config
{
ma_device_type deviceType;
@@ -19817,6 +19822,28 @@ MA_API void ma_device_info_add_native_data_format(ma_device_info* pDeviceInfo, m
}
}
MA_API void ma_device_info_add_native_data_format_ex(ma_device_info* pDeviceInfo, ma_uint32 flags, ma_format format, ma_uint32 minChannels, ma_uint32 maxChannels, ma_uint32 minSampleRate, ma_uint32 maxSampleRate)
{
if (pDeviceInfo == NULL) {
return;
}
if (pDeviceInfo->nativeDataFormatCount < ma_countof(pDeviceInfo->nativeDataFormats)) {
pDeviceInfo->nativeDataFormats[pDeviceInfo->nativeDataFormatCount].flags = flags;
pDeviceInfo->nativeDataFormats[pDeviceInfo->nativeDataFormatCount].format = format;
pDeviceInfo->nativeDataFormats[pDeviceInfo->nativeDataFormatCount].minChannels = minChannels;
pDeviceInfo->nativeDataFormats[pDeviceInfo->nativeDataFormatCount].maxChannels = maxChannels;
pDeviceInfo->nativeDataFormats[pDeviceInfo->nativeDataFormatCount].minSampleRate = minSampleRate;
pDeviceInfo->nativeDataFormats[pDeviceInfo->nativeDataFormatCount].maxSampleRate = maxSampleRate;
pDeviceInfo->nativeDataFormatCount += 1;
}
}
MA_API void ma_device_info_add_native_data_format_2(ma_device_info* pDeviceInfo, ma_format format, ma_uint32 minChannels, ma_uint32 maxChannels, ma_uint32 minSampleRate, ma_uint32 maxSampleRate)
{
ma_device_info_add_native_data_format_ex(pDeviceInfo, 0, format, minChannels, maxChannels, minSampleRate, maxSampleRate);
}
#if defined(MA_WIN32) && !defined(MA_XBOX)