Changeset 248161 in webkit


Ignore:
Timestamp:
Aug 2, 2019 10:34:47 AM (5 years ago)
Author:
youenn@apple.com
Message:

[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):

Location:
trunk/Source/WebCore
Files:
4 edited

Legend:

Unmodified
Added
Removed
  • trunk/Source/WebCore/ChangeLog

    r248155 r248161  
     12019-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
    1282019-08-02  Chris Dumez  <cdumez@apple.com>
    229
  • trunk/Source/WebCore/Modules/mediastream/MediaStreamTrack.cpp

    r247382 r248161  
    4949namespace WebCore {
    5050
     51static MediaProducer::MediaStateFlags sourceCaptureState(RealtimeMediaSource&);
     52
    5153WTF_MAKE_ISO_ALLOCATED_IMPL(MediaStreamTrack);
    5254
     
    7375        if (document->page() && document->page()->mutedState())
    7476            setMuted(true);
     77#if !PLATFORM(IOS_FAMILY)
    7578        document->addAudioProducer(*this);
     79#endif
    7680    }
    7781}
     
    8488        return;
    8589
     90#if !PLATFORM(IOS_FAMILY)
    8691    if (auto document = this->document())
    8792        document->removeAudioProducer(*this);
     93#endif
    8894}
    8995
     
    410416        return IsNotPlaying;
    411417
    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
     421MediaProducer::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)
     457MediaProducer::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
     467void 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
    432475
    433476void MediaStreamTrack::trackStarted(MediaStreamTrackPrivate&)
  • trunk/Source/WebCore/Modules/mediastream/MediaStreamTrack.h

    r247208 r248161  
    6969    virtual ~MediaStreamTrack();
    7070
     71#if PLATFORM(IOS_FAMILY)
     72    static MediaProducer::MediaStateFlags captureState();
     73    static void muteCapture();
     74#endif
     75
    7176    virtual bool isCanvas() const { return false; }
    7277
  • trunk/Source/WebCore/dom/Document.cpp

    r247924 r248161  
    39813981        state |= audioProducer.mediaState();
    39823982
     3983#if PLATFORM(IOS_FAMILY)
     3984    state |= MediaStreamTrack::captureState();
     3985#endif
     3986
    39833987#if ENABLE(MEDIA_SESSION)
    39843988    if (HTMLMediaElement* sourceElement = HTMLMediaElement::elementWithID(sourceElementID)) {
     
    40224026    for (auto& audioProducer : m_audioProducers)
    40234027        audioProducer.pageMutedStateDidChange();
     4028
     4029#if PLATFORM(IOS_FAMILY)
     4030    MediaStreamTrack::muteCapture();
     4031#endif
    40244032}
    40254033
Note: See TracChangeset for help on using the changeset viewer.