⚠ Archived content — this site is no longer maintained.   Current WebKit documentation is at docs.webkit.org.

Changeset 285690 in webkit


Ignore:
Timestamp:
Nov 11, 2021, 5:09:52 PM (5 years ago)
Author:
Alan Coon
Message:

Cherry-pick r285509. rdar://problem/83381842

Fix wrong frame count of CARingBuffer in SpeechRecognitionRemoteRealtimeMediaSource
https://bugs.webkit.org/show_bug.cgi?id=232863
<rdar://83381842>

Reviewed by Youenn Fablet.

SpeechRecognitionRealtimeMediaSourceManager::Source uses shared ring buffer to pass audio data to
SpeechRecognitionRemoteRealtimeMediaSource. We used to ask CARingBuffer in
SpeechRecognitionRealtimeMediaSourceManager::Source to allocate with m_numberOfFrames and send m_numberOfFrames
to SpeechRecognitionRemoteRealtimeMediaSource (so SpeechRecognitionRemoteRealtimeMediaSource can create a
corresponding CARingBuffer). This is wrong because CARingBuffer::allocate() rounds up frameCount to power of
two, which means m_numberOfFrames may be not the number used. We should get the actual frameCount in the
setStorage callback of SharedRingBufferStorage, and pass that value to SpeechRecognitionRemoteRealtimeMediaSource.

Manually tested.

  • UIProcess/SpeechRecognitionRemoteRealtimeMediaSource.cpp: (WebKit::SpeechRecognitionRemoteRealtimeMediaSource::setStorage):
  • WebProcess/Speech/SpeechRecognitionRealtimeMediaSourceManager.cpp: (WebKit::SpeechRecognitionRealtimeMediaSourceManager::Source::Source): (WebKit::SpeechRecognitionRealtimeMediaSourceManager::Source::storageChanged):

git-svn-id: https://svn.webkit.org/repository/webkit/trunk@285509 268f45cc-cd09-0410-ab3c-d52691b4dbfc

Location:
branches/safari-612.3.6.1-branch/Source/WebKit
Files:
3 edited

Legend:

Unmodified
Added
Removed
  • branches/safari-612.3.6.1-branch/Source/WebKit/ChangeLog

    r285600 r285690  
     12021-11-11  Alan Coon  <alancoon@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
    1532021-11-08  Kocsen Chung  <kocsen_chung@apple.com>
    254
  • branches/safari-612.3.6.1-branch/Source/WebKit/UIProcess/SpeechRecognitionRemoteRealtimeMediaSource.cpp

    r278471 r285690  
    7878void SpeechRecognitionRemoteRealtimeMediaSource::setStorage(const SharedMemory::Handle& handle, const WebCore::CAAudioStreamDescription& description, uint64_t numberOfFrames)
    7979{
     80    if (!numberOfFrames) {
     81        m_ringBuffer = nullptr;
     82        m_buffer = nullptr;
     83        return;
     84    }
     85
    8086    m_description = description;
    81 
    8287    m_ringBuffer = WebCore::CARingBuffer::adoptStorage(makeUniqueRef<ReadOnlySharedRingBufferStorage>(handle), description, numberOfFrames).moveToUniquePtr();
    8388    m_buffer = makeUnique<WebCore::WebAudioBufferList>(description);
  • branches/safari-612.3.6.1-branch/Source/WebKit/WebProcess/Speech/SpeechRecognitionRealtimeMediaSourceManager.cpp

    r277584 r285690  
    6464        , m_connection(WTFMove(connection))
    6565#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)))
    6767#endif
    6868    {
     
    114114            ASSERT(description.platformDescription().type == PlatformDescription::CAAudioStreamBasicType);
    115115            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);
    119117        }
    120118
     
    132130#if PLATFORM(COCOA)
    133131
    134     void storageChanged(SharedMemory* storage)
     132    void storageChanged(SharedMemory* storage, const WebCore::CAAudioStreamDescription& description, size_t numberOfFrames)
    135133    {
    136134        DisableMallocRestrictionsForCurrentThreadScope scope;
     
    143141        uint64_t dataSize = 0;
    144142#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);
    146144    }
    147145
     
    163161
    164162#if PLATFORM(COCOA)
    165     uint64_t m_numberOfFrames { 0 };
    166163    CARingBuffer m_ringBuffer;
    167164    CAAudioStreamDescription m_description { };
Note: See TracChangeset for help on using the changeset viewer.