Changeset 249688 in webkit
- Timestamp:
- Sep 9, 2019, 8:19:29 PM (7 years ago)
- Location:
- branches/safari-608-branch/Source/WebCore
- Files:
-
- 4 edited
-
ChangeLog (modified) (1 diff)
-
Modules/mediastream/MediaStreamTrack.cpp (modified) (4 diffs)
-
Modules/mediastream/MediaStreamTrack.h (modified) (1 diff)
-
dom/Document.cpp (modified) (2 diffs)
Legend:
- Unmodified
- Added
- Removed
-
branches/safari-608-branch/Source/WebCore/ChangeLog
r249484 r249688 1 2019-09-09 Kocsen Chung <kocsen_chung@apple.com> 2 3 Cherry-pick r248161. rdar://problem/55183128 4 5 [iOS] Directly use RealtimeMediaSourceCenter to compute the media capture state 6 https://bugs.webkit.org/show_bug.cgi?id=200368 7 <rdar://problem/53191450> 8 9 Reviewed by Eric Carlson. 10 11 Instead of registering a MediaStreamTrack as a media producer to compute capture state, 12 go directly to the sources from the RealtimeMediaSourceCenter. 13 Do the same when requested to mute capture tracks. 14 15 No observable change of behavior. 16 Covered by manual test on iOS and existing tests. 17 18 * Modules/mediastream/MediaStreamTrack.cpp: 19 (WebCore::MediaStreamTrack::MediaStreamTrack): 20 (WebCore::MediaStreamTrack::~MediaStreamTrack): 21 (WebCore::MediaStreamTrack::mediaState const): 22 (WebCore::sourceCaptureState): 23 (WebCore::MediaStreamTrack::captureState): 24 (WebCore::MediaStreamTrack::muteCapture): 25 * Modules/mediastream/MediaStreamTrack.h: 26 * dom/Document.cpp: 27 (WebCore::Document::updateIsPlayingMedia): 28 (WebCore::Document::pageMutedStateDidChange): 29 30 31 git-svn-id: https://svn.webkit.org/repository/webkit/trunk@248161 268f45cc-cd09-0410-ab3c-d52691b4dbfc 32 33 2019-08-02 Youenn Fablet <youenn@apple.com> 34 35 [iOS] Directly use RealtimeMediaSourceCenter to compute the media capture state 36 https://bugs.webkit.org/show_bug.cgi?id=200368 37 <rdar://problem/53191450> 38 39 Reviewed by Eric Carlson. 40 41 Instead of registering a MediaStreamTrack as a media producer to compute capture state, 42 go directly to the sources from the RealtimeMediaSourceCenter. 43 Do the same when requested to mute capture tracks. 44 45 No observable change of behavior. 46 Covered by manual test on iOS and existing tests. 47 48 * Modules/mediastream/MediaStreamTrack.cpp: 49 (WebCore::MediaStreamTrack::MediaStreamTrack): 50 (WebCore::MediaStreamTrack::~MediaStreamTrack): 51 (WebCore::MediaStreamTrack::mediaState const): 52 (WebCore::sourceCaptureState): 53 (WebCore::MediaStreamTrack::captureState): 54 (WebCore::MediaStreamTrack::muteCapture): 55 * Modules/mediastream/MediaStreamTrack.h: 56 * dom/Document.cpp: 57 (WebCore::Document::updateIsPlayingMedia): 58 (WebCore::Document::pageMutedStateDidChange): 59 1 60 2019-09-04 Mark Lam <mark.lam@apple.com> 2 61 -
branches/safari-608-branch/Source/WebCore/Modules/mediastream/MediaStreamTrack.cpp
r247382 r249688 49 49 namespace WebCore { 50 50 51 static MediaProducer::MediaStateFlags sourceCaptureState(RealtimeMediaSource&); 52 51 53 WTF_MAKE_ISO_ALLOCATED_IMPL(MediaStreamTrack); 52 54 … … 73 75 if (document->page() && document->page()->mutedState()) 74 76 setMuted(true); 77 #if !PLATFORM(IOS_FAMILY) 75 78 document->addAudioProducer(*this); 79 #endif 76 80 } 77 81 } … … 84 88 return; 85 89 90 #if !PLATFORM(IOS_FAMILY) 86 91 if (auto document = this->document()) 87 92 document->removeAudioProducer(*this); 93 #endif 88 94 } 89 95 … … 410 416 return IsNotPlaying; 411 417 412 if (source().type() == RealtimeMediaSource::Type::Audio) { 413 if (source().interrupted() && !source().muted()) 414 return HasInterruptedAudioCaptureDevice; 415 if (muted()) 416 return HasMutedAudioCaptureDevice; 417 if (m_private->isProducingData()) 418 return HasActiveAudioCaptureDevice; 419 } else { 420 auto deviceType = source().deviceType(); 421 ASSERT(deviceType == CaptureDevice::DeviceType::Camera || deviceType == CaptureDevice::DeviceType::Screen || deviceType == CaptureDevice::DeviceType::Window); 422 if (source().interrupted() && !source().muted()) 423 return deviceType == CaptureDevice::DeviceType::Camera ? HasInterruptedVideoCaptureDevice : HasInterruptedDisplayCaptureDevice; 424 if (muted()) 425 return deviceType == CaptureDevice::DeviceType::Camera ? HasMutedVideoCaptureDevice : HasMutedDisplayCaptureDevice; 426 if (m_private->isProducingData()) 427 return deviceType == CaptureDevice::DeviceType::Camera ? HasActiveVideoCaptureDevice : HasActiveDisplayCaptureDevice; 428 } 429 430 return IsNotPlaying; 431 } 418 return sourceCaptureState(source()); 419 } 420 421 MediaProducer::MediaStateFlags sourceCaptureState(RealtimeMediaSource& source) 422 { 423 switch (source.deviceType()) { 424 case CaptureDevice::DeviceType::Microphone: 425 if (source.muted()) 426 return MediaProducer::HasMutedAudioCaptureDevice; 427 if (source.interrupted()) 428 return MediaProducer::HasInterruptedAudioCaptureDevice; 429 if (source.isProducingData()) 430 return MediaProducer::HasActiveAudioCaptureDevice; 431 break; 432 case CaptureDevice::DeviceType::Camera: 433 if (source.muted()) 434 return MediaProducer::HasMutedVideoCaptureDevice; 435 if (source.interrupted()) 436 return MediaProducer::HasInterruptedVideoCaptureDevice; 437 if (source.isProducingData()) 438 return MediaProducer::HasActiveVideoCaptureDevice; 439 break; 440 case CaptureDevice::DeviceType::Screen: 441 case CaptureDevice::DeviceType::Window: 442 if (source.muted()) 443 return MediaProducer::HasMutedDisplayCaptureDevice; 444 if (source.interrupted()) 445 return MediaProducer::HasInterruptedDisplayCaptureDevice; 446 if (source.isProducingData()) 447 return MediaProducer::HasActiveDisplayCaptureDevice; 448 break; 449 case CaptureDevice::DeviceType::Unknown: 450 ASSERT_NOT_REACHED(); 451 } 452 453 return MediaProducer::IsNotPlaying; 454 } 455 456 #if PLATFORM(IOS_FAMILY) 457 MediaProducer::MediaStateFlags MediaStreamTrack::captureState() 458 { 459 MediaProducer::MediaStateFlags state = MediaProducer::IsNotPlaying; 460 if (auto* source = RealtimeMediaSourceCenter::singleton().audioCaptureFactory().activeSource()) 461 state |= sourceCaptureState(*source); 462 if (auto* source = RealtimeMediaSourceCenter::singleton().videoCaptureFactory().activeSource()) 463 state |= sourceCaptureState(*source); 464 return state; 465 } 466 467 void MediaStreamTrack::muteCapture() 468 { 469 if (auto* source = RealtimeMediaSourceCenter::singleton().audioCaptureFactory().activeSource()) 470 source->setMuted(true); 471 if (auto* source = RealtimeMediaSourceCenter::singleton().videoCaptureFactory().activeSource()) 472 source->setMuted(true); 473 } 474 #endif 432 475 433 476 void MediaStreamTrack::trackStarted(MediaStreamTrackPrivate&) -
branches/safari-608-branch/Source/WebCore/Modules/mediastream/MediaStreamTrack.h
r247208 r249688 69 69 virtual ~MediaStreamTrack(); 70 70 71 #if PLATFORM(IOS_FAMILY) 72 static MediaProducer::MediaStateFlags captureState(); 73 static void muteCapture(); 74 #endif 75 71 76 virtual bool isCanvas() const { return false; } 72 77 -
branches/safari-608-branch/Source/WebCore/dom/Document.cpp
r248136 r249688 3985 3985 state |= audioProducer.mediaState(); 3986 3986 3987 #if PLATFORM(IOS_FAMILY) 3988 state |= MediaStreamTrack::captureState(); 3989 #endif 3990 3987 3991 #if ENABLE(MEDIA_SESSION) 3988 3992 if (HTMLMediaElement* sourceElement = HTMLMediaElement::elementWithID(sourceElementID)) { … … 4026 4030 for (auto& audioProducer : m_audioProducers) 4027 4031 audioProducer.pageMutedStateDidChange(); 4032 4033 #if PLATFORM(IOS_FAMILY) 4034 MediaStreamTrack::muteCapture(); 4035 #endif 4028 4036 } 4029 4037
Note:
See TracChangeset
for help on using the changeset viewer.