Changeset 261893 in webkit


Ignore:
Timestamp:
May 19, 2020 4:35:58 PM (4 years ago)
Author:
Jacob Uphoff
Message:

Unreviewed, reverting r261856.

This caused internal assertion failures.

Reverted changeset:

"Allow calling VideoSampleObserver::videoSampleAvailable from
a background thread"
https://bugs.webkit.org/show_bug.cgi?id=212024
https://trac.webkit.org/changeset/261856

Location:
trunk/Source/WebCore
Files:
10 edited

Legend:

Unmodified
Added
Removed
  • trunk/Source/WebCore/ChangeLog

    r261885 r261893  
     12020-05-19  Jacob Uphoff  <jacob_uphoff@apple.com>
     2
     3        Unreviewed, reverting r261856.
     4
     5        This caused internal assertion failures.
     6
     7        Reverted changeset:
     8
     9        "Allow calling VideoSampleObserver::videoSampleAvailable from
     10        a background thread"
     11        https://bugs.webkit.org/show_bug.cgi?id=212024
     12        https://trac.webkit.org/changeset/261856
     13
    1142020-05-19  David Kilzer  <ddkilzer@apple.com>
    215
  • trunk/Source/WebCore/platform/MediaSample.h

    r261856 r261893  
    3131#include <wtf/EnumTraits.h>
    3232#include <wtf/MediaTime.h>
    33 #include <wtf/ThreadSafeRefCounted.h>
     33#include <wtf/RefCounted.h>
    3434#include <wtf/text/AtomString.h>
    3535
     
    5555};
    5656
    57 class MediaSample : public ThreadSafeRefCounted<MediaSample> {
     57class MediaSample : public RefCounted<MediaSample> {
    5858public:
    5959    virtual ~MediaSample() = default;
  • trunk/Source/WebCore/platform/graphics/avfoundation/objc/MediaPlayerPrivateMediaStreamAVFObjC.h

    r261856 r261893  
    140140    MediaTime calculateTimelineOffset(const MediaSample&, double);
    141141   
     142    void enqueueVideoSample(MediaSample&);
    142143    void enqueueCorrectedVideoSample(MediaSample&);
    143144    void requestNotificationWhenReadyForVideoData();
  • trunk/Source/WebCore/platform/graphics/avfoundation/objc/MediaPlayerPrivateMediaStreamAVFObjC.mm

    r261856 r261893  
    142142{
    143143    INFO_LOG(LOGIDENTIFIER);
    144     // MediaPlayerPrivateMediaStreamAVFObjC::videoSampleAvailable expects a weak pointer to be created in the constructor.
    145144    m_boundsChangeListener = adoptNS([[WebRootSampleBufferBoundsChangeListener alloc] initWithCallback:[this, weakThis = makeWeakPtr(this)] {
    146145        if (!weakThis)
     
    283282}
    284283
    285 void MediaPlayerPrivateMediaStreamAVFObjC::videoSampleAvailable(MediaSample& sample)
    286 {
    287     if (!isMainThread()) {
    288         callOnMainThread([weakThis = makeWeakPtr(this), sample = makeRef(sample)]() mutable {
    289             if (weakThis)
    290                 weakThis->videoSampleAvailable(sample.get());
    291         });
    292         return;
    293     }
    294 
     284void MediaPlayerPrivateMediaStreamAVFObjC::enqueueVideoSample(MediaSample& sample)
     285{
    295286    if (!m_imagePainter.mediaSample || m_displayMode != PausedImage) {
    296287        m_imagePainter.mediaSample = &sample;
     
    743734{
    744735    updateTracks();
     736}
     737
     738void MediaPlayerPrivateMediaStreamAVFObjC::videoSampleAvailable(MediaSample& mediaSample)
     739{
     740    if (streamTime().toDouble() < 0)
     741        return;
     742
     743    enqueueVideoSample(mediaSample);
    745744}
    746745
  • trunk/Source/WebCore/platform/mediastream/RealtimeMediaSource.cpp

    r261856 r261893  
    188188void RealtimeMediaSource::videoSampleAvailable(MediaSample& mediaSample)
    189189{
     190    // FIXME: Migrate RealtimeMediaSource clients to non main thread processing.
     191    ASSERT(isMainThread());
    190192#if !RELEASE_LOG_DISABLED
    191193    ++m_frameCount;
     
    965967    m_intrinsicSize = size;
    966968
    967     if (currentSize != this->size()) {
    968         scheduleDeferredTask([this] {
    969             notifySettingsDidChangeObservers({ RealtimeMediaSourceSettings::Flag::Width, RealtimeMediaSourceSettings::Flag::Height });
    970         });
    971     }
     969    if (currentSize != this->size())
     970        notifySettingsDidChangeObservers({ RealtimeMediaSourceSettings::Flag::Width, RealtimeMediaSourceSettings::Flag::Height });
    972971}
    973972
  • trunk/Source/WebCore/platform/mediastream/RealtimeMediaSource.h

    r261856 r261893  
    103103        virtual ~VideoSampleObserver() = default;
    104104
    105         // May be called on a background thread.
    106         virtual void videoSampleAvailable(MediaSample&) = 0;
     105        virtual void videoSampleAvailable(MediaSample&) { }
    107106    };
    108107
     
    280279    HashSet<VideoSampleObserver*> m_videoSampleObservers;
    281280
    282     // Set on the main thread from constraints.
    283281    IntSize m_size;
    284     // Set on sample generation thread.
    285282    IntSize m_intrinsicSize;
    286283    double m_frameRate { 30 };
  • trunk/Source/WebCore/platform/mediastream/mac/MockRealtimeVideoSourceMac.h

    r261856 r261893  
    3535#include "MockRealtimeVideoSource.h"
    3636#include "PixelBufferConformerCV.h"
    37 #include <wtf/WorkQueue.h>
    3837
    3938typedef struct __CVBuffer *CVBufferRef;
     
    6261    std::unique_ptr<ImageTransferSessionVT> m_imageTransferSession;
    6362    IntSize m_presetSize;
    64     Ref<WorkQueue> m_workQueue;
    6563};
    6664
  • trunk/Source/WebCore/platform/mediastream/mac/MockRealtimeVideoSourceMac.mm

    r261856 r261893  
    7979MockRealtimeVideoSourceMac::MockRealtimeVideoSourceMac(String&& deviceID, String&& name, String&& hashSalt)
    8080    : MockRealtimeVideoSource(WTFMove(deviceID), WTFMove(name), WTFMove(hashSalt))
    81     , m_workQueue(WorkQueue::create("MockRealtimeVideoSource Render Queue", WorkQueue::Type::Serial, WorkQueue::QOS::UserInteractive))
    8281{
    8382}
     
    9796        return;
    9897
    99     m_workQueue->dispatch([this, protectedThis = makeRef(*this), sampleBuffer = WTFMove(sampleBuffer)]() mutable {
    100         dispatchMediaSampleToObservers(*sampleBuffer);
    101     });
     98    dispatchMediaSampleToObservers(*sampleBuffer);
    10299}
    103100
  • trunk/Source/WebCore/platform/mediastream/mac/RealtimeIncomingVideoSourceCocoa.h

    r261856 r261893  
    4444private:
    4545    RealtimeIncomingVideoSourceCocoa(rtc::scoped_refptr<webrtc::VideoTrackInterface>&&, String&&);
     46    void processNewSample(CMSampleBufferRef, unsigned, unsigned, MediaSample::VideoRotation);
    4647    RetainPtr<CVPixelBufferRef> pixelBufferFromVideoFrame(const webrtc::VideoFrame&);
    4748    CVPixelBufferPoolRef pixelBufferPool(size_t width, size_t height);
  • trunk/Source/WebCore/platform/mediastream/mac/RealtimeIncomingVideoSourceCocoa.mm

    r261856 r261893  
    194194    }
    195195
    196     setIntrinsicSize(IntSize(width, height));
    197     videoSampleAvailable(MediaSampleAVFObjC::create(sample.get(), rotation));
     196    callOnMainThread([protectedThis = makeRef(*this), sample = WTFMove(sample), width, height, rotation] {
     197        protectedThis->processNewSample(sample.get(), width, height, rotation);
     198    });
     199}
     200
     201void RealtimeIncomingVideoSourceCocoa::processNewSample(CMSampleBufferRef sample, unsigned width, unsigned height, MediaSample::VideoRotation rotation)
     202{
     203    auto size = this->size();
     204    if (WTF::safeCast<int>(width) != size.width() || WTF::safeCast<int>(height) != size.height())
     205        setIntrinsicSize(IntSize(width, height));
     206
     207    videoSampleAvailable(MediaSampleAVFObjC::create(sample, rotation));
    198208}
    199209
Note: See TracChangeset for help on using the changeset viewer.