Changeset 261893 in webkit
- Timestamp:
- May 19, 2020 4:35:58 PM (4 years ago)
- Location:
- trunk/Source/WebCore
- Files:
-
- 10 edited
Legend:
- Unmodified
- Added
- Removed
-
trunk/Source/WebCore/ChangeLog
r261885 r261893 1 2020-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 1 14 2020-05-19 David Kilzer <ddkilzer@apple.com> 2 15 -
trunk/Source/WebCore/platform/MediaSample.h
r261856 r261893 31 31 #include <wtf/EnumTraits.h> 32 32 #include <wtf/MediaTime.h> 33 #include <wtf/ ThreadSafeRefCounted.h>33 #include <wtf/RefCounted.h> 34 34 #include <wtf/text/AtomString.h> 35 35 … … 55 55 }; 56 56 57 class MediaSample : public ThreadSafeRefCounted<MediaSample> {57 class MediaSample : public RefCounted<MediaSample> { 58 58 public: 59 59 virtual ~MediaSample() = default; -
trunk/Source/WebCore/platform/graphics/avfoundation/objc/MediaPlayerPrivateMediaStreamAVFObjC.h
r261856 r261893 140 140 MediaTime calculateTimelineOffset(const MediaSample&, double); 141 141 142 void enqueueVideoSample(MediaSample&); 142 143 void enqueueCorrectedVideoSample(MediaSample&); 143 144 void requestNotificationWhenReadyForVideoData(); -
trunk/Source/WebCore/platform/graphics/avfoundation/objc/MediaPlayerPrivateMediaStreamAVFObjC.mm
r261856 r261893 142 142 { 143 143 INFO_LOG(LOGIDENTIFIER); 144 // MediaPlayerPrivateMediaStreamAVFObjC::videoSampleAvailable expects a weak pointer to be created in the constructor.145 144 m_boundsChangeListener = adoptNS([[WebRootSampleBufferBoundsChangeListener alloc] initWithCallback:[this, weakThis = makeWeakPtr(this)] { 146 145 if (!weakThis) … … 283 282 } 284 283 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 284 void MediaPlayerPrivateMediaStreamAVFObjC::enqueueVideoSample(MediaSample& sample) 285 { 295 286 if (!m_imagePainter.mediaSample || m_displayMode != PausedImage) { 296 287 m_imagePainter.mediaSample = &sample; … … 743 734 { 744 735 updateTracks(); 736 } 737 738 void MediaPlayerPrivateMediaStreamAVFObjC::videoSampleAvailable(MediaSample& mediaSample) 739 { 740 if (streamTime().toDouble() < 0) 741 return; 742 743 enqueueVideoSample(mediaSample); 745 744 } 746 745 -
trunk/Source/WebCore/platform/mediastream/RealtimeMediaSource.cpp
r261856 r261893 188 188 void RealtimeMediaSource::videoSampleAvailable(MediaSample& mediaSample) 189 189 { 190 // FIXME: Migrate RealtimeMediaSource clients to non main thread processing. 191 ASSERT(isMainThread()); 190 192 #if !RELEASE_LOG_DISABLED 191 193 ++m_frameCount; … … 965 967 m_intrinsicSize = size; 966 968 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 }); 972 971 } 973 972 -
trunk/Source/WebCore/platform/mediastream/RealtimeMediaSource.h
r261856 r261893 103 103 virtual ~VideoSampleObserver() = default; 104 104 105 // May be called on a background thread. 106 virtual void videoSampleAvailable(MediaSample&) = 0; 105 virtual void videoSampleAvailable(MediaSample&) { } 107 106 }; 108 107 … … 280 279 HashSet<VideoSampleObserver*> m_videoSampleObservers; 281 280 282 // Set on the main thread from constraints.283 281 IntSize m_size; 284 // Set on sample generation thread.285 282 IntSize m_intrinsicSize; 286 283 double m_frameRate { 30 }; -
trunk/Source/WebCore/platform/mediastream/mac/MockRealtimeVideoSourceMac.h
r261856 r261893 35 35 #include "MockRealtimeVideoSource.h" 36 36 #include "PixelBufferConformerCV.h" 37 #include <wtf/WorkQueue.h>38 37 39 38 typedef struct __CVBuffer *CVBufferRef; … … 62 61 std::unique_ptr<ImageTransferSessionVT> m_imageTransferSession; 63 62 IntSize m_presetSize; 64 Ref<WorkQueue> m_workQueue;65 63 }; 66 64 -
trunk/Source/WebCore/platform/mediastream/mac/MockRealtimeVideoSourceMac.mm
r261856 r261893 79 79 MockRealtimeVideoSourceMac::MockRealtimeVideoSourceMac(String&& deviceID, String&& name, String&& hashSalt) 80 80 : MockRealtimeVideoSource(WTFMove(deviceID), WTFMove(name), WTFMove(hashSalt)) 81 , m_workQueue(WorkQueue::create("MockRealtimeVideoSource Render Queue", WorkQueue::Type::Serial, WorkQueue::QOS::UserInteractive))82 81 { 83 82 } … … 97 96 return; 98 97 99 m_workQueue->dispatch([this, protectedThis = makeRef(*this), sampleBuffer = WTFMove(sampleBuffer)]() mutable { 100 dispatchMediaSampleToObservers(*sampleBuffer); 101 }); 98 dispatchMediaSampleToObservers(*sampleBuffer); 102 99 } 103 100 -
trunk/Source/WebCore/platform/mediastream/mac/RealtimeIncomingVideoSourceCocoa.h
r261856 r261893 44 44 private: 45 45 RealtimeIncomingVideoSourceCocoa(rtc::scoped_refptr<webrtc::VideoTrackInterface>&&, String&&); 46 void processNewSample(CMSampleBufferRef, unsigned, unsigned, MediaSample::VideoRotation); 46 47 RetainPtr<CVPixelBufferRef> pixelBufferFromVideoFrame(const webrtc::VideoFrame&); 47 48 CVPixelBufferPoolRef pixelBufferPool(size_t width, size_t height); -
trunk/Source/WebCore/platform/mediastream/mac/RealtimeIncomingVideoSourceCocoa.mm
r261856 r261893 194 194 } 195 195 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 201 void 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)); 198 208 } 199 209
Note: See TracChangeset
for help on using the changeset viewer.