Changeset 285683 in webkit
- Timestamp:
- Nov 11, 2021, 3:48:09 PM (5 years ago)
- Location:
- branches/safari-612.3.6.0-branch/Source/WebKit
- Files:
-
- 3 edited
-
ChangeLog (modified) (1 diff)
-
UIProcess/SpeechRecognitionRemoteRealtimeMediaSource.cpp (modified) (1 diff)
-
WebProcess/Speech/SpeechRecognitionRealtimeMediaSourceManager.cpp (modified) (5 diffs)
Legend:
- Unmodified
- Added
- Removed
-
branches/safari-612.3.6.0-branch/Source/WebKit/ChangeLog
r285600 r285683 1 2021-11-11 Kocsen Chung <kocsen_chung@apple.com> 2 3 Cherry-pick r285509. rdar://problem/83381842 4 5 Fix wrong frame count of CARingBuffer in SpeechRecognitionRemoteRealtimeMediaSource 6 https://bugs.webkit.org/show_bug.cgi?id=232863 7 <rdar://83381842> 8 9 Reviewed by Youenn Fablet. 10 11 SpeechRecognitionRealtimeMediaSourceManager::Source uses shared ring buffer to pass audio data to 12 SpeechRecognitionRemoteRealtimeMediaSource. We used to ask CARingBuffer in 13 SpeechRecognitionRealtimeMediaSourceManager::Source to allocate with m_numberOfFrames and send m_numberOfFrames 14 to SpeechRecognitionRemoteRealtimeMediaSource (so SpeechRecognitionRemoteRealtimeMediaSource can create a 15 corresponding CARingBuffer). This is wrong because CARingBuffer::allocate() rounds up frameCount to power of 16 two, which means m_numberOfFrames may be not the number used. We should get the actual frameCount in the 17 setStorage callback of SharedRingBufferStorage, and pass that value to SpeechRecognitionRemoteRealtimeMediaSource. 18 19 Manually tested. 20 21 * UIProcess/SpeechRecognitionRemoteRealtimeMediaSource.cpp: 22 (WebKit::SpeechRecognitionRemoteRealtimeMediaSource::setStorage): 23 * WebProcess/Speech/SpeechRecognitionRealtimeMediaSourceManager.cpp: 24 (WebKit::SpeechRecognitionRealtimeMediaSourceManager::Source::Source): 25 (WebKit::SpeechRecognitionRealtimeMediaSourceManager::Source::storageChanged): 26 27 git-svn-id: https://svn.webkit.org/repository/webkit/trunk@285509 268f45cc-cd09-0410-ab3c-d52691b4dbfc 28 29 2021-11-09 Sihui Liu <sihui_liu@apple.com> 30 31 Fix wrong frame count of CARingBuffer in SpeechRecognitionRemoteRealtimeMediaSource 32 https://bugs.webkit.org/show_bug.cgi?id=232863 33 <rdar://83381842> 34 35 Reviewed by Youenn Fablet. 36 37 SpeechRecognitionRealtimeMediaSourceManager::Source uses shared ring buffer to pass audio data to 38 SpeechRecognitionRemoteRealtimeMediaSource. We used to ask CARingBuffer in 39 SpeechRecognitionRealtimeMediaSourceManager::Source to allocate with m_numberOfFrames and send m_numberOfFrames 40 to SpeechRecognitionRemoteRealtimeMediaSource (so SpeechRecognitionRemoteRealtimeMediaSource can create a 41 corresponding CARingBuffer). This is wrong because CARingBuffer::allocate() rounds up frameCount to power of 42 two, which means m_numberOfFrames may be not the number used. We should get the actual frameCount in the 43 setStorage callback of SharedRingBufferStorage, and pass that value to SpeechRecognitionRemoteRealtimeMediaSource. 44 45 Manually tested. 46 47 * UIProcess/SpeechRecognitionRemoteRealtimeMediaSource.cpp: 48 (WebKit::SpeechRecognitionRemoteRealtimeMediaSource::setStorage): 49 * WebProcess/Speech/SpeechRecognitionRealtimeMediaSourceManager.cpp: 50 (WebKit::SpeechRecognitionRealtimeMediaSourceManager::Source::Source): 51 (WebKit::SpeechRecognitionRealtimeMediaSourceManager::Source::storageChanged): 52 1 53 2021-11-08 Kocsen Chung <kocsen_chung@apple.com> 2 54 -
branches/safari-612.3.6.0-branch/Source/WebKit/UIProcess/SpeechRecognitionRemoteRealtimeMediaSource.cpp
r278471 r285683 78 78 void SpeechRecognitionRemoteRealtimeMediaSource::setStorage(const SharedMemory::Handle& handle, const WebCore::CAAudioStreamDescription& description, uint64_t numberOfFrames) 79 79 { 80 if (!numberOfFrames) { 81 m_ringBuffer = nullptr; 82 m_buffer = nullptr; 83 return; 84 } 85 80 86 m_description = description; 81 82 87 m_ringBuffer = WebCore::CARingBuffer::adoptStorage(makeUniqueRef<ReadOnlySharedRingBufferStorage>(handle), description, numberOfFrames).moveToUniquePtr(); 83 88 m_buffer = makeUnique<WebCore::WebAudioBufferList>(description); -
branches/safari-612.3.6.0-branch/Source/WebKit/WebProcess/Speech/SpeechRecognitionRealtimeMediaSourceManager.cpp
r277584 r285683 64 64 , m_connection(WTFMove(connection)) 65 65 #if PLATFORM(COCOA) 66 , m_ringBuffer(makeUniqueRef<SharedRingBufferStorage>(std::bind(&Source::storageChanged, this, std::placeholders::_1 )))66 , m_ringBuffer(makeUniqueRef<SharedRingBufferStorage>(std::bind(&Source::storageChanged, this, std::placeholders::_1, std::placeholders::_2, std::placeholders::_3))) 67 67 #endif 68 68 { … … 114 114 ASSERT(description.platformDescription().type == PlatformDescription::CAAudioStreamBasicType); 115 115 m_description = *WTF::get<const AudioStreamBasicDescription*>(description.platformDescription().description); 116 117 m_numberOfFrames = m_description.sampleRate() * 2; 118 m_ringBuffer.allocate(m_description.streamDescription(), m_numberOfFrames); 116 m_ringBuffer.allocate(m_description.streamDescription(), m_description.sampleRate() * 2); 119 117 } 120 118 … … 132 130 #if PLATFORM(COCOA) 133 131 134 void storageChanged(SharedMemory* storage )132 void storageChanged(SharedMemory* storage, const WebCore::CAAudioStreamDescription& description, size_t numberOfFrames) 135 133 { 136 134 DisableMallocRestrictionsForCurrentThreadScope scope; … … 143 141 uint64_t dataSize = 0; 144 142 #endif 145 m_connection->send(Messages::SpeechRecognitionRemoteRealtimeMediaSourceManager::SetStorage(m_identifier, SharedMemory::IPCHandle { WTFMove(handle), dataSize }, m_description, m_numberOfFrames), 0);143 m_connection->send(Messages::SpeechRecognitionRemoteRealtimeMediaSourceManager::SetStorage(m_identifier, SharedMemory::IPCHandle { WTFMove(handle), dataSize }, description, numberOfFrames), 0); 146 144 } 147 145 … … 163 161 164 162 #if PLATFORM(COCOA) 165 uint64_t m_numberOfFrames { 0 };166 163 CARingBuffer m_ringBuffer; 167 164 CAAudioStreamDescription m_description { };
Note:
See TracChangeset
for help on using the changeset viewer.