Changeset 261566 in webkit
- Timestamp:
- May 12, 2020 11:23:37 AM (4 years ago)
- Location:
- trunk/Source
- Files:
-
- 9 edited
Legend:
- Unmodified
- Added
- Removed
-
trunk/Source/WebCore/ChangeLog
r261558 r261566 1 2020-05-12 Jacob Uphoff <jacob_uphoff@apple.com> 2 3 Unreviewed, reverting r261557. 4 5 This commit caused testing to exit early due to too many 6 crashes on macOS Catalina Asan 7 8 Reverted changeset: 9 10 "Allow WebAudioBufferList to dynamically change its number of 11 frames" 12 https://bugs.webkit.org/show_bug.cgi?id=211720 13 https://trac.webkit.org/changeset/261557 14 1 15 2020-05-12 Simon Fraser <simon.fraser@apple.com> 2 16 -
trunk/Source/WebCore/Modules/webaudio/MediaStreamAudioSource.cpp
r261557 r261566 30 30 31 31 #include "NotImplemented.h" 32 #include "PlatformAudioData.h"32 #include <wtf/UUID.h> 33 33 34 34 namespace WebCore { … … 39 39 m_currentSettings.setSampleRate(sampleRate); 40 40 } 41 42 MediaStreamAudioSource::~MediaStreamAudioSource() = default;43 41 44 42 const RealtimeMediaSourceCapabilities& MediaStreamAudioSource::capabilities() -
trunk/Source/WebCore/Modules/webaudio/MediaStreamAudioSource.h
r261557 r261566 36 36 37 37 class AudioBus; 38 class PlatformAudioData;39 38 class RealtimeMediaSourceCapabilities; 40 39 … … 43 42 static Ref<MediaStreamAudioSource> create(float sampleRate) { return adoptRef(*new MediaStreamAudioSource { sampleRate }); } 44 43 45 ~MediaStreamAudioSource() ;44 ~MediaStreamAudioSource() = default; 46 45 47 46 const RealtimeMediaSourceCapabilities& capabilities() final; … … 60 59 String m_deviceId; 61 60 RealtimeMediaSourceSettings m_currentSettings; 62 std::unique_ptr<PlatformAudioData> m_audioBuffer;63 61 #if USE(AVFOUNDATION) 64 62 size_t m_numberOfFrames { 0 }; -
trunk/Source/WebCore/Modules/webaudio/MediaStreamAudioSourceCocoa.cpp
r261557 r261566 42 42 namespace WebCore { 43 43 44 static inline CAAudioStreamDescription streamDescription(size_t sampleRate, size_t channelCount)44 static inline AudioStreamBasicDescription streamDescription(size_t sampleRate, size_t channelCount) 45 45 { 46 46 bool isFloat = true; … … 76 76 m_numberOfFrames += numberOfFrames; 77 77 78 auto* audioBuffer = m_audioBuffer ? &downcast<WebAudioBufferList>(*m_audioBuffer) : nullptr;78 AudioStreamBasicDescription newDescription = streamDescription(m_currentSettings.sampleRate(), bus.numberOfChannels()); 79 79 80 auto description = streamDescription(m_currentSettings.sampleRate(), bus.numberOfChannels()); 81 if (!audioBuffer || audioBuffer->channelCount() != bus.numberOfChannels()) { 82 m_audioBuffer = makeUnique<WebAudioBufferList>(description, WTF::safeCast<uint32_t>(numberOfFrames)); 83 audioBuffer = &downcast<WebAudioBufferList>(*m_audioBuffer); 84 } else 85 audioBuffer->setSampleCount(numberOfFrames); 80 // FIXME: We should do the memory allocation once in MediaStreamAudioSource and resize it according numberOfFrames. 81 WebAudioBufferList audioBufferList { CAAudioStreamDescription(newDescription), WTF::safeCast<uint32_t>(numberOfFrames) }; 86 82 87 83 for (size_t cptr = 0; cptr < bus.numberOfChannels(); ++cptr) 88 copyChannelData(*bus.channel(cptr), *audioBuffer ->buffer(cptr), numberOfFrames, muted());84 copyChannelData(*bus.channel(cptr), *audioBufferList.buffer(cptr), numberOfFrames, muted()); 89 85 90 audioSamplesAvailable(mediaTime, *m_audioBuffer, description, numberOfFrames);86 audioSamplesAvailable(mediaTime, audioBufferList, CAAudioStreamDescription(newDescription), numberOfFrames); 91 87 } 92 88 -
trunk/Source/WebCore/platform/audio/cocoa/WebAudioBufferList.cpp
r261557 r261566 34 34 35 35 WebAudioBufferList::WebAudioBufferList(const CAAudioStreamDescription& format) 36 : m_bytesPerFrame(format.bytesPerFrame())37 , m_channelCount(format.numberOfInterleavedChannels())38 36 { 39 37 // AudioBufferList is a variable-length struct, so create on the heap with a generic new() operator 40 38 // with a custom size, and initialize the struct manually. 41 39 uint32_t bufferCount = format.numberOfChannelStreams(); 40 uint32_t channelCount = format.numberOfInterleavedChannels(); 42 41 43 42 uint64_t bufferListSize = offsetof(AudioBufferList, mBuffers) + (sizeof(AudioBuffer) * std::max(1U, bufferCount)); … … 49 48 m_canonicalList->mNumberBuffers = bufferCount; 50 49 for (uint32_t buffer = 0; buffer < bufferCount; ++buffer) 51 m_canonicalList->mBuffers[buffer].mNumberChannels = m_channelCount;50 m_canonicalList->mBuffers[buffer].mNumberChannels = channelCount; 52 51 53 52 reset(); … … 57 56 : WebAudioBufferList(format) 58 57 { 59 if (sampleCount) 60 setSampleCount(sampleCount); 61 } 62 63 void WebAudioBufferList::setSampleCount(uint32_t sampleCount) 64 { 65 uint32_t bufferCount = m_canonicalList->mNumberBuffers; 66 if (!bufferCount || m_sampleCount == sampleCount) 58 if (!sampleCount) 67 59 return; 68 60 69 m_sampleCount = sampleCount; 70 size_t bytesPerBuffer = m_sampleCount * m_channelCount * m_bytesPerFrame; 71 m_flatBuffer.reserveCapacity(bufferCount * bytesPerBuffer); 61 uint32_t bufferCount = format.numberOfChannelStreams(); 62 uint32_t channelCount = format.numberOfInterleavedChannels(); 63 64 size_t bytesPerBuffer = sampleCount * channelCount * format.bytesPerFrame(); 65 m_flatBuffer.reserveInitialCapacity(bufferCount * bytesPerBuffer); 72 66 auto data = m_flatBuffer.data(); 73 67 … … 84 78 : WebAudioBufferList(format) 85 79 { 80 86 81 if (!sampleBuffer) 87 82 return; -
trunk/Source/WebCore/platform/audio/cocoa/WebAudioBufferList.h
r261557 r261566 47 47 48 48 void reset(); 49 WEBCORE_EXPORT void setSampleCount(uint32_t);50 49 51 50 AudioBufferList* list() const { return m_list.get(); } … … 53 52 54 53 uint32_t bufferCount() const; 55 uint32_t channelCount() const { return m_channelCount; }56 54 AudioBuffer* buffer(uint32_t index) const; 57 55 WTF::IteratorRange<AudioBuffer*> buffers() const; … … 61 59 62 60 size_t m_listBufferSize { 0 }; 63 uint32_t m_bytesPerFrame { 0 };64 uint32_t m_channelCount { 0 };65 uint32_t m_sampleCount { 0 };66 61 std::unique_ptr<AudioBufferList> m_canonicalList; 67 62 std::unique_ptr<AudioBufferList> m_list; -
trunk/Source/WebKit/ChangeLog
r261560 r261566 1 2020-05-12 Jacob Uphoff <jacob_uphoff@apple.com> 2 3 Unreviewed, reverting r261557. 4 5 This commit caused testing to exit early due to too many 6 crashes on macOS Catalina Asan 7 8 Reverted changeset: 9 10 "Allow WebAudioBufferList to dynamically change its number of 11 frames" 12 https://bugs.webkit.org/show_bug.cgi?id=211720 13 https://trac.webkit.org/changeset/261557 14 1 15 2020-05-12 Per Arne Vollan <pvollan@apple.com> 2 16 -
trunk/Source/WebKit/WebProcess/cocoa/RemoteCaptureSampleManager.cpp
r261557 r261566 139 139 storage.setReadOnly(true); 140 140 m_ringBuffer->allocate(description, numberOfFrames); 141 m_buffer = makeUnique<WebAudioBufferList>(description, numberOfFrames);142 141 } 143 142 144 143 void RemoteCaptureSampleManager::RemoteAudio::audioSamplesAvailable(MediaTime time, uint64_t numberOfFrames, uint64_t startFrame, uint64_t endFrame) 145 144 { 146 m_buffer->setSampleCount(numberOfFrames); 145 // FIXME: We should allocate this buffer once and resize it as needed. 146 WebAudioBufferList audioData(m_description, numberOfFrames); 147 147 148 148 m_ringBuffer->setCurrentFrameBounds(startFrame, endFrame); 149 m_ringBuffer->fetch( m_buffer->list(), numberOfFrames, time.timeValue());149 m_ringBuffer->fetch(audioData.list(), numberOfFrames, time.timeValue()); 150 150 151 m_source->remoteAudioSamplesAvailable(time, *m_buffer, m_description, numberOfFrames);151 m_source->remoteAudioSamplesAvailable(time, audioData, m_description, numberOfFrames); 152 152 } 153 153 -
trunk/Source/WebKit/WebProcess/cocoa/RemoteCaptureSampleManager.h
r261557 r261566 34 34 #include <WebCore/CAAudioStreamDescription.h> 35 35 #include <WebCore/CARingBuffer.h> 36 #include <WebCore/WebAudioBufferList.h>37 36 #include <wtf/HashMap.h> 38 37 #include <wtf/WorkQueue.h> … … 73 72 WebCore::CAAudioStreamDescription m_description; 74 73 std::unique_ptr<WebCore::CARingBuffer> m_ringBuffer; 75 std::unique_ptr<WebCore::WebAudioBufferList> m_buffer;76 74 }; 77 75
Note: See TracChangeset
for help on using the changeset viewer.