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