Title: [212572] trunk/Source/WebCore
Revision
212572
Author
jer.no...@apple.com
Date
2017-02-17 13:33:39 -0800 (Fri, 17 Feb 2017)

Log Message

Refactoring: Remove AudioSourceObserverObjC and AudioCaptureSourceProviderObjC
https://bugs.webkit.org/show_bug.cgi?id=168520

Reviewed by Youenn Fablet.

Having AudioCaptureSourceProviderObjC as the type provided to WebAudioSourceProviderAVFObjC
(and only ever to WebAudioSourceProviderAVFObjC) makes it impossible for that class to add
an observer on RealtimeMediaSource, of which all classes inheriting from
WebAudioSourceProviderAVFObjC are subclasses. There is no need to treat
WebAudioSourceProviderAVFObjC as an "observer", since the only thing it will ever observe is
the object which created it and hold an explicit reference to it. So replace all instances
of the "observer" pattern with direct calls to the necessary (newly non-virtual) methods.
This allows WebAudioSourceProviderAVFObjC to register as an observer directly on
RealtimeMediaSource, to listen for audioSamplesAvailable() instead of process(), and remove
a lot of unnecessary conversion code and observer duplication.

* WebCore.xcodeproj/project.pbxproj:
* platform/mediastream/RealtimeMediaSource.h:
(WebCore::RealtimeMediaSource::Observer::sourceStopped):
(WebCore::RealtimeMediaSource::Observer::sourceMutedChanged):
(WebCore::RealtimeMediaSource::Observer::sourceEnabledChanged):
(WebCore::RealtimeMediaSource::Observer::sourceSettingsChanged):
(WebCore::RealtimeMediaSource::Observer::preventSourceFromStopping):
* platform/mediastream/mac/AVAudioCaptureSource.h:
* platform/mediastream/mac/AVAudioCaptureSource.mm:
(WebCore::AVAudioCaptureSource::shutdownCaptureSession):
(WebCore::AVAudioCaptureSource::captureOutputDidOutputSampleBufferFromConnection):
(WebCore::AVAudioCaptureSource::addObserver): Deleted.
(WebCore::AVAudioCaptureSource::removeObserver): Deleted.
(WebCore::AVAudioCaptureSource::start): Deleted.
* platform/mediastream/mac/AudioCaptureSourceProviderObjC.h: Removed.
* platform/mediastream/mac/AudioSourceObserverObjC.h: Removed.
* platform/mediastream/mac/AudioTrackPrivateMediaStreamCocoa.h:
* platform/mediastream/mac/MockRealtimeAudioSourceMac.h:
* platform/mediastream/mac/MockRealtimeAudioSourceMac.mm:
(WebCore::MockRealtimeAudioSourceMac::emitSampleBuffers):
(WebCore::MockRealtimeAudioSourceMac::reconfigure):
(WebCore::MockRealtimeAudioSourceMac::audioSourceProvider):
(WebCore::MockRealtimeAudioSourceMac::addObserver): Deleted.
(WebCore::MockRealtimeAudioSourceMac::removeObserver): Deleted.
(WebCore::MockRealtimeAudioSourceMac::start): Deleted.
* platform/mediastream/mac/RealtimeIncomingAudioSource.cpp:
(WebCore::RealtimeIncomingAudioSource::audioSourceProvider):
(WebCore::RealtimeIncomingAudioSource::addObserver): Deleted.
(WebCore::RealtimeIncomingAudioSource::removeObserver): Deleted.
(WebCore::RealtimeIncomingAudioSource::start): Deleted.
* platform/mediastream/mac/RealtimeIncomingAudioSource.h:
* platform/mediastream/mac/RealtimeOutgoingAudioSource.h:
* platform/mediastream/mac/RealtimeOutgoingVideoSource.h:
* platform/mediastream/mac/WebAudioSourceProviderAVFObjC.h:
* platform/mediastream/mac/WebAudioSourceProviderAVFObjC.mm:
(WebCore::WebAudioSourceProviderAVFObjC::create):
(WebCore::WebAudioSourceProviderAVFObjC::WebAudioSourceProviderAVFObjC):
(WebCore::WebAudioSourceProviderAVFObjC::setClient):
(WebCore::WebAudioSourceProviderAVFObjC::audioSamplesAvailable):
(WebCore::WebAudioSourceProviderAVFObjC::process): Deleted.

Modified Paths

Removed Paths

Diff

Modified: trunk/Source/WebCore/ChangeLog (212571 => 212572)


--- trunk/Source/WebCore/ChangeLog	2017-02-17 21:32:10 UTC (rev 212571)
+++ trunk/Source/WebCore/ChangeLog	2017-02-17 21:33:39 UTC (rev 212572)
@@ -1,3 +1,62 @@
+2017-02-17  Jer Noble  <jer.no...@apple.com>
+
+        Refactoring: Remove AudioSourceObserverObjC and AudioCaptureSourceProviderObjC
+        https://bugs.webkit.org/show_bug.cgi?id=168520
+
+        Reviewed by Youenn Fablet.
+
+        Having AudioCaptureSourceProviderObjC as the type provided to WebAudioSourceProviderAVFObjC
+        (and only ever to WebAudioSourceProviderAVFObjC) makes it impossible for that class to add
+        an observer on RealtimeMediaSource, of which all classes inheriting from
+        WebAudioSourceProviderAVFObjC are subclasses. There is no need to treat
+        WebAudioSourceProviderAVFObjC as an "observer", since the only thing it will ever observe is
+        the object which created it and hold an explicit reference to it. So replace all instances
+        of the "observer" pattern with direct calls to the necessary (newly non-virtual) methods.
+        This allows WebAudioSourceProviderAVFObjC to register as an observer directly on
+        RealtimeMediaSource, to listen for audioSamplesAvailable() instead of process(), and remove
+        a lot of unnecessary conversion code and observer duplication.
+
+        * WebCore.xcodeproj/project.pbxproj:
+        * platform/mediastream/RealtimeMediaSource.h:
+        (WebCore::RealtimeMediaSource::Observer::sourceStopped):
+        (WebCore::RealtimeMediaSource::Observer::sourceMutedChanged):
+        (WebCore::RealtimeMediaSource::Observer::sourceEnabledChanged):
+        (WebCore::RealtimeMediaSource::Observer::sourceSettingsChanged):
+        (WebCore::RealtimeMediaSource::Observer::preventSourceFromStopping):
+        * platform/mediastream/mac/AVAudioCaptureSource.h:
+        * platform/mediastream/mac/AVAudioCaptureSource.mm:
+        (WebCore::AVAudioCaptureSource::shutdownCaptureSession):
+        (WebCore::AVAudioCaptureSource::captureOutputDidOutputSampleBufferFromConnection):
+        (WebCore::AVAudioCaptureSource::addObserver): Deleted.
+        (WebCore::AVAudioCaptureSource::removeObserver): Deleted.
+        (WebCore::AVAudioCaptureSource::start): Deleted.
+        * platform/mediastream/mac/AudioCaptureSourceProviderObjC.h: Removed.
+        * platform/mediastream/mac/AudioSourceObserverObjC.h: Removed.
+        * platform/mediastream/mac/AudioTrackPrivateMediaStreamCocoa.h:
+        * platform/mediastream/mac/MockRealtimeAudioSourceMac.h:
+        * platform/mediastream/mac/MockRealtimeAudioSourceMac.mm:
+        (WebCore::MockRealtimeAudioSourceMac::emitSampleBuffers):
+        (WebCore::MockRealtimeAudioSourceMac::reconfigure):
+        (WebCore::MockRealtimeAudioSourceMac::audioSourceProvider):
+        (WebCore::MockRealtimeAudioSourceMac::addObserver): Deleted.
+        (WebCore::MockRealtimeAudioSourceMac::removeObserver): Deleted.
+        (WebCore::MockRealtimeAudioSourceMac::start): Deleted.
+        * platform/mediastream/mac/RealtimeIncomingAudioSource.cpp:
+        (WebCore::RealtimeIncomingAudioSource::audioSourceProvider):
+        (WebCore::RealtimeIncomingAudioSource::addObserver): Deleted.
+        (WebCore::RealtimeIncomingAudioSource::removeObserver): Deleted.
+        (WebCore::RealtimeIncomingAudioSource::start): Deleted.
+        * platform/mediastream/mac/RealtimeIncomingAudioSource.h:
+        * platform/mediastream/mac/RealtimeOutgoingAudioSource.h:
+        * platform/mediastream/mac/RealtimeOutgoingVideoSource.h:
+        * platform/mediastream/mac/WebAudioSourceProviderAVFObjC.h:
+        * platform/mediastream/mac/WebAudioSourceProviderAVFObjC.mm:
+        (WebCore::WebAudioSourceProviderAVFObjC::create):
+        (WebCore::WebAudioSourceProviderAVFObjC::WebAudioSourceProviderAVFObjC):
+        (WebCore::WebAudioSourceProviderAVFObjC::setClient):
+        (WebCore::WebAudioSourceProviderAVFObjC::audioSamplesAvailable):
+        (WebCore::WebAudioSourceProviderAVFObjC::process): Deleted.
+
 2017-02-17  Antoine Quint  <grao...@apple.com>
 
         REGRESSION: Subtitles menu in media controls allows multiple items to be selected

Modified: trunk/Source/WebCore/WebCore.xcodeproj/project.pbxproj (212571 => 212572)


--- trunk/Source/WebCore/WebCore.xcodeproj/project.pbxproj	2017-02-17 21:32:10 UTC (rev 212571)
+++ trunk/Source/WebCore/WebCore.xcodeproj/project.pbxproj	2017-02-17 21:33:39 UTC (rev 212572)
@@ -161,7 +161,6 @@
 		076970871463AD8700F502CF /* TextTrackList.h in Headers */ = {isa = PBXBuildFile; fileRef = 076970851463AD8700F502CF /* TextTrackList.h */; };
 		076EC1331E44F56D00E5D813 /* AudioTrackPrivateMediaStreamCocoa.cpp in Sources */ = {isa = PBXBuildFile; fileRef = 076EC1321E44F2CB00E5D813 /* AudioTrackPrivateMediaStreamCocoa.cpp */; };
 		076F0D0E12B8192700C26AA4 /* MediaPlayerPrivateAVFoundation.h in Headers */ = {isa = PBXBuildFile; fileRef = 076F0D0A12B8192700C26AA4 /* MediaPlayerPrivateAVFoundation.h */; };
-		07707CB01E205EE300005BF7 /* AudioSourceObserverObjC.h in Headers */ = {isa = PBXBuildFile; fileRef = 07707CAF1E205EC400005BF7 /* AudioSourceObserverObjC.h */; };
 		077664FC183E6B5C00133B92 /* JSQuickTimePluginReplacement.cpp in Sources */ = {isa = PBXBuildFile; fileRef = 077664FA183E6B5C00133B92 /* JSQuickTimePluginReplacement.cpp */; };
 		077664FD183E6B5C00133B92 /* JSQuickTimePluginReplacement.h in Headers */ = {isa = PBXBuildFile; fileRef = 077664FB183E6B5C00133B92 /* JSQuickTimePluginReplacement.h */; };
 		0779BF0E18453168000B6AE7 /* HTMLMediaElementMediaStream.h in Headers */ = {isa = PBXBuildFile; fileRef = 0779BF0B18453168000B6AE7 /* HTMLMediaElementMediaStream.h */; };
@@ -7285,8 +7284,6 @@
 		076EC1321E44F2CB00E5D813 /* AudioTrackPrivateMediaStreamCocoa.cpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; path = AudioTrackPrivateMediaStreamCocoa.cpp; sourceTree = "<group>"; };
 		076F0D0912B8192700C26AA4 /* MediaPlayerPrivateAVFoundation.cpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; path = MediaPlayerPrivateAVFoundation.cpp; sourceTree = "<group>"; };
 		076F0D0A12B8192700C26AA4 /* MediaPlayerPrivateAVFoundation.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = MediaPlayerPrivateAVFoundation.h; sourceTree = "<group>"; };
-		07707CAF1E205EC400005BF7 /* AudioSourceObserverObjC.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = AudioSourceObserverObjC.h; sourceTree = "<group>"; };
-		07707CB11E20649C00005BF7 /* AudioCaptureSourceProviderObjC.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = AudioCaptureSourceProviderObjC.h; sourceTree = "<group>"; };
 		077664FA183E6B5C00133B92 /* JSQuickTimePluginReplacement.cpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; path = JSQuickTimePluginReplacement.cpp; sourceTree = "<group>"; };
 		077664FB183E6B5C00133B92 /* JSQuickTimePluginReplacement.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = JSQuickTimePluginReplacement.h; sourceTree = "<group>"; };
 		0779BF0B18453168000B6AE7 /* HTMLMediaElementMediaStream.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = HTMLMediaElementMediaStream.h; sourceTree = "<group>"; };
@@ -15465,8 +15462,6 @@
 		0729B14D17CFCCA0004F1D60 /* mac */ = {
 			isa = PBXGroup;
 			children = (
-				07707CB11E20649C00005BF7 /* AudioCaptureSourceProviderObjC.h */,
-				07707CAF1E205EC400005BF7 /* AudioSourceObserverObjC.h */,
 				076EC1321E44F2CB00E5D813 /* AudioTrackPrivateMediaStreamCocoa.cpp */,
 				07C046C61E42512F007201E7 /* AudioTrackPrivateMediaStreamCocoa.h */,
 				070363D8181A1CDC00C074A5 /* AVAudioCaptureSource.h */,
@@ -25346,7 +25341,6 @@
 				073B87691E4385AC0071C0EC /* AudioSampleDataSource.h in Headers */,
 				FD8C46EC154608E700A5910C /* AudioScheduledSourceNode.h in Headers */,
 				CDA7982A170A3D0000D45C55 /* AudioSession.h in Headers */,
-				07707CB01E205EE300005BF7 /* AudioSourceObserverObjC.h in Headers */,
 				FD31608912B026F700C1A359 /* AudioSourceProvider.h in Headers */,
 				CD8A7BBC197735FE00CBD643 /* AudioSourceProviderAVFObjC.h in Headers */,
 				FD62F52E145898D80094B0ED /* AudioSourceProviderClient.h in Headers */,

Modified: trunk/Source/WebCore/platform/mediastream/RealtimeMediaSource.h (212571 => 212572)


--- trunk/Source/WebCore/platform/mediastream/RealtimeMediaSource.h	2017-02-17 21:32:10 UTC (rev 212571)
+++ trunk/Source/WebCore/platform/mediastream/RealtimeMediaSource.h	2017-02-17 21:33:39 UTC (rev 212572)
@@ -67,13 +67,13 @@
         virtual ~Observer() { }
         
         // Source state changes.
-        virtual void sourceStopped() = 0;
-        virtual void sourceMutedChanged() = 0;
-        virtual void sourceEnabledChanged() = 0;
-        virtual void sourceSettingsChanged() = 0;
+        virtual void sourceStopped() { }
+        virtual void sourceMutedChanged() { }
+        virtual void sourceEnabledChanged() { }
+        virtual void sourceSettingsChanged() { }
 
         // Observer state queries.
-        virtual bool preventSourceFromStopping() = 0;
+        virtual bool preventSourceFromStopping() { return false; }
         
         // Called on the main thread.
         virtual void videoSampleAvailable(MediaSample&) { }

Modified: trunk/Source/WebCore/platform/mediastream/mac/AVAudioCaptureSource.h (212571 => 212572)


--- trunk/Source/WebCore/platform/mediastream/mac/AVAudioCaptureSource.h	2017-02-17 21:32:10 UTC (rev 212571)
+++ trunk/Source/WebCore/platform/mediastream/mac/AVAudioCaptureSource.h	2017-02-17 21:33:39 UTC (rev 212572)
@@ -29,7 +29,6 @@
 #if ENABLE(MEDIA_STREAM) && USE(AVFOUNDATION)
 
 #include "AVMediaCaptureSource.h"
-#include "AudioCaptureSourceProviderObjC.h"
 #include "CAAudioStreamDescription.h"
 #include <wtf/Lock.h>
 
@@ -42,7 +41,7 @@
 class WebAudioBufferList;
 class WebAudioSourceProviderAVFObjC;
 
-class AVAudioCaptureSource : public AVMediaCaptureSource, public AudioCaptureSourceProviderObjC {
+class AVAudioCaptureSource : public AVMediaCaptureSource {
 public:
 
     static RefPtr<AVMediaCaptureSource> create(AVCaptureDevice*, const AtomicString&, const MediaConstraints*, String&);
@@ -50,11 +49,6 @@
 private:
     AVAudioCaptureSource(AVCaptureDevice*, const AtomicString&);
     virtual ~AVAudioCaptureSource();
-    
-    // AudioCaptureSourceProviderObjC
-    void addObserver(AudioSourceObserverObjC&) final;
-    void removeObserver(AudioSourceObserverObjC&) final;
-    void start() final;
 
     void initializeCapabilities(RealtimeMediaSourceCapabilities&) override;
     void initializeSupportedConstraints(RealtimeMediaSourceSupportedConstraints&) override;
@@ -71,7 +65,6 @@
 
     RefPtr<WebAudioSourceProviderAVFObjC> m_audioSourceProvider;
     std::unique_ptr<CAAudioStreamDescription> m_inputDescription;
-    Vector<AudioSourceObserverObjC*> m_observers;
     Lock m_lock;
 };
 

Modified: trunk/Source/WebCore/platform/mediastream/mac/AVAudioCaptureSource.mm (212571 => 212572)


--- trunk/Source/WebCore/platform/mediastream/mac/AVAudioCaptureSource.mm	2017-02-17 21:32:10 UTC (rev 212571)
+++ trunk/Source/WebCore/platform/mediastream/mac/AVAudioCaptureSource.mm	2017-02-17 21:33:39 UTC (rev 212572)
@@ -29,7 +29,6 @@
 #if ENABLE(MEDIA_STREAM) && USE(AVFOUNDATION)
 
 #import "AudioSampleBufferList.h"
-#import "AudioSourceObserverObjC.h"
 #import "CAAudioStreamDescription.h"
 #import "Logging.h"
 #import "MediaConstraints.h"
@@ -117,25 +116,6 @@
     settings.setDeviceId(id());
 }
 
-void AVAudioCaptureSource::addObserver(AudioSourceObserverObjC& observer)
-{
-    LockHolder lock(m_lock);
-    m_observers.append(&observer);
-    if (m_inputDescription)
-        observer.prepare(&m_inputDescription->streamDescription());
-}
-
-void AVAudioCaptureSource::removeObserver(AudioSourceObserverObjC& observer)
-{
-    LockHolder lock(m_lock);
-    m_observers.removeFirst(&observer);
-}
-
-void AVAudioCaptureSource::start()
-{
-    startProducingData();
-}
-
 void AVAudioCaptureSource::setupCaptureSession()
 {
     RetainPtr<AVCaptureDeviceInputType> audioIn = adoptNS([allocAVCaptureDeviceInputInstance() initWithDevice:device() error:nil]);
@@ -165,9 +145,8 @@
         m_audioConnection = nullptr;
         m_inputDescription = nullptr;
 
-        for (auto& observer : m_observers)
-            observer->unprepare();
-        m_observers.shrink(0);
+        if (m_audioSourceProvider)
+            m_audioSourceProvider->unprepare();
     }
 
     // Don't hold the lock when destroying the audio provider, it will call back into this object
@@ -194,20 +173,12 @@
     if (!m_inputDescription || *m_inputDescription != *streamDescription) {
         m_inputDescription = std::make_unique<CAAudioStreamDescription>(*streamDescription);
 
-        if (!m_observers.isEmpty()) {
-            for (auto& observer : m_observers)
-                observer->prepare(streamDescription);
-        }
+        if (m_audioSourceProvider)
+            m_audioSourceProvider->prepare(streamDescription);
     }
 
     m_list = std::make_unique<WebAudioBufferList>(*m_inputDescription, sampleBuffer);
     audioSamplesAvailable(toMediaTime(CMSampleBufferGetPresentationTimeStamp(sampleBuffer)), *m_list, CAAudioStreamDescription(*streamDescription), CMSampleBufferGetNumSamples(sampleBuffer));
-
-    if (m_observers.isEmpty())
-        return;
-
-    for (auto& observer : m_observers)
-        observer->process(formatDescription, sampleBuffer);
 }
 
 AudioSourceProvider* AVAudioCaptureSource::audioSourceProvider()

Deleted: trunk/Source/WebCore/platform/mediastream/mac/AudioCaptureSourceProviderObjC.h (212571 => 212572)


--- trunk/Source/WebCore/platform/mediastream/mac/AudioCaptureSourceProviderObjC.h	2017-02-17 21:32:10 UTC (rev 212571)
+++ trunk/Source/WebCore/platform/mediastream/mac/AudioCaptureSourceProviderObjC.h	2017-02-17 21:33:39 UTC (rev 212572)
@@ -1,50 +0,0 @@
-/*
- * Copyright (C) 2017 Apple Inc. All rights reserved.
- *
- * Redistribution and use in source and binary forms, with or without
- * modification, are permitted provided that the following conditions
- * are met:
- * 1. Redistributions of source code must retain the above copyright
- *    notice, this list of conditions and the following disclaimer.
- * 2. Redistributions in binary form must reproduce the above copyright
- *    notice, this list of conditions and the following disclaimer in the
- *    documentation and/or other materials provided with the distribution.
- *
- * THIS SOFTWARE IS PROVIDED BY APPLE INC. ``AS IS'' AND ANY
- * EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
- * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR
- * PURPOSE ARE DISCLAIMED.  IN NO EVENT SHALL APPLE INC. OR
- * CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL,
- * EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO,
- * PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR
- * PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY
- * OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
- * (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE
- * OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
- */
-
-#pragma once
-
-#if ENABLE(MEDIA_STREAM) && USE(AVFOUNDATION)
-
-typedef struct AudioStreamBasicDescription AudioStreamBasicDescription;
-typedef const struct opaqueCMFormatDescription *CMFormatDescriptionRef;
-typedef struct opaqueCMSampleBuffer *CMSampleBufferRef;
-
-namespace WebCore {
-
-class AudioSourceObserverObjC;
-
-class AudioCaptureSourceProviderObjC {
-public:
-    virtual ~AudioCaptureSourceProviderObjC() = default;
-
-    virtual void addObserver(AudioSourceObserverObjC&) = 0;
-    virtual void removeObserver(AudioSourceObserverObjC&) = 0;
-
-    virtual void start() = 0;
-};
-
-} // namespace WebCore
-
-#endif // ENABLE(MEDIA_STREAM)

Deleted: trunk/Source/WebCore/platform/mediastream/mac/AudioSourceObserverObjC.h (212571 => 212572)


--- trunk/Source/WebCore/platform/mediastream/mac/AudioSourceObserverObjC.h	2017-02-17 21:32:10 UTC (rev 212571)
+++ trunk/Source/WebCore/platform/mediastream/mac/AudioSourceObserverObjC.h	2017-02-17 21:33:39 UTC (rev 212572)
@@ -1,47 +0,0 @@
-/*
- * Copyright (C) 2017 Apple Inc. All rights reserved.
- *
- * Redistribution and use in source and binary forms, with or without
- * modification, are permitted provided that the following conditions
- * are met:
- * 1. Redistributions of source code must retain the above copyright
- *    notice, this list of conditions and the following disclaimer.
- * 2. Redistributions in binary form must reproduce the above copyright
- *    notice, this list of conditions and the following disclaimer in the
- *    documentation and/or other materials provided with the distribution.
- *
- * THIS SOFTWARE IS PROVIDED BY APPLE INC. ``AS IS'' AND ANY
- * EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
- * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR
- * PURPOSE ARE DISCLAIMED.  IN NO EVENT SHALL APPLE INC. OR
- * CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL,
- * EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO,
- * PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR
- * PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY
- * OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
- * (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE
- * OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
- */
-
-#pragma once
-
-#if ENABLE(MEDIA_STREAM) && USE(AVFOUNDATION)
-
-typedef struct AudioStreamBasicDescription AudioStreamBasicDescription;
-typedef const struct opaqueCMFormatDescription *CMFormatDescriptionRef;
-typedef struct opaqueCMSampleBuffer *CMSampleBufferRef;
-
-namespace WebCore {
-
-class AudioSourceObserverObjC {
-public:
-    virtual ~AudioSourceObserverObjC() = default;
-
-    virtual void prepare(const AudioStreamBasicDescription*) = 0;
-    virtual void unprepare() = 0;
-    virtual void process(CMFormatDescriptionRef, CMSampleBufferRef) = 0;
-};
-
-} // namespace WebCore
-
-#endif // ENABLE(MEDIA_STREAM)

Modified: trunk/Source/WebCore/platform/mediastream/mac/AudioTrackPrivateMediaStreamCocoa.h (212571 => 212572)


--- trunk/Source/WebCore/platform/mediastream/mac/AudioTrackPrivateMediaStreamCocoa.h	2017-02-17 21:32:10 UTC (rev 212571)
+++ trunk/Source/WebCore/platform/mediastream/mac/AudioTrackPrivateMediaStreamCocoa.h	2017-02-17 21:33:39 UTC (rev 212572)
@@ -27,7 +27,6 @@
 
 #if ENABLE(VIDEO_TRACK) && ENABLE(MEDIA_STREAM)
 
-#include "AudioSourceObserverObjC.h"
 #include "AudioTrackPrivateMediaStream.h"
 #include <AudioToolbox/AudioToolbox.h>
 #include <CoreAudio/CoreAudioTypes.h>
@@ -63,10 +62,6 @@
 
     // RealtimeMediaSource::Observer
     void sourceStopped() final;
-    void sourceMutedChanged()  final { }
-    void sourceEnabledChanged() final { }
-    void sourceSettingsChanged() final { }
-    bool preventSourceFromStopping() final { return false; }
     void audioSamplesAvailable(const MediaTime&, const PlatformAudioData&, const AudioStreamDescription&, size_t) final;
 
     static OSStatus inputProc(void*, AudioUnitRenderActionFlags*, const AudioTimeStamp*, UInt32 inBusNumber, UInt32 numberOfFrames, AudioBufferList*);

Modified: trunk/Source/WebCore/platform/mediastream/mac/MockRealtimeAudioSourceMac.h (212571 => 212572)


--- trunk/Source/WebCore/platform/mediastream/mac/MockRealtimeAudioSourceMac.h	2017-02-17 21:32:10 UTC (rev 212571)
+++ trunk/Source/WebCore/platform/mediastream/mac/MockRealtimeAudioSourceMac.h	2017-02-17 21:33:39 UTC (rev 212572)
@@ -32,7 +32,6 @@
 
 #if ENABLE(MEDIA_STREAM)
 
-#include "AudioCaptureSourceProviderObjC.h"
 #include "FontCascade.h"
 #include "MockRealtimeAudioSource.h"
 #include <CoreAudio/CoreAudioTypes.h>
@@ -46,14 +45,7 @@
 class WebAudioBufferList;
 class WebAudioSourceProviderAVFObjC;
 
-class MockRealtimeAudioSourceMac final : public MockRealtimeAudioSource, public AudioCaptureSourceProviderObjC {
-public:
-
-    // AudioCaptureSourceProviderObjC
-    void addObserver(AudioSourceObserverObjC&) final;
-    void removeObserver(AudioSourceObserverObjC&) final;
-    void start() final;
-
+class MockRealtimeAudioSourceMac final : public MockRealtimeAudioSource {
 private:
     friend class MockRealtimeAudioSource;
     MockRealtimeAudioSourceMac(const String&);
@@ -77,7 +69,6 @@
     RetainPtr<CMFormatDescriptionRef> m_formatDescription;
     AudioStreamBasicDescription m_streamFormat;
     RefPtr<WebAudioSourceProviderAVFObjC> m_audioSourceProvider;
-    Vector<AudioSourceObserverObjC*> m_observers;
 };
 
 } // namespace WebCore

Modified: trunk/Source/WebCore/platform/mediastream/mac/MockRealtimeAudioSourceMac.mm (212571 => 212572)


--- trunk/Source/WebCore/platform/mediastream/mac/MockRealtimeAudioSourceMac.mm	2017-02-17 21:32:10 UTC (rev 212571)
+++ trunk/Source/WebCore/platform/mediastream/mac/MockRealtimeAudioSourceMac.mm	2017-02-17 21:33:39 UTC (rev 212572)
@@ -78,24 +78,6 @@
     return source;
 }
 
-void MockRealtimeAudioSourceMac::addObserver(AudioSourceObserverObjC& observer)
-{
-    m_observers.append(&observer);
-    if (m_streamFormat.mSampleRate)
-        observer.prepare(&m_streamFormat);
-}
-
-void MockRealtimeAudioSourceMac::removeObserver(AudioSourceObserverObjC& observer)
-{
-    m_observers.removeFirst(&observer);
-}
-
-void MockRealtimeAudioSourceMac::start()
-{
-    startProducingData();
-}
-
-
 void MockRealtimeAudioSourceMac::emitSampleBuffers(uint32_t frameCount)
 {
     ASSERT(m_formatDescription);
@@ -104,24 +86,6 @@
     m_bytesEmitted += frameCount;
 
     audioSamplesAvailable(toMediaTime(startTime), *m_audioBufferList, CAAudioStreamDescription(m_streamFormat), frameCount);
-
-    CMSampleBufferRef sampleBuffer;
-    OSStatus result = CMAudioSampleBufferCreateWithPacketDescriptions(nullptr, nullptr, true, nullptr, nullptr, m_formatDescription.get(), frameCount, startTime, nullptr, &sampleBuffer);
-    ASSERT(sampleBuffer);
-    ASSERT(!result);
-
-    if (!sampleBuffer)
-        return;
-
-    auto buffer = adoptCF(sampleBuffer);
-    result = CMSampleBufferSetDataBufferFromAudioBufferList(sampleBuffer, kCFAllocatorDefault, kCFAllocatorDefault, 0, m_audioBufferList->list());
-    ASSERT(!result);
-
-    result = CMSampleBufferSetDataReady(sampleBuffer);
-    ASSERT(!result);
-
-    for (const auto& observer : m_observers)
-        observer->process(m_formatDescription.get(), sampleBuffer);
 }
 
 void MockRealtimeAudioSourceMac::reconfigure()
@@ -142,9 +106,6 @@
     CMFormatDescriptionRef formatDescription;
     CMAudioFormatDescriptionCreate(NULL, &m_streamFormat, 0, NULL, 0, NULL, NULL, &formatDescription);
     m_formatDescription = adoptCF(formatDescription);
-
-    for (auto& observer : m_observers)
-        observer->prepare(&m_streamFormat);
 }
 
 void MockRealtimeAudioSourceMac::render(double delta)
@@ -222,8 +183,10 @@
 
 AudioSourceProvider* MockRealtimeAudioSourceMac::audioSourceProvider()
 {
-    if (!m_audioSourceProvider)
+    if (!m_audioSourceProvider) {
         m_audioSourceProvider = WebAudioSourceProviderAVFObjC::create(*this);
+        m_audioSourceProvider->prepare(&m_streamFormat);
+    }
 
     return m_audioSourceProvider.get();
 }

Modified: trunk/Source/WebCore/platform/mediastream/mac/RealtimeIncomingAudioSource.cpp (212571 => 212572)


--- trunk/Source/WebCore/platform/mediastream/mac/RealtimeIncomingAudioSource.cpp	2017-02-17 21:32:10 UTC (rev 212571)
+++ trunk/Source/WebCore/platform/mediastream/mac/RealtimeIncomingAudioSource.cpp	2017-02-17 21:33:39 UTC (rev 212572)
@@ -97,32 +97,14 @@
     return m_supportedConstraints;
 }
 
-void RealtimeIncomingAudioSource::addObserver(AudioSourceObserverObjC& observer)
+AudioSourceProvider* RealtimeIncomingAudioSource::audioSourceProvider()
 {
-    m_audioSourceObservers.append(observer);
-    if (m_formatDescription) {
+    if (!m_audioSourceProvider) {
+        m_audioSourceProvider = WebAudioSourceProviderAVFObjC::create(*this);
         const auto* description = CMAudioFormatDescriptionGetStreamBasicDescription(m_formatDescription.get());
-        observer.prepare(description);
+        m_audioSourceProvider->prepare(description);
     }
-}
 
-void RealtimeIncomingAudioSource::removeObserver(AudioSourceObserverObjC& observer)
-{
-    m_audioSourceObservers.removeFirstMatching([&observer](const auto& registeredObserver) {
-        return &observer == &registeredObserver.get();
-    });
-}
-
-void RealtimeIncomingAudioSource::start()
-{
-    startProducingData();
-}
-
-AudioSourceProvider* RealtimeIncomingAudioSource::audioSourceProvider()
-{
-    if (!m_audioSourceProvider)
-        m_audioSourceProvider = WebAudioSourceProviderAVFObjC::create(*this);
-
     return m_audioSourceProvider.get();
 }
 

Modified: trunk/Source/WebCore/platform/mediastream/mac/RealtimeIncomingAudioSource.h (212571 => 212572)


--- trunk/Source/WebCore/platform/mediastream/mac/RealtimeIncomingAudioSource.h	2017-02-17 21:32:10 UTC (rev 212571)
+++ trunk/Source/WebCore/platform/mediastream/mac/RealtimeIncomingAudioSource.h	2017-02-17 21:33:39 UTC (rev 212572)
@@ -32,7 +32,6 @@
 
 #if USE(LIBWEBRTC)
 
-#include "AudioCaptureSourceProviderObjC.h"
 #include "LibWebRTCMacros.h"
 #include "RealtimeMediaSource.h"
 #include <CoreAudio/CoreAudioTypes.h>
@@ -39,11 +38,13 @@
 #include <webrtc/api/mediastreaminterface.h>
 #include <wtf/RetainPtr.h>
 
+typedef const struct opaqueCMFormatDescription *CMFormatDescriptionRef;
+
 namespace WebCore {
 
 class WebAudioSourceProviderAVFObjC;
 
-class RealtimeIncomingAudioSource final : public RealtimeMediaSource, private webrtc::AudioTrackSinkInterface, private AudioCaptureSourceProviderObjC {
+class RealtimeIncomingAudioSource final : public RealtimeMediaSource, private webrtc::AudioTrackSinkInterface {
 public:
     static Ref<RealtimeIncomingAudioSource> create(rtc::scoped_refptr<webrtc::AudioTrackInterface>&&, String&&);
 
@@ -67,11 +68,6 @@
 
     AudioSourceProvider* audioSourceProvider() final;
 
-    // AudioCaptureSourceProviderObjC API
-    void addObserver(AudioSourceObserverObjC&) final;
-    void removeObserver(AudioSourceObserverObjC&) final;
-    void start() final;
-
     RealtimeMediaSourceSettings m_currentSettings;
     RealtimeMediaSourceSupportedConstraints m_supportedConstraints;
     RefPtr<RealtimeMediaSourceCapabilities> m_capabilities;
@@ -81,7 +77,6 @@
 
     RefPtr<WebAudioSourceProviderAVFObjC> m_audioSourceProvider;
     RetainPtr<CMFormatDescriptionRef> m_formatDescription;
-    Vector<std::reference_wrapper<AudioSourceObserverObjC>> m_audioSourceObservers;
 };
 
 } // namespace WebCore

Modified: trunk/Source/WebCore/platform/mediastream/mac/RealtimeOutgoingAudioSource.h (212571 => 212572)


--- trunk/Source/WebCore/platform/mediastream/mac/RealtimeOutgoingAudioSource.h	2017-02-17 21:32:10 UTC (rev 212571)
+++ trunk/Source/WebCore/platform/mediastream/mac/RealtimeOutgoingAudioSource.h	2017-02-17 21:33:39 UTC (rev 212572)
@@ -63,11 +63,8 @@
     void UnregisterObserver(webrtc::ObserverInterface*) final { }
 
     // RealtimeMediaSource::Observer API
-    void sourceStopped() final { }
     void sourceMutedChanged() final;
     void sourceEnabledChanged() final;
-    void sourceSettingsChanged() final { }
-    bool preventSourceFromStopping() final { return false; }
     void audioSamplesAvailable(const MediaTime&, const PlatformAudioData&, const AudioStreamDescription&, size_t) final;
 
     void pullAudioData();

Modified: trunk/Source/WebCore/platform/mediastream/mac/RealtimeOutgoingVideoSource.h (212571 => 212572)


--- trunk/Source/WebCore/platform/mediastream/mac/RealtimeOutgoingVideoSource.h	2017-02-17 21:32:10 UTC (rev 212571)
+++ trunk/Source/WebCore/platform/mediastream/mac/RealtimeOutgoingVideoSource.h	2017-02-17 21:33:39 UTC (rev 212572)
@@ -66,11 +66,8 @@
     void RemoveSink(rtc::VideoSinkInterface<webrtc::VideoFrame>*) final;
 
     // RealtimeMediaSource::Observer API
-    bool preventSourceFromStopping() final { return false; }
-    void sourceStopped() final { }
     void sourceMutedChanged() final;
     void sourceEnabledChanged() final;
-    void sourceSettingsChanged() final { }
     void videoSampleAvailable(MediaSample&) final;
 
     Vector<rtc::VideoSinkInterface<webrtc::VideoFrame>*> m_sinks;

Modified: trunk/Source/WebCore/platform/mediastream/mac/WebAudioSourceProviderAVFObjC.h (212571 => 212572)


--- trunk/Source/WebCore/platform/mediastream/mac/WebAudioSourceProviderAVFObjC.h	2017-02-17 21:32:10 UTC (rev 212571)
+++ trunk/Source/WebCore/platform/mediastream/mac/WebAudioSourceProviderAVFObjC.h	2017-02-17 21:33:39 UTC (rev 212572)
@@ -27,9 +27,8 @@
 
 #if ENABLE(WEB_AUDIO) && ENABLE(MEDIA_STREAM)
 
-#include "AudioCaptureSourceProviderObjC.h"
-#include "AudioSourceObserverObjC.h"
 #include "AudioSourceProvider.h"
+#include "RealtimeMediaSource.h"
 #include <wtf/Lock.h>
 #include <wtf/RefCounted.h>
 #include <wtf/RefPtr.h>
@@ -44,22 +43,23 @@
 
 class CARingBuffer;
 
-class WebAudioSourceProviderAVFObjC : public RefCounted<WebAudioSourceProviderAVFObjC>, public AudioSourceProvider, public AudioSourceObserverObjC {
+class WebAudioSourceProviderAVFObjC : public RefCounted<WebAudioSourceProviderAVFObjC>, public AudioSourceProvider, RealtimeMediaSource::Observer {
 public:
-    static Ref<WebAudioSourceProviderAVFObjC> create(AudioCaptureSourceProviderObjC&);
+    static Ref<WebAudioSourceProviderAVFObjC> create(RealtimeMediaSource&);
     virtual ~WebAudioSourceProviderAVFObjC();
 
+    void prepare(const AudioStreamBasicDescription *);
+    void unprepare();
+
 private:
-    WebAudioSourceProviderAVFObjC(AudioCaptureSourceProviderObjC&);
+    WebAudioSourceProviderAVFObjC(RealtimeMediaSource&);
 
     // AudioSourceProvider
     void provideInput(AudioBus*, size_t) override;
     void setClient(AudioSourceProviderClient*) override;
 
-    // AudioSourceObserverObjC
-    void prepare(const AudioStreamBasicDescription *) final;
-    void unprepare() final;
-    void process(CMFormatDescriptionRef, CMSampleBufferRef) final;
+    // RealtimeMediaSource::Observer
+    void audioSamplesAvailable(const MediaTime&, const PlatformAudioData&, const AudioStreamDescription&, size_t) final;
 
     size_t m_listBufferSize { 0 };
     std::unique_ptr<AudioBufferList> m_list;
@@ -71,7 +71,7 @@
     uint64_t m_writeCount { 0 };
     uint64_t m_readCount { 0 };
     AudioSourceProviderClient* m_client { nullptr };
-    AudioCaptureSourceProviderObjC* m_captureSource { nullptr };
+    RealtimeMediaSource* m_captureSource { nullptr };
     Lock m_mutex;
     bool m_connected { false };
 };

Modified: trunk/Source/WebCore/platform/mediastream/mac/WebAudioSourceProviderAVFObjC.mm (212571 => 212572)


--- trunk/Source/WebCore/platform/mediastream/mac/WebAudioSourceProviderAVFObjC.mm	2017-02-17 21:32:10 UTC (rev 212571)
+++ trunk/Source/WebCore/platform/mediastream/mac/WebAudioSourceProviderAVFObjC.mm	2017-02-17 21:33:39 UTC (rev 212572)
@@ -34,6 +34,7 @@
 #import "CARingBuffer.h"
 #import "Logging.h"
 #import "MediaTimeAVFoundation.h"
+#import "WebAudioBufferList.h"
 #import <AudioToolbox/AudioToolbox.h>
 #import <objc/runtime.h>
 #import <wtf/MainThread.h>
@@ -53,12 +54,12 @@
 
 static const double kRingBufferDuration = 1;
 
-Ref<WebAudioSourceProviderAVFObjC> WebAudioSourceProviderAVFObjC::create(AudioCaptureSourceProviderObjC& source)
+Ref<WebAudioSourceProviderAVFObjC> WebAudioSourceProviderAVFObjC::create(RealtimeMediaSource& source)
 {
     return adoptRef(*new WebAudioSourceProviderAVFObjC(source));
 }
 
-WebAudioSourceProviderAVFObjC::WebAudioSourceProviderAVFObjC(AudioCaptureSourceProviderObjC& source)
+WebAudioSourceProviderAVFObjC::WebAudioSourceProviderAVFObjC(RealtimeMediaSource& source)
     : m_captureSource(&source)
 {
 }
@@ -130,7 +131,7 @@
     if (m_client && !m_connected) {
         m_connected = true;
         m_captureSource->addObserver(*this);
-        m_captureSource->start();
+        m_captureSource->startProducingData();
     } else if (!m_client && m_connected) {
         m_captureSource->removeObserver(*this);
         m_connected = false;
@@ -219,24 +220,14 @@
     }
 }
 
-void WebAudioSourceProviderAVFObjC::process(CMFormatDescriptionRef, CMSampleBufferRef sampleBuffer)
+void WebAudioSourceProviderAVFObjC::audioSamplesAvailable(const MediaTime&, const PlatformAudioData& data, const AudioStreamDescription&, size_t frameCount)
 {
-    std::lock_guard<Lock> lock(m_mutex);
-
-    if (!m_ringBuffer)
+    if (!m_ringBuffer || !is<WebAudioBufferList>(data))
         return;
 
-    CMItemCount frameCount = CMSampleBufferGetNumSamples(sampleBuffer);
-    CMBlockBufferRef buffer = nil;
+    auto& bufferList = downcast<WebAudioBufferList>(data);
 
-    OSStatus err = CMSampleBufferGetAudioBufferListWithRetainedBlockBuffer(sampleBuffer, nullptr, m_list.get(), m_listBufferSize, kCFAllocatorSystemDefault, kCFAllocatorSystemDefault, kCMSampleBufferFlag_AudioBufferList_Assure16ByteAlignment, &buffer);
-
-    if (err) {
-        LOG(Media, "WebAudioSourceProviderAVFObjC::process(%p) - CMSampleBufferGetAudioBufferListWithRetainedBlockBuffer returned error %i", this, err);
-        return;
-    }
-
-    m_ringBuffer->store(m_list.get(), frameCount, m_writeCount);
+    m_ringBuffer->store(bufferList.list(), frameCount, m_writeCount);
     m_writeCount += frameCount;
 }
 
_______________________________________________
webkit-changes mailing list
webkit-changes@lists.webkit.org
https://lists.webkit.org/mailman/listinfo/webkit-changes

Reply via email to