Changeset 248161 in webkit
- Timestamp:
- Aug 2, 2019 10:34:47 AM (5 years ago)
- Location:
- trunk/Source/WebCore
- Files:
-
- 4 edited
Legend:
- Unmodified
- Added
- Removed
-
trunk/Source/WebCore/ChangeLog
r248155 r248161 1 2019-08-02 Youenn Fablet <youenn@apple.com> 2 3 [iOS] Directly use RealtimeMediaSourceCenter to compute the media capture state 4 https://bugs.webkit.org/show_bug.cgi?id=200368 5 <rdar://problem/53191450> 6 7 Reviewed by Eric Carlson. 8 9 Instead of registering a MediaStreamTrack as a media producer to compute capture state, 10 go directly to the sources from the RealtimeMediaSourceCenter. 11 Do the same when requested to mute capture tracks. 12 13 No observable change of behavior. 14 Covered by manual test on iOS and existing tests. 15 16 * Modules/mediastream/MediaStreamTrack.cpp: 17 (WebCore::MediaStreamTrack::MediaStreamTrack): 18 (WebCore::MediaStreamTrack::~MediaStreamTrack): 19 (WebCore::MediaStreamTrack::mediaState const): 20 (WebCore::sourceCaptureState): 21 (WebCore::MediaStreamTrack::captureState): 22 (WebCore::MediaStreamTrack::muteCapture): 23 * Modules/mediastream/MediaStreamTrack.h: 24 * dom/Document.cpp: 25 (WebCore::Document::updateIsPlayingMedia): 26 (WebCore::Document::pageMutedStateDidChange): 27 1 28 2019-08-02 Chris Dumez <cdumez@apple.com> 2 29 -
trunk/Source/WebCore/Modules/mediastream/MediaStreamTrack.cpp
r247382 r248161 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&) -
trunk/Source/WebCore/Modules/mediastream/MediaStreamTrack.h
r247208 r248161 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 -
trunk/Source/WebCore/dom/Document.cpp
r247924 r248161 3981 3981 state |= audioProducer.mediaState(); 3982 3982 3983 #if PLATFORM(IOS_FAMILY) 3984 state |= MediaStreamTrack::captureState(); 3985 #endif 3986 3983 3987 #if ENABLE(MEDIA_SESSION) 3984 3988 if (HTMLMediaElement* sourceElement = HTMLMediaElement::elementWithID(sourceElementID)) { … … 4022 4026 for (auto& audioProducer : m_audioProducers) 4023 4027 audioProducer.pageMutedStateDidChange(); 4028 4029 #if PLATFORM(IOS_FAMILY) 4030 MediaStreamTrack::muteCapture(); 4031 #endif 4024 4032 } 4025 4033
Note: See TracChangeset
for help on using the changeset viewer.