Changeset 263588 in webkit


Ignore:
Timestamp:
Jun 26, 2020 2:45:25 PM (4 years ago)
Author:
Jason_Lawrence
Message:

Unreviewed, reverting r263511, r263514, and r263565.

r263511 caused MediaRecorder test crashes on internal testers.

Reverted changesets:

"MediaRecorder stopRecorder() returns empty Blob after first
use"
https://bugs.webkit.org/show_bug.cgi?id=212274
https://trac.webkit.org/changeset/263511

"Unreviewed iOS build fix after r263511."
https://trac.webkit.org/changeset/263514

"MediaRecorder.start() Method is Ignoring the "timeslice"
Parameter"
https://bugs.webkit.org/show_bug.cgi?id=202233
https://trac.webkit.org/changeset/263565

Location:
trunk
Files:
4 deleted
15 edited

Legend:

Unmodified
Added
Removed
  • trunk/LayoutTests/ChangeLog

    r263582 r263588  
     12020-06-26  Jason Lawrence  <lawrence.j@apple.com>
     2
     3        Unreviewed, reverting r263511, r263514, and r263565.
     4
     5        r263511 caused MediaRecorder test crashes on internal testers.
     6
     7        Reverted changesets:
     8
     9        "MediaRecorder stopRecorder() returns empty Blob after first
     10        use"
     11        https://bugs.webkit.org/show_bug.cgi?id=212274
     12        https://trac.webkit.org/changeset/263511
     13
     14        "Unreviewed iOS build fix after r263511."
     15        https://trac.webkit.org/changeset/263514
     16
     17        "MediaRecorder.start() Method is Ignoring the "timeslice"
     18        Parameter"
     19        https://bugs.webkit.org/show_bug.cgi?id=202233
     20        https://trac.webkit.org/changeset/263565
     21
    1222020-06-26  Karl Rackler  <rackler@apple.com>
    223
  • trunk/Source/WebCore/ChangeLog

    r263581 r263588  
     12020-06-26  Jason Lawrence  <lawrence.j@apple.com>
     2
     3        Unreviewed, reverting r263511, r263514, and r263565.
     4
     5        r263511 caused MediaRecorder test crashes on internal testers.
     6
     7        Reverted changesets:
     8
     9        "MediaRecorder stopRecorder() returns empty Blob after first
     10        use"
     11        https://bugs.webkit.org/show_bug.cgi?id=212274
     12        https://trac.webkit.org/changeset/263511
     13
     14        "Unreviewed iOS build fix after r263511."
     15        https://trac.webkit.org/changeset/263514
     16
     17        "MediaRecorder.start() Method is Ignoring the "timeslice"
     18        Parameter"
     19        https://bugs.webkit.org/show_bug.cgi?id=202233
     20        https://trac.webkit.org/changeset/263565
     21
    1222020-06-26  Sam Weinig  <weinig@apple.com>
    223
  • trunk/Source/WebCore/Modules/mediarecorder/MediaRecorder.cpp

    r263565 r263588  
    5252    if (!privateInstance)
    5353        return Exception { NotSupportedError, "The MediaRecorder is unsupported on this platform"_s };
    54     auto recorder = adoptRef(*new MediaRecorder(document, WTFMove(stream), WTFMove(options)));
     54    auto recorder = adoptRef(*new MediaRecorder(document, WTFMove(stream), WTFMove(privateInstance), WTFMove(options)));
    5555    recorder->suspendIfNeeded();
     56    recorder->m_private->setErrorCallback([recorder](auto&& exception) mutable {
     57        recorder->dispatchError(WTFMove(*exception));
     58    });
    5659    return recorder;
    5760}
     
    8083}
    8184
    82 MediaRecorder::MediaRecorder(Document& document, Ref<MediaStream>&& stream, Options&& option)
     85MediaRecorder::MediaRecorder(Document& document, Ref<MediaStream>&& stream, std::unique_ptr<MediaRecorderPrivate>&& privateImpl, Options&& option)
    8386    : ActiveDOMObject(document)
    8487    , m_options(WTFMove(option))
    8588    , m_stream(WTFMove(stream))
    86     , m_timeSliceTimer([this] { requestData(); })
     89    , m_private(WTFMove(privateImpl))
    8790{
    8891    m_tracks = WTF::map(m_stream->getTracks(), [] (auto&& track) -> Ref<MediaStreamTrackPrivate> {
     
    127130}
    128131
    129 ExceptionOr<void> MediaRecorder::startRecording(Optional<int> timeSlice)
    130 {
    131     if (!m_isActive)
    132         return Exception { InvalidStateError, "The MediaRecorder is not active"_s };
    133 
     132ExceptionOr<void> MediaRecorder::startRecording(Optional<int> timeslice)
     133{
     134    UNUSED_PARAM(timeslice);
    134135    if (state() != RecordingState::Inactive)
    135136        return Exception { InvalidStateError, "The MediaRecorder's state must be inactive in order to start recording"_s };
    136 
    137     ASSERT(!m_private);
    138     m_private = createMediaRecorderPrivate(*document(), m_stream->privateStream());
    139 
    140     if (!m_private)
    141         return Exception { NotSupportedError, "The MediaRecorder is unsupported on this platform"_s };
    142 
    143     m_private->startRecording([this, pendingActivity = makePendingActivity(*this)](auto&& exception) mutable {
    144         if (!m_isActive || !exception)
    145             return;
    146 
    147         stopRecordingInternal();
    148         dispatchError(WTFMove(*exception));
    149     });
    150 
     137   
    151138    for (auto& track : m_tracks)
    152139        track->addObserver(*this);
    153140
    154141    m_state = RecordingState::Recording;
    155     m_timeSlice = timeSlice;
    156     if (m_timeSlice)
    157         m_timeSliceTimer.startOneShot(Seconds::fromMilliseconds(*m_timeSlice));
    158142    return { };
    159143}
     
    163147    if (state() == RecordingState::Inactive)
    164148        return Exception { InvalidStateError, "The MediaRecorder's state cannot be inactive"_s };
    165 
    166     stopRecordingInternal();
    167     auto& privateRecorder = *m_private;
    168     privateRecorder.fetchData([this, pendingActivity = makePendingActivity(*this), privateRecorder = WTFMove(m_private)](auto&& buffer, auto& mimeType) {
    169         queueTaskKeepingObjectAlive(*this, TaskSource::Networking, [this, buffer = WTFMove(buffer), mimeType]() mutable {
     149   
     150    queueTaskKeepingObjectAlive(*this, TaskSource::Networking, [this] {
     151        if (!m_isActive || state() == RecordingState::Inactive)
     152            return;
     153
     154        stopRecordingInternal();
     155        ASSERT(m_state == RecordingState::Inactive);
     156        m_private->fetchData([this, pendingActivity = makePendingActivity(*this)](auto&& buffer, auto& mimeType) {
    170157            if (!m_isActive)
    171158                return;
     159   
    172160            dispatchEvent(BlobEvent::create(eventNames().dataavailableEvent, Event::CanBubble::No, Event::IsCancelable::No, buffer ? Blob::create(buffer.releaseNonNull(), mimeType) : Blob::create()));
    173161
    174162            if (!m_isActive)
    175163                return;
     164
    176165            dispatchEvent(Event::create(eventNames().stopEvent, Event::CanBubble::No, Event::IsCancelable::No));
    177166        });
     
    185174        return Exception { InvalidStateError, "The MediaRecorder's state cannot be inactive"_s };
    186175
    187     if (m_timeSliceTimer.isActive())
    188         m_timeSliceTimer.stop();
    189176    m_private->fetchData([this, pendingActivity = makePendingActivity(*this)](auto&& buffer, auto& mimeType) {
    190         queueTaskKeepingObjectAlive(*this, TaskSource::Networking, [this, buffer = WTFMove(buffer), mimeType]() mutable {
    191             if (!m_isActive)
    192                 return;
    193 
    194             dispatchEvent(BlobEvent::create(eventNames().dataavailableEvent, Event::CanBubble::No, Event::IsCancelable::No, buffer ? Blob::create(buffer.releaseNonNull(), mimeType) : Blob::create()));
    195 
    196             if (m_timeSlice)
    197                 m_timeSliceTimer.startOneShot(Seconds::fromMilliseconds(*m_timeSlice));
    198         });
     177        if (!m_isActive)
     178            return;
     179
     180        dispatchEvent(BlobEvent::create(eventNames().dataavailableEvent, Event::CanBubble::No, Event::IsCancelable::No, buffer ? Blob::create(buffer.releaseNonNull(), mimeType) : Blob::create()));
    199181    });
    200182    return { };
  • trunk/Source/WebCore/Modules/mediarecorder/MediaRecorder.h

    r263565 r263588  
    3131#include "MediaStream.h"
    3232#include "MediaStreamTrackPrivate.h"
    33 #include "Timer.h"
    3433#include <wtf/UniqueRef.h>
    3534
     
    7776
    7877private:
    79     MediaRecorder(Document&, Ref<MediaStream>&&, Options&& = { });
     78    MediaRecorder(Document&, Ref<MediaStream>&&, std::unique_ptr<MediaRecorderPrivate>&&, Options&& = { });
    8079
    8180    static std::unique_ptr<MediaRecorderPrivate> createMediaRecorderPrivate(Document&, MediaStreamPrivate&);
     
    118117    RecordingState m_state { RecordingState::Inactive };
    119118    Vector<Ref<MediaStreamTrackPrivate>> m_tracks;
    120     Optional<int> m_timeSlice;
    121     Timer m_timeSliceTimer;
    122119   
    123120    bool m_isActive { true };
  • trunk/Source/WebCore/platform/mediarecorder/MediaRecorderPrivate.h

    r263511 r263588  
    6161    virtual void stopRecording() = 0;
    6262
    63     using ErrorCallback = CompletionHandler<void(Optional<Exception>&&)>;
    64     virtual void startRecording(ErrorCallback&& callback) { callback({ }); }
     63    using ErrorCallback = Function<void(Optional<Exception>&&)>;
     64    void setErrorCallback(ErrorCallback&& errorCallback) { m_errorCallback = WTFMove(errorCallback); }
    6565
    6666protected:
    6767    void setAudioSource(RefPtr<RealtimeMediaSource>&&);
    6868    void setVideoSource(RefPtr<RealtimeMediaSource>&&);
     69
     70protected:
     71    ErrorCallback m_errorCallback;
    6972
    7073private:
  • trunk/Source/WebCore/platform/mediarecorder/cocoa/AudioSampleBufferCompressor.h

    r263511 r263588  
    6161
    6262    dispatch_queue_t m_serialDispatchQueue;
    63     CMTime m_lowWaterTime { kCMTimeInvalid };
     63    CMTime m_lowWaterTime;
    6464
    6565    RetainPtr<CMBufferQueueRef> m_outputBufferQueue;
     
    6767    bool m_isEncoding { false };
    6868
    69     AudioConverterRef m_converter { nullptr };
     69    RetainPtr<AudioConverterRef> m_converter;
    7070    AudioStreamBasicDescription m_sourceFormat;
    7171    AudioStreamBasicDescription m_destinationFormat;
     
    7575    Vector<AudioStreamPacketDescription> m_destinationPacketDescriptions;
    7676
    77     CMTime m_currentNativePresentationTimeStamp { kCMTimeInvalid };
    78     CMTime m_currentOutputPresentationTimeStamp { kCMTimeInvalid };
    79     CMTime m_remainingPrimeDuration { kCMTimeInvalid };
     77    CMTime m_currentNativePresentationTimeStamp;
     78    CMTime m_currentOutputPresentationTimeStamp;
     79    CMTime m_remainingPrimeDuration;
    8080
    8181    Vector<char> m_sourceBuffer;
  • trunk/Source/WebCore/platform/mediarecorder/cocoa/AudioSampleBufferCompressor.mm

    r263511 r263588  
    5959{
    6060    dispatch_release(m_serialDispatchQueue);
    61     if (m_converter) {
    62         AudioConverterDispose(m_converter);
    63         m_converter = nullptr;
    64     }
    6561}
    6662
     
    117113        return false;
    118114    }
    119     m_converter = converter;
     115    m_converter = adoptCF(converter);
    120116
    121117    size_t cookieSize = 0;
    122118    const void *cookie = CMAudioFormatDescriptionGetMagicCookie(formatDescription, &cookieSize);
    123119    if (cookieSize) {
    124         if (auto error = AudioConverterSetProperty(m_converter, kAudioConverterDecompressionMagicCookie, (UInt32)cookieSize, cookie)) {
     120        if (auto error = AudioConverterSetProperty(m_converter.get(), kAudioConverterDecompressionMagicCookie, (UInt32)cookieSize, cookie)) {
    125121            RELEASE_LOG_ERROR(MediaStream, "AudioSampleBufferCompressor setting kAudioConverterDecompressionMagicCookie failed with %d", error);
    126122            return false;
     
    129125
    130126    size = sizeof(m_sourceFormat);
    131     if (auto error = AudioConverterGetProperty(m_converter, kAudioConverterCurrentInputStreamDescription, &size, &m_sourceFormat)) {
     127    if (auto error = AudioConverterGetProperty(m_converter.get(), kAudioConverterCurrentInputStreamDescription, &size, &m_sourceFormat)) {
    132128        RELEASE_LOG_ERROR(MediaStream, "AudioSampleBufferCompressor getting kAudioConverterCurrentInputStreamDescription failed with %d", error);
    133129        return false;
     
    140136
    141137    size = sizeof(m_destinationFormat);
    142     if (auto error = AudioConverterGetProperty(m_converter, kAudioConverterCurrentOutputStreamDescription, &size, &m_destinationFormat)) {
     138    if (auto error = AudioConverterGetProperty(m_converter.get(), kAudioConverterCurrentOutputStreamDescription, &size, &m_destinationFormat)) {
    143139        RELEASE_LOG_ERROR(MediaStream, "AudioSampleBufferCompressor getting kAudioConverterCurrentOutputStreamDescription failed with %d", error);
    144140        return false;
     
    154150
    155151        size = sizeof(outputBitRate);
    156         if (auto error = AudioConverterSetProperty(m_converter, kAudioConverterEncodeBitRate, size, &outputBitRate)) {
     152        if (auto error = AudioConverterSetProperty(m_converter.get(), kAudioConverterEncodeBitRate, size, &outputBitRate)) {
    157153            RELEASE_LOG_ERROR(MediaStream, "AudioSampleBufferCompressor setting kAudioConverterEncodeBitRate failed with %d", error);
    158154            return false;
     
    164160        size = sizeof(m_maxOutputPacketSize);
    165161
    166         if (auto error = AudioConverterGetProperty(m_converter, kAudioConverterPropertyMaximumOutputPacketSize, &size, &m_maxOutputPacketSize)) {
     162        if (auto error = AudioConverterGetProperty(m_converter.get(), kAudioConverterPropertyMaximumOutputPacketSize, &size, &m_maxOutputPacketSize)) {
    167163            RELEASE_LOG_ERROR(MediaStream, "AudioSampleBufferCompressor getting kAudioConverterPropertyMaximumOutputPacketSize failed with %d", error);
    168164            return false;
     
    194190        UInt32 size = sizeof(primeInfo);
    195191
    196         if (auto error = AudioConverterGetProperty(m_converter, kAudioConverterPrimeInfo, &size, &primeInfo)) {
     192        if (auto error = AudioConverterGetProperty(m_converter.get(), kAudioConverterPrimeInfo, &size, &primeInfo)) {
    197193            RELEASE_LOG_ERROR(MediaStream, "AudioSampleBufferCompressor getting kAudioConverterPrimeInfo failed with %d", error);
    198194            return;
     
    216212    UInt32 delaySize = sizeof(uint32_t);
    217213    uint32_t originalDelayMode = 0;
    218     if (auto error = AudioConverterGetProperty(m_converter, kAudioCodecPropertyDelayMode, &delaySize, &originalDelayMode)) {
     214    if (auto error = AudioConverterGetProperty(m_converter.get(), kAudioCodecPropertyDelayMode, &delaySize, &originalDelayMode)) {
    219215        RELEASE_LOG_ERROR(MediaStream, "AudioSampleBufferCompressor getting kAudioCodecPropertyDelayMode failed with %d", error);
    220216        return nil;
     
    222218
    223219    uint32_t optimalDelayMode = kAudioCodecDelayMode_Optimal;
    224     if (auto error = AudioConverterSetProperty(m_converter, kAudioCodecPropertyDelayMode, delaySize, &optimalDelayMode)) {
     220    if (auto error = AudioConverterSetProperty(m_converter.get(), kAudioCodecPropertyDelayMode, delaySize, &optimalDelayMode)) {
    225221        RELEASE_LOG_ERROR(MediaStream, "AudioSampleBufferCompressor setting kAudioCodecPropertyDelayMode failed with %d", error);
    226222        return nil;
     
    229225    UInt32 primeSize = sizeof(AudioCodecPrimeInfo);
    230226    AudioCodecPrimeInfo primeInfo { 0, 0 };
    231     if (auto error = AudioConverterGetProperty(m_converter, kAudioCodecPropertyPrimeInfo, &primeSize, &primeInfo)) {
     227    if (auto error = AudioConverterGetProperty(m_converter.get(), kAudioCodecPropertyPrimeInfo, &primeSize, &primeInfo)) {
    232228        RELEASE_LOG_ERROR(MediaStream, "AudioSampleBufferCompressor getting kAudioCodecPropertyPrimeInfo failed with %d", error);
    233229        return nil;
    234230    }
    235231
    236     if (auto error = AudioConverterSetProperty(m_converter, kAudioCodecPropertyDelayMode, delaySize, &originalDelayMode)) {
     232    if (auto error = AudioConverterSetProperty(m_converter.get(), kAudioCodecPropertyDelayMode, delaySize, &originalDelayMode)) {
    237233        RELEASE_LOG_ERROR(MediaStream, "AudioSampleBufferCompressor setting kAudioCodecPropertyDelayMode failed with %d", error);
    238234        return nil;
     
    247243        UInt32 cookieSize = 0;
    248244
    249         auto error = AudioConverterGetPropertyInfo(m_converter, kAudioConverterCompressionMagicCookie, &cookieSize, NULL);
     245        auto error = AudioConverterGetPropertyInfo(m_converter.get(), kAudioConverterCompressionMagicCookie, &cookieSize, NULL);
    250246        if ((error == noErr) && !!cookieSize) {
    251247            cookie.resize(cookieSize);
    252248
    253             if (auto error = AudioConverterGetProperty(m_converter, kAudioConverterCompressionMagicCookie, &cookieSize, cookie.data())) {
     249            if (auto error = AudioConverterGetProperty(m_converter.get(), kAudioConverterCompressionMagicCookie, &cookieSize, cookie.data())) {
    254250                RELEASE_LOG_ERROR(MediaStream, "AudioSampleBufferCompressor getting kAudioConverterCompressionMagicCookie failed with %d", error);
    255251                return nil;
     
    444440        UInt32 numOutputPackets = (UInt32)m_destinationBuffer.capacity() / outputPacketSize;
    445441
    446         auto error = AudioConverterFillComplexBuffer(m_converter, audioConverterComplexInputDataProc, this, &numOutputPackets, &fillBufferList, m_destinationPacketDescriptions.data());
     442        auto error = AudioConverterFillComplexBuffer(m_converter.get(), audioConverterComplexInputDataProc, this, &numOutputPackets, &fillBufferList, m_destinationPacketDescriptions.data());
    447443        if (error) {
    448444            RELEASE_LOG_ERROR(MediaStream, "AudioSampleBufferCompressor AudioConverterFillComplexBuffer failed with %d", error);
  • trunk/Source/WebCore/platform/mediarecorder/cocoa/MediaRecorderPrivateWriterCocoa.h

    r263511 r263588  
    115115    std::unique_ptr<VideoSampleBufferCompressor> m_videoCompressor;
    116116    RetainPtr<AVAssetWriterInput> m_videoAssetWriterInput;
    117     CMTime m_lastVideoPresentationTime { kCMTimeInvalid };
    118     CMTime m_lastVideoDecodingTime { kCMTimeInvalid };
     117    CMTime m_lastVideoPresentationTime;
     118    CMTime m_lastVideoDecodingTime;
    119119    bool m_hasEncodedVideoSamples { false };
    120120
  • trunk/Source/WebCore/platform/mediarecorder/cocoa/MediaRecorderPrivateWriterCocoa.mm

    r263511 r263588  
    436436    // We hop to the main thread since finishing the video compressor might trigger starting the writer asynchronously.
    437437    callOnMainThread([this, weakThis = makeWeakPtr(this)]() mutable {
    438         auto whenFinished = [this, weakThis] {
    439             if (!weakThis)
    440                 return;
    441 
     438        auto whenFinished = [this] {
    442439            m_isStopping = false;
     440            if (m_fetchDataCompletionHandler) {
     441                auto buffer = WTFMove(m_data);
     442                m_fetchDataCompletionHandler(WTFMove(buffer));
     443            }
     444
    443445            m_isStopped = false;
    444446            m_hasStartedWriting = false;
    445 
    446             if (m_writer)
    447                 m_writer.clear();
    448             if (m_fetchDataCompletionHandler)
    449                 m_fetchDataCompletionHandler(std::exchange(m_data, nullptr));
     447            clear();
    450448        };
    451449
     
    464462            ALLOW_DEPRECATED_DECLARATIONS_END
    465463
    466             [m_writer finishWritingWithCompletionHandler:[whenFinished = WTFMove(whenFinished)]() mutable {
    467                 callOnMainThread(WTFMove(whenFinished));
     464            [m_writer finishWritingWithCompletionHandler:[weakThis = WTFMove(weakThis), whenFinished = WTFMove(whenFinished)]() mutable {
     465                callOnMainThread([weakThis = WTFMove(weakThis), whenFinished = WTFMove(whenFinished)]() mutable {
     466                    if (!weakThis)
     467                        return;
     468                    whenFinished();
     469                });
    468470            }];
    469471        });
  • trunk/Source/WebCore/platform/mediarecorder/cocoa/VideoSampleBufferCompressor.mm

    r263511 r263588  
    5757{
    5858    dispatch_release(m_serialDispatchQueue);
    59     if (m_vtSession) {
    60         VTCompressionSessionInvalidate(m_vtSession.get());
    61         m_vtSession = nullptr;
    62     }
    6359}
    6460
  • trunk/Source/WebCore/platform/mediastream/MediaStreamPrivate.h

    r263514 r263588  
    7474    static Ref<MediaStreamPrivate> create(Ref<const Logger>&& logger, const MediaStreamTrackPrivateVector& tracks, String&& id = createCanonicalUUIDString()) { return adoptRef(*new MediaStreamPrivate(WTFMove(logger), tracks, WTFMove(id))); }
    7575
    76     WEBCORE_EXPORT virtual ~MediaStreamPrivate();
     76    virtual ~MediaStreamPrivate();
    7777
    7878    void addObserver(Observer&);
  • trunk/Source/WebKit/ChangeLog

    r263575 r263588  
     12020-06-26  Jason Lawrence  <lawrence.j@apple.com>
     2
     3        Unreviewed, reverting r263511, r263514, and r263565.
     4
     5        r263511 caused MediaRecorder test crashes on internal testers.
     6
     7        Reverted changesets:
     8
     9        "MediaRecorder stopRecorder() returns empty Blob after first
     10        use"
     11        https://bugs.webkit.org/show_bug.cgi?id=212274
     12        https://trac.webkit.org/changeset/263511
     13
     14        "Unreviewed iOS build fix after r263511."
     15        https://trac.webkit.org/changeset/263514
     16
     17        "MediaRecorder.start() Method is Ignoring the "timeslice"
     18        Parameter"
     19        https://bugs.webkit.org/show_bug.cgi?id=202233
     20        https://trac.webkit.org/changeset/263565
     21
    1222020-06-26  Geoffrey Garen  <ggaren@apple.com>
    223
  • trunk/Source/WebKit/GPUProcess/webrtc/RemoteMediaRecorderManager.cpp

    r263511 r263588  
    6565void RemoteMediaRecorderManager::releaseRecorder(MediaRecorderIdentifier identifier)
    6666{
     67    ASSERT(m_recorders.contains(identifier));
    6768    m_recorders.remove(identifier);
    6869}
  • trunk/Source/WebKit/WebProcess/GPU/webrtc/MediaRecorderPrivate.cpp

    r263511 r263588  
    4646MediaRecorderPrivate::MediaRecorderPrivate(MediaStreamPrivate& stream)
    4747    : m_identifier(MediaRecorderIdentifier::generate())
    48     , m_stream(makeRef(stream))
    4948    , m_connection(WebProcess::singleton().ensureGPUProcessConnection().connection())
    50 {
    51 }
    52 
    53 void MediaRecorderPrivate::startRecording(ErrorCallback&& errorCallback)
    5449{
    5550    // FIXME: we will need to implement support for multiple audio/video tracks
    5651    // Currently we only choose the first track as the recorded track.
    5752
    58     auto selectedTracks = MediaRecorderPrivate::selectTracks(m_stream);
     53    auto selectedTracks = MediaRecorderPrivate::selectTracks(stream);
    5954    if (selectedTracks.audioTrack) {
    6055        m_ringBuffer = makeUnique<CARingBuffer>(makeUniqueRef<SharedRingBufferStorage>(this));
     
    7065    }
    7166
    72     m_connection->sendWithAsyncReply(Messages::RemoteMediaRecorderManager::CreateRecorder { m_identifier, !!selectedTracks.audioTrack, width, height }, [this, weakThis = makeWeakPtr(this), audioTrack = makeRefPtr(selectedTracks.audioTrack), videoTrack = makeRefPtr(selectedTracks.videoTrack), errorCallback = WTFMove(errorCallback)](auto&& exception) mutable {
    73         if (!weakThis) {
    74             errorCallback({ });
     67    m_connection->sendWithAsyncReply(Messages::RemoteMediaRecorderManager::CreateRecorder { m_identifier, !!selectedTracks.audioTrack, width, height }, [this, weakThis = makeWeakPtr(this), audioTrack = makeRefPtr(selectedTracks.audioTrack), videoTrack = makeRefPtr(selectedTracks.videoTrack)](auto&& exception) {
     68        if (!weakThis)
    7569            return;
    76         }
    77         if (exception) {
    78             errorCallback(Exception { exception->code, WTFMove(exception->message) });
    79             return;
    80         }
     70        if (exception)
     71            return m_errorCallback(Exception { exception->code, WTFMove(exception->message) });
    8172        if (audioTrack)
    8273            setAudioSource(&audioTrack->source());
    8374        if (videoTrack)
    8475            setVideoSource(&videoTrack->source());
    85         errorCallback({ });
    8676    }, 0);
    8777}
  • trunk/Source/WebKit/WebProcess/GPU/webrtc/MediaRecorderPrivate.h

    r263511 r263588  
    5959    void fetchData(CompletionHandler<void(RefPtr<WebCore::SharedBuffer>&&, const String& mimeType)>&&) final;
    6060    void stopRecording() final;
    61     void startRecording(ErrorCallback&&) final;
    6261    void audioSamplesAvailable(const WTF::MediaTime&, const WebCore::PlatformAudioData&, const WebCore::AudioStreamDescription&, size_t) final;
    6362
     
    6665
    6766    MediaRecorderIdentifier m_identifier;
    68     Ref<MediaStreamPrivate> m_stream;
     67
    6968    Ref<IPC::Connection> m_connection;
    70 
    7169    String m_recordedAudioTrackID;
    7270    String m_recordedVideoTrackID;
Note: See TracChangeset for help on using the changeset viewer.