Modified: trunk/Source/WebCore/platform/graphics/avfoundation/objc/MediaPlayerPrivateAVFoundationObjC.mm (237377 => 237378)
--- trunk/Source/WebCore/platform/graphics/avfoundation/objc/MediaPlayerPrivateAVFoundationObjC.mm 2018-10-24 09:10:24 UTC (rev 237377)
+++ trunk/Source/WebCore/platform/graphics/avfoundation/objc/MediaPlayerPrivateAVFoundationObjC.mm 2018-10-24 10:03:31 UTC (rev 237378)
@@ -336,10 +336,11 @@
@interface WebCoreAVFMovieObserver : NSObject
#endif
{
- MediaPlayerPrivateAVFoundationObjC* m_callback;
+ WeakPtr<MediaPlayerPrivateAVFoundationObjC> m_player;
+ GenericTaskQueue<Timer, std::atomic<unsigned>> m_taskQueue;
int m_delayCallbacks;
}
--(id)initWithCallback:(MediaPlayerPrivateAVFoundationObjC*)callback;
+-(id)initWithPlayer:(WeakPtr<MediaPlayerPrivateAVFoundationObjC>&&)callback;
-(void)disconnect;
-(void)metadataLoaded;
-(void)didEnd:(NSNotification *)notification;
@@ -352,20 +353,19 @@
#if HAVE(AVFOUNDATION_LOADER_DELEGATE)
@interface WebCoreAVFLoaderDelegate : NSObject<AVAssetResourceLoaderDelegate> {
- MediaPlayerPrivateAVFoundationObjC* m_callback;
+ WeakPtr<MediaPlayerPrivateAVFoundationObjC> m_player;
+ GenericTaskQueue<Timer, std::atomic<unsigned>> m_taskQueue;
}
-- (id)initWithCallback:(MediaPlayerPrivateAVFoundationObjC*)callback;
+- (id)initWithPlayer:(WeakPtr<MediaPlayerPrivateAVFoundationObjC>&&)player;
- (BOOL)resourceLoader:(AVAssetResourceLoader *)resourceLoader shouldWaitForLoadingOfRequestedResource:(AVAssetResourceLoadingRequest *)loadingRequest;
-- (void)setCallback:(MediaPlayerPrivateAVFoundationObjC*)callback;
@end
#endif
#if HAVE(AVFOUNDATION_VIDEO_OUTPUT)
@interface WebCoreAVFPullDelegate : NSObject<AVPlayerItemOutputPullDelegate> {
- MediaPlayerPrivateAVFoundationObjC *m_callback;
+ WeakPtr<MediaPlayerPrivateAVFoundationObjC> m_player;
}
-- (id)initWithCallback:(MediaPlayerPrivateAVFoundationObjC *)callback;
-- (void)setCallback:(MediaPlayerPrivateAVFoundationObjC*)callback;
+- (id)initWithPlayer:(WeakPtr<MediaPlayerPrivateAVFoundationObjC>&&)player;
- (void)outputMediaDataWillChange:(AVPlayerItemOutput *)sender;
- (void)outputSequenceWasFlushed:(AVPlayerItemOutput *)output;
@end
@@ -501,14 +501,14 @@
: MediaPlayerPrivateAVFoundation(player)
, m_videoFullscreenLayerManager(std::make_unique<VideoFullscreenLayerManagerObjC>())
, m_videoFullscreenGravity(MediaPlayer::VideoGravityResizeAspect)
- , m_objcObserver(adoptNS([[WebCoreAVFMovieObserver alloc] initWithCallback:this]))
+ , m_objcObserver(adoptNS([[WebCoreAVFMovieObserver alloc] initWithPlayer:m_weakPtrFactory.createWeakPtr(*this)]))
, m_videoFrameHasDrawn(false)
, m_haveCheckedPlayability(false)
#if HAVE(AVFOUNDATION_VIDEO_OUTPUT)
- , m_videoOutputDelegate(adoptNS([[WebCoreAVFPullDelegate alloc] initWithCallback:this]))
+ , m_videoOutputDelegate(adoptNS([[WebCoreAVFPullDelegate alloc] initWithPlayer:m_weakPtrFactory.createWeakPtr(*this)]))
#endif
#if HAVE(AVFOUNDATION_LOADER_DELEGATE)
- , m_loaderDelegate(adoptNS([[WebCoreAVFLoaderDelegate alloc] initWithCallback:this]))
+ , m_loaderDelegate(adoptNS([[WebCoreAVFLoaderDelegate alloc] initWithPlayer:m_weakPtrFactory.createWeakPtr(*this)]))
#endif
, m_currentTextTrack(0)
, m_cachedRate(0)
@@ -530,8 +530,9 @@
MediaPlayerPrivateAVFoundationObjC::~MediaPlayerPrivateAVFoundationObjC()
{
+ m_weakPtrFactory.revokeAll();
+
#if HAVE(AVFOUNDATION_LOADER_DELEGATE)
- [m_loaderDelegate.get() setCallback:0];
[[m_avAsset.get() resourceLoader] setDelegate:nil queue:0];
for (auto& pair : m_resourceLoaderMap)
@@ -538,7 +539,6 @@
pair.value->invalidate();
#endif
#if HAVE(AVFOUNDATION_VIDEO_OUTPUT)
- [m_videoOutputDelegate setCallback:0];
[m_videoOutput setDelegate:nil queue:0];
#endif
@@ -3362,147 +3362,134 @@
@implementation WebCoreAVFMovieObserver
-- (id)initWithCallback:(MediaPlayerPrivateAVFoundationObjC*)callback
+- (id)initWithPlayer:(WeakPtr<MediaPlayerPrivateAVFoundationObjC>&&)player
{
self = [super init];
if (!self)
return nil;
- m_callback = callback;
+ m_player = WTFMove(player);
return self;
}
- (void)disconnect
{
- [NSObject cancelPreviousPerformRequestsWithTarget:self];
- m_callback = nil;
+ m_player = nullptr;
}
- (void)metadataLoaded
{
- if (!m_callback)
- return;
- m_callback->scheduleMainThreadNotification(MediaPlayerPrivateAVFoundation::Notification::AssetMetadataLoaded);
+ m_taskQueue.enqueueTask([player = m_player] {
+ if (player)
+ player->metadataLoaded();
+ });
}
- (void)didEnd:(NSNotification *)unusedNotification
{
UNUSED_PARAM(unusedNotification);
- if (!m_callback)
- return;
- m_callback->scheduleMainThreadNotification(MediaPlayerPrivateAVFoundation::Notification::ItemDidPlayToEndTime);
+ m_taskQueue.enqueueTask([player = m_player] {
+ if (player)
+ player->didEnd();
+ });
}
- (void)observeValueForKeyPath:keyPath ofObject:(id)object change:(NSDictionary *)change context:(MediaPlayerAVFoundationObservationContext)context
{
- UNUSED_PARAM(object);
- id newValue = [change valueForKey:NSKeyValueChangeNewKey];
+ m_taskQueue.enqueueTask([player = m_player, keyPath = retainPtr(keyPath), change = retainPtr(change), object = retainPtr(object), context] {
+ if (!player)
+ return;
+ id newValue = [change valueForKey:NSKeyValueChangeNewKey];
+ bool willChange = [[change valueForKey:NSKeyValueChangeNotificationIsPriorKey] boolValue];
+ bool shouldLogValue = !willChange;
- if (!m_callback)
- return;
+ if (context == MediaPlayerAVFoundationObservationContextAVPlayerLayer) {
+ if ([keyPath isEqualToString:@"readyForDisplay"])
+ player->firstFrameAvailableDidChange([newValue boolValue]);
+ }
- bool willChange = [[change valueForKey:NSKeyValueChangeNotificationIsPriorKey] boolValue];
- bool shouldLogValue = !willChange;
- WTF::Function<void ()> function;
+ if (context == MediaPlayerAVFoundationObservationContextPlayerItemTrack) {
+ if ([keyPath isEqualToString:@"enabled"])
+ player->trackEnabledDidChange([newValue boolValue]);
+ }
- if (context == MediaPlayerAVFoundationObservationContextAVPlayerLayer) {
- if ([keyPath isEqualToString:@"readyForDisplay"])
- function = std::bind(&MediaPlayerPrivateAVFoundationObjC::firstFrameAvailableDidChange, m_callback, [newValue boolValue]);
- }
+ if (context == MediaPlayerAVFoundationObservationContextPlayerItem && willChange) {
+ if ([keyPath isEqualToString:@"playbackLikelyToKeepUp"])
+ player->playbackLikelyToKeepUpWillChange();
+ else if ([keyPath isEqualToString:@"playbackBufferEmpty"])
+ player->playbackBufferEmptyWillChange();
+ else if ([keyPath isEqualToString:@"playbackBufferFull"])
+ player->playbackBufferFullWillChange();
+ }
- if (context == MediaPlayerAVFoundationObservationContextPlayerItemTrack) {
- if ([keyPath isEqualToString:@"enabled"])
- function = std::bind(&MediaPlayerPrivateAVFoundationObjC::trackEnabledDidChange, m_callback, [newValue boolValue]);
- }
+ if (context == MediaPlayerAVFoundationObservationContextPlayerItem && !willChange) {
+ // A value changed for an AVPlayerItem
+ if ([keyPath isEqualToString:@"status"])
+ player->playerItemStatusDidChange([newValue intValue]);
+ else if ([keyPath isEqualToString:@"playbackLikelyToKeepUp"])
+ player->playbackLikelyToKeepUpDidChange([newValue boolValue]);
+ else if ([keyPath isEqualToString:@"playbackBufferEmpty"])
+ player->playbackBufferEmptyDidChange([newValue boolValue]);
+ else if ([keyPath isEqualToString:@"playbackBufferFull"])
+ player->playbackBufferFullDidChange([newValue boolValue]);
+ else if ([keyPath isEqualToString:@"asset"]) {
+ player->setAsset(RetainPtr<id>(newValue));
+ shouldLogValue = false;
+ } else if ([keyPath isEqualToString:@"loadedTimeRanges"])
+ player->loadedTimeRangesDidChange(RetainPtr<NSArray>(newValue));
+ else if ([keyPath isEqualToString:@"seekableTimeRanges"])
+ player->seekableTimeRangesDidChange(RetainPtr<NSArray>(newValue));
+ else if ([keyPath isEqualToString:@"tracks"]) {
+ player->tracksDidChange(RetainPtr<NSArray>(newValue));
+ shouldLogValue = false;
+ } else if ([keyPath isEqualToString:@"hasEnabledAudio"])
+ player->hasEnabledAudioDidChange([newValue boolValue]);
+ else if ([keyPath isEqualToString:@"presentationSize"])
+ player->presentationSizeDidChange(FloatSize([newValue sizeValue]));
+ else if ([keyPath isEqualToString:@"duration"])
+ player->durationDidChange(PAL::toMediaTime([newValue CMTimeValue]));
+ else if ([keyPath isEqualToString:@"timedMetadata"] && newValue) {
+ MediaTime now;
+ CMTime itemTime = [(AVPlayerItemType *)object.get() currentTime];
+ if (CMTIME_IS_NUMERIC(itemTime))
+ now = std::max(PAL::toMediaTime(itemTime), MediaTime::zeroTime());
+ player->metadataDidArrive(RetainPtr<NSArray>(newValue), now);
+ shouldLogValue = false;
+ } else if ([keyPath isEqualToString:@"canPlayFastReverse"])
+ player->canPlayFastReverseDidChange([newValue boolValue]);
+ else if ([keyPath isEqualToString:@"canPlayFastForward"])
+ player->canPlayFastForwardDidChange([newValue boolValue]);
+ }
- if (context == MediaPlayerAVFoundationObservationContextPlayerItem && willChange) {
- if ([keyPath isEqualToString:@"playbackLikelyToKeepUp"])
- function = std::bind(&MediaPlayerPrivateAVFoundationObjC::playbackLikelyToKeepUpWillChange, m_callback);
- else if ([keyPath isEqualToString:@"playbackBufferEmpty"])
- function = std::bind(&MediaPlayerPrivateAVFoundationObjC::playbackBufferEmptyWillChange, m_callback);
- else if ([keyPath isEqualToString:@"playbackBufferFull"])
- function = std::bind(&MediaPlayerPrivateAVFoundationObjC::playbackBufferFullWillChange, m_callback);
- }
-
- if (context == MediaPlayerAVFoundationObservationContextPlayerItem && !willChange) {
- // A value changed for an AVPlayerItem
- if ([keyPath isEqualToString:@"status"])
- function = std::bind(&MediaPlayerPrivateAVFoundationObjC::playerItemStatusDidChange, m_callback, [newValue intValue]);
- else if ([keyPath isEqualToString:@"playbackLikelyToKeepUp"])
- function = std::bind(&MediaPlayerPrivateAVFoundationObjC::playbackLikelyToKeepUpDidChange, m_callback, [newValue boolValue]);
- else if ([keyPath isEqualToString:@"playbackBufferEmpty"])
- function = std::bind(&MediaPlayerPrivateAVFoundationObjC::playbackBufferEmptyDidChange, m_callback, [newValue boolValue]);
- else if ([keyPath isEqualToString:@"playbackBufferFull"])
- function = std::bind(&MediaPlayerPrivateAVFoundationObjC::playbackBufferFullDidChange, m_callback, [newValue boolValue]);
- else if ([keyPath isEqualToString:@"asset"]) {
- function = std::bind(&MediaPlayerPrivateAVFoundationObjC::setAsset, m_callback, RetainPtr<id>(newValue));
- shouldLogValue = false;
- } else if ([keyPath isEqualToString:@"loadedTimeRanges"])
- function = std::bind(&MediaPlayerPrivateAVFoundationObjC::loadedTimeRangesDidChange, m_callback, RetainPtr<NSArray>(newValue));
- else if ([keyPath isEqualToString:@"seekableTimeRanges"])
- function = std::bind(&MediaPlayerPrivateAVFoundationObjC::seekableTimeRangesDidChange, m_callback, RetainPtr<NSArray>(newValue));
- else if ([keyPath isEqualToString:@"tracks"]) {
- function = std::bind(&MediaPlayerPrivateAVFoundationObjC::tracksDidChange, m_callback, RetainPtr<NSArray>(newValue));
- shouldLogValue = false;
- } else if ([keyPath isEqualToString:@"hasEnabledAudio"])
- function = std::bind(&MediaPlayerPrivateAVFoundationObjC::hasEnabledAudioDidChange, m_callback, [newValue boolValue]);
- else if ([keyPath isEqualToString:@"presentationSize"])
- function = std::bind(&MediaPlayerPrivateAVFoundationObjC::presentationSizeDidChange, m_callback, FloatSize([newValue sizeValue]));
- else if ([keyPath isEqualToString:@"duration"])
- function = std::bind(&MediaPlayerPrivateAVFoundationObjC::durationDidChange, m_callback, PAL::toMediaTime([newValue CMTimeValue]));
- else if ([keyPath isEqualToString:@"timedMetadata"] && newValue) {
- MediaTime now;
- CMTime itemTime = [(AVPlayerItemType *)object currentTime];
- if (CMTIME_IS_NUMERIC(itemTime))
- now = std::max(PAL::toMediaTime(itemTime), MediaTime::zeroTime());
- function = std::bind(&MediaPlayerPrivateAVFoundationObjC::metadataDidArrive, m_callback, RetainPtr<NSArray>(newValue), now);
- shouldLogValue = false;
- } else if ([keyPath isEqualToString:@"canPlayFastReverse"])
- function = std::bind(&MediaPlayerPrivateAVFoundationObjC::canPlayFastReverseDidChange, m_callback, [newValue boolValue]);
- else if ([keyPath isEqualToString:@"canPlayFastForward"])
- function = std::bind(&MediaPlayerPrivateAVFoundationObjC::canPlayFastForwardDidChange, m_callback, [newValue boolValue]);
- }
-
- if (context == MediaPlayerAVFoundationObservationContextPlayer && !willChange) {
- // A value changed for an AVPlayer.
- if ([keyPath isEqualToString:@"rate"])
- function = std::bind(&MediaPlayerPrivateAVFoundationObjC::rateDidChange, m_callback, [newValue doubleValue]);
+ if (context == MediaPlayerAVFoundationObservationContextPlayer && !willChange) {
+ // A value changed for an AVPlayer.
+ if ([keyPath isEqualToString:@"rate"])
+ player->rateDidChange([newValue doubleValue]);
#if ENABLE(WIRELESS_PLAYBACK_TARGET)
- else if ([keyPath isEqualToString:@"externalPlaybackActive"] || [keyPath isEqualToString:@"allowsExternalPlayback"])
- function = std::bind(&MediaPlayerPrivateAVFoundationObjC::playbackTargetIsWirelessDidChange, m_callback);
+ else if ([keyPath isEqualToString:@"externalPlaybackActive"] || [keyPath isEqualToString:@"allowsExternalPlayback"])
+ player->playbackTargetIsWirelessDidChange();
#endif
#if ENABLE(LEGACY_ENCRYPTED_MEDIA) || ENABLE(ENCRYPTED_MEDIA)
- else if ([keyPath isEqualToString:@"outputObscuredDueToInsufficientExternalProtection"])
- function = std::bind(&MediaPlayerPrivateAVFoundationObjC::outputObscuredDueToInsufficientExternalProtectionChanged, m_callback, [newValue boolValue]);
+ else if ([keyPath isEqualToString:@"outputObscuredDueToInsufficientExternalProtection"])
+ player->outputObscuredDueToInsufficientExternalProtectionChanged([newValue boolValue]);
#endif
- }
+ }
#if !RELEASE_LOG_DISABLED
- if (m_callback->logger().willLog(m_callback->logChannel(), WTFLogLevelDebug) && !([keyPath isEqualToString:@"loadedTimeRanges"] || [keyPath isEqualToString:@"seekableTimeRanges"])) {
- auto identifier = Logger::LogSiteIdentifier("MediaPlayerPrivateAVFoundation", "observeValueForKeyPath", m_callback->logIdentifier());
+ if (player->logger().willLog(player->logChannel(), WTFLogLevelDebug) && !([keyPath isEqualToString:@"loadedTimeRanges"] || [keyPath isEqualToString:@"seekableTimeRanges"])) {
+ auto identifier = Logger::LogSiteIdentifier("MediaPlayerPrivateAVFoundation", "observeValueForKeyPath", player->logIdentifier());
- if (shouldLogValue) {
- if ([keyPath isEqualToString:@"duration"])
- m_callback->logger().debug(m_callback->logChannel(), identifier, "did change '", [keyPath UTF8String], "' to ", PAL::toMediaTime([newValue CMTimeValue]));
- else {
- RetainPtr<NSString> valueString = adoptNS([[NSString alloc] initWithFormat:@"%@", newValue]);
- m_callback->logger().debug(m_callback->logChannel(), identifier, "did change '", [keyPath UTF8String], "' to ", [valueString.get() UTF8String]);
- }
- } else
- m_callback->logger().debug(m_callback->logChannel(), identifier, willChange ? "will" : "did", " change '", [keyPath UTF8String], "'");
- }
+ if (shouldLogValue) {
+ if ([keyPath isEqualToString:@"duration"])
+ player->logger().debug(player->logChannel(), identifier, "did change '", [keyPath UTF8String], "' to ", PAL::toMediaTime([newValue CMTimeValue]));
+ else {
+ RetainPtr<NSString> valueString = adoptNS([[NSString alloc] initWithFormat:@"%@", newValue]);
+ player->logger().debug(player->logChannel(), identifier, "did change '", [keyPath UTF8String], "' to ", [valueString.get() UTF8String]);
+ }
+ } else
+ player->logger().debug(player->logChannel(), identifier, willChange ? "will" : "did", " change '", [keyPath UTF8String], "'");
+ }
#endif
-
- if (!function)
- return;
-
- auto weakThis = makeWeakPtr(*m_callback);
- m_callback->scheduleMainThreadNotification(MediaPlayerPrivateAVFoundation::Notification([weakThis, function = WTFMove(function)]{
- // weakThis and function both refer to the same MediaPlayerPrivateAVFoundationObjC instance. If the WeakPtr has
- // been cleared, the underlying object has been destroyed, and it is unsafe to call function().
- if (!weakThis)
- return;
- function();
- }));
+ });
}
#if HAVE(AVFOUNDATION_MEDIA_SELECTION_GROUP)
@@ -3510,20 +3497,12 @@
- (void)legibleOutput:(id)output didOutputAttributedStrings:(NSArray *)strings nativeSampleBuffers:(NSArray *)nativeSamples forItemTime:(CMTime)itemTime
{
UNUSED_PARAM(output);
- UNUSED_PARAM(nativeSamples);
- if (!m_callback)
- return;
-
- RetainPtr<WebCoreAVFMovieObserver> protectedSelf = self;
- RetainPtr<NSArray> protectedStrings = strings;
- RetainPtr<NSArray> protectedNativeSamples = nativeSamples;
- callOnMainThread([protectedSelf = WTFMove(protectedSelf), protectedStrings = WTFMove(protectedStrings), protectedNativeSamples = WTFMove(protectedNativeSamples), itemTime] {
- MediaPlayerPrivateAVFoundationObjC* callback = protectedSelf->m_callback;
- if (!callback)
+ m_taskQueue.enqueueTask([player = m_player, strings = retainPtr(strings), nativeSamples = retainPtr(nativeSamples), itemTime] {
+ if (!player)
return;
MediaTime time = std::max(PAL::toMediaTime(itemTime), MediaTime::zeroTime());
- callback->processCue(protectedStrings.get(), protectedNativeSamples.get(), time);
+ player->processCue(strings.get(), nativeSamples.get(), time);
});
}
@@ -3531,12 +3510,9 @@
{
UNUSED_PARAM(output);
- if (!m_callback)
- return;
-
- callOnMainThread([protectedSelf = RetainPtr<WebCoreAVFMovieObserver>(self)] {
- if (MediaPlayerPrivateAVFoundationObjC* callback = protectedSelf->m_callback)
- callback->flushCues();
+ m_taskQueue.enqueueTask([player = m_player] {
+ if (player)
+ player->flushCues();
});
}
@@ -3548,12 +3524,12 @@
@implementation WebCoreAVFLoaderDelegate
-- (id)initWithCallback:(MediaPlayerPrivateAVFoundationObjC*)callback
+- (id)initWithPlayer:(WeakPtr<MediaPlayerPrivateAVFoundationObjC>&&)player
{
self = [super init];
if (!self)
return nil;
- m_callback = callback;
+ m_player = WTFMove(player);
return self;
}
@@ -3560,20 +3536,17 @@
- (BOOL)resourceLoader:(AVAssetResourceLoader *)resourceLoader shouldWaitForLoadingOfRequestedResource:(AVAssetResourceLoadingRequest *)loadingRequest
{
UNUSED_PARAM(resourceLoader);
- if (!m_callback)
+ if (!m_player)
return NO;
- RetainPtr<WebCoreAVFLoaderDelegate> protectedSelf = self;
- RetainPtr<AVAssetResourceLoadingRequest> protectedLoadingRequest = loadingRequest;
- callOnMainThread([protectedSelf = WTFMove(protectedSelf), protectedLoadingRequest = WTFMove(protectedLoadingRequest)] {
- MediaPlayerPrivateAVFoundationObjC* callback = protectedSelf->m_callback;
- if (!callback) {
- [protectedLoadingRequest finishLoadingWithError:nil];
+ m_taskQueue.enqueueTask([player = m_player, loadingRequest = retainPtr(loadingRequest)] {
+ if (!player) {
+ [loadingRequest finishLoadingWithError:nil];
return;
}
- if (!callback->shouldWaitForLoadingOfResource(protectedLoadingRequest.get()))
- [protectedLoadingRequest finishLoadingWithError:nil];
+ if (!player->shouldWaitForLoadingOfResource(loadingRequest.get()))
+ [loadingRequest finishLoadingWithError:nil];
});
return YES;
@@ -3590,22 +3563,12 @@
- (void)resourceLoader:(AVAssetResourceLoader *)resourceLoader didCancelLoadingRequest:(AVAssetResourceLoadingRequest *)loadingRequest
{
UNUSED_PARAM(resourceLoader);
- if (!m_callback)
- return;
-
- RetainPtr<WebCoreAVFLoaderDelegate> protectedSelf = self;
- RetainPtr<AVAssetResourceLoadingRequest> protectedLoadingRequest = loadingRequest;
- callOnMainThread([protectedSelf = WTFMove(protectedSelf), protectedLoadingRequest = WTFMove(protectedLoadingRequest)] {
- MediaPlayerPrivateAVFoundationObjC* callback = protectedSelf->m_callback;
- if (callback)
- callback->didCancelLoadingRequest(protectedLoadingRequest.get());
+ m_taskQueue.enqueueTask([player = m_player, loadingRequest = retainPtr(loadingRequest)] {
+ if (player)
+ player->didCancelLoadingRequest(loadingRequest.get());
});
}
-- (void)setCallback:(MediaPlayerPrivateAVFoundationObjC*)callback
-{
- m_callback = callback;
-}
@end
#endif
@@ -3614,23 +3577,18 @@
@implementation WebCoreAVFPullDelegate
-- (id)initWithCallback:(MediaPlayerPrivateAVFoundationObjC *)callback
+- (id)initWithPlayer:(WeakPtr<MediaPlayerPrivateAVFoundationObjC>&&)player
{
self = [super init];
if (self)
- m_callback = callback;
+ m_player = WTFMove(player);
return self;
}
-- (void)setCallback:(MediaPlayerPrivateAVFoundationObjC *)callback
-{
- m_callback = callback;
-}
-
- (void)outputMediaDataWillChange:(AVPlayerItemVideoOutputType *)output
{
- if (m_callback)
- m_callback->outputMediaDataWillChange(output);
+ if (m_player)
+ m_player->outputMediaDataWillChange(output);
}
- (void)outputSequenceWasFlushed:(AVPlayerItemVideoOutputType *)output