Changeset 270943 in webkit
- Timestamp:
- Dec 17, 2020 1:33:12 PM (19 months ago)
- Location:
- trunk/Source/WebCore
- Files:
-
- 5 edited
-
ChangeLog (modified) (1 diff)
-
platform/audio/AudioHardwareListener.cpp (modified) (1 diff)
-
platform/audio/AudioHardwareListener.h (modified) (2 diffs)
-
platform/audio/cocoa/MediaSessionManagerCocoa.mm (modified) (1 diff)
-
platform/audio/mac/AudioHardwareListenerMac.cpp (modified) (4 diffs)
Legend:
- Unmodified
- Added
- Removed
-
trunk/Source/WebCore/ChangeLog
r270942 r270943 1 2020-12-17 Jer Noble <jer.noble@apple.com> 2 3 [macOS] Use low-power audio buffer sizes for more output devices 4 https://bugs.webkit.org/show_bug.cgi?id=219975 5 <rdar://problem/72391280> 6 7 Reviewed by Eric Carlson. 8 9 In r171069, we limited setting the preferred buffer duration to a "low power", high-duration value to 10 built-in hardware, as some external audio devices would report supporting those high-duration values 11 only to have audible glitches when that value was set. Since then, external, wireless audio devices have 12 become vastly more prevalent. To enable "low power" buffer durations on those devices, allow these larger 13 durations to be set on external devices so long as they claim to support that larger duration. 14 15 * platform/audio/AudioHardwareListener.cpp: 16 (WebCore::AudioHardwareListener::AudioHardwareListener): 17 * platform/audio/AudioHardwareListener.h: 18 (WebCore::AudioHardwareListener::BufferSizeRange::operator bool const): 19 (WebCore::AudioHardwareListener::BufferSizeRange::nearest const): 20 (WebCore::AudioHardwareListener::supportedBufferSizes const): 21 (WebCore::AudioHardwareListener::setSupportedBufferSizes): 22 (WebCore::AudioHardwareListener::outputDeviceSupportsLowPowerMode const): Deleted. 23 (WebCore::AudioHardwareListener::setOutputDeviceSupportsLowPowerMode): Deleted. 24 * platform/audio/cocoa/MediaSessionManagerCocoa.mm: 25 (WebCore::MediaSessionManagerCocoa::updateSessionState): 26 * platform/audio/mac/AudioHardwareListenerMac.cpp: 27 (WebCore::currentDeviceSupportedBufferSizes): 28 (WebCore::AudioHardwareListenerMac::AudioHardwareListenerMac): 29 (WebCore::AudioHardwareListenerMac::outputDeviceChanged): 30 (WebCore::currentDeviceSupportsLowPowerBufferSize): Deleted. 31 1 32 2020-12-17 Kate Cheney <katherine_cheney@apple.com> 2 33 -
trunk/Source/WebCore/platform/audio/AudioHardwareListener.cpp
r267544 r270943 40 40 { 41 41 #if PLATFORM(IOS_FAMILY) 42 m_ outputDeviceSupportsLowPowerMode = true;42 m_supportedBufferSizes = { 32, 4096 }; 43 43 #endif 44 44 } -
trunk/Source/WebCore/platform/audio/AudioHardwareListener.h
r267544 r270943 52 52 53 53 AudioHardwareActivityType hardwareActivity() const { return m_activity; } 54 bool outputDeviceSupportsLowPowerMode() const { return m_outputDeviceSupportsLowPowerMode; } 54 55 struct BufferSizeRange { 56 size_t minimum { 0 }; 57 size_t maximum { 0 }; 58 operator bool() const { return minimum && maximum; } 59 size_t nearest(size_t value) const { return std::min(std::max(value, minimum), maximum); } 60 }; 61 BufferSizeRange supportedBufferSizes() const { return m_supportedBufferSizes; } 55 62 56 63 protected: … … 58 65 59 66 void setHardwareActivity(AudioHardwareActivityType activity) { m_activity = activity; } 60 void set OutputDeviceSupportsLowPowerMode(bool support) { m_outputDeviceSupportsLowPowerMode = support; }67 void setSupportedBufferSizes(BufferSizeRange sizes) { m_supportedBufferSizes = sizes; } 61 68 62 69 Client& m_client; 63 70 AudioHardwareActivityType m_activity { AudioHardwareActivityType::Unknown }; 64 bool m_outputDeviceSupportsLowPowerMode { false };71 BufferSizeRange m_supportedBufferSizes; 65 72 }; 66 73 -
trunk/Source/WebCore/platform/audio/cocoa/MediaSessionManagerCocoa.mm
r267541 r270943 110 110 else if ((videoAudioCount || audioCount) && DeprecatedGlobalSettings::lowPowerVideoAudioBufferSizeEnabled()) { 111 111 size_t bufferSize; 112 if (m_audioHardwareListener && m_audioHardwareListener-> outputDeviceSupportsLowPowerMode())113 bufferSize = kLowPowerVideoBufferSize;112 if (m_audioHardwareListener && m_audioHardwareListener->supportedBufferSizes()) 113 bufferSize = m_audioHardwareListener->supportedBufferSizes().nearest(kLowPowerVideoBufferSize); 114 114 else 115 115 bufferSize = AudioUtilities::renderQuantumSize; -
trunk/Source/WebCore/platform/audio/mac/AudioHardwareListenerMac.cpp
r232613 r270943 60 60 } 61 61 62 static bool currentDeviceSupportsLowPowerBufferSize()62 static AudioHardwareListener::BufferSizeRange currentDeviceSupportedBufferSizes() 63 63 { 64 64 AudioDeviceID deviceID = kAudioDeviceUnknown; … … 70 70 71 71 if (AudioObjectGetPropertyData(kAudioObjectSystemObject, &defaultOutputDeviceDescriptor, 0, 0, &descriptorSize, (void*)&deviceID)) 72 return false;72 return { }; 73 73 74 UInt32 transportType = kAudioDeviceTransportTypeUnknown; 75 descriptorSize = sizeof(transportType); 76 AudioObjectPropertyAddress tranportTypeDescriptor = { 77 kAudioDevicePropertyTransportType, 74 AudioValueRange bufferSizes; 75 descriptorSize = sizeof(bufferSizes); 76 77 AudioObjectPropertyAddress bufferSizeDescriptor = { 78 kAudioDevicePropertyBufferFrameSizeRange, 78 79 kAudioObjectPropertyScopeGlobal, 79 80 kAudioObjectPropertyElementMaster, 80 81 }; 81 82 82 if (AudioObjectGetPropertyData(deviceID, & tranportTypeDescriptor, 0, 0, &descriptorSize, &transportType))83 return false;83 if (AudioObjectGetPropertyData(deviceID, &bufferSizeDescriptor, 0, 0, &descriptorSize, &bufferSizes)) 84 return { }; 84 85 85 // Only allow low-power buffer size when using built-in output device, many external devices perform 86 // poorly with a large output buffer. 87 return kAudioDeviceTransportTypeBuiltIn == transportType; 86 return { static_cast<size_t>(bufferSizes.mMinimum), static_cast<size_t>(bufferSizes.mMaximum) }; 88 87 } 88 89 89 90 90 static const AudioObjectPropertyAddress& processIsRunningPropertyDescriptor() … … 124 124 { 125 125 setHardwareActivity(isAudioHardwareProcessRunning()); 126 set OutputDeviceSupportsLowPowerMode(currentDeviceSupportsLowPowerBufferSize());126 setSupportedBufferSizes(currentDeviceSupportedBufferSizes()); 127 127 128 128 auto weakThis = makeWeakPtr(*this); … … 173 173 void AudioHardwareListenerMac::outputDeviceChanged() 174 174 { 175 set OutputDeviceSupportsLowPowerMode(currentDeviceSupportsLowPowerBufferSize());175 setSupportedBufferSizes(currentDeviceSupportedBufferSizes()); 176 176 m_client.audioOutputDeviceChanged(); 177 177 }
Note: See TracChangeset
for help on using the changeset viewer.