Title: [217033] branches/safari-604.1.21-branch/Source
Revision
217033
Author
[email protected]
Date
2017-05-17 22:35:56 -0700 (Wed, 17 May 2017)

Log Message

Cherry-pick r216898. rdar://problem/32231650

Modified Paths

Diff

Modified: branches/safari-604.1.21-branch/Source/WebCore/ChangeLog (217032 => 217033)


--- branches/safari-604.1.21-branch/Source/WebCore/ChangeLog	2017-05-18 05:08:02 UTC (rev 217032)
+++ branches/safari-604.1.21-branch/Source/WebCore/ChangeLog	2017-05-18 05:35:56 UTC (rev 217033)
@@ -1,5 +1,110 @@
 2017-05-17  Jason Marcell  <[email protected]>
 
+        Cherry-pick r216898. rdar://problem/32231650
+
+    2017-05-15  Youenn Fablet  <[email protected]>
+
+            Simplify RealtimeMediaSource data production and state
+            https://bugs.webkit.org/show_bug.cgi?id=171999
+
+            Reviewed by Eric Carlson.
+
+            RealtimeMediaSource takes 3 booleans:
+            - m_isProducingData tells whether data is produced or not. In the case of capturing, it tells whether capture
+              happens.
+            - m_muted/m_enabled allows JS or WebKit level to start/stop the source.
+
+            Changed MediaStream capture state computation so that capture is reported as follows:
+            - m_isProducing is true, capture is happenning and is active
+            - m_muted is true, capture is happening but is inactive.
+
+            Except in the case of WebRTC incoming sources, for which sources may be created as muted as per the spec,
+            all sources are unmuted, enabled and not producing data when created.
+
+            RealtimeMediaSource is now activable either by calling start/stop or by calling setMuted/setEnabled.
+            This in turns will set the boolean values accordingly and will call the underlying
+            startProducingData/stopProducingData methods doing the actual stuff.
+
+            Removing from all RealtimeMediaSource subclasses the handling of producing data.
+            Making more methods non-virtual/member fields private to simplify the model.
+
+            * Modules/mediastream/CanvasCaptureMediaStreamTrack.cpp:
+            (WebCore::CanvasCaptureMediaStreamTrack::Source::create):
+            (WebCore::CanvasCaptureMediaStreamTrack::Source::startProducingData):
+            (WebCore::CanvasCaptureMediaStreamTrack::Source::stopProducingData):
+            (WebCore::CanvasCaptureMediaStreamTrack::Source::canvasDestroyed):
+            (WebCore::CanvasCaptureMediaStreamTrack::Source::captureCanvas):
+            * Modules/mediastream/CanvasCaptureMediaStreamTrack.h:
+            * Modules/mediastream/MediaStream.cpp:
+            (WebCore::MediaStream::mediaState):
+            * platform/mediastream/MediaStreamTrackPrivate.h:
+            (WebCore::MediaStreamTrackPrivate::startProducingData):
+            (WebCore::MediaStreamTrackPrivate::stopProducingData):
+            * platform/mediastream/RealtimeMediaSource.cpp:
+            (WebCore::RealtimeMediaSource::setMuted):
+            (WebCore::RealtimeMediaSource::notifyMutedChange):
+            (WebCore::RealtimeMediaSource::setEnabled):
+            (WebCore::RealtimeMediaSource::start):
+            (WebCore::RealtimeMediaSource::stop):
+            (WebCore::RealtimeMediaSource::requestStop):
+            (WebCore::RealtimeMediaSource::reset): Deleted.
+            * platform/mediastream/RealtimeMediaSource.h:
+            * platform/mediastream/mac/AVMediaCaptureSource.h:
+            * platform/mediastream/mac/AVMediaCaptureSource.mm:
+            (WebCore::AVMediaCaptureSource::AVMediaCaptureSource):
+            (WebCore::AVMediaCaptureSource::captureSessionIsRunningDidChange):
+            (WebCore::AVMediaCaptureSource::reset): Deleted.
+            (WebCore::AVMediaCaptureSource::isProducingData): Deleted.
+            * platform/mediastream/mac/CoreAudioCaptureSource.cpp:
+            (WebCore::CoreAudioCaptureSource::CoreAudioCaptureSource):
+            (WebCore::CoreAudioCaptureSource::startProducingData):
+            (WebCore::CoreAudioCaptureSource::stopProducingData):
+            (WebCore::CoreAudioCaptureSource::audioSourceProvider):
+            * platform/mediastream/mac/CoreAudioCaptureSource.h:
+            * platform/mediastream/mac/MockRealtimeAudioSourceMac.mm:
+            (WebCore::MockRealtimeAudioSourceMac::render):
+            (WebCore::MockRealtimeAudioSource::createMuted): Deleted.
+            * platform/mediastream/mac/MockRealtimeVideoSourceMac.mm:
+            (WebCore::MockRealtimeVideoSource::createMuted): Deleted.
+            * platform/mediastream/mac/RealtimeIncomingAudioSource.cpp:
+            (WebCore::RealtimeIncomingAudioSource::create):
+            (WebCore::RealtimeIncomingAudioSource::RealtimeIncomingAudioSource):
+            (WebCore::RealtimeIncomingAudioSource::~RealtimeIncomingAudioSource):
+            (WebCore::RealtimeIncomingAudioSource::startProducingData):
+            (WebCore::RealtimeIncomingAudioSource::stopProducingData):
+            (WebCore::RealtimeIncomingAudioSource::setSourceTrack):
+            * platform/mediastream/mac/RealtimeIncomingAudioSource.h:
+            * platform/mediastream/mac/RealtimeIncomingVideoSource.cpp:
+            (WebCore::RealtimeIncomingVideoSource::create):
+            (WebCore::RealtimeIncomingVideoSource::RealtimeIncomingVideoSource):
+            (WebCore::RealtimeIncomingVideoSource::startProducingData):
+            (WebCore::RealtimeIncomingVideoSource::setSourceTrack):
+            (WebCore::RealtimeIncomingVideoSource::stopProducingData):
+            (WebCore::RealtimeIncomingVideoSource::OnFrame):
+            * platform/mediastream/mac/RealtimeIncomingVideoSource.h:
+            * platform/mediastream/mac/WebAudioSourceProviderAVFObjC.mm:
+            (WebCore::WebAudioSourceProviderAVFObjC::setClient):
+            * platform/mock/MockMediaEndpoint.cpp:
+            (WebCore::MockMediaEndpoint::createMutedRemoteSource):
+            (WebCore::MockMediaEndpoint::unmuteTimerFired):
+            * platform/mock/MockRealtimeAudioSource.cpp:
+            (WebCore::MockRealtimeAudioSource::createMuted):
+            (WebCore::MockRealtimeAudioSource::startProducingData):
+            (WebCore::MockRealtimeAudioSource::stopProducingData):
+            * platform/mock/MockRealtimeAudioSource.h:
+            * platform/mock/MockRealtimeMediaSource.cpp:
+            (WebCore::MockRealtimeMediaSource::startProducingData): Deleted.
+            (WebCore::MockRealtimeMediaSource::stopProducingData): Deleted.
+            * platform/mock/MockRealtimeMediaSource.h:
+            * platform/mock/MockRealtimeVideoSource.cpp:
+            (WebCore::MockRealtimeVideoSource::createMuted):
+            (WebCore::MockRealtimeVideoSource::startProducingData):
+            (WebCore::MockRealtimeVideoSource::stopProducingData):
+            (WebCore::MockRealtimeVideoSource::generateFrame):
+            * platform/mock/MockRealtimeVideoSource.h:
+
+2017-05-17  Jason Marcell  <[email protected]>
+
         Cherry-pick r216998. rdar://problem/31538943
 
     2017-05-17  Said Abou-Hallawa  <[email protected]>

Modified: branches/safari-604.1.21-branch/Source/WebCore/Modules/mediastream/CanvasCaptureMediaStreamTrack.cpp (217032 => 217033)


--- branches/safari-604.1.21-branch/Source/WebCore/Modules/mediastream/CanvasCaptureMediaStreamTrack.cpp	2017-05-18 05:08:02 UTC (rev 217032)
+++ branches/safari-604.1.21-branch/Source/WebCore/Modules/mediastream/CanvasCaptureMediaStreamTrack.cpp	2017-05-18 05:35:56 UTC (rev 217033)
@@ -48,7 +48,7 @@
 Ref<CanvasCaptureMediaStreamTrack::Source> CanvasCaptureMediaStreamTrack::Source::create(HTMLCanvasElement& canvas, std::optional<double>&& frameRequestRate)
 {
     auto source = adoptRef(*new Source(canvas, WTFMove(frameRequestRate)));
-    source->startProducingData();
+    source->start();
 
     callOnMainThread([source = source.copyRef()] {
         if (!source->m_canvas)
@@ -76,10 +76,6 @@
 
 void CanvasCaptureMediaStreamTrack::Source::startProducingData()
 {
-    if (m_isProducingData)
-        return;
-    m_isProducingData = true;
-
     if (!m_canvas)
         return;
     m_canvas->addObserver(*this);
@@ -93,10 +89,6 @@
 
 void CanvasCaptureMediaStreamTrack::Source::stopProducingData()
 {
-    if (!m_isProducingData)
-        return;
-    m_isProducingData = false;
-
     m_requestFrameTimer.stop();
 
     if (!m_canvas)
@@ -113,7 +105,7 @@
 {
     ASSERT_UNUSED(canvas, m_canvas == &canvas);
 
-    stopProducingData();
+    stop();
     m_canvas = nullptr;
 }
 
@@ -150,7 +142,7 @@
 {
     ASSERT(m_canvas);
 
-    if (!m_isProducingData)
+    if (!isProducingData())
         return;
 
     if (m_frameRequestRate) {

Modified: branches/safari-604.1.21-branch/Source/WebCore/Modules/mediastream/CanvasCaptureMediaStreamTrack.h (217032 => 217033)


--- branches/safari-604.1.21-branch/Source/WebCore/Modules/mediastream/CanvasCaptureMediaStreamTrack.h	2017-05-18 05:08:02 UTC (rev 217032)
+++ branches/safari-604.1.21-branch/Source/WebCore/Modules/mediastream/CanvasCaptureMediaStreamTrack.h	2017-05-18 05:35:56 UTC (rev 217033)
@@ -62,7 +62,6 @@
         // RealtimeMediaSource API
         void startProducingData() final;
         void stopProducingData()  final;
-        bool isProducingData() const { return m_isProducingData; }
         const RealtimeMediaSourceCapabilities& capabilities() const final { return RealtimeMediaSourceCapabilities::emptyCapabilities(); }
         const RealtimeMediaSourceSettings& settings() const final { return m_settings; }
         bool applySize(const IntSize&) final { return true; }
@@ -70,7 +69,6 @@
         void captureCanvas();
         void requestFrameTimerFired();
 
-        bool m_isProducingData { false };
         bool m_shouldEmitFrame { true };
         std::optional<double> m_frameRequestRate;
         Timer m_requestFrameTimer;

Modified: branches/safari-604.1.21-branch/Source/WebCore/Modules/mediastream/MediaStream.cpp (217032 => 217033)


--- branches/safari-604.1.21-branch/Source/WebCore/Modules/mediastream/MediaStream.cpp	2017-05-18 05:08:02 UTC (rev 217032)
+++ branches/safari-604.1.21-branch/Source/WebCore/Modules/mediastream/MediaStream.cpp	2017-05-18 05:35:56 UTC (rev 217033)
@@ -346,7 +346,7 @@
         if (m_private->hasCaptureAudioSource()) {
             if (m_private->muted())
                 state |= HasMutedAudioCaptureDevice;
-            else if (m_isProducingData)
+            else if (m_isProducingData && m_private->isProducingData())
                 state |= HasActiveAudioCaptureDevice;
         }
     }
@@ -356,7 +356,7 @@
         if (m_private->hasCaptureVideoSource()) {
             if (m_private->muted())
                 state |= HasMutedVideoCaptureDevice;
-            else if (m_isProducingData)
+            else if (m_isProducingData && m_private->isProducingData())
                 state |= HasActiveVideoCaptureDevice;
         }
     }

Modified: branches/safari-604.1.21-branch/Source/WebCore/platform/mediastream/MediaStreamTrackPrivate.h (217032 => 217033)


--- branches/safari-604.1.21-branch/Source/WebCore/platform/mediastream/MediaStreamTrackPrivate.h	2017-05-18 05:08:02 UTC (rev 217032)
+++ branches/safari-604.1.21-branch/Source/WebCore/platform/mediastream/MediaStreamTrackPrivate.h	2017-05-18 05:35:56 UTC (rev 217033)
@@ -62,8 +62,8 @@
 
     bool ended() const { return m_isEnded; }
 
-    void startProducingData() { m_source->startProducingData(); }
-    void stopProducingData() { m_source->stopProducingData(); }
+    void startProducingData() { m_source->start(); }
+    void stopProducingData() { m_source->stop(); }
     bool isProducingData() { return m_source->isProducingData(); }
 
     bool isIsolated() const { return m_source->isIsolated(); }

Modified: branches/safari-604.1.21-branch/Source/WebCore/platform/mediastream/RealtimeMediaSource.cpp (217032 => 217033)


--- branches/safari-604.1.21-branch/Source/WebCore/platform/mediastream/RealtimeMediaSource.cpp	2017-05-18 05:08:02 UTC (rev 217032)
+++ branches/safari-604.1.21-branch/Source/WebCore/platform/mediastream/RealtimeMediaSource.cpp	2017-05-18 05:35:56 UTC (rev 217033)
@@ -60,21 +60,15 @@
     m_suppressNotifications = false;
 }
 
-void RealtimeMediaSource::reset()
-{
-    m_stopped = false;
-    m_muted = false;
-}
-
 void RealtimeMediaSource::addObserver(RealtimeMediaSource::Observer& observer)
 {
-    m_observers.append(&observer);
+    m_observers.append(observer);
 }
 
 void RealtimeMediaSource::removeObserver(RealtimeMediaSource::Observer& observer)
 {
-    m_observers.removeFirstMatching([&observer](auto* anObserver) {
-        return anObserver == &observer;
+    m_observers.removeFirstMatching([&observer](auto anObserver) {
+        return &anObserver.get() == &observer;
     });
 
     if (!m_observers.size())
@@ -83,39 +77,39 @@
 
 void RealtimeMediaSource::setMuted(bool muted)
 {
-    if (m_stopped || m_muted == muted)
+    if (muted)
+        stop();
+    else
+        start();
+
+    notifyMutedChange(muted);
+}
+
+void RealtimeMediaSource::notifyMutedChange(bool muted)
+{
+    if (m_muted == muted)
         return;
 
     m_muted = muted;
 
-    if (muted) {
-        // FIXME: We need to figure out how to guarantee that at least one black video frame is
-        // emitted after being muted.
-        stopProducingData();
-    } else
-        startProducingData();
-
     notifyMutedObservers();
 }
 
 void RealtimeMediaSource::notifyMutedObservers() const
 {
-    for (auto& observer : m_observers)
-        observer->sourceMutedChanged();
+    for (Observer& observer : m_observers)
+        observer.sourceMutedChanged();
 }
 
 void RealtimeMediaSource::setEnabled(bool enabled)
 {
-    if (m_stopped || m_enabled == enabled)
+    if (m_enabled == enabled)
         return;
 
     m_enabled = enabled;
 
-    if (m_stopped)
-        return;
-
-    for (auto& observer : m_observers)
-        observer->sourceEnabledChanged();
+    for (Observer& observer : m_observers)
+        observer.sourceEnabledChanged();
 }
 
 void RealtimeMediaSource::settingsDidChange()
@@ -129,49 +123,57 @@
 
     scheduleDeferredTask([this] {
         m_pendingSettingsDidChangeNotification = false;
-        for (auto& observer : m_observers)
-            observer->sourceSettingsChanged();
+        for (Observer& observer : m_observers)
+            observer.sourceSettingsChanged();
     });
 }
 
 void RealtimeMediaSource::videoSampleAvailable(MediaSample& mediaSample)
 {
-    ASSERT(isMainThread());
-    for (const auto& observer : m_observers)
-        observer->videoSampleAvailable(mediaSample);
+    for (Observer& observer : m_observers)
+        observer.videoSampleAvailable(mediaSample);
 }
 
 void RealtimeMediaSource::audioSamplesAvailable(const MediaTime& time, const PlatformAudioData& audioData, const AudioStreamDescription& description, size_t numberOfFrames)
 {
-    for (const auto& observer : m_observers)
-        observer->audioSamplesAvailable(time, audioData, description, numberOfFrames);
+    for (Observer& observer : m_observers)
+        observer.audioSamplesAvailable(time, audioData, description, numberOfFrames);
 }
 
-void RealtimeMediaSource::stop(Observer* callingObserver)
+void RealtimeMediaSource::start()
 {
-    if (stopped())
+    if (m_isProducingData)
         return;
 
-    m_stopped = true;
+    m_isProducingData = true;
+    startProducingData();
+}
 
-    for (const auto& observer : m_observers) {
-        if (observer != callingObserver)
-            observer->sourceStopped();
-    }
+void RealtimeMediaSource::stop()
+{
+    if (!m_isProducingData)
+        return;
 
+    m_isProducingData = false;
     stopProducingData();
 }
 
 void RealtimeMediaSource::requestStop(Observer* callingObserver)
 {
-    if (stopped())
+    if (!m_isProducingData)
         return;
 
-    for (const auto& observer : m_observers) {
-        if (observer->preventSourceFromStopping())
+    for (Observer& observer : m_observers) {
+        if (observer.preventSourceFromStopping())
             return;
     }
-    stop(callingObserver);
+
+    stop();
+
+    for (Observer& observer : m_observers) {
+        if (&observer != callingObserver)
+            observer.sourceStopped();
+    }
 }
 
 bool RealtimeMediaSource::supportsSizeAndFrameRate(std::optional<int>, std::optional<int>, std::optional<double>)

Modified: branches/safari-604.1.21-branch/Source/WebCore/platform/mediastream/RealtimeMediaSource.h (217032 => 217033)


--- branches/safari-604.1.21-branch/Source/WebCore/platform/mediastream/RealtimeMediaSource.h	2017-05-18 05:08:02 UTC (rev 217032)
+++ branches/safari-604.1.21-branch/Source/WebCore/platform/mediastream/RealtimeMediaSource.h	2017-05-18 05:35:56 UTC (rev 217033)
@@ -127,60 +127,30 @@
     const String& id() const { return m_id; }
 
     const String& persistentID() const { return m_persistentID; }
-    virtual void setPersistentID(const String& persistentID) { m_persistentID = persistentID; }
+    virtual void setPersistentID(String&& persistentID) { m_persistentID = WTFMove(persistentID); }
 
     enum class Type { None, Audio, Video };
     Type type() const { return m_type; }
 
-    virtual const String& name() const { return m_name; }
-    virtual void setName(const String& name) { m_name = name; }
+    bool isProducingData() const { return m_isProducingData; }
+    void start();
+    void stop();
+    void requestStop(Observer* callingObserver = nullptr);
+
+    bool muted() const { return m_muted; }
+    void setMuted(bool);
     
-    virtual unsigned fitnessScore() const { return m_fitnessScore; }
+    bool enabled() const { return m_enabled; }
+    void setEnabled(bool);
 
-    virtual const RealtimeMediaSourceCapabilities& capabilities() const = 0;
-    virtual const RealtimeMediaSourceSettings& settings() const = 0;
-
-    using SuccessHandler = std::function<void()>;
-    using FailureHandler = std::function<void(const String& badConstraint, const String& errorString)>;
-    virtual void applyConstraints(const MediaConstraints&, SuccessHandler&&, FailureHandler&&);
-    std::optional<std::pair<String, String>> applyConstraints(const MediaConstraints&);
-
-    virtual bool supportsConstraints(const MediaConstraints&, String&);
-    virtual bool supportsConstraint(const MediaConstraint&) const;
-
-    virtual void settingsDidChange();
-
-    virtual bool isIsolated() const { return false; }
+    const String& name() const { return m_name; }
+    void setName(const String& name) { m_name = name; }
     
-    void videoSampleAvailable(MediaSample&);
-    void audioSamplesAvailable(const MediaTime&, const PlatformAudioData&, const AudioStreamDescription&, size_t);
-    
-    bool stopped() const { return m_stopped; }
+    unsigned fitnessScore() const { return m_fitnessScore; }
 
-    virtual bool muted() const { return m_muted; }
-    virtual void setMuted(bool);
-
-    virtual bool enabled() const { return m_enabled; }
-    virtual void setEnabled(bool);
-
-    virtual bool isCaptureSource() const { return false; }
-
-    virtual void monitorOrientation(OrientationNotifier&) { }
-    
     WEBCORE_EXPORT void addObserver(Observer&);
     WEBCORE_EXPORT void removeObserver(Observer&);
 
-    virtual void startProducingData() { }
-    virtual void stopProducingData() { }
-    virtual bool isProducingData() const { return false; }
-
-    void stop(Observer* callingObserver = nullptr);
-    void requestStop(Observer* callingObserver = nullptr);
-
-    virtual void reset();
-
-    virtual AudioSourceProvider* audioSourceProvider() { return nullptr; }
-
     void setWidth(int);
     void setHeight(int);
     const IntSize& size() const { return m_size; }
@@ -214,6 +184,27 @@
     void setEchoCancellation(bool);
     virtual bool applyEchoCancellation(bool) { return false; }
 
+    virtual const RealtimeMediaSourceCapabilities& capabilities() const = 0;
+    virtual const RealtimeMediaSourceSettings& settings() const = 0;
+
+    using SuccessHandler = std::function<void()>;
+    using FailureHandler = std::function<void(const String& badConstraint, const String& errorString)>;
+    virtual void applyConstraints(const MediaConstraints&, SuccessHandler&&, FailureHandler&&);
+    std::optional<std::pair<String, String>> applyConstraints(const MediaConstraints&);
+
+    virtual bool supportsConstraints(const MediaConstraints&, String&);
+    virtual bool supportsConstraint(const MediaConstraint&) const;
+
+    virtual void settingsDidChange();
+
+    virtual bool isIsolated() const { return false; }
+
+    virtual bool isCaptureSource() const { return false; }
+
+    virtual void monitorOrientation(OrientationNotifier&) { }
+
+    virtual AudioSourceProvider* audioSourceProvider() { return nullptr; }
+
 protected:
     RealtimeMediaSource(const String& id, Type, const String& name);
 
@@ -231,26 +222,31 @@
     virtual void applyConstraints(const FlattenedConstraint&);
     virtual void applySizeAndFrameRate(std::optional<int> width, std::optional<int> height, std::optional<double>);
 
-    const Vector<Observer*> observers() const { return m_observers; }
-
     void notifyMutedObservers() const;
+    void notifyMutedChange(bool muted);
 
     void initializeVolume(double volume) { m_volume = volume; }
     void initializeSampleRate(int sampleRate) { m_sampleRate = sampleRate; }
     void initializeEchoCancellation(bool echoCancellation) { m_echoCancellation = echoCancellation; }
 
+    void videoSampleAvailable(MediaSample&);
+    void audioSamplesAvailable(const MediaTime&, const PlatformAudioData&, const AudioStreamDescription&, size_t);
+    
+private:
+    WeakPtr<RealtimeMediaSource> createWeakPtr() { return m_weakPtrFactory.createWeakPtr(); }
+
+    virtual void startProducingData() { }
+    virtual void stopProducingData() { }
+
     bool m_muted { false };
     bool m_enabled { true };
 
-private:
-    WeakPtr<RealtimeMediaSource> createWeakPtr() { return m_weakPtrFactory.createWeakPtr(); }
-
     WeakPtrFactory<RealtimeMediaSource> m_weakPtrFactory;
     String m_id;
     String m_persistentID;
     Type m_type;
     String m_name;
-    Vector<Observer*> m_observers;
+    Vector<std::reference_wrapper<Observer>> m_observers;
     IntSize m_size;
     double m_frameRate { 30 };
     double m_aspectRatio { 0 };
@@ -261,9 +257,9 @@
     RealtimeMediaSourceSettings::VideoFacingMode m_facingMode { RealtimeMediaSourceSettings::User};
 
     bool m_echoCancellation { false };
-    bool m_stopped { false };
     bool m_pendingSettingsDidChangeNotification { false };
     bool m_suppressNotifications { true };
+    bool m_isProducingData { false };
 };
 
 struct CaptureSourceOrError {

Modified: branches/safari-604.1.21-branch/Source/WebCore/platform/mediastream/mac/AVMediaCaptureSource.h (217032 => 217033)


--- branches/safari-604.1.21-branch/Source/WebCore/platform/mediastream/mac/AVMediaCaptureSource.h	2017-05-18 05:08:02 UTC (rev 217032)
+++ branches/safari-604.1.21-branch/Source/WebCore/platform/mediastream/mac/AVMediaCaptureSource.h	2017-05-18 05:35:56 UTC (rev 217033)
@@ -68,7 +68,6 @@
 
     void startProducingData() final;
     void stopProducingData() final;
-    bool isProducingData() const final;
 
 protected:
     AVMediaCaptureSource(AVCaptureDevice*, const AtomicString&, RealtimeMediaSource::Type);
@@ -91,7 +90,6 @@
 
 private:
     void setupSession();
-    void reset() final;
 
     void beginConfiguration() final;
     void commitConfiguration() final;

Modified: branches/safari-604.1.21-branch/Source/WebCore/platform/mediastream/mac/AVMediaCaptureSource.mm (217032 => 217033)


--- branches/safari-604.1.21-branch/Source/WebCore/platform/mediastream/mac/AVMediaCaptureSource.mm	2017-05-18 05:08:02 UTC (rev 217032)
+++ branches/safari-604.1.21-branch/Source/WebCore/platform/mediastream/mac/AVMediaCaptureSource.mm	2017-05-18 05:35:56 UTC (rev 217033)
@@ -148,8 +148,7 @@
     static_assert(static_cast<int>(InterruptionReason::AudioInUse) == AVCaptureSessionInterruptionReasonAudioDeviceInUseByAnotherClient, "InterruptionReason::AudioInUse is not AVCaptureSessionInterruptionReasonAudioDeviceInUseByAnotherClient as expected");
 #endif
     
-    setPersistentID(device.uniqueID);
-    setMuted(true);
+    setPersistentID(String(device.uniqueID));
 }
 
 AVMediaCaptureSource::~AVMediaCaptureSource()
@@ -262,17 +261,6 @@
     [m_session commitConfiguration];
 }
 
-void AVMediaCaptureSource::reset()
-{
-    RealtimeMediaSource::reset();
-    m_isRunning = false;
-    for (NSString *keyName in sessionKVOProperties())
-        [m_session removeObserver:m_objcObserver.get() forKeyPath:keyName];
-
-    shutdownCaptureSession();
-    m_session = nullptr;
-}
-
 void AVMediaCaptureSource::captureSessionIsRunningDidChange(bool state)
 {
     scheduleDeferredTask([this, state] {
@@ -280,19 +268,10 @@
             return;
 
         m_isRunning = state;
-        if (m_muted == !m_isRunning)
-            return;
-
-        m_muted = !m_isRunning;
-        notifyMutedObservers();
+        notifyMutedChange(!m_isRunning);
     });
 }
 
-bool AVMediaCaptureSource::isProducingData() const
-{
-    return m_isRunning;
-}
-
 #if PLATFORM(IOS)
 void AVMediaCaptureSource::captureSessionRuntimeError(RetainPtr<NSError> error)
 {

Modified: branches/safari-604.1.21-branch/Source/WebCore/platform/mediastream/mac/CoreAudioCaptureSource.cpp (217032 => 217033)


--- branches/safari-604.1.21-branch/Source/WebCore/platform/mediastream/mac/CoreAudioCaptureSource.cpp	2017-05-18 05:08:02 UTC (rev 217032)
+++ branches/safari-604.1.21-branch/Source/WebCore/platform/mediastream/mac/CoreAudioCaptureSource.cpp	2017-05-18 05:35:56 UTC (rev 217033)
@@ -660,8 +660,6 @@
     : RealtimeMediaSource(deviceID, RealtimeMediaSource::Type::Audio, label)
     , m_captureDeviceID(persistentID)
 {
-    m_muted = true;
-
     auto& unit = CoreAudioSharedUnit::singleton();
 
     initializeEchoCancellation(unit.enableEchoCancellation());
@@ -692,21 +690,12 @@
 
 void CoreAudioCaptureSource::startProducingData()
 {
-    if (m_isProducingData)
-        return;
-
 #if PLATFORM(IOS)
     coreAudioCaptureSourceFactory().setActiveSource(*this);
 #endif
 
     CoreAudioSharedUnit::singleton().startProducingData();
-    m_isProducingData = CoreAudioSharedUnit::singleton().isProducingData();
 
-    if (!m_isProducingData)
-        return;
-
-    m_muted = false;
-
     if (m_audioSourceProvider)
         m_audioSourceProvider->prepare(&CoreAudioSharedUnit::singleton().microphoneFormat().streamDescription());
 }
@@ -713,12 +702,7 @@
 
 void CoreAudioCaptureSource::stopProducingData()
 {
-    if (!m_isProducingData)
-        return;
-
     CoreAudioSharedUnit::singleton().stopProducingData();
-    m_isProducingData = false;
-    m_muted = true;
 
     if (m_audioSourceProvider)
         m_audioSourceProvider->unprepare();
@@ -768,7 +752,7 @@
 {
     if (!m_audioSourceProvider) {
         m_audioSourceProvider = WebAudioSourceProviderAVFObjC::create(*this);
-        if (m_isProducingData)
+        if (isProducingData())
             m_audioSourceProvider->prepare(&CoreAudioSharedUnit::singleton().microphoneFormat().streamDescription());
     }
 

Modified: branches/safari-604.1.21-branch/Source/WebCore/platform/mediastream/mac/CoreAudioCaptureSource.h (217032 => 217033)


--- branches/safari-604.1.21-branch/Source/WebCore/platform/mediastream/mac/CoreAudioCaptureSource.h	2017-05-18 05:08:02 UTC (rev 217032)
+++ branches/safari-604.1.21-branch/Source/WebCore/platform/mediastream/mac/CoreAudioCaptureSource.h	2017-05-18 05:35:56 UTC (rev 217033)
@@ -80,7 +80,6 @@
     bool isCaptureSource() const final { return true; }
     void startProducingData() final;
     void stopProducingData() final;
-    bool isProducingData() const final { return m_isProducingData; }
 
     bool applyVolume(double) final { return true; }
     bool applySampleRate(int) final;
@@ -93,7 +92,6 @@
 
     uint32_t m_captureDeviceID { 0 };
 
-    bool m_isProducingData { false };
     bool m_isSuspended { false };
 
     mutable std::optional<RealtimeMediaSourceCapabilities> m_capabilities;

Modified: branches/safari-604.1.21-branch/Source/WebCore/platform/mediastream/mac/MockRealtimeAudioSourceMac.mm (217032 => 217033)


--- branches/safari-604.1.21-branch/Source/WebCore/platform/mediastream/mac/MockRealtimeAudioSourceMac.mm	2017-05-18 05:08:02 UTC (rev 217032)
+++ branches/safari-604.1.21-branch/Source/WebCore/platform/mediastream/mac/MockRealtimeAudioSourceMac.mm	2017-05-18 05:35:56 UTC (rev 217033)
@@ -107,13 +107,6 @@
     }
 }
 
-RefPtr<MockRealtimeAudioSource> MockRealtimeAudioSource::createMuted(const String& name)
-{
-    auto source = adoptRef(new MockRealtimeAudioSource(name));
-    source->m_muted = true;
-    return source;
-}
-
 void MockRealtimeAudioSourceMac::emitSampleBuffers(uint32_t frameCount)
 {
     ASSERT(m_formatDescription);
@@ -158,7 +151,7 @@
         uint32_t bipBopCount = std::min(frameCount, bipBopRemain);
         for (auto& audioBuffer : m_audioBufferList->buffers()) {
             audioBuffer.mDataByteSize = frameCount * m_streamFormat.mBytesPerFrame;
-            if (!m_muted && m_enabled) {
+            if (!muted() && enabled()) {
                 memcpy(audioBuffer.mData, &m_bipBopBuffer[bipBopStart], sizeof(Float32) * bipBopCount);
                 addHum(HumVolume, HumFrequency, sampleRate(), m_samplesRendered, static_cast<float*>(audioBuffer.mData), bipBopCount);
             } else

Modified: branches/safari-604.1.21-branch/Source/WebCore/platform/mediastream/mac/MockRealtimeVideoSourceMac.mm (217032 => 217033)


--- branches/safari-604.1.21-branch/Source/WebCore/platform/mediastream/mac/MockRealtimeVideoSourceMac.mm	2017-05-18 05:08:02 UTC (rev 217032)
+++ branches/safari-604.1.21-branch/Source/WebCore/platform/mediastream/mac/MockRealtimeVideoSourceMac.mm	2017-05-18 05:35:56 UTC (rev 217033)
@@ -65,13 +65,6 @@
 {
 }
 
-RefPtr<MockRealtimeVideoSource> MockRealtimeVideoSource::createMuted(const String& name)
-{
-    auto source = adoptRef(new MockRealtimeVideoSource(name));
-    source->m_muted = true;
-    return source;
-}
-
 RetainPtr<CMSampleBufferRef> MockRealtimeVideoSourceMac::CMSampleBufferFromPixelBuffer(CVPixelBufferRef pixelBuffer)
 {
     if (!pixelBuffer)

Modified: branches/safari-604.1.21-branch/Source/WebCore/platform/mediastream/mac/RealtimeIncomingAudioSource.cpp (217032 => 217033)


--- branches/safari-604.1.21-branch/Source/WebCore/platform/mediastream/mac/RealtimeIncomingAudioSource.cpp	2017-05-18 05:08:02 UTC (rev 217032)
+++ branches/safari-604.1.21-branch/Source/WebCore/platform/mediastream/mac/RealtimeIncomingAudioSource.cpp	2017-05-18 05:35:56 UTC (rev 217033)
@@ -47,7 +47,7 @@
 Ref<RealtimeIncomingAudioSource> RealtimeIncomingAudioSource::create(rtc::scoped_refptr<webrtc::AudioTrackInterface>&& audioTrack, String&& audioTrackId)
 {
     auto source = adoptRef(*new RealtimeIncomingAudioSource(WTFMove(audioTrack), WTFMove(audioTrackId)));
-    source->startProducingData();
+    source->start();
     return source;
 }
 
@@ -55,6 +55,7 @@
     : RealtimeMediaSource(WTFMove(audioTrackId), RealtimeMediaSource::Type::Audio, String())
     , m_audioTrack(WTFMove(audioTrack))
 {
+    notifyMutedChange(!m_audioTrack);
 }
 
 RealtimeIncomingAudioSource::~RealtimeIncomingAudioSource()
@@ -63,7 +64,7 @@
         m_audioSourceProvider->unprepare();
         m_audioSourceProvider = nullptr;
     }
-    stopProducingData();
+    stop();
 }
 
 
@@ -112,10 +113,6 @@
 
 void RealtimeIncomingAudioSource::startProducingData()
 {
-    if (m_isProducingData)
-        return;
-
-    m_isProducingData = true;
     if (m_audioTrack)
         m_audioTrack->AddSink(this);
 }
@@ -122,10 +119,6 @@
 
 void RealtimeIncomingAudioSource::stopProducingData()
 {
-    if (!m_isProducingData)
-        return;
-
-    m_isProducingData = false;
     if (m_audioTrack)
         m_audioTrack->RemoveSink(this);
 }
@@ -136,7 +129,8 @@
     ASSERT(track);
 
     m_audioTrack = WTFMove(track);
-    if (m_isProducingData)
+    notifyMutedChange(!m_audioTrack);
+    if (isProducingData())
         m_audioTrack->AddSink(this);
 }
 

Modified: branches/safari-604.1.21-branch/Source/WebCore/platform/mediastream/mac/RealtimeIncomingAudioSource.h (217032 => 217033)


--- branches/safari-604.1.21-branch/Source/WebCore/platform/mediastream/mac/RealtimeIncomingAudioSource.h	2017-05-18 05:08:02 UTC (rev 217032)
+++ branches/safari-604.1.21-branch/Source/WebCore/platform/mediastream/mac/RealtimeIncomingAudioSource.h	2017-05-18 05:35:56 UTC (rev 217033)
@@ -67,14 +67,11 @@
     MediaConstraints& constraints() { return *m_constraints.get(); }
     RealtimeMediaSourceSupportedConstraints& supportedConstraints();
 
-    bool isProducingData() const final { return m_isProducingData; }
-
     AudioSourceProvider* audioSourceProvider() final;
 
     RealtimeMediaSourceSettings m_currentSettings;
     RealtimeMediaSourceSupportedConstraints m_supportedConstraints;
     RefPtr<MediaConstraints> m_constraints;
-    bool m_isProducingData { false };
     rtc::scoped_refptr<webrtc::AudioTrackInterface> m_audioTrack;
 
     RefPtr<WebAudioSourceProviderAVFObjC> m_audioSourceProvider;

Modified: branches/safari-604.1.21-branch/Source/WebCore/platform/mediastream/mac/RealtimeIncomingVideoSource.cpp (217032 => 217033)


--- branches/safari-604.1.21-branch/Source/WebCore/platform/mediastream/mac/RealtimeIncomingVideoSource.cpp	2017-05-18 05:08:02 UTC (rev 217032)
+++ branches/safari-604.1.21-branch/Source/WebCore/platform/mediastream/mac/RealtimeIncomingVideoSource.cpp	2017-05-18 05:35:56 UTC (rev 217033)
@@ -58,7 +58,7 @@
     PixelBufferConformerCV conformer(conformerOptions.get());
 
     auto source = adoptRef(*new RealtimeIncomingVideoSource(WTFMove(videoTrack), WTFMove(trackId), conformerOptions.get()));
-    source->startProducingData();
+    source->start();
     return source;
 }
 
@@ -67,17 +67,13 @@
     , m_videoTrack(WTFMove(videoTrack))
     , m_conformer(conformerOptions)
 {
-    m_muted = !m_videoTrack;
     m_currentSettings.setWidth(640);
     m_currentSettings.setHeight(480);
+    notifyMutedChange(!m_videoTrack);
 }
 
 void RealtimeIncomingVideoSource::startProducingData()
 {
-    if (m_isProducingData)
-        return;
-
-    m_isProducingData = true;
     if (m_videoTrack)
         m_videoTrack->AddOrUpdateSink(this, rtc::VideoSinkWants());
 }
@@ -87,18 +83,14 @@
     ASSERT(!m_videoTrack);
     ASSERT(track);
 
-    m_muted = false;
-    m_videoTrack = track;
-    if (m_isProducingData)
+    m_videoTrack = WTFMove(track);
+    notifyMutedChange(!m_videoTrack);
+    if (isProducingData())
         m_videoTrack->AddOrUpdateSink(this, rtc::VideoSinkWants());
 }
 
 void RealtimeIncomingVideoSource::stopProducingData()
 {
-    if (!m_isProducingData)
-        return;
-
-    m_isProducingData = false;
     if (m_videoTrack)
         m_videoTrack->RemoveSink(this);
 }
@@ -133,7 +125,7 @@
 
 void RealtimeIncomingVideoSource::OnFrame(const webrtc::VideoFrame& frame)
 {
-    if (!m_isProducingData)
+    if (!isProducingData())
         return;
 
     auto pixelBuffer = pixelBufferFromVideoFrame(frame);

Modified: branches/safari-604.1.21-branch/Source/WebCore/platform/mediastream/mac/RealtimeIncomingVideoSource.h (217032 => 217033)


--- branches/safari-604.1.21-branch/Source/WebCore/platform/mediastream/mac/RealtimeIncomingVideoSource.h	2017-05-18 05:08:02 UTC (rev 217032)
+++ branches/safari-604.1.21-branch/Source/WebCore/platform/mediastream/mac/RealtimeIncomingVideoSource.h	2017-05-18 05:35:56 UTC (rev 217033)
@@ -66,7 +66,6 @@
 
     void processNewSample(CMSampleBufferRef, unsigned, unsigned, MediaSample::VideoRotation);
 
-    bool isProducingData() const final { return m_isProducingData && m_buffer; }
     bool applySize(const IntSize&) final { return true; }
 
     // rtc::VideoSinkInterface
@@ -78,7 +77,6 @@
     RealtimeMediaSourceSettings m_currentSettings;
     RealtimeMediaSourceSupportedConstraints m_supportedConstraints;
     RefPtr<MediaConstraints> m_constraints;
-    bool m_isProducingData { false };
     rtc::scoped_refptr<webrtc::VideoTrackInterface> m_videoTrack;
     RetainPtr<CMSampleBufferRef> m_buffer;
     PixelBufferConformerCV m_conformer;

Modified: branches/safari-604.1.21-branch/Source/WebCore/platform/mediastream/mac/WebAudioSourceProviderAVFObjC.mm (217032 => 217033)


--- branches/safari-604.1.21-branch/Source/WebCore/platform/mediastream/mac/WebAudioSourceProviderAVFObjC.mm	2017-05-18 05:08:02 UTC (rev 217032)
+++ branches/safari-604.1.21-branch/Source/WebCore/platform/mediastream/mac/WebAudioSourceProviderAVFObjC.mm	2017-05-18 05:35:56 UTC (rev 217033)
@@ -109,7 +109,7 @@
     if (m_client && !m_connected) {
         m_connected = true;
         m_captureSource->addObserver(*this);
-        m_captureSource->startProducingData();
+        m_captureSource->start();
     } else if (!m_client && m_connected) {
         m_captureSource->removeObserver(*this);
         m_connected = false;

Modified: branches/safari-604.1.21-branch/Source/WebCore/platform/mediastream/openwebrtc/MediaEndpointOwr.cpp (217032 => 217033)


--- branches/safari-604.1.21-branch/Source/WebCore/platform/mediastream/openwebrtc/MediaEndpointOwr.cpp	2017-05-18 05:08:02 UTC (rev 217032)
+++ branches/safari-604.1.21-branch/Source/WebCore/platform/mediastream/openwebrtc/MediaEndpointOwr.cpp	2017-05-18 05:35:56 UTC (rev 217033)
@@ -485,7 +485,7 @@
         return;
     }
 
-    if (!remoteSource->stopped())
+    if (remoteSource->isProducingData())
         remoteSource->swapOutShallowSource(*realSource);
 }
 

Modified: branches/safari-604.1.21-branch/Source/WebCore/platform/mediastream/openwebrtc/RealtimeMediaSourceOwr.h (217032 => 217033)


--- branches/safari-604.1.21-branch/Source/WebCore/platform/mediastream/openwebrtc/RealtimeMediaSourceOwr.h	2017-05-18 05:08:02 UTC (rev 217032)
+++ branches/safari-604.1.21-branch/Source/WebCore/platform/mediastream/openwebrtc/RealtimeMediaSourceOwr.h	2017-05-18 05:35:56 UTC (rev 217033)
@@ -55,7 +55,7 @@
     , m_mediaSource(mediaSource)
     {
         if (!mediaSource)
-            m_muted = true;
+            notifyMutedChange(true);
     }
 
 RealtimeMediaSourceOwr(const String& id, RealtimeMediaSource::Type type, const String& name)

Modified: branches/safari-604.1.21-branch/Source/WebCore/platform/mock/MockMediaEndpoint.cpp (217032 => 217033)


--- branches/safari-604.1.21-branch/Source/WebCore/platform/mock/MockMediaEndpoint.cpp	2017-05-18 05:08:02 UTC (rev 217032)
+++ branches/safari-604.1.21-branch/Source/WebCore/platform/mock/MockMediaEndpoint.cpp	2017-05-18 05:35:56 UTC (rev 217033)
@@ -208,7 +208,7 @@
     }
 
     m_mutedRemoteSources.set(mid, source);
-    return *source;
+    return source.releaseNonNull();
 }
 
 void MockMediaEndpoint::replaceSendSource(RealtimeMediaSource& newSource, const String& mid)
@@ -334,7 +334,7 @@
 
 void MockMediaEndpoint::unmuteTimerFired()
 {
-    RefPtr<RealtimeMediaSource> source = m_mutedRemoteSources.get(m_midsOfSourcesToUnmute.takeLast());
+    auto* source = m_mutedRemoteSources.get(m_midsOfSourcesToUnmute.takeLast());
     if (source)
         source->setMuted(false);
 

Modified: branches/safari-604.1.21-branch/Source/WebCore/platform/mock/MockRealtimeAudioSource.cpp (217032 => 217033)


--- branches/safari-604.1.21-branch/Source/WebCore/platform/mock/MockRealtimeAudioSource.cpp	2017-05-18 05:08:02 UTC (rev 217032)
+++ branches/safari-604.1.21-branch/Source/WebCore/platform/mock/MockRealtimeAudioSource.cpp	2017-05-18 05:35:56 UTC (rev 217033)
@@ -65,14 +65,14 @@
 
     return CaptureSourceOrError(WTFMove(source));
 }
+#endif
 
-RefPtr<MockRealtimeAudioSource> MockRealtimeAudioSource::createMuted(const String& name)
+Ref<MockRealtimeAudioSource> MockRealtimeAudioSource::createMuted(const String& name)
 {
-    auto source = adoptRef(new MockRealtimeAudioSource(name));
-    source->m_muted = true;
+    auto source = adoptRef(*new MockRealtimeAudioSource(name));
+    source->notifyMutedChange(true);
     return source;
 }
-#endif
 
 static MockRealtimeAudioSourceFactory& mockAudioCaptureSourceFactory()
 {
@@ -121,11 +121,6 @@
 
 void MockRealtimeAudioSource::startProducingData()
 {
-    if (m_isProducingData)
-        return;
-
-    m_isProducingData = true;
-
 #if PLATFORM(IOS)
     mockAudioCaptureSourceFactory().setActiveSource(*this);
 #endif
@@ -133,8 +128,6 @@
     if (!sampleRate())
         setSampleRate(!deviceIndex() ? 44100 : 48000);
 
-    MockRealtimeMediaSource::startProducingData();
-
     m_startTime = monotonicallyIncreasingTime();
     m_timer.startRepeating(renderInterval());
 }
@@ -141,12 +134,6 @@
 
 void MockRealtimeAudioSource::stopProducingData()
 {
-    if (!m_isProducingData)
-        return;
-
-    m_isProducingData = false;
-
-    MockRealtimeMediaSource::stopProducingData();
     m_timer.stop();
     m_elapsedTime += monotonicallyIncreasingTime() - m_startTime;
     m_startTime = NAN;

Modified: branches/safari-604.1.21-branch/Source/WebCore/platform/mock/MockRealtimeAudioSource.h (217032 => 217033)


--- branches/safari-604.1.21-branch/Source/WebCore/platform/mock/MockRealtimeAudioSource.h	2017-05-18 05:08:02 UTC (rev 217032)
+++ branches/safari-604.1.21-branch/Source/WebCore/platform/mock/MockRealtimeAudioSource.h	2017-05-18 05:35:56 UTC (rev 217033)
@@ -43,7 +43,7 @@
 public:
 
     static CaptureSourceOrError create(const String&, const MediaConstraints*);
-    static RefPtr<MockRealtimeAudioSource> createMuted(const String& name);
+    static Ref<MockRealtimeAudioSource> createMuted(const String& name);
 
     static AudioCaptureFactory& factory();
 
@@ -54,7 +54,6 @@
 
     void startProducingData() final;
     void stopProducingData() final;
-    bool isProducingData() const final { return m_isProducingData; }
 
     virtual void render(double) { }
 
@@ -80,7 +79,6 @@
     double m_startTime { NAN };
     double m_lastRenderTime { NAN };
     double m_elapsedTime { 0 };
-    bool m_isProducingData { false };
 };
 
 } // namespace WebCore

Modified: branches/safari-604.1.21-branch/Source/WebCore/platform/mock/MockRealtimeMediaSource.cpp (217032 => 217033)


--- branches/safari-604.1.21-branch/Source/WebCore/platform/mock/MockRealtimeMediaSource.cpp	2017-05-18 05:08:02 UTC (rev 217032)
+++ branches/safari-604.1.21-branch/Source/WebCore/platform/mock/MockRealtimeMediaSource.cpp	2017-05-18 05:35:56 UTC (rev 217033)
@@ -80,11 +80,11 @@
     switch (type) {
     case RealtimeMediaSource::Type::Audio:
         m_deviceIndex = name == audioDevices()[0].label() ? 0 : 1;
-        setPersistentID(audioDevices()[m_deviceIndex].persistentId());
+        setPersistentID(String(audioDevices()[m_deviceIndex].persistentId()));
         return;
     case RealtimeMediaSource::Type::Video:
         m_deviceIndex = name == videoDevices()[0].label() ? 0 : 1;
-        setPersistentID(videoDevices()[m_deviceIndex].persistentId());
+        setPersistentID(String(videoDevices()[m_deviceIndex].persistentId()));
         return;
     case RealtimeMediaSource::Type::None:
         ASSERT_NOT_REACHED();
@@ -132,18 +132,6 @@
     return m_supportedConstraints;
 }
 
-void MockRealtimeMediaSource::startProducingData()
-{
-    m_isProducingData = true;
-    setMuted(false);
-}
-
-void MockRealtimeMediaSource::stopProducingData()
-{
-    m_isProducingData = false;
-    setMuted(true);
-}
-
 } // namespace WebCore
 
 #endif // ENABLE(MEDIA_STREAM)

Modified: branches/safari-604.1.21-branch/Source/WebCore/platform/mock/MockRealtimeMediaSource.h (217032 => 217033)


--- branches/safari-604.1.21-branch/Source/WebCore/platform/mock/MockRealtimeMediaSource.h	2017-05-18 05:08:02 UTC (rev 217032)
+++ branches/safari-604.1.21-branch/Source/WebCore/platform/mock/MockRealtimeMediaSource.h	2017-05-18 05:35:56 UTC (rev 217033)
@@ -65,9 +65,6 @@
     virtual void initializeSupportedConstraints(RealtimeMediaSourceSupportedConstraints&) = 0;
 #endif
 
-    void startProducingData() override;
-    void stopProducingData() override;
-
     const RealtimeMediaSourceCapabilities& capabilities() const override;
     const RealtimeMediaSourceSettings& settings() const override;
 
@@ -84,14 +81,11 @@
     void initializeSettings();
 #endif
 
-    bool isProducingData() const override { return m_isProducingData; }
-
     RealtimeMediaSourceSettings m_currentSettings;
     RealtimeMediaSourceSupportedConstraints m_supportedConstraints;
     std::unique_ptr<RealtimeMediaSourceCapabilities> m_capabilities;
     RefPtr<MediaConstraints> m_constraints;
     unsigned m_deviceIndex { 0 };
-    bool m_isProducingData { false };
 };
 
 } // namespace WebCore

Modified: branches/safari-604.1.21-branch/Source/WebCore/platform/mock/MockRealtimeVideoSource.cpp (217032 => 217033)


--- branches/safari-604.1.21-branch/Source/WebCore/platform/mock/MockRealtimeVideoSource.cpp	2017-05-18 05:08:02 UTC (rev 217032)
+++ branches/safari-604.1.21-branch/Source/WebCore/platform/mock/MockRealtimeVideoSource.cpp	2017-05-18 05:35:56 UTC (rev 217033)
@@ -72,14 +72,14 @@
 
     return CaptureSourceOrError(WTFMove(source));
 }
+#endif
 
-RefPtr<MockRealtimeVideoSource> MockRealtimeVideoSource::createMuted(const String& name)
+Ref<MockRealtimeVideoSource> MockRealtimeVideoSource::createMuted(const String& name)
 {
-    auto source = adoptRef(new MockRealtimeVideoSource(name));
-    source->m_muted = true;
+    auto source = adoptRef(*new MockRealtimeVideoSource(name));
+    source->notifyMutedChange(true);
     return source;
 }
-#endif
 
 static MockRealtimeVideoSourceFactory& mockVideoCaptureSourceFactory()
 {
@@ -112,16 +112,10 @@
 
 void MockRealtimeVideoSource::startProducingData()
 {
-    if (m_isProducingData)
-        return;
-    
-    m_isProducingData = true;
-    
 #if PLATFORM(IOS)
     mockVideoCaptureSourceFactory().setActiveSource(*this);
 #endif
 
-    MockRealtimeMediaSource::startProducingData();
     if (size().isEmpty()) {
         setWidth(640);
         setHeight(480);
@@ -133,12 +127,6 @@
 
 void MockRealtimeVideoSource::stopProducingData()
 {
-    if (!m_isProducingData)
-        return;
-    
-    m_isProducingData = false;
-    
-    MockRealtimeMediaSource::stopProducingData();
     m_timer.stop();
     m_elapsedTime += monotonicallyIncreasingTime() - m_startTime;
     m_startTime = NAN;
@@ -384,7 +372,7 @@
     FloatRect frameRect(FloatPoint(), size);
     context.fillRect(FloatRect(FloatPoint(), size), !deviceIndex() ? Color::black : Color::darkGray);
 
-    if (!m_muted && m_enabled) {
+    if (!muted() && enabled()) {
         drawText(context);
         drawAnimation(context);
         drawBoxes(context);

Modified: branches/safari-604.1.21-branch/Source/WebCore/platform/mock/MockRealtimeVideoSource.h (217032 => 217033)


--- branches/safari-604.1.21-branch/Source/WebCore/platform/mock/MockRealtimeVideoSource.h	2017-05-18 05:08:02 UTC (rev 217032)
+++ branches/safari-604.1.21-branch/Source/WebCore/platform/mock/MockRealtimeVideoSource.h	2017-05-18 05:35:56 UTC (rev 217033)
@@ -47,7 +47,7 @@
 public:
 
     static CaptureSourceOrError create(const String&, const MediaConstraints*);
-    static RefPtr<MockRealtimeVideoSource> createMuted(const String& name);
+    static Ref<MockRealtimeVideoSource> createMuted(const String& name);
 
     static VideoCaptureFactory& factory();
 
@@ -69,7 +69,6 @@
 
     void startProducingData() final;
     void stopProducingData() final;
-    bool isProducingData() const final { return m_isProducingData; }
 
     void drawAnimation(GraphicsContext&);
     void drawText(GraphicsContext&);
@@ -103,7 +102,6 @@
     unsigned m_frameNumber { 0 };
 
     RunLoop::Timer<MockRealtimeVideoSource> m_timer;
-    bool m_isProducingData { false };
 };
 
 } // namespace WebCore

Modified: branches/safari-604.1.21-branch/Source/WebKit2/ChangeLog (217032 => 217033)


--- branches/safari-604.1.21-branch/Source/WebKit2/ChangeLog	2017-05-18 05:08:02 UTC (rev 217032)
+++ branches/safari-604.1.21-branch/Source/WebKit2/ChangeLog	2017-05-18 05:35:56 UTC (rev 217033)
@@ -1,5 +1,21 @@
 2017-05-17  Jason Marcell  <[email protected]>
 
+        Cherry-pick r216898. rdar://problem/32231650
+
+    2017-05-15  Youenn Fablet  <[email protected]>
+
+            Simplify RealtimeMediaSource data production and state
+            https://bugs.webkit.org/show_bug.cgi?id=171999
+
+            Reviewed by Eric Carlson.
+
+            * UIProcess/Cocoa/UserMediaCaptureManagerProxy.cpp:
+            (WebKit::UserMediaCaptureManagerProxy::startProducingData):
+            (WebKit::UserMediaCaptureManagerProxy::stopProducingData):
+            * WebProcess/cocoa/UserMediaCaptureManager.cpp:
+
+2017-05-17  Jason Marcell  <[email protected]>
+
         Cherry-pick r216977. rdar://problem/32141505
 
     2017-05-17  Alex Christensen  <[email protected]>

Modified: branches/safari-604.1.21-branch/Source/WebKit2/UIProcess/Cocoa/UserMediaCaptureManagerProxy.cpp (217032 => 217033)


--- branches/safari-604.1.21-branch/Source/WebKit2/UIProcess/Cocoa/UserMediaCaptureManagerProxy.cpp	2017-05-18 05:08:02 UTC (rev 217032)
+++ branches/safari-604.1.21-branch/Source/WebKit2/UIProcess/Cocoa/UserMediaCaptureManagerProxy.cpp	2017-05-18 05:35:56 UTC (rev 217033)
@@ -154,7 +154,7 @@
 {
     auto iter = m_proxies.find(id);
     if (iter != m_proxies.end())
-        iter->value->source().startProducingData();
+        iter->value->source().start();
 }
 
 void UserMediaCaptureManagerProxy::stopProducingData(uint64_t id)
@@ -161,7 +161,7 @@
 {
     auto iter = m_proxies.find(id);
     if (iter != m_proxies.end())
-        iter->value->source().stopProducingData();
+        iter->value->source().stop();
 }
 
 void UserMediaCaptureManagerProxy::capabilities(uint64_t id, WebCore::RealtimeMediaSourceCapabilities& capabilities)

Modified: branches/safari-604.1.21-branch/Source/WebKit2/WebProcess/cocoa/UserMediaCaptureManager.cpp (217032 => 217033)


--- branches/safari-604.1.21-branch/Source/WebKit2/WebProcess/cocoa/UserMediaCaptureManager.cpp	2017-05-18 05:08:02 UTC (rev 217032)
+++ branches/safari-604.1.21-branch/Source/WebKit2/WebProcess/cocoa/UserMediaCaptureManager.cpp	2017-05-18 05:35:56 UTC (rev 217033)
@@ -110,8 +110,7 @@
         WebAudioBufferList audioData(m_description, numberOfFrames);
         m_ringBuffer.fetch(audioData.list(), numberOfFrames, time.timeValue());
 
-        for (auto* observer : observers())
-            observer->audioSamplesAvailable(time, audioData, m_description, numberOfFrames);
+        RealtimeMediaSource::audioSamplesAvailable(time, audioData, m_description, numberOfFrames);
     }
 
     void applyConstraintsSucceeded(const WebCore::RealtimeMediaSourceSettings& settings)
@@ -127,24 +126,6 @@
         callbacks.failureHandler(failedConstraint, errorMessage);
     }
 
-    void setMuted(bool muted) final
-    {
-        if (m_muted == muted)
-            return;
-
-        m_muted = muted;
-        m_manager.setMuted(m_id, m_muted);
-    }
-
-    void setEnabled(bool enabled) final
-    {
-        if (m_enabled == enabled)
-            return;
-
-        m_enabled = enabled;
-        m_manager.setEnabled(m_id, m_enabled);
-    }
-
 private:
     void startProducingData() final { m_manager.startProducingData(m_id); }
     void stopProducingData() final { m_manager.stopProducingData(m_id); }
_______________________________________________
webkit-changes mailing list
[email protected]
https://lists.webkit.org/mailman/listinfo/webkit-changes

Reply via email to