Title: [183509] trunk/Source/WebCore
Revision
183509
Author
[email protected]
Date
2015-04-28 14:40:10 -0700 (Tue, 28 Apr 2015)

Log Message

[Mac] Simplify code to support media engines which do not support target playback
https://bugs.webkit.org/show_bug.cgi?id=144332

Reviewed by Jer Noble.

* Modules/mediasession/WebMediaSessionManager.cpp:
(WebCore::WebMediaSessionManager::externalOutputDeviceAvailableDidChange): Always make client
callback, let them decide if it is significant or not.

* html/HTMLMediaElement.cpp:
(WebCore::HTMLMediaElement::HTMLMediaElement): m_loadTimer -> m_pendingActionTimer.
(WebCore::HTMLMediaElement::scheduleDelayedAction): Handle CheckPlaybackTargetCompatablity.
(WebCore::HTMLMediaElement::scheduleNextSourceChild): m_loadTimer -> m_pendingActionTimer.
(WebCore::HTMLMediaElement::loadTimerFired): Renamed pendingActionTimerFired.
(WebCore::HTMLMediaElement::prepareForLoad): m_loadTimer -> m_pendingActionTimer.
(WebCore::HTMLMediaElement::setDefaultPlaybackRate): Add logging.
(WebCore::HTMLMediaElement::clearMediaPlayer): m_loadTimer -> m_pendingActionTimer.
(WebCore::HTMLMediaElement::webkitCurrentPlaybackTargetIsSupported): Removed.
(WebCore::HTMLMediaElement::dispatchEvent): If a 'webkitcurrentplaybacktargetiswirelesschanged'
event is dispatched when the current target is wireless but the media engine does not support
wireless playback, tell the media engine not to play to the target.
* html/HTMLMediaElement.h:
* html/HTMLMediaElement.idl:

* html/HTMLMediaSession.cpp:
(WebCore::HTMLMediaSession::showPlaybackTargetPicker): Drive-by fix to disallow audio-only files.
(WebCore::HTMLMediaSession::currentPlaybackTargetIsSupported): Deleted.
* html/HTMLMediaSession.h:

* platform/graphics/MediaPlayer.cpp:
(WebCore::MediaPlayer::isCurrentPlaybackTargetSupported): Deleted.
* platform/graphics/MediaPlayer.h:
* platform/graphics/MediaPlayerPrivate.h:

* platform/graphics/avfoundation/objc/MediaPlayerPrivateAVFoundationObjC.mm:
(WebCore::MediaPlayerPrivateAVFoundationObjC::setShouldPlayToPlaybackTarget): Use a RetainPtr
to explicitly manage the lifetime of the temporary object.
(WebCore::MediaPlayerPrivateAVFoundationObjC::isPlayingToWirelessPlaybackTarget): Ditto.
* platform/graphics/avfoundation/objc/MediaPlayerPrivateMediaSourceAVFObjC.h:

* platform/graphics/avfoundation/objc/MediaPlayerPrivateMediaSourceAVFObjC.mm:
(WebCore::MediaPlayerPrivateMediaSourceAVFObjC::setShouldPlayToPlaybackTarget):
(WebCore::MediaPlayerPrivateMediaSourceAVFObjC::isCurrentPlaybackTargetWireless):
(WebCore::MediaPlayerPrivateMediaSourceAVFObjC::isCurrentPlaybackTargetSupported): Deleted.

* platform/graphics/mac/MediaPlayerPrivateQTKit.h:
* platform/graphics/mac/MediaPlayerPrivateQTKit.mm:
(WebCore::MediaPlayerPrivateQTKit::setShouldPlayToPlaybackTarget):
(WebCore::MediaPlayerPrivateQTKit::isCurrentPlaybackTargetWireless):
(WebCore::MediaPlayerPrivateQTKit::isCurrentPlaybackTargetSupported): Deleted.

Modified Paths

Diff

Modified: trunk/Source/WebCore/ChangeLog (183508 => 183509)


--- trunk/Source/WebCore/ChangeLog	2015-04-28 21:19:15 UTC (rev 183508)
+++ trunk/Source/WebCore/ChangeLog	2015-04-28 21:40:10 UTC (rev 183509)
@@ -1,3 +1,56 @@
+2015-04-28  Eric Carlson  <[email protected]>
+
+        [Mac] Simplify code to support media engines which do not support target playback
+        https://bugs.webkit.org/show_bug.cgi?id=144332
+
+        Reviewed by Jer Noble.
+
+        * Modules/mediasession/WebMediaSessionManager.cpp:
+        (WebCore::WebMediaSessionManager::externalOutputDeviceAvailableDidChange): Always make client
+        callback, let them decide if it is significant or not.
+
+        * html/HTMLMediaElement.cpp:
+        (WebCore::HTMLMediaElement::HTMLMediaElement): m_loadTimer -> m_pendingActionTimer.
+        (WebCore::HTMLMediaElement::scheduleDelayedAction): Handle CheckPlaybackTargetCompatablity.
+        (WebCore::HTMLMediaElement::scheduleNextSourceChild): m_loadTimer -> m_pendingActionTimer.
+        (WebCore::HTMLMediaElement::loadTimerFired): Renamed pendingActionTimerFired.
+        (WebCore::HTMLMediaElement::prepareForLoad): m_loadTimer -> m_pendingActionTimer.
+        (WebCore::HTMLMediaElement::setDefaultPlaybackRate): Add logging.
+        (WebCore::HTMLMediaElement::clearMediaPlayer): m_loadTimer -> m_pendingActionTimer.
+        (WebCore::HTMLMediaElement::webkitCurrentPlaybackTargetIsSupported): Removed.
+        (WebCore::HTMLMediaElement::dispatchEvent): If a 'webkitcurrentplaybacktargetiswirelesschanged'
+        event is dispatched when the current target is wireless but the media engine does not support
+        wireless playback, tell the media engine not to play to the target.
+        * html/HTMLMediaElement.h:
+        * html/HTMLMediaElement.idl:
+
+        * html/HTMLMediaSession.cpp:
+        (WebCore::HTMLMediaSession::showPlaybackTargetPicker): Drive-by fix to disallow audio-only files.
+        (WebCore::HTMLMediaSession::currentPlaybackTargetIsSupported): Deleted.
+        * html/HTMLMediaSession.h:
+
+        * platform/graphics/MediaPlayer.cpp:
+        (WebCore::MediaPlayer::isCurrentPlaybackTargetSupported): Deleted.
+        * platform/graphics/MediaPlayer.h:
+        * platform/graphics/MediaPlayerPrivate.h:
+
+        * platform/graphics/avfoundation/objc/MediaPlayerPrivateAVFoundationObjC.mm:
+        (WebCore::MediaPlayerPrivateAVFoundationObjC::setShouldPlayToPlaybackTarget): Use a RetainPtr
+        to explicitly manage the lifetime of the temporary object.
+        (WebCore::MediaPlayerPrivateAVFoundationObjC::isPlayingToWirelessPlaybackTarget): Ditto.
+        * platform/graphics/avfoundation/objc/MediaPlayerPrivateMediaSourceAVFObjC.h:
+
+        * platform/graphics/avfoundation/objc/MediaPlayerPrivateMediaSourceAVFObjC.mm:
+        (WebCore::MediaPlayerPrivateMediaSourceAVFObjC::setShouldPlayToPlaybackTarget):
+        (WebCore::MediaPlayerPrivateMediaSourceAVFObjC::isCurrentPlaybackTargetWireless):
+        (WebCore::MediaPlayerPrivateMediaSourceAVFObjC::isCurrentPlaybackTargetSupported): Deleted.
+
+        * platform/graphics/mac/MediaPlayerPrivateQTKit.h:
+        * platform/graphics/mac/MediaPlayerPrivateQTKit.mm:
+        (WebCore::MediaPlayerPrivateQTKit::setShouldPlayToPlaybackTarget):
+        (WebCore::MediaPlayerPrivateQTKit::isCurrentPlaybackTargetWireless):
+        (WebCore::MediaPlayerPrivateQTKit::isCurrentPlaybackTargetSupported): Deleted.
+
 2015-04-28  Alex Christensen  <[email protected]>
 
         [Content Extensions] Use less memory for CombinedURLFilters.

Modified: trunk/Source/WebCore/Modules/mediasession/WebMediaSessionManager.cpp (183508 => 183509)


--- trunk/Source/WebCore/Modules/mediasession/WebMediaSessionManager.cpp	2015-04-28 21:19:15 UTC (rev 183508)
+++ trunk/Source/WebCore/Modules/mediasession/WebMediaSessionManager.cpp	2015-04-28 21:40:10 UTC (rev 183509)
@@ -196,9 +196,6 @@
 
 void WebMediaSessionManager::externalOutputDeviceAvailableDidChange(bool available)
 {
-    if (m_externalOutputDeviceAvailable == available)
-        return;
-
     m_externalOutputDeviceAvailable = available;
     for (auto& state : m_clientState)
         state->client->externalOutputDeviceAvailableDidChange(state->contextId, available);

Modified: trunk/Source/WebCore/html/HTMLMediaElement.cpp (183508 => 183509)


--- trunk/Source/WebCore/html/HTMLMediaElement.cpp	2015-04-28 21:19:15 UTC (rev 183508)
+++ trunk/Source/WebCore/html/HTMLMediaElement.cpp	2015-04-28 21:40:10 UTC (rev 183509)
@@ -256,7 +256,7 @@
 HTMLMediaElement::HTMLMediaElement(const QualifiedName& tagName, Document& document, bool createdByParser)
     : HTMLElement(tagName, document)
     , ActiveDOMObject(&document)
-    , m_loadTimer(*this, &HTMLMediaElement::loadTimerFired)
+    , m_pendingActionTimer(*this, &HTMLMediaElement::pendingActionTimerFired)
     , m_progressEventTimer(*this, &HTMLMediaElement::progressEventTimerFired)
     , m_playbackProgressTimer(*this, &HTMLMediaElement::playbackProgressTimerFired)
     , m_scanTimer(*this, &HTMLMediaElement::scanTimerFired)
@@ -694,14 +694,19 @@
         setFlags(m_pendingActionFlags, TextTrackChangesNotification);
 #endif
 
-    m_loadTimer.startOneShot(0);
+#if ENABLE(WIRELESS_PLAYBACK_TARGET)
+    if (actionType & CheckPlaybackTargetCompatablity)
+        setFlags(m_pendingActionFlags, CheckPlaybackTargetCompatablity);
+#endif
+
+    m_pendingActionTimer.startOneShot(0);
 }
 
 void HTMLMediaElement::scheduleNextSourceChild()
 {
     // Schedule the timer to try the next <source> element WITHOUT resetting state ala prepareForLoad.
     setFlags(m_pendingActionFlags, LoadMediaResource);
-    m_loadTimer.startOneShot(0);
+    m_pendingActionTimer.startOneShot(0);
 }
 
 void HTMLMediaElement::scheduleEvent(const AtomicString& eventName)
@@ -717,7 +722,7 @@
     m_asyncEventQueue.enqueueEvent(event.release());
 }
 
-void HTMLMediaElement::loadTimerFired()
+void HTMLMediaElement::pendingActionTimerFired()
 {
     Ref<HTMLMediaElement> protect(*this); // loadNextSourceChild may fire 'beforeload', which can make arbitrary DOM mutations.
 
@@ -738,6 +743,13 @@
         notifyMediaPlayerOfTextTrackChanges();
 #endif
 
+#if ENABLE(WIRELESS_PLAYBACK_TARGET)
+    if (m_pendingActionFlags & CheckPlaybackTargetCompatablity && m_player && m_player->isCurrentPlaybackTargetWireless() && !m_player->canPlayToWirelessPlaybackTarget()) {
+        LOG(Media, "HTMLMediaElement::pendingActionTimerFired(%p) - calling setShouldPlayToPlaybackTarget(false)", this);
+        m_player->setShouldPlayToPlaybackTarget(false);
+    }
+#endif
+
     m_pendingActionFlags = 0;
 }
 
@@ -826,7 +838,7 @@
 
     // Perform the cleanup required for the resource load algorithm to run.
     stopPeriodicTimers();
-    m_loadTimer.stop();
+    m_pendingActionTimer.stop();
     // FIXME: Figure out appropriate place to reset LoadTextTrackResource if necessary and set m_pendingActionFlags to 0 here.
     m_pendingActionFlags &= ~LoadMediaResource;
     m_sentEndEvent = false;
@@ -2644,6 +2656,7 @@
 void HTMLMediaElement::setDefaultPlaybackRate(double rate)
 {
     if (m_defaultPlaybackRate != rate) {
+        LOG(Media, "HTMLMediaElement::setDefaultPlaybackRate(%p) - %f", this, rate);
         m_defaultPlaybackRate = rate;
         scheduleEvent(eventNames().ratechangeEvent);
     }
@@ -4709,7 +4722,7 @@
     m_player = nullptr;
 
     stopPeriodicTimers();
-    m_loadTimer.stop();
+    m_pendingActionTimer.stop();
 
     clearFlags(m_pendingActionFlags, flags);
     m_loadState = WaitingForSource;
@@ -4858,11 +4871,6 @@
     return m_mediaSession->currentPlaybackTargetIsWireless(*this);
 }
 
-bool HTMLMediaElement::webkitCurrentPlaybackTargetIsSupported() const
-{
-    return m_mediaSession->currentPlaybackTargetIsSupported(*this);
-}
-
 void HTMLMediaElement::wirelessRoutesAvailableDidChange()
 {
     enqueuePlaybackTargetAvailabilityChangedEvent();
@@ -4873,11 +4881,17 @@
     LOG(Media, "HTMLMediaElement::mediaPlayerCurrentPlaybackTargetIsWirelessChanged(%p) - webkitCurrentPlaybackTargetIsWireless = %s", this, boolString(webkitCurrentPlaybackTargetIsWireless()));
     scheduleEvent(eventNames().webkitcurrentplaybacktargetiswirelesschangedEvent);
 
-#if ENABLE(WIRELESS_PLAYBACK_TARGET)
     m_mediaSession->mediaStateDidChange(*this, mediaState());
-#endif
 }
 
+bool HTMLMediaElement::dispatchEvent(PassRefPtr<Event> prpEvent)
+{
+    RefPtr<Event> event = prpEvent;
+    if (event->type() == eventNames().webkitcurrentplaybacktargetiswirelesschangedEvent)
+        scheduleDelayedAction(CheckPlaybackTargetCompatablity);
+    return HTMLElement::dispatchEvent(event);
+}
+
 bool HTMLMediaElement::addEventListener(const AtomicString& eventType, PassRefPtr<EventListener> listener, bool useCapture)
 {
     if (eventType != eventNames().webkitplaybacktargetavailabilitychangedEvent)

Modified: trunk/Source/WebCore/html/HTMLMediaElement.h (183508 => 183509)


--- trunk/Source/WebCore/html/HTMLMediaElement.h	2015-04-28 21:19:15 UTC (rev 183508)
+++ trunk/Source/WebCore/html/HTMLMediaElement.h	2015-04-28 21:40:10 UTC (rev 183509)
@@ -139,8 +139,9 @@
         ConfigureTextTracks = 1 << 1,
         TextTrackChangesNotification = 1 << 2,
         ConfigureTextTrackDisplay = 1 << 3,
+        CheckPlaybackTargetCompatablity = 1 << 4,
 
-        EveryDelayedAction = LoadMediaResource | ConfigureTextTracks | TextTrackChangesNotification | ConfigureTextTrackDisplay,
+        EveryDelayedAction = LoadMediaResource | ConfigureTextTracks | TextTrackChangesNotification | ConfigureTextTrackDisplay | CheckPlaybackTargetCompatablity,
     };
     void scheduleDelayedAction(DelayedActionType);
     
@@ -356,7 +357,6 @@
 #if ENABLE(WIRELESS_PLAYBACK_TARGET)
     void webkitShowPlaybackTargetPicker();
     bool webkitCurrentPlaybackTargetIsWireless() const;
-    bool webkitCurrentPlaybackTargetIsSupported() const;
 
     virtual bool addEventListener(const AtomicString& eventType, PassRefPtr<EventListener>, bool useCapture) override;
     virtual bool removeEventListener(const AtomicString& eventType, EventListener*, bool useCapture) override;
@@ -562,6 +562,9 @@
 #if ENABLE(WIRELESS_PLAYBACK_TARGET)
     virtual void mediaPlayerCurrentPlaybackTargetIsWirelessChanged(MediaPlayer*) override;
     void enqueuePlaybackTargetAvailabilityChangedEvent();
+
+    using EventTarget::dispatchEvent;
+    virtual bool dispatchEvent(PassRefPtr<Event>) override;
 #endif
 
     virtual String mediaPlayerReferrer() const override;
@@ -604,7 +607,7 @@
 
     virtual double mediaPlayerRequestedPlaybackRate() const override final;
 
-    void loadTimerFired();
+    void pendingActionTimerFired();
     void progressEventTimerFired();
     void playbackProgressTimerFired();
     void scanTimerFired();
@@ -733,7 +736,7 @@
 
     void updateCaptionContainer();
 
-    Timer m_loadTimer;
+    Timer m_pendingActionTimer;
     Timer m_progressEventTimer;
     Timer m_playbackProgressTimer;
     Timer m_scanTimer;

Modified: trunk/Source/WebCore/html/HTMLMediaElement.idl (183508 => 183509)


--- trunk/Source/WebCore/html/HTMLMediaElement.idl	2015-04-28 21:19:15 UTC (rev 183508)
+++ trunk/Source/WebCore/html/HTMLMediaElement.idl	2015-04-28 21:40:10 UTC (rev 183509)
@@ -116,5 +116,4 @@
 
     [Conditional=WIRELESS_PLAYBACK_TARGET] void webkitShowPlaybackTargetPicker();
     [Conditional=WIRELESS_PLAYBACK_TARGET] readonly attribute boolean webkitCurrentPlaybackTargetIsWireless;
-    [Conditional=WIRELESS_PLAYBACK_TARGET] readonly attribute boolean webkitCurrentPlaybackTargetIsSupported;
 };

Modified: trunk/Source/WebCore/html/HTMLMediaSession.cpp (183508 => 183509)


--- trunk/Source/WebCore/html/HTMLMediaSession.cpp	2015-04-28 21:19:15 UTC (rev 183508)
+++ trunk/Source/WebCore/html/HTMLMediaSession.cpp	2015-04-28 21:40:10 UTC (rev 183509)
@@ -189,20 +189,6 @@
     return isWireless;
 }
 
-bool HTMLMediaSession::currentPlaybackTargetIsSupported(const HTMLMediaElement& element) const
-{
-    MediaPlayer* player = element.player();
-    if (!player) {
-        LOG(Media, "HTMLMediaSession::currentPlaybackTargetIsSupported - returning FALSE because player is NULL");
-        return false;
-    }
-
-    bool isSupported = player->isCurrentPlaybackTargetSupported();
-    LOG(Media, "HTMLMediaSession::currentPlaybackTargetIsSupported - returning %s", isSupported ? "TRUE" : "FALSE");
-    
-    return isSupported;
-}
-
 void HTMLMediaSession::showPlaybackTargetPicker(const HTMLMediaElement& element)
 {
     LOG(Media, "HTMLMediaSession::showPlaybackTargetPicker");
@@ -217,6 +203,13 @@
         return;
     }
 
+#if !PLATFORM(IOS)
+    if (!element.hasVideo()) {
+        LOG(Media, "HTMLMediaSession::showPlaybackTargetPicker - returning early because element has no video");
+        return;
+    }
+#endif
+
     element.document().showPlaybackTargetPicker(*this, is<HTMLVideoElement>(element));
 }
 
@@ -388,7 +381,8 @@
     LOG(Media, "HTMLMediaSession::mediaEngineUpdated");
 
 #if ENABLE(WIRELESS_PLAYBACK_TARGET)
-    setWirelessVideoPlaybackDisabled(element, m_restrictions & WirelessVideoPlaybackDisabled);
+    if (m_restrictions & WirelessVideoPlaybackDisabled)
+        setWirelessVideoPlaybackDisabled(element, true);
     if (m_playbackTarget)
         client().setWirelessPlaybackTarget(*m_playbackTarget.copyRef());
     if (m_shouldPlayToPlaybackTarget)

Modified: trunk/Source/WebCore/html/HTMLMediaSession.h (183508 => 183509)


--- trunk/Source/WebCore/html/HTMLMediaSession.h	2015-04-28 21:19:15 UTC (rev 183508)
+++ trunk/Source/WebCore/html/HTMLMediaSession.h	2015-04-28 21:40:10 UTC (rev 183509)
@@ -56,7 +56,6 @@
 #if ENABLE(WIRELESS_PLAYBACK_TARGET)
     void showPlaybackTargetPicker(const HTMLMediaElement&);
     bool currentPlaybackTargetIsWireless(const HTMLMediaElement&) const;
-    bool currentPlaybackTargetIsSupported(const HTMLMediaElement&) const;
     bool hasWirelessPlaybackTargets(const HTMLMediaElement&) const;
 
     bool wirelessVideoPlaybackDisabled(const HTMLMediaElement&) const;

Modified: trunk/Source/WebCore/platform/graphics/MediaPlayer.cpp (183508 => 183509)


--- trunk/Source/WebCore/platform/graphics/MediaPlayer.cpp	2015-04-28 21:19:15 UTC (rev 183508)
+++ trunk/Source/WebCore/platform/graphics/MediaPlayer.cpp	2015-04-28 21:40:10 UTC (rev 183509)
@@ -843,11 +843,6 @@
     return m_private->isCurrentPlaybackTargetWireless();
 }
 
-bool MediaPlayer::isCurrentPlaybackTargetSupported() const
-{
-    return m_private->isCurrentPlaybackTargetSupported();
-}
-
 String MediaPlayer::wirelessPlaybackTargetName() const
 {
     return m_private->wirelessPlaybackTargetName();

Modified: trunk/Source/WebCore/platform/graphics/MediaPlayer.h (183508 => 183509)


--- trunk/Source/WebCore/platform/graphics/MediaPlayer.h	2015-04-28 21:19:15 UTC (rev 183508)
+++ trunk/Source/WebCore/platform/graphics/MediaPlayer.h	2015-04-28 21:40:10 UTC (rev 183509)
@@ -464,7 +464,6 @@
 
 #if ENABLE(WIRELESS_PLAYBACK_TARGET)
     bool isCurrentPlaybackTargetWireless() const;
-    bool isCurrentPlaybackTargetSupported() const;
 
     enum WirelessPlaybackTargetType { TargetTypeNone, TargetTypeAirPlay, TargetTypeTVOut };
     WirelessPlaybackTargetType wirelessPlaybackTargetType() const;

Modified: trunk/Source/WebCore/platform/graphics/MediaPlayerPrivate.h (183508 => 183509)


--- trunk/Source/WebCore/platform/graphics/MediaPlayerPrivate.h	2015-04-28 21:19:15 UTC (rev 183508)
+++ trunk/Source/WebCore/platform/graphics/MediaPlayerPrivate.h	2015-04-28 21:40:10 UTC (rev 183509)
@@ -161,7 +161,6 @@
 
 #if ENABLE(WIRELESS_PLAYBACK_TARGET)
     virtual bool isCurrentPlaybackTargetWireless() const { return false; }
-    virtual bool isCurrentPlaybackTargetSupported() const { return true; }
 
     virtual String wirelessPlaybackTargetName() const { return emptyString(); }
     virtual MediaPlayer::WirelessPlaybackTargetType wirelessPlaybackTargetType() const { return MediaPlayer::TargetTypeNone; }

Modified: trunk/Source/WebCore/platform/graphics/avfoundation/objc/MediaPlayerPrivateAVFoundationObjC.mm (183508 => 183509)


--- trunk/Source/WebCore/platform/graphics/avfoundation/objc/MediaPlayerPrivateAVFoundationObjC.mm	2015-04-28 21:19:15 UTC (rev 183508)
+++ trunk/Source/WebCore/platform/graphics/avfoundation/objc/MediaPlayerPrivateAVFoundationObjC.mm	2015-04-28 21:40:10 UTC (rev 183509)
@@ -2798,8 +2798,8 @@
         return;
 
     AVOutputContext *newContext = shouldPlay ? m_outputContext.get() : nil;
-    AVOutputContext *currentContext = m_avPlayer.get().outputContext;
-    if ((!newContext && !currentContext) || [currentContext isEqual:newContext])
+    RetainPtr<AVOutputContext> currentContext = m_avPlayer.get().outputContext;
+    if ((!newContext && !currentContext.get()) || [currentContext.get() isEqual:newContext])
         return;
 
     setDelayCallbacks(true);
@@ -2814,10 +2814,8 @@
     if (!m_avPlayer)
         return false;
 
-    if (!m_outputContext || !m_outputContext.get().deviceName)
-        return false;
-
-    return m_cachedRate;
+    RetainPtr<AVOutputContext> currentContext = m_avPlayer.get().outputContext;
+    return currentContext && currentContext.get().deviceName;
 }
 #endif // !PLATFORM(IOS)
 

Modified: trunk/Source/WebCore/platform/graphics/avfoundation/objc/MediaPlayerPrivateMediaSourceAVFObjC.h (183508 => 183509)


--- trunk/Source/WebCore/platform/graphics/avfoundation/objc/MediaPlayerPrivateMediaSourceAVFObjC.h	2015-04-28 21:19:15 UTC (rev 183508)
+++ trunk/Source/WebCore/platform/graphics/avfoundation/objc/MediaPlayerPrivateMediaSourceAVFObjC.h	2015-04-28 21:40:10 UTC (rev 183509)
@@ -172,7 +172,7 @@
     virtual MediaTime totalFrameDelay() override;
 
 #if ENABLE(WIRELESS_PLAYBACK_TARGET)
-    virtual bool isCurrentPlaybackTargetSupported() const override;
+    virtual bool isCurrentPlaybackTargetWireless() const override;
     virtual void setWirelessPlaybackTarget(Ref<MediaPlaybackTarget>&&);
     virtual void setShouldPlayToPlaybackTarget(bool) override;
 #endif
@@ -220,7 +220,7 @@
     bool m_hasAvailableVideoFrame;
 #if ENABLE(WIRELESS_PLAYBACK_TARGET)
     RefPtr<MediaPlaybackTarget> m_playbackTarget;
-    bool m_currentPlaybackTargetIsSupported { true };
+    bool m_shouldPlayToTarget { false };
 #endif
 };
 

Modified: trunk/Source/WebCore/platform/graphics/avfoundation/objc/MediaPlayerPrivateMediaSourceAVFObjC.mm (183508 => 183509)


--- trunk/Source/WebCore/platform/graphics/avfoundation/objc/MediaPlayerPrivateMediaSourceAVFObjC.mm	2015-04-28 21:19:15 UTC (rev 183508)
+++ trunk/Source/WebCore/platform/graphics/avfoundation/objc/MediaPlayerPrivateMediaSourceAVFObjC.mm	2015-04-28 21:40:10 UTC (rev 183509)
@@ -807,14 +807,6 @@
 }
 
 #if ENABLE(WIRELESS_PLAYBACK_TARGET)
-bool MediaPlayerPrivateMediaSourceAVFObjC::isCurrentPlaybackTargetSupported() const
-{
-    if (!m_playbackTarget)
-        return true;
-
-    return !m_playbackTarget->hasActiveRoute();
-}
-
 void MediaPlayerPrivateMediaSourceAVFObjC::setWirelessPlaybackTarget(Ref<MediaPlaybackTarget>&& target)
 {
     m_playbackTarget = WTF::move(target);
@@ -822,12 +814,22 @@
 
 void MediaPlayerPrivateMediaSourceAVFObjC::setShouldPlayToPlaybackTarget(bool shouldPlayToTarget)
 {
-    bool oldSupported = m_currentPlaybackTargetIsSupported;
-    m_currentPlaybackTargetIsSupported = !shouldPlayToTarget;
+    if (shouldPlayToTarget == m_shouldPlayToTarget)
+        return;
 
-    if (m_player && oldSupported != m_currentPlaybackTargetIsSupported)
+    m_shouldPlayToTarget = shouldPlayToTarget;
+
+    if (m_player)
         m_player->currentPlaybackTargetIsWirelessChanged();
 }
+
+bool MediaPlayerPrivateMediaSourceAVFObjC::isCurrentPlaybackTargetWireless() const
+{
+    if (!m_playbackTarget)
+        return false;
+
+    return m_shouldPlayToTarget && m_playbackTarget->hasActiveRoute();
+}
 #endif
 
 }

Modified: trunk/Source/WebCore/platform/graphics/mac/MediaPlayerPrivateQTKit.h (183508 => 183509)


--- trunk/Source/WebCore/platform/graphics/mac/MediaPlayerPrivateQTKit.h	2015-04-28 21:19:15 UTC (rev 183508)
+++ trunk/Source/WebCore/platform/graphics/mac/MediaPlayerPrivateQTKit.h	2015-04-28 21:40:10 UTC (rev 183509)
@@ -180,10 +180,9 @@
     virtual long platformErrorCode() const;
 
 #if ENABLE(WIRELESS_PLAYBACK_TARGET)
-    virtual bool isCurrentPlaybackTargetSupported() const override;
+    virtual bool isCurrentPlaybackTargetWireless() const override;
     virtual void setWirelessPlaybackTarget(Ref<MediaPlaybackTarget>&&);
     virtual void setShouldPlayToPlaybackTarget(bool) override;
-    void togglePlayingToPlaybackTarget();
 #endif
 
     MediaPlayer* m_player;
@@ -215,7 +214,7 @@
     mutable FloatSize m_cachedNaturalSize;
 #if ENABLE(WIRELESS_PLAYBACK_TARGET)
     RefPtr<MediaPlaybackTarget> m_playbackTarget;
-    bool m_currentPlaybackTargetIsSupported { true };
+    bool m_shouldPlayToTarget { false };
 #endif
 };
 

Modified: trunk/Source/WebCore/platform/graphics/mac/MediaPlayerPrivateQTKit.mm (183508 => 183509)


--- trunk/Source/WebCore/platform/graphics/mac/MediaPlayerPrivateQTKit.mm	2015-04-28 21:19:15 UTC (rev 183508)
+++ trunk/Source/WebCore/platform/graphics/mac/MediaPlayerPrivateQTKit.mm	2015-04-28 21:40:10 UTC (rev 183509)
@@ -1541,14 +1541,6 @@
 }
 
 #if ENABLE(WIRELESS_PLAYBACK_TARGET)
-bool MediaPlayerPrivateQTKit::isCurrentPlaybackTargetSupported() const
-{
-    if (!m_playbackTarget)
-        return true;
-
-    return !m_playbackTarget->hasActiveRoute();
-}
-
 void MediaPlayerPrivateQTKit::setWirelessPlaybackTarget(Ref<MediaPlaybackTarget>&& target)
 {
     m_playbackTarget = WTF::move(target);
@@ -1556,12 +1548,22 @@
 
 void MediaPlayerPrivateQTKit::setShouldPlayToPlaybackTarget(bool shouldPlayToTarget)
 {
-    bool oldSupported = m_currentPlaybackTargetIsSupported;
-    m_currentPlaybackTargetIsSupported = !shouldPlayToTarget;
+    if (shouldPlayToTarget == m_shouldPlayToTarget)
+        return;
 
-    if (m_player && oldSupported != m_currentPlaybackTargetIsSupported)
+    m_shouldPlayToTarget = shouldPlayToTarget;
+
+    if (m_player)
         m_player->currentPlaybackTargetIsWirelessChanged();
 }
+
+bool MediaPlayerPrivateQTKit::isCurrentPlaybackTargetWireless() const
+{
+    if (!m_playbackTarget)
+        return false;
+    
+    return m_shouldPlayToTarget && m_playbackTarget->hasActiveRoute();
+}
 #endif
 
 } // namespace WebCore
_______________________________________________
webkit-changes mailing list
[email protected]
https://lists.webkit.org/mailman/listinfo/webkit-changes

Reply via email to