diff --git a/NEWS b/NEWS index 704af63c1..dcd7869ff 100644 --- a/NEWS +++ b/NEWS @@ -4,6 +4,7 @@ ver 0.23.9 (not yet released) * output - pipewire: set app icon * improve iconv detection +* macOS: fix macOS 10 build problem (0.23.8 regression) ver 0.23.8 (2022/07/09) * storage diff --git a/src/output/plugins/OSXOutputPlugin.cxx b/src/output/plugins/OSXOutputPlugin.cxx index 29b5e5c91..a02f3e9a4 100644 --- a/src/output/plugins/OSXOutputPlugin.cxx +++ b/src/output/plugins/OSXOutputPlugin.cxx @@ -47,6 +47,15 @@ #include <memory> +// Backward compatibility from OSX 12.0 API change +#if (__MAC_OS_X_VERSION_MAX_ALLOWED >= 120000) + #define KAUDIO_OBJECT_PROPERTY_ELEMENT_MM kAudioObjectPropertyElementMain + #define KAUDIO_HARDWARE_SERVICE_DEVICE_PROPERTY_VV kAudioHardwareServiceDeviceProperty_VirtualMainVolume +#else + #define KAUDIO_OBJECT_PROPERTY_ELEMENT_MM kAudioObjectPropertyElementMaster + #define KAUDIO_HARDWARE_SERVICE_DEVICE_PROPERTY_VV kAudioHardwareServiceDeviceProperty_VirtualMasterVolume +#endif + static constexpr unsigned MPD_OSX_BUFFER_TIME_MS = 100; static StringBuffer<64> @@ -160,13 +169,13 @@ OSXOutput::Create(EventLoop &, const ConfigBlock &block) static constexpr AudioObjectPropertyAddress default_system_output_device{ kAudioHardwarePropertyDefaultSystemOutputDevice, kAudioObjectPropertyScopeOutput, - kAudioObjectPropertyElementMain, + KAUDIO_OBJECT_PROPERTY_ELEMENT_MM, }; static constexpr AudioObjectPropertyAddress default_output_device{ kAudioHardwarePropertyDefaultOutputDevice, kAudioObjectPropertyScopeOutput, - kAudioObjectPropertyElementMain + KAUDIO_OBJECT_PROPERTY_ELEMENT_MM }; const auto &aopa = @@ -195,9 +204,9 @@ int OSXOutput::GetVolume() { static constexpr AudioObjectPropertyAddress aopa = { - kAudioHardwareServiceDeviceProperty_VirtualMainVolume, + KAUDIO_HARDWARE_SERVICE_DEVICE_PROPERTY_VV, kAudioObjectPropertyScopeOutput, - kAudioObjectPropertyElementMain, + KAUDIO_OBJECT_PROPERTY_ELEMENT_MM, }; const auto vol = AudioObjectGetPropertyDataT<Float32>(dev_id, @@ -211,9 +220,9 @@ OSXOutput::SetVolume(unsigned new_volume) { Float32 vol = new_volume / 100.0; static constexpr AudioObjectPropertyAddress aopa = { - kAudioHardwareServiceDeviceProperty_VirtualMainVolume, + KAUDIO_HARDWARE_SERVICE_DEVICE_PROPERTY_VV, kAudioObjectPropertyScopeOutput, - kAudioObjectPropertyElementMain + KAUDIO_OBJECT_PROPERTY_ELEMENT_MM }; UInt32 size = sizeof(vol); OSStatus status = AudioObjectSetPropertyData(dev_id, @@ -366,25 +375,25 @@ osx_output_set_device_format(AudioDeviceID dev_id, static constexpr AudioObjectPropertyAddress aopa_device_streams = { kAudioDevicePropertyStreams, kAudioObjectPropertyScopeOutput, - kAudioObjectPropertyElementMain + KAUDIO_OBJECT_PROPERTY_ELEMENT_MM }; static constexpr AudioObjectPropertyAddress aopa_stream_direction = { kAudioStreamPropertyDirection, kAudioObjectPropertyScopeOutput, - kAudioObjectPropertyElementMain + KAUDIO_OBJECT_PROPERTY_ELEMENT_MM }; static constexpr AudioObjectPropertyAddress aopa_stream_phys_formats = { kAudioStreamPropertyAvailablePhysicalFormats, kAudioObjectPropertyScopeOutput, - kAudioObjectPropertyElementMain + KAUDIO_OBJECT_PROPERTY_ELEMENT_MM }; static constexpr AudioObjectPropertyAddress aopa_stream_phys_format = { kAudioStreamPropertyPhysicalFormat, kAudioObjectPropertyScopeOutput, - kAudioObjectPropertyElementMain + KAUDIO_OBJECT_PROPERTY_ELEMENT_MM }; OSStatus err; @@ -484,7 +493,7 @@ osx_output_hog_device(AudioDeviceID dev_id, bool hog) noexcept static constexpr AudioObjectPropertyAddress aopa = { kAudioDevicePropertyHogMode, kAudioObjectPropertyScopeOutput, - kAudioObjectPropertyElementMain + KAUDIO_OBJECT_PROPERTY_ELEMENT_MM }; pid_t hog_pid; @@ -538,7 +547,7 @@ IsAudioDeviceName(AudioDeviceID id, const char *expected_name) noexcept static constexpr AudioObjectPropertyAddress aopa_name{ kAudioObjectPropertyName, kAudioObjectPropertyScopeGlobal, - kAudioObjectPropertyElementMain, + KAUDIO_OBJECT_PROPERTY_ELEMENT_MM, }; char actual_name[256]; @@ -561,7 +570,7 @@ FindAudioDeviceByName(const char *name) static constexpr AudioObjectPropertyAddress aopa_hw_devices{ kAudioHardwarePropertyDevices, kAudioObjectPropertyScopeGlobal, - kAudioObjectPropertyElementMain, + KAUDIO_OBJECT_PROPERTY_ELEMENT_MM, }; const auto ids =