Title: [249688] branches/safari-608-branch/Source/WebCore
Revision
249688
Author
alanc...@apple.com
Date
2019-09-09 20:19:29 -0700 (Mon, 09 Sep 2019)

Log Message

Cherry-pick r248161. rdar://problem/55183128

    [iOS] Directly use RealtimeMediaSourceCenter to compute the media capture  state
    https://bugs.webkit.org/show_bug.cgi?id=200368
    <rdar://problem/53191450>

    Reviewed by Eric Carlson.

    Instead of registering a MediaStreamTrack as a media producer to compute capture state,
    go directly to the sources from the RealtimeMediaSourceCenter.
    Do the same when requested to mute capture tracks.

    No observable change of behavior.
    Covered by manual test on iOS and existing tests.

    * Modules/mediastream/MediaStreamTrack.cpp:
    (WebCore::MediaStreamTrack::MediaStreamTrack):
    (WebCore::MediaStreamTrack::~MediaStreamTrack):
    (WebCore::MediaStreamTrack::mediaState const):
    (WebCore::sourceCaptureState):
    (WebCore::MediaStreamTrack::captureState):
    (WebCore::MediaStreamTrack::muteCapture):
    * Modules/mediastream/MediaStreamTrack.h:
    * dom/Document.cpp:
    (WebCore::Document::updateIsPlayingMedia):
    (WebCore::Document::pageMutedStateDidChange):

    git-svn-id: https://svn.webkit.org/repository/webkit/trunk@248161 268f45cc-cd09-0410-ab3c-d52691b4dbfc

Modified Paths

Diff

Modified: branches/safari-608-branch/Source/WebCore/ChangeLog (249687 => 249688)


--- branches/safari-608-branch/Source/WebCore/ChangeLog	2019-09-10 02:12:10 UTC (rev 249687)
+++ branches/safari-608-branch/Source/WebCore/ChangeLog	2019-09-10 03:19:29 UTC (rev 249688)
@@ -1,3 +1,62 @@
+2019-09-09  Kocsen Chung  <kocsen_ch...@apple.com>
+
+        Cherry-pick r248161. rdar://problem/55183128
+
+    [iOS] Directly use RealtimeMediaSourceCenter to compute the media capture  state
+    https://bugs.webkit.org/show_bug.cgi?id=200368
+    <rdar://problem/53191450>
+    
+    Reviewed by Eric Carlson.
+    
+    Instead of registering a MediaStreamTrack as a media producer to compute capture state,
+    go directly to the sources from the RealtimeMediaSourceCenter.
+    Do the same when requested to mute capture tracks.
+    
+    No observable change of behavior.
+    Covered by manual test on iOS and existing tests.
+    
+    * Modules/mediastream/MediaStreamTrack.cpp:
+    (WebCore::MediaStreamTrack::MediaStreamTrack):
+    (WebCore::MediaStreamTrack::~MediaStreamTrack):
+    (WebCore::MediaStreamTrack::mediaState const):
+    (WebCore::sourceCaptureState):
+    (WebCore::MediaStreamTrack::captureState):
+    (WebCore::MediaStreamTrack::muteCapture):
+    * Modules/mediastream/MediaStreamTrack.h:
+    * dom/Document.cpp:
+    (WebCore::Document::updateIsPlayingMedia):
+    (WebCore::Document::pageMutedStateDidChange):
+    
+    
+    git-svn-id: https://svn.webkit.org/repository/webkit/trunk@248161 268f45cc-cd09-0410-ab3c-d52691b4dbfc
+
+    2019-08-02  Youenn Fablet  <you...@apple.com>
+
+            [iOS] Directly use RealtimeMediaSourceCenter to compute the media capture  state
+            https://bugs.webkit.org/show_bug.cgi?id=200368
+            <rdar://problem/53191450>
+
+            Reviewed by Eric Carlson.
+
+            Instead of registering a MediaStreamTrack as a media producer to compute capture state,
+            go directly to the sources from the RealtimeMediaSourceCenter.
+            Do the same when requested to mute capture tracks.
+
+            No observable change of behavior.
+            Covered by manual test on iOS and existing tests.
+
+            * Modules/mediastream/MediaStreamTrack.cpp:
+            (WebCore::MediaStreamTrack::MediaStreamTrack):
+            (WebCore::MediaStreamTrack::~MediaStreamTrack):
+            (WebCore::MediaStreamTrack::mediaState const):
+            (WebCore::sourceCaptureState):
+            (WebCore::MediaStreamTrack::captureState):
+            (WebCore::MediaStreamTrack::muteCapture):
+            * Modules/mediastream/MediaStreamTrack.h:
+            * dom/Document.cpp:
+            (WebCore::Document::updateIsPlayingMedia):
+            (WebCore::Document::pageMutedStateDidChange):
+
 2019-09-04  Mark Lam  <mark....@apple.com>
 
         Cherry-pick 248143. rdar://problem/55000992

Modified: branches/safari-608-branch/Source/WebCore/Modules/mediastream/MediaStreamTrack.cpp (249687 => 249688)


--- branches/safari-608-branch/Source/WebCore/Modules/mediastream/MediaStreamTrack.cpp	2019-09-10 02:12:10 UTC (rev 249687)
+++ branches/safari-608-branch/Source/WebCore/Modules/mediastream/MediaStreamTrack.cpp	2019-09-10 03:19:29 UTC (rev 249688)
@@ -48,6 +48,8 @@
 
 namespace WebCore {
 
+static MediaProducer::MediaStateFlags sourceCaptureState(RealtimeMediaSource&);
+
 WTF_MAKE_ISO_ALLOCATED_IMPL(MediaStreamTrack);
 
 Ref<MediaStreamTrack> MediaStreamTrack::create(ScriptExecutionContext& context, Ref<MediaStreamTrackPrivate>&& privateTrack)
@@ -72,7 +74,9 @@
     if (auto document = this->document()) {
         if (document->page() && document->page()->mutedState())
             setMuted(true);
+#if !PLATFORM(IOS_FAMILY)
         document->addAudioProducer(*this);
+#endif
     }
 }
 
@@ -83,8 +87,10 @@
     if (!isCaptureTrack())
         return;
 
+#if !PLATFORM(IOS_FAMILY)
     if (auto document = this->document())
         document->removeAudioProducer(*this);
+#endif
 }
 
 const AtomString& MediaStreamTrack::kind() const
@@ -409,27 +415,64 @@
     if (!document || !document->page())
         return IsNotPlaying;
 
-    if (source().type() == RealtimeMediaSource::Type::Audio) {
-        if (source().interrupted() && !source().muted())
-            return HasInterruptedAudioCaptureDevice;
-        if (muted())
-            return HasMutedAudioCaptureDevice;
-        if (m_private->isProducingData())
-            return HasActiveAudioCaptureDevice;
-    } else {
-        auto deviceType = source().deviceType();
-        ASSERT(deviceType == CaptureDevice::DeviceType::Camera || deviceType == CaptureDevice::DeviceType::Screen || deviceType == CaptureDevice::DeviceType::Window);
-        if (source().interrupted() && !source().muted())
-            return deviceType == CaptureDevice::DeviceType::Camera ? HasInterruptedVideoCaptureDevice : HasInterruptedDisplayCaptureDevice;
-        if (muted())
-            return deviceType == CaptureDevice::DeviceType::Camera ? HasMutedVideoCaptureDevice : HasMutedDisplayCaptureDevice;
-        if (m_private->isProducingData())
-            return deviceType == CaptureDevice::DeviceType::Camera ? HasActiveVideoCaptureDevice : HasActiveDisplayCaptureDevice;
+    return sourceCaptureState(source());
+}
+
+MediaProducer::MediaStateFlags sourceCaptureState(RealtimeMediaSource& source)
+{
+    switch (source.deviceType()) {
+    case CaptureDevice::DeviceType::Microphone:
+        if (source.muted())
+            return MediaProducer::HasMutedAudioCaptureDevice;
+        if (source.interrupted())
+            return MediaProducer::HasInterruptedAudioCaptureDevice;
+        if (source.isProducingData())
+            return MediaProducer::HasActiveAudioCaptureDevice;
+        break;
+    case CaptureDevice::DeviceType::Camera:
+        if (source.muted())
+            return MediaProducer::HasMutedVideoCaptureDevice;
+        if (source.interrupted())
+            return MediaProducer::HasInterruptedVideoCaptureDevice;
+        if (source.isProducingData())
+            return MediaProducer::HasActiveVideoCaptureDevice;
+        break;
+    case CaptureDevice::DeviceType::Screen:
+    case CaptureDevice::DeviceType::Window:
+        if (source.muted())
+            return MediaProducer::HasMutedDisplayCaptureDevice;
+        if (source.interrupted())
+            return MediaProducer::HasInterruptedDisplayCaptureDevice;
+        if (source.isProducingData())
+            return MediaProducer::HasActiveDisplayCaptureDevice;
+        break;
+    case CaptureDevice::DeviceType::Unknown:
+        ASSERT_NOT_REACHED();
     }
 
-    return IsNotPlaying;
+    return MediaProducer::IsNotPlaying;
 }
 
+#if PLATFORM(IOS_FAMILY)
+MediaProducer::MediaStateFlags MediaStreamTrack::captureState()
+{
+    MediaProducer::MediaStateFlags state = MediaProducer::IsNotPlaying;
+    if (auto* source = RealtimeMediaSourceCenter::singleton().audioCaptureFactory().activeSource())
+        state |= sourceCaptureState(*source);
+    if (auto* source = RealtimeMediaSourceCenter::singleton().videoCaptureFactory().activeSource())
+        state |= sourceCaptureState(*source);
+    return state;
+}
+
+void MediaStreamTrack::muteCapture()
+{
+    if (auto* source = RealtimeMediaSourceCenter::singleton().audioCaptureFactory().activeSource())
+        source->setMuted(true);
+    if (auto* source = RealtimeMediaSourceCenter::singleton().videoCaptureFactory().activeSource())
+        source->setMuted(true);
+}
+#endif
+
 void MediaStreamTrack::trackStarted(MediaStreamTrackPrivate&)
 {
     configureTrackRendering();

Modified: branches/safari-608-branch/Source/WebCore/Modules/mediastream/MediaStreamTrack.h (249687 => 249688)


--- branches/safari-608-branch/Source/WebCore/Modules/mediastream/MediaStreamTrack.h	2019-09-10 02:12:10 UTC (rev 249687)
+++ branches/safari-608-branch/Source/WebCore/Modules/mediastream/MediaStreamTrack.h	2019-09-10 03:19:29 UTC (rev 249688)
@@ -68,6 +68,11 @@
     static Ref<MediaStreamTrack> create(ScriptExecutionContext&, Ref<MediaStreamTrackPrivate>&&);
     virtual ~MediaStreamTrack();
 
+#if PLATFORM(IOS_FAMILY)
+    static MediaProducer::MediaStateFlags captureState();
+    static void muteCapture();
+#endif
+
     virtual bool isCanvas() const { return false; }
 
     const AtomString& kind() const;

Modified: branches/safari-608-branch/Source/WebCore/dom/Document.cpp (249687 => 249688)


--- branches/safari-608-branch/Source/WebCore/dom/Document.cpp	2019-09-10 02:12:10 UTC (rev 249687)
+++ branches/safari-608-branch/Source/WebCore/dom/Document.cpp	2019-09-10 03:19:29 UTC (rev 249688)
@@ -3984,6 +3984,10 @@
     for (auto& audioProducer : m_audioProducers)
         state |= audioProducer.mediaState();
 
+#if PLATFORM(IOS_FAMILY)
+    state |= MediaStreamTrack::captureState();
+#endif
+
 #if ENABLE(MEDIA_SESSION)
     if (HTMLMediaElement* sourceElement = HTMLMediaElement::elementWithID(sourceElementID)) {
         if (sourceElement->isPlaying())
@@ -4025,6 +4029,10 @@
 {
     for (auto& audioProducer : m_audioProducers)
         audioProducer.pageMutedStateDidChange();
+
+#if PLATFORM(IOS_FAMILY)
+    MediaStreamTrack::muteCapture();
+#endif
 }
 
 static bool isNodeInSubtree(Node& node, Node& container, Document::NodeRemoval nodeRemoval)
_______________________________________________
webkit-changes mailing list
webkit-changes@lists.webkit.org
https://lists.webkit.org/mailman/listinfo/webkit-changes

Reply via email to