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