Diff
Modified: trunk/Source/WebCore/ChangeLog (261892 => 261893)
--- trunk/Source/WebCore/ChangeLog 2020-05-19 22:55:49 UTC (rev 261892)
+++ trunk/Source/WebCore/ChangeLog 2020-05-19 23:35:58 UTC (rev 261893)
@@ -1,3 +1,16 @@
+2020-05-19 Jacob Uphoff <[email protected]>
+
+ 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
+
2020-05-19 David Kilzer <[email protected]>
IDBRequestData and IDBClient::TransactionOperation should initialize IndexedDB::IndexRecordType field
Modified: trunk/Source/WebCore/platform/MediaSample.h (261892 => 261893)
--- trunk/Source/WebCore/platform/MediaSample.h 2020-05-19 22:55:49 UTC (rev 261892)
+++ trunk/Source/WebCore/platform/MediaSample.h 2020-05-19 23:35:58 UTC (rev 261893)
@@ -30,7 +30,7 @@
#include <_javascript_Core/TypedArrays.h>
#include <wtf/EnumTraits.h>
#include <wtf/MediaTime.h>
-#include <wtf/ThreadSafeRefCounted.h>
+#include <wtf/RefCounted.h>
#include <wtf/text/AtomString.h>
typedef struct opaqueCMSampleBuffer *CMSampleBufferRef;
@@ -54,7 +54,7 @@
} sample;
};
-class MediaSample : public ThreadSafeRefCounted<MediaSample> {
+class MediaSample : public RefCounted<MediaSample> {
public:
virtual ~MediaSample() = default;
Modified: trunk/Source/WebCore/platform/graphics/avfoundation/objc/MediaPlayerPrivateMediaStreamAVFObjC.h (261892 => 261893)
--- trunk/Source/WebCore/platform/graphics/avfoundation/objc/MediaPlayerPrivateMediaStreamAVFObjC.h 2020-05-19 22:55:49 UTC (rev 261892)
+++ trunk/Source/WebCore/platform/graphics/avfoundation/objc/MediaPlayerPrivateMediaStreamAVFObjC.h 2020-05-19 23:35:58 UTC (rev 261893)
@@ -139,6 +139,7 @@
MediaTime calculateTimelineOffset(const MediaSample&, double);
+ void enqueueVideoSample(MediaSample&);
void enqueueCorrectedVideoSample(MediaSample&);
void requestNotificationWhenReadyForVideoData();
Modified: trunk/Source/WebCore/platform/graphics/avfoundation/objc/MediaPlayerPrivateMediaStreamAVFObjC.mm (261892 => 261893)
--- trunk/Source/WebCore/platform/graphics/avfoundation/objc/MediaPlayerPrivateMediaStreamAVFObjC.mm 2020-05-19 22:55:49 UTC (rev 261892)
+++ trunk/Source/WebCore/platform/graphics/avfoundation/objc/MediaPlayerPrivateMediaStreamAVFObjC.mm 2020-05-19 23:35:58 UTC (rev 261893)
@@ -141,7 +141,6 @@
, m_videoLayerManager(makeUnique<VideoLayerManagerObjC>(m_logger, m_logIdentifier))
{
INFO_LOG(LOGIDENTIFIER);
- // MediaPlayerPrivateMediaStreamAVFObjC::videoSampleAvailable expects a weak pointer to be created in the constructor.
m_boundsChangeListener = adoptNS([[WebRootSampleBufferBoundsChangeListener alloc] initWithCallback:[this, weakThis = makeWeakPtr(this)] {
if (!weakThis)
return;
@@ -282,16 +281,8 @@
}
}
-void MediaPlayerPrivateMediaStreamAVFObjC::videoSampleAvailable(MediaSample& sample)
+void MediaPlayerPrivateMediaStreamAVFObjC::enqueueVideoSample(MediaSample& sample)
{
- if (!isMainThread()) {
- callOnMainThread([weakThis = makeWeakPtr(this), sample = makeRef(sample)]() mutable {
- if (weakThis)
- weakThis->videoSampleAvailable(sample.get());
- });
- return;
- }
-
if (!m_imagePainter.mediaSample || m_displayMode != PausedImage) {
m_imagePainter.mediaSample = &sample;
m_imagePainter.cgImage = nullptr;
@@ -744,6 +735,14 @@
updateTracks();
}
+void MediaPlayerPrivateMediaStreamAVFObjC::videoSampleAvailable(MediaSample& mediaSample)
+{
+ if (streamTime().toDouble() < 0)
+ return;
+
+ enqueueVideoSample(mediaSample);
+}
+
void MediaPlayerPrivateMediaStreamAVFObjC::readyStateChanged(MediaStreamTrackPrivate&)
{
scheduleDeferredTask([this] {
Modified: trunk/Source/WebCore/platform/mediastream/RealtimeMediaSource.cpp (261892 => 261893)
--- trunk/Source/WebCore/platform/mediastream/RealtimeMediaSource.cpp 2020-05-19 22:55:49 UTC (rev 261892)
+++ trunk/Source/WebCore/platform/mediastream/RealtimeMediaSource.cpp 2020-05-19 23:35:58 UTC (rev 261893)
@@ -187,6 +187,8 @@
void RealtimeMediaSource::videoSampleAvailable(MediaSample& mediaSample)
{
+ // FIXME: Migrate RealtimeMediaSource clients to non main thread processing.
+ ASSERT(isMainThread());
#if !RELEASE_LOG_DISABLED
++m_frameCount;
@@ -964,11 +966,8 @@
auto currentSize = this->size();
m_intrinsicSize = size;
- if (currentSize != this->size()) {
- scheduleDeferredTask([this] {
- notifySettingsDidChangeObservers({ RealtimeMediaSourceSettings::Flag::Width, RealtimeMediaSourceSettings::Flag::Height });
- });
- }
+ if (currentSize != this->size())
+ notifySettingsDidChangeObservers({ RealtimeMediaSourceSettings::Flag::Width, RealtimeMediaSourceSettings::Flag::Height });
}
const IntSize RealtimeMediaSource::intrinsicSize() const
Modified: trunk/Source/WebCore/platform/mediastream/RealtimeMediaSource.h (261892 => 261893)
--- trunk/Source/WebCore/platform/mediastream/RealtimeMediaSource.h 2020-05-19 22:55:49 UTC (rev 261892)
+++ trunk/Source/WebCore/platform/mediastream/RealtimeMediaSource.h 2020-05-19 23:35:58 UTC (rev 261893)
@@ -102,8 +102,7 @@
public:
virtual ~VideoSampleObserver() = default;
- // May be called on a background thread.
- virtual void videoSampleAvailable(MediaSample&) = 0;
+ virtual void videoSampleAvailable(MediaSample&) { }
};
virtual ~RealtimeMediaSource() = default;
@@ -279,9 +278,7 @@
mutable RecursiveLock m_videoSampleObserversLock;
HashSet<VideoSampleObserver*> m_videoSampleObservers;
- // Set on the main thread from constraints.
IntSize m_size;
- // Set on sample generation thread.
IntSize m_intrinsicSize;
double m_frameRate { 30 };
double m_aspectRatio { 0 };
Modified: trunk/Source/WebCore/platform/mediastream/mac/MockRealtimeVideoSourceMac.h (261892 => 261893)
--- trunk/Source/WebCore/platform/mediastream/mac/MockRealtimeVideoSourceMac.h 2020-05-19 22:55:49 UTC (rev 261892)
+++ trunk/Source/WebCore/platform/mediastream/mac/MockRealtimeVideoSourceMac.h 2020-05-19 23:35:58 UTC (rev 261893)
@@ -34,7 +34,6 @@
#include "MockRealtimeVideoSource.h"
#include "PixelBufferConformerCV.h"
-#include <wtf/WorkQueue.h>
typedef struct __CVBuffer *CVBufferRef;
typedef CVBufferRef CVImageBufferRef;
@@ -61,7 +60,6 @@
std::unique_ptr<ImageTransferSessionVT> m_imageTransferSession;
IntSize m_presetSize;
- Ref<WorkQueue> m_workQueue;
};
} // namespace WebCore
Modified: trunk/Source/WebCore/platform/mediastream/mac/MockRealtimeVideoSourceMac.mm (261892 => 261893)
--- trunk/Source/WebCore/platform/mediastream/mac/MockRealtimeVideoSourceMac.mm 2020-05-19 22:55:49 UTC (rev 261892)
+++ trunk/Source/WebCore/platform/mediastream/mac/MockRealtimeVideoSourceMac.mm 2020-05-19 23:35:58 UTC (rev 261893)
@@ -78,7 +78,6 @@
MockRealtimeVideoSourceMac::MockRealtimeVideoSourceMac(String&& deviceID, String&& name, String&& hashSalt)
: MockRealtimeVideoSource(WTFMove(deviceID), WTFMove(name), WTFMove(hashSalt))
- , m_workQueue(WorkQueue::create("MockRealtimeVideoSource Render Queue", WorkQueue::Type::Serial, WorkQueue::QOS::UserInteractive))
{
}
@@ -96,9 +95,7 @@
if (!sampleBuffer)
return;
- m_workQueue->dispatch([this, protectedThis = makeRef(*this), sampleBuffer = WTFMove(sampleBuffer)]() mutable {
- dispatchMediaSampleToObservers(*sampleBuffer);
- });
+ dispatchMediaSampleToObservers(*sampleBuffer);
}
} // namespace WebCore
Modified: trunk/Source/WebCore/platform/mediastream/mac/RealtimeIncomingVideoSourceCocoa.h (261892 => 261893)
--- trunk/Source/WebCore/platform/mediastream/mac/RealtimeIncomingVideoSourceCocoa.h 2020-05-19 22:55:49 UTC (rev 261892)
+++ trunk/Source/WebCore/platform/mediastream/mac/RealtimeIncomingVideoSourceCocoa.h 2020-05-19 23:35:58 UTC (rev 261893)
@@ -43,6 +43,7 @@
private:
RealtimeIncomingVideoSourceCocoa(rtc::scoped_refptr<webrtc::VideoTrackInterface>&&, String&&);
+ void processNewSample(CMSampleBufferRef, unsigned, unsigned, MediaSample::VideoRotation);
RetainPtr<CVPixelBufferRef> pixelBufferFromVideoFrame(const webrtc::VideoFrame&);
CVPixelBufferPoolRef pixelBufferPool(size_t width, size_t height);
Modified: trunk/Source/WebCore/platform/mediastream/mac/RealtimeIncomingVideoSourceCocoa.mm (261892 => 261893)
--- trunk/Source/WebCore/platform/mediastream/mac/RealtimeIncomingVideoSourceCocoa.mm 2020-05-19 22:55:49 UTC (rev 261892)
+++ trunk/Source/WebCore/platform/mediastream/mac/RealtimeIncomingVideoSourceCocoa.mm 2020-05-19 23:35:58 UTC (rev 261893)
@@ -193,10 +193,20 @@
break;
}
- setIntrinsicSize(IntSize(width, height));
- videoSampleAvailable(MediaSampleAVFObjC::create(sample.get(), rotation));
+ callOnMainThread([protectedThis = makeRef(*this), sample = WTFMove(sample), width, height, rotation] {
+ protectedThis->processNewSample(sample.get(), width, height, rotation);
+ });
}
+void RealtimeIncomingVideoSourceCocoa::processNewSample(CMSampleBufferRef sample, unsigned width, unsigned height, MediaSample::VideoRotation rotation)
+{
+ auto size = this->size();
+ if (WTF::safeCast<int>(width) != size.width() || WTF::safeCast<int>(height) != size.height())
+ setIntrinsicSize(IntSize(width, height));
+
+ videoSampleAvailable(MediaSampleAVFObjC::create(sample, rotation));
+}
+
} // namespace WebCore
#endif // USE(LIBWEBRTC)