Branch: refs/heads/main
  Home:   https://github.com/WebKit/WebKit
  Commit: f447304fe0efb069b90eeec9d0940ac05f661792
      
https://github.com/WebKit/WebKit/commit/f447304fe0efb069b90eeec9d0940ac05f661792
  Author: Jean-Yves Avenard <[email protected]>
  Date:   2024-10-15 (Tue, 15 Oct 2024)

  Changed paths:
    M 
Source/WebCore/platform/mediarecorder/cocoa/MediaRecorderPrivateWriterWebM.h
    M 
Source/WebCore/platform/mediarecorder/cocoa/MediaRecorderPrivateWriterWebM.mm
    M Source/WebKit/WebProcess/GPU/webrtc/MediaRecorderProvider.cpp

  Log Message:
  -----------
  MediaRecorderPrivateWriterWebM should be running in the content process.
https://bugs.webkit.org/show_bug.cgi?id=281370
rdar://137795763

Reviewed by Youenn Fablet.

We create the MediaRecorderPrivate in the content process if webm was requested.
When running in the content process, 
MediaRecorderPrivateWriterWebM::appendAudioSampleBuffer
will be called on the audio thread and 
MediaRecorderPrivateWriterWebM::appendVideoFrame will
be called on the video capture thread. So we have to make those both methods 
thread-safe.

To achieve this goal we now run the MediaRecorderPrivateWriterWebM on its own 
work queue.
Using the main thread was no longer suitable as we want the writer to operate 
even when
the main thread is blocked to avoid losing data.
We could have made the threading management controlled by the 
MediaRecorderPrivate instead
but it would have required more extensive changes, so we limit it to WebM only 
for now.

For appendVideoFrame we simply forward the video frame to this WorkQueue,
for appendAudioSampleBuffer the data structure received isn't ref-counted
we must as such create the CMSampleBuffer on the audio thread and then forward 
it to the workqueue.

This is similar to what the WebKit::MediaRecorderPrivate is doing before 
sending the data to
the GPU process.

* Source/WebCore/platform/mediarecorder/cocoa/MediaRecorderPrivateWriterWebM.h:
* Source/WebCore/platform/mediarecorder/cocoa/MediaRecorderPrivateWriterWebM.mm:
(WebCore::MediaRecorderPrivateWriterWebM::MediaRecorderPrivateWriterWebM):
(WebCore::MediaRecorderPrivateWriterWebM::close):
(WebCore::MediaRecorderPrivateWriterWebM::compressedAudioOutputBufferCallback):
(WebCore::MediaRecorderPrivateWriterWebM::initialize):
(WebCore::MediaRecorderPrivateWriterWebM::enqueueCompressedAudioSampleBuffers):
(WebCore::MediaRecorderPrivateWriterWebM::maybeStartWriting):
(WebCore::MediaRecorderPrivateWriterWebM::appendVideoFrame):
(WebCore::MediaRecorderPrivateWriterWebM::nextVideoFrameTime const):
(WebCore::MediaRecorderPrivateWriterWebM::resumeVideoTime const):
(WebCore::MediaRecorderPrivateWriterWebM::encodePendingVideoFrames):
(WebCore::MediaRecorderPrivateWriterWebM::appendAudioSampleBuffer):
(WebCore::MediaRecorderPrivateWriterWebM::flushEncodedQueues):
(WebCore::MediaRecorderPrivateWriterWebM::partiallyFlushEncodedQueues):
(WebCore::MediaRecorderPrivateWriterWebM::muxNextFrame):
(WebCore::MediaRecorderPrivateWriterWebM::stopRecording):
(WebCore::MediaRecorderPrivateWriterWebM::fetchData):
(WebCore::MediaRecorderPrivateWriterWebM::flushPendingData):
(WebCore::MediaRecorderPrivateWriterWebM::appendData):
(WebCore::MediaRecorderPrivateWriterWebM::flushDataBuffer):
(WebCore::MediaRecorderPrivateWriterWebM::takeData):
(WebCore::MediaRecorderPrivateWriterWebM::pause):
(WebCore::MediaRecorderPrivateWriterWebM::resume):
(WebCore::MediaRecorderPrivateWriterWebM::mimeType const):
(WebCore::MediaRecorderPrivateWriterWebM::audioBitRate const):
(WebCore::MediaRecorderPrivateWriterWebM::videoBitRate const):
(WebCore::MediaRecorderPrivateWriterWebM::maybeForceNewCluster):
(WebCore::MediaRecorderPrivateWriterWebM::workQueue const):
(WebCore::MediaRecorderPrivateWriterWebM::completeFetchData): Deleted.
* Source/WebKit/WebProcess/GPU/webrtc/MediaRecorderProvider.cpp:
(WebKit::MediaRecorderProvider::createMediaRecorderPrivate):

Canonical link: https://commits.webkit.org/285227@main



To unsubscribe from these emails, change your notification settings at 
https://github.com/WebKit/WebKit/settings/notifications
_______________________________________________
webkit-changes mailing list
[email protected]
https://lists.webkit.org/mailman/listinfo/webkit-changes

Reply via email to