Title: [188716] trunk/Source/WebCore
Revision
188716
Author
[email protected]
Date
2015-08-20 16:06:13 -0700 (Thu, 20 Aug 2015)

Log Message

Stop using cancelCallOnMainThread in MediaPlayerPrivateMediaFoundation
https://bugs.webkit.org/show_bug.cgi?id=148252

Reviewed by Tim Horton.

Replace cancelCallOnMainThread with WeakPtrs.

* platform/graphics/win/MediaPlayerPrivateMediaFoundation.cpp:
(WebCore::MediaPlayerPrivateMediaFoundation::MediaPlayerPrivateMediaFoundation):
(WebCore::MediaPlayerPrivateMediaFoundation::endCreatedMediaSource):
(WebCore::MediaPlayerPrivateMediaFoundation::endGetEvent):
(WebCore::MediaPlayerPrivateMediaFoundation::~MediaPlayerPrivateMediaFoundation):
(WebCore::MediaPlayerPrivateMediaFoundation::onCreatedMediaSourceCallback):
(WebCore::MediaPlayerPrivateMediaFoundation::onTopologySetCallback):
* platform/graphics/win/MediaPlayerPrivateMediaFoundation.h:

Modified Paths

Diff

Modified: trunk/Source/WebCore/ChangeLog (188715 => 188716)


--- trunk/Source/WebCore/ChangeLog	2015-08-20 22:57:57 UTC (rev 188715)
+++ trunk/Source/WebCore/ChangeLog	2015-08-20 23:06:13 UTC (rev 188716)
@@ -1,3 +1,21 @@
+2015-08-20  Anders Carlsson  <[email protected]>
+
+        Stop using cancelCallOnMainThread in MediaPlayerPrivateMediaFoundation
+        https://bugs.webkit.org/show_bug.cgi?id=148252
+
+        Reviewed by Tim Horton.
+
+        Replace cancelCallOnMainThread with WeakPtrs.
+
+        * platform/graphics/win/MediaPlayerPrivateMediaFoundation.cpp:
+        (WebCore::MediaPlayerPrivateMediaFoundation::MediaPlayerPrivateMediaFoundation):
+        (WebCore::MediaPlayerPrivateMediaFoundation::endCreatedMediaSource):
+        (WebCore::MediaPlayerPrivateMediaFoundation::endGetEvent):
+        (WebCore::MediaPlayerPrivateMediaFoundation::~MediaPlayerPrivateMediaFoundation):
+        (WebCore::MediaPlayerPrivateMediaFoundation::onCreatedMediaSourceCallback):
+        (WebCore::MediaPlayerPrivateMediaFoundation::onTopologySetCallback):
+        * platform/graphics/win/MediaPlayerPrivateMediaFoundation.h:
+
 2015-08-20  Beth Dakin  <[email protected]>
 
         WK1 can re-enter layout during FrameView destruction and crash

Modified: trunk/Source/WebCore/platform/graphics/win/MediaPlayerPrivateMediaFoundation.cpp (188715 => 188716)


--- trunk/Source/WebCore/platform/graphics/win/MediaPlayerPrivateMediaFoundation.cpp	2015-08-20 22:57:57 UTC (rev 188715)
+++ trunk/Source/WebCore/platform/graphics/win/MediaPlayerPrivateMediaFoundation.cpp	2015-08-20 23:06:13 UTC (rev 188716)
@@ -62,12 +62,7 @@
     , m_hasVideo(false)
     , m_hwndVideo(nullptr)
     , m_readyState(MediaPlayer::HaveNothing)
-    , m_mediaSession(nullptr)
-    , m_sourceResolver(nullptr)
-    , m_mediaSource(nullptr)
-    , m_topology(nullptr)
-    , m_sourcePD(nullptr)
-    , m_videoDisplay(nullptr)
+    , m_weakPtrFactory(this)
 {
     createSession();
     createVideoWindow();
@@ -78,8 +73,6 @@
     notifyDeleted();
     destroyVideoWindow();
     endSession();
-    cancelCallOnMainThread(onTopologySetCallback, this);
-    cancelCallOnMainThread(onCreatedMediaSourceCallback, this);
 }
 
 void MediaPlayerPrivateMediaFoundation::registerMediaEngine(MediaEngineRegistrar registrar)
@@ -342,7 +335,12 @@
     hr = asyncResult->GetStatus();
     m_loadingProgress = SUCCEEDED(hr);
 
-    callOnMainThread(onCreatedMediaSourceCallback, this);
+    auto weakPtr = m_weakFactory.createWeakPtr();
+    callOnMainThread([weakPtr] {
+        if (!weakPtr)
+            return;
+        weakPtr->onCreatedMediaSource();
+    });
 
     return true;
 }
@@ -367,7 +365,12 @@
 
     switch (mediaEventType) {
     case MESessionTopologySet:
-        callOnMainThread(onTopologySetCallback, this);
+        auto weakPtr = m_weakFactory.createWeakPtr();
+        callOnMainThread([weakPtr] {
+            if (!weakPtr)
+                return;
+            weakPtr->onTopologySet();
+        });
         break;
 
     case MESessionClosed:
@@ -643,18 +646,6 @@
     m_player->playbackStateChanged();
 }
 
-void MediaPlayerPrivateMediaFoundation::onCreatedMediaSourceCallback(void* context)
-{
-    MediaPlayerPrivateMediaFoundation* mediaPlayer = static_cast<MediaPlayerPrivateMediaFoundation*>(context);
-    mediaPlayer->onCreatedMediaSource();
-}
-
-void MediaPlayerPrivateMediaFoundation::onTopologySetCallback(void* context)
-{
-    MediaPlayerPrivateMediaFoundation* mediaPlayer = static_cast<MediaPlayerPrivateMediaFoundation*>(context);
-    mediaPlayer->onTopologySet();
-}
-
 MediaPlayerPrivateMediaFoundation::AsyncCallback::AsyncCallback(MediaPlayerPrivateMediaFoundation* mediaPlayer, bool event)
     : m_refCount(0)
     , m_mediaPlayer(mediaPlayer)

Modified: trunk/Source/WebCore/platform/graphics/win/MediaPlayerPrivateMediaFoundation.h (188715 => 188716)


--- trunk/Source/WebCore/platform/graphics/win/MediaPlayerPrivateMediaFoundation.h	2015-08-20 22:57:57 UTC (rev 188715)
+++ trunk/Source/WebCore/platform/graphics/win/MediaPlayerPrivateMediaFoundation.h	2015-08-20 23:06:13 UTC (rev 188716)
@@ -33,6 +33,7 @@
 
 #include <wtf/Lock.h>
 #include <wtf/ThreadingPrimitives.h>
+#include <wtf/WeakPtr.h>
 
 namespace WebCore {
 
@@ -92,6 +93,7 @@
     HashSet<MediaPlayerListener*> m_listeners;
     Lock m_mutexListeners;
 
+    WeakPtrFactory<MediaPlayerPrivateMediaFoundation> m_weakPtrFactory;
     COMPtr<IMFMediaSession> m_mediaSession;
     COMPtr<IMFSourceResolver> m_sourceResolver;
     COMPtr<IMFMediaSource> m_mediaSource;
@@ -111,8 +113,6 @@
 
     void onCreatedMediaSource();
     void onTopologySet();
-    static void onCreatedMediaSourceCallback(void* context);
-    static void onTopologySetCallback(void* context);
 
     LPCWSTR registerVideoWindowClass();
     void createVideoWindow();
_______________________________________________
webkit-changes mailing list
[email protected]
https://lists.webkit.org/mailman/listinfo/webkit-changes

Reply via email to