<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.1//EN"
"http://www.w3.org/TR/xhtml11/DTD/xhtml11.dtd">
<html xmlns="http://www.w3.org/1999/xhtml">
<head><meta http-equiv="content-type" content="text/html; charset=utf-8" />
<title>[212572] trunk/Source/WebCore</title>
</head>
<body>

<style type="text/css"><!--
#msg dl.meta { border: 1px #006 solid; background: #369; padding: 6px; color: #fff; }
#msg dl.meta dt { float: left; width: 6em; font-weight: bold; }
#msg dt:after { content:':';}
#msg dl, #msg dt, #msg ul, #msg li, #header, #footer, #logmsg { font-family: verdana,arial,helvetica,sans-serif; font-size: 10pt;  }
#msg dl a { font-weight: bold}
#msg dl a:link    { color:#fc3; }
#msg dl a:active  { color:#ff0; }
#msg dl a:visited { color:#cc6; }
h3 { font-family: verdana,arial,helvetica,sans-serif; font-size: 10pt; font-weight: bold; }
#msg pre { overflow: auto; background: #ffc; border: 1px #fa0 solid; padding: 6px; }
#logmsg { background: #ffc; border: 1px #fa0 solid; padding: 1em 1em 0 1em; }
#logmsg p, #logmsg pre, #logmsg blockquote { margin: 0 0 1em 0; }
#logmsg p, #logmsg li, #logmsg dt, #logmsg dd { line-height: 14pt; }
#logmsg h1, #logmsg h2, #logmsg h3, #logmsg h4, #logmsg h5, #logmsg h6 { margin: .5em 0; }
#logmsg h1:first-child, #logmsg h2:first-child, #logmsg h3:first-child, #logmsg h4:first-child, #logmsg h5:first-child, #logmsg h6:first-child { margin-top: 0; }
#logmsg ul, #logmsg ol { padding: 0; list-style-position: inside; margin: 0 0 0 1em; }
#logmsg ul { text-indent: -1em; padding-left: 1em; }#logmsg ol { text-indent: -1.5em; padding-left: 1.5em; }
#logmsg > ul, #logmsg > ol { margin: 0 0 1em 0; }
#logmsg pre { background: #eee; padding: 1em; }
#logmsg blockquote { border: 1px solid #fa0; border-left-width: 10px; padding: 1em 1em 0 1em; background: white;}
#logmsg dl { margin: 0; }
#logmsg dt { font-weight: bold; }
#logmsg dd { margin: 0; padding: 0 0 0.5em 0; }
#logmsg dd:before { content:'\00bb';}
#logmsg table { border-spacing: 0px; border-collapse: collapse; border-top: 4px solid #fa0; border-bottom: 1px solid #fa0; background: #fff; }
#logmsg table th { text-align: left; font-weight: normal; padding: 0.2em 0.5em; border-top: 1px dotted #fa0; }
#logmsg table td { text-align: right; border-top: 1px dotted #fa0; padding: 0.2em 0.5em; }
#logmsg table thead th { text-align: center; border-bottom: 1px solid #fa0; }
#logmsg table th.Corner { text-align: left; }
#logmsg hr { border: none 0; border-top: 2px dashed #fa0; height: 1px; }
#header, #footer { color: #fff; background: #636; border: 1px #300 solid; padding: 6px; }
#patch { width: 100%; }
#patch h4 {font-family: verdana,arial,helvetica,sans-serif;font-size:10pt;padding:8px;background:#369;color:#fff;margin:0;}
#patch .propset h4, #patch .binary h4 {margin:0;}
#patch pre {padding:0;line-height:1.2em;margin:0;}
#patch .diff {width:100%;background:#eee;padding: 0 0 10px 0;overflow:auto;}
#patch .propset .diff, #patch .binary .diff  {padding:10px 0;}
#patch span {display:block;padding:0 10px;}
#patch .modfile, #patch .addfile, #patch .delfile, #patch .propset, #patch .binary, #patch .copfile {border:1px solid #ccc;margin:10px 0;}
#patch ins {background:#dfd;text-decoration:none;display:block;padding:0 10px;}
#patch del {background:#fdd;text-decoration:none;display:block;padding:0 10px;}
#patch .lines, .info {color:#888;background:#fff;}
--></style>
<div id="msg">
<dl class="meta">
<dt>Revision</dt> <dd><a href="http://trac.webkit.org/projects/webkit/changeset/212572">212572</a></dd>
<dt>Author</dt> <dd>jer.noble@apple.com</dd>
<dt>Date</dt> <dd>2017-02-17 13:33:39 -0800 (Fri, 17 Feb 2017)</dd>
</dl>

<h3>Log Message</h3>
<pre>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 &quot;observer&quot;, 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 &quot;observer&quot; 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.</pre>

<h3>Modified Paths</h3>
<ul>
<li><a href="#trunkSourceWebCoreChangeLog">trunk/Source/WebCore/ChangeLog</a></li>
<li><a href="#trunkSourceWebCoreWebCorexcodeprojprojectpbxproj">trunk/Source/WebCore/WebCore.xcodeproj/project.pbxproj</a></li>
<li><a href="#trunkSourceWebCoreplatformmediastreamRealtimeMediaSourceh">trunk/Source/WebCore/platform/mediastream/RealtimeMediaSource.h</a></li>
<li><a href="#trunkSourceWebCoreplatformmediastreammacAVAudioCaptureSourceh">trunk/Source/WebCore/platform/mediastream/mac/AVAudioCaptureSource.h</a></li>
<li><a href="#trunkSourceWebCoreplatformmediastreammacAVAudioCaptureSourcemm">trunk/Source/WebCore/platform/mediastream/mac/AVAudioCaptureSource.mm</a></li>
<li><a href="#trunkSourceWebCoreplatformmediastreammacAudioTrackPrivateMediaStreamCocoah">trunk/Source/WebCore/platform/mediastream/mac/AudioTrackPrivateMediaStreamCocoa.h</a></li>
<li><a href="#trunkSourceWebCoreplatformmediastreammacMockRealtimeAudioSourceMach">trunk/Source/WebCore/platform/mediastream/mac/MockRealtimeAudioSourceMac.h</a></li>
<li><a href="#trunkSourceWebCoreplatformmediastreammacMockRealtimeAudioSourceMacmm">trunk/Source/WebCore/platform/mediastream/mac/MockRealtimeAudioSourceMac.mm</a></li>
<li><a href="#trunkSourceWebCoreplatformmediastreammacRealtimeIncomingAudioSourcecpp">trunk/Source/WebCore/platform/mediastream/mac/RealtimeIncomingAudioSource.cpp</a></li>
<li><a href="#trunkSourceWebCoreplatformmediastreammacRealtimeIncomingAudioSourceh">trunk/Source/WebCore/platform/mediastream/mac/RealtimeIncomingAudioSource.h</a></li>
<li><a href="#trunkSourceWebCoreplatformmediastreammacRealtimeOutgoingAudioSourceh">trunk/Source/WebCore/platform/mediastream/mac/RealtimeOutgoingAudioSource.h</a></li>
<li><a href="#trunkSourceWebCoreplatformmediastreammacRealtimeOutgoingVideoSourceh">trunk/Source/WebCore/platform/mediastream/mac/RealtimeOutgoingVideoSource.h</a></li>
<li><a href="#trunkSourceWebCoreplatformmediastreammacWebAudioSourceProviderAVFObjCh">trunk/Source/WebCore/platform/mediastream/mac/WebAudioSourceProviderAVFObjC.h</a></li>
<li><a href="#trunkSourceWebCoreplatformmediastreammacWebAudioSourceProviderAVFObjCmm">trunk/Source/WebCore/platform/mediastream/mac/WebAudioSourceProviderAVFObjC.mm</a></li>
</ul>

<h3>Removed Paths</h3>
<ul>
<li><a href="#trunkSourceWebCoreplatformmediastreammacAudioCaptureSourceProviderObjCh">trunk/Source/WebCore/platform/mediastream/mac/AudioCaptureSourceProviderObjC.h</a></li>
<li><a href="#trunkSourceWebCoreplatformmediastreammacAudioSourceObserverObjCh">trunk/Source/WebCore/platform/mediastream/mac/AudioSourceObserverObjC.h</a></li>
</ul>

</div>
<div id="patch">
<h3>Diff</h3>
<a id="trunkSourceWebCoreChangeLog"></a>
<div class="modfile"><h4>Modified: trunk/Source/WebCore/ChangeLog (212571 => 212572)</h4>
<pre class="diff"><span>
<span class="info">--- 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)
</span><span class="lines">@@ -1,3 +1,62 @@
</span><ins>+2017-02-17  Jer Noble  &lt;jer.noble@apple.com&gt;
+
+        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 &quot;observer&quot;, 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 &quot;observer&quot; 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.
+
</ins><span class="cx"> 2017-02-17  Antoine Quint  &lt;graouts@apple.com&gt;
</span><span class="cx"> 
</span><span class="cx">         REGRESSION: Subtitles menu in media controls allows multiple items to be selected
</span></span></pre></div>
<a id="trunkSourceWebCoreWebCorexcodeprojprojectpbxproj"></a>
<div class="modfile"><h4>Modified: trunk/Source/WebCore/WebCore.xcodeproj/project.pbxproj (212571 => 212572)</h4>
<pre class="diff"><span>
<span class="info">--- 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)
</span><span class="lines">@@ -161,7 +161,6 @@
</span><span class="cx">                 076970871463AD8700F502CF /* TextTrackList.h in Headers */ = {isa = PBXBuildFile; fileRef = 076970851463AD8700F502CF /* TextTrackList.h */; };
</span><span class="cx">                 076EC1331E44F56D00E5D813 /* AudioTrackPrivateMediaStreamCocoa.cpp in Sources */ = {isa = PBXBuildFile; fileRef = 076EC1321E44F2CB00E5D813 /* AudioTrackPrivateMediaStreamCocoa.cpp */; };
</span><span class="cx">                 076F0D0E12B8192700C26AA4 /* MediaPlayerPrivateAVFoundation.h in Headers */ = {isa = PBXBuildFile; fileRef = 076F0D0A12B8192700C26AA4 /* MediaPlayerPrivateAVFoundation.h */; };
</span><del>-                07707CB01E205EE300005BF7 /* AudioSourceObserverObjC.h in Headers */ = {isa = PBXBuildFile; fileRef = 07707CAF1E205EC400005BF7 /* AudioSourceObserverObjC.h */; };
</del><span class="cx">                 077664FC183E6B5C00133B92 /* JSQuickTimePluginReplacement.cpp in Sources */ = {isa = PBXBuildFile; fileRef = 077664FA183E6B5C00133B92 /* JSQuickTimePluginReplacement.cpp */; };
</span><span class="cx">                 077664FD183E6B5C00133B92 /* JSQuickTimePluginReplacement.h in Headers */ = {isa = PBXBuildFile; fileRef = 077664FB183E6B5C00133B92 /* JSQuickTimePluginReplacement.h */; };
</span><span class="cx">                 0779BF0E18453168000B6AE7 /* HTMLMediaElementMediaStream.h in Headers */ = {isa = PBXBuildFile; fileRef = 0779BF0B18453168000B6AE7 /* HTMLMediaElementMediaStream.h */; };
</span><span class="lines">@@ -7285,8 +7284,6 @@
</span><span class="cx">                 076EC1321E44F2CB00E5D813 /* AudioTrackPrivateMediaStreamCocoa.cpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; path = AudioTrackPrivateMediaStreamCocoa.cpp; sourceTree = &quot;&lt;group&gt;&quot;; };
</span><span class="cx">                 076F0D0912B8192700C26AA4 /* MediaPlayerPrivateAVFoundation.cpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; path = MediaPlayerPrivateAVFoundation.cpp; sourceTree = &quot;&lt;group&gt;&quot;; };
</span><span class="cx">                 076F0D0A12B8192700C26AA4 /* MediaPlayerPrivateAVFoundation.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = MediaPlayerPrivateAVFoundation.h; sourceTree = &quot;&lt;group&gt;&quot;; };
</span><del>-                07707CAF1E205EC400005BF7 /* AudioSourceObserverObjC.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = AudioSourceObserverObjC.h; sourceTree = &quot;&lt;group&gt;&quot;; };
-                07707CB11E20649C00005BF7 /* AudioCaptureSourceProviderObjC.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = AudioCaptureSourceProviderObjC.h; sourceTree = &quot;&lt;group&gt;&quot;; };
</del><span class="cx">                 077664FA183E6B5C00133B92 /* JSQuickTimePluginReplacement.cpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; path = JSQuickTimePluginReplacement.cpp; sourceTree = &quot;&lt;group&gt;&quot;; };
</span><span class="cx">                 077664FB183E6B5C00133B92 /* JSQuickTimePluginReplacement.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = JSQuickTimePluginReplacement.h; sourceTree = &quot;&lt;group&gt;&quot;; };
</span><span class="cx">                 0779BF0B18453168000B6AE7 /* HTMLMediaElementMediaStream.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = HTMLMediaElementMediaStream.h; sourceTree = &quot;&lt;group&gt;&quot;; };
</span><span class="lines">@@ -15465,8 +15462,6 @@
</span><span class="cx">                 0729B14D17CFCCA0004F1D60 /* mac */ = {
</span><span class="cx">                         isa = PBXGroup;
</span><span class="cx">                         children = (
</span><del>-                                07707CB11E20649C00005BF7 /* AudioCaptureSourceProviderObjC.h */,
-                                07707CAF1E205EC400005BF7 /* AudioSourceObserverObjC.h */,
</del><span class="cx">                                 076EC1321E44F2CB00E5D813 /* AudioTrackPrivateMediaStreamCocoa.cpp */,
</span><span class="cx">                                 07C046C61E42512F007201E7 /* AudioTrackPrivateMediaStreamCocoa.h */,
</span><span class="cx">                                 070363D8181A1CDC00C074A5 /* AVAudioCaptureSource.h */,
</span><span class="lines">@@ -25346,7 +25341,6 @@
</span><span class="cx">                                 073B87691E4385AC0071C0EC /* AudioSampleDataSource.h in Headers */,
</span><span class="cx">                                 FD8C46EC154608E700A5910C /* AudioScheduledSourceNode.h in Headers */,
</span><span class="cx">                                 CDA7982A170A3D0000D45C55 /* AudioSession.h in Headers */,
</span><del>-                                07707CB01E205EE300005BF7 /* AudioSourceObserverObjC.h in Headers */,
</del><span class="cx">                                 FD31608912B026F700C1A359 /* AudioSourceProvider.h in Headers */,
</span><span class="cx">                                 CD8A7BBC197735FE00CBD643 /* AudioSourceProviderAVFObjC.h in Headers */,
</span><span class="cx">                                 FD62F52E145898D80094B0ED /* AudioSourceProviderClient.h in Headers */,
</span></span></pre></div>
<a id="trunkSourceWebCoreplatformmediastreamRealtimeMediaSourceh"></a>
<div class="modfile"><h4>Modified: trunk/Source/WebCore/platform/mediastream/RealtimeMediaSource.h (212571 => 212572)</h4>
<pre class="diff"><span>
<span class="info">--- 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)
</span><span class="lines">@@ -67,13 +67,13 @@
</span><span class="cx">         virtual ~Observer() { }
</span><span class="cx">         
</span><span class="cx">         // Source state changes.
</span><del>-        virtual void sourceStopped() = 0;
-        virtual void sourceMutedChanged() = 0;
-        virtual void sourceEnabledChanged() = 0;
-        virtual void sourceSettingsChanged() = 0;
</del><ins>+        virtual void sourceStopped() { }
+        virtual void sourceMutedChanged() { }
+        virtual void sourceEnabledChanged() { }
+        virtual void sourceSettingsChanged() { }
</ins><span class="cx"> 
</span><span class="cx">         // Observer state queries.
</span><del>-        virtual bool preventSourceFromStopping() = 0;
</del><ins>+        virtual bool preventSourceFromStopping() { return false; }
</ins><span class="cx">         
</span><span class="cx">         // Called on the main thread.
</span><span class="cx">         virtual void videoSampleAvailable(MediaSample&amp;) { }
</span></span></pre></div>
<a id="trunkSourceWebCoreplatformmediastreammacAVAudioCaptureSourceh"></a>
<div class="modfile"><h4>Modified: trunk/Source/WebCore/platform/mediastream/mac/AVAudioCaptureSource.h (212571 => 212572)</h4>
<pre class="diff"><span>
<span class="info">--- 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)
</span><span class="lines">@@ -29,7 +29,6 @@
</span><span class="cx"> #if ENABLE(MEDIA_STREAM) &amp;&amp; USE(AVFOUNDATION)
</span><span class="cx"> 
</span><span class="cx"> #include &quot;AVMediaCaptureSource.h&quot;
</span><del>-#include &quot;AudioCaptureSourceProviderObjC.h&quot;
</del><span class="cx"> #include &quot;CAAudioStreamDescription.h&quot;
</span><span class="cx"> #include &lt;wtf/Lock.h&gt;
</span><span class="cx"> 
</span><span class="lines">@@ -42,7 +41,7 @@
</span><span class="cx"> class WebAudioBufferList;
</span><span class="cx"> class WebAudioSourceProviderAVFObjC;
</span><span class="cx"> 
</span><del>-class AVAudioCaptureSource : public AVMediaCaptureSource, public AudioCaptureSourceProviderObjC {
</del><ins>+class AVAudioCaptureSource : public AVMediaCaptureSource {
</ins><span class="cx"> public:
</span><span class="cx"> 
</span><span class="cx">     static RefPtr&lt;AVMediaCaptureSource&gt; create(AVCaptureDevice*, const AtomicString&amp;, const MediaConstraints*, String&amp;);
</span><span class="lines">@@ -50,11 +49,6 @@
</span><span class="cx"> private:
</span><span class="cx">     AVAudioCaptureSource(AVCaptureDevice*, const AtomicString&amp;);
</span><span class="cx">     virtual ~AVAudioCaptureSource();
</span><del>-    
-    // AudioCaptureSourceProviderObjC
-    void addObserver(AudioSourceObserverObjC&amp;) final;
-    void removeObserver(AudioSourceObserverObjC&amp;) final;
-    void start() final;
</del><span class="cx"> 
</span><span class="cx">     void initializeCapabilities(RealtimeMediaSourceCapabilities&amp;) override;
</span><span class="cx">     void initializeSupportedConstraints(RealtimeMediaSourceSupportedConstraints&amp;) override;
</span><span class="lines">@@ -71,7 +65,6 @@
</span><span class="cx"> 
</span><span class="cx">     RefPtr&lt;WebAudioSourceProviderAVFObjC&gt; m_audioSourceProvider;
</span><span class="cx">     std::unique_ptr&lt;CAAudioStreamDescription&gt; m_inputDescription;
</span><del>-    Vector&lt;AudioSourceObserverObjC*&gt; m_observers;
</del><span class="cx">     Lock m_lock;
</span><span class="cx"> };
</span><span class="cx"> 
</span></span></pre></div>
<a id="trunkSourceWebCoreplatformmediastreammacAVAudioCaptureSourcemm"></a>
<div class="modfile"><h4>Modified: trunk/Source/WebCore/platform/mediastream/mac/AVAudioCaptureSource.mm (212571 => 212572)</h4>
<pre class="diff"><span>
<span class="info">--- 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)
</span><span class="lines">@@ -29,7 +29,6 @@
</span><span class="cx"> #if ENABLE(MEDIA_STREAM) &amp;&amp; USE(AVFOUNDATION)
</span><span class="cx"> 
</span><span class="cx"> #import &quot;AudioSampleBufferList.h&quot;
</span><del>-#import &quot;AudioSourceObserverObjC.h&quot;
</del><span class="cx"> #import &quot;CAAudioStreamDescription.h&quot;
</span><span class="cx"> #import &quot;Logging.h&quot;
</span><span class="cx"> #import &quot;MediaConstraints.h&quot;
</span><span class="lines">@@ -117,25 +116,6 @@
</span><span class="cx">     settings.setDeviceId(id());
</span><span class="cx"> }
</span><span class="cx"> 
</span><del>-void AVAudioCaptureSource::addObserver(AudioSourceObserverObjC&amp; observer)
-{
-    LockHolder lock(m_lock);
-    m_observers.append(&amp;observer);
-    if (m_inputDescription)
-        observer.prepare(&amp;m_inputDescription-&gt;streamDescription());
-}
-
-void AVAudioCaptureSource::removeObserver(AudioSourceObserverObjC&amp; observer)
-{
-    LockHolder lock(m_lock);
-    m_observers.removeFirst(&amp;observer);
-}
-
-void AVAudioCaptureSource::start()
-{
-    startProducingData();
-}
-
</del><span class="cx"> void AVAudioCaptureSource::setupCaptureSession()
</span><span class="cx"> {
</span><span class="cx">     RetainPtr&lt;AVCaptureDeviceInputType&gt; audioIn = adoptNS([allocAVCaptureDeviceInputInstance() initWithDevice:device() error:nil]);
</span><span class="lines">@@ -165,9 +145,8 @@
</span><span class="cx">         m_audioConnection = nullptr;
</span><span class="cx">         m_inputDescription = nullptr;
</span><span class="cx"> 
</span><del>-        for (auto&amp; observer : m_observers)
-            observer-&gt;unprepare();
-        m_observers.shrink(0);
</del><ins>+        if (m_audioSourceProvider)
+            m_audioSourceProvider-&gt;unprepare();
</ins><span class="cx">     }
</span><span class="cx"> 
</span><span class="cx">     // Don't hold the lock when destroying the audio provider, it will call back into this object
</span><span class="lines">@@ -194,20 +173,12 @@
</span><span class="cx">     if (!m_inputDescription || *m_inputDescription != *streamDescription) {
</span><span class="cx">         m_inputDescription = std::make_unique&lt;CAAudioStreamDescription&gt;(*streamDescription);
</span><span class="cx"> 
</span><del>-        if (!m_observers.isEmpty()) {
-            for (auto&amp; observer : m_observers)
-                observer-&gt;prepare(streamDescription);
-        }
</del><ins>+        if (m_audioSourceProvider)
+            m_audioSourceProvider-&gt;prepare(streamDescription);
</ins><span class="cx">     }
</span><span class="cx"> 
</span><span class="cx">     m_list = std::make_unique&lt;WebAudioBufferList&gt;(*m_inputDescription, sampleBuffer);
</span><span class="cx">     audioSamplesAvailable(toMediaTime(CMSampleBufferGetPresentationTimeStamp(sampleBuffer)), *m_list, CAAudioStreamDescription(*streamDescription), CMSampleBufferGetNumSamples(sampleBuffer));
</span><del>-
-    if (m_observers.isEmpty())
-        return;
-
-    for (auto&amp; observer : m_observers)
-        observer-&gt;process(formatDescription, sampleBuffer);
</del><span class="cx"> }
</span><span class="cx"> 
</span><span class="cx"> AudioSourceProvider* AVAudioCaptureSource::audioSourceProvider()
</span></span></pre></div>
<a id="trunkSourceWebCoreplatformmediastreammacAudioCaptureSourceProviderObjCh"></a>
<div class="delfile"><h4>Deleted: trunk/Source/WebCore/platform/mediastream/mac/AudioCaptureSourceProviderObjC.h (212571 => 212572)</h4>
<pre class="diff"><span>
<span class="info">--- 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)
</span><span class="lines">@@ -1,50 +0,0 @@
</span><del>-/*
- * 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) &amp;&amp; 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&amp;) = 0;
-    virtual void removeObserver(AudioSourceObserverObjC&amp;) = 0;
-
-    virtual void start() = 0;
-};
-
-} // namespace WebCore
-
-#endif // ENABLE(MEDIA_STREAM)
</del></span></pre></div>
<a id="trunkSourceWebCoreplatformmediastreammacAudioSourceObserverObjCh"></a>
<div class="delfile"><h4>Deleted: trunk/Source/WebCore/platform/mediastream/mac/AudioSourceObserverObjC.h (212571 => 212572)</h4>
<pre class="diff"><span>
<span class="info">--- 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)
</span><span class="lines">@@ -1,47 +0,0 @@
</span><del>-/*
- * 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) &amp;&amp; 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)
</del></span></pre></div>
<a id="trunkSourceWebCoreplatformmediastreammacAudioTrackPrivateMediaStreamCocoah"></a>
<div class="modfile"><h4>Modified: trunk/Source/WebCore/platform/mediastream/mac/AudioTrackPrivateMediaStreamCocoa.h (212571 => 212572)</h4>
<pre class="diff"><span>
<span class="info">--- 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)
</span><span class="lines">@@ -27,7 +27,6 @@
</span><span class="cx"> 
</span><span class="cx"> #if ENABLE(VIDEO_TRACK) &amp;&amp; ENABLE(MEDIA_STREAM)
</span><span class="cx"> 
</span><del>-#include &quot;AudioSourceObserverObjC.h&quot;
</del><span class="cx"> #include &quot;AudioTrackPrivateMediaStream.h&quot;
</span><span class="cx"> #include &lt;AudioToolbox/AudioToolbox.h&gt;
</span><span class="cx"> #include &lt;CoreAudio/CoreAudioTypes.h&gt;
</span><span class="lines">@@ -63,10 +62,6 @@
</span><span class="cx"> 
</span><span class="cx">     // RealtimeMediaSource::Observer
</span><span class="cx">     void sourceStopped() final;
</span><del>-    void sourceMutedChanged()  final { }
-    void sourceEnabledChanged() final { }
-    void sourceSettingsChanged() final { }
-    bool preventSourceFromStopping() final { return false; }
</del><span class="cx">     void audioSamplesAvailable(const MediaTime&amp;, const PlatformAudioData&amp;, const AudioStreamDescription&amp;, size_t) final;
</span><span class="cx"> 
</span><span class="cx">     static OSStatus inputProc(void*, AudioUnitRenderActionFlags*, const AudioTimeStamp*, UInt32 inBusNumber, UInt32 numberOfFrames, AudioBufferList*);
</span></span></pre></div>
<a id="trunkSourceWebCoreplatformmediastreammacMockRealtimeAudioSourceMach"></a>
<div class="modfile"><h4>Modified: trunk/Source/WebCore/platform/mediastream/mac/MockRealtimeAudioSourceMac.h (212571 => 212572)</h4>
<pre class="diff"><span>
<span class="info">--- 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)
</span><span class="lines">@@ -32,7 +32,6 @@
</span><span class="cx"> 
</span><span class="cx"> #if ENABLE(MEDIA_STREAM)
</span><span class="cx"> 
</span><del>-#include &quot;AudioCaptureSourceProviderObjC.h&quot;
</del><span class="cx"> #include &quot;FontCascade.h&quot;
</span><span class="cx"> #include &quot;MockRealtimeAudioSource.h&quot;
</span><span class="cx"> #include &lt;CoreAudio/CoreAudioTypes.h&gt;
</span><span class="lines">@@ -46,14 +45,7 @@
</span><span class="cx"> class WebAudioBufferList;
</span><span class="cx"> class WebAudioSourceProviderAVFObjC;
</span><span class="cx"> 
</span><del>-class MockRealtimeAudioSourceMac final : public MockRealtimeAudioSource, public AudioCaptureSourceProviderObjC {
-public:
-
-    // AudioCaptureSourceProviderObjC
-    void addObserver(AudioSourceObserverObjC&amp;) final;
-    void removeObserver(AudioSourceObserverObjC&amp;) final;
-    void start() final;
-
</del><ins>+class MockRealtimeAudioSourceMac final : public MockRealtimeAudioSource {
</ins><span class="cx"> private:
</span><span class="cx">     friend class MockRealtimeAudioSource;
</span><span class="cx">     MockRealtimeAudioSourceMac(const String&amp;);
</span><span class="lines">@@ -77,7 +69,6 @@
</span><span class="cx">     RetainPtr&lt;CMFormatDescriptionRef&gt; m_formatDescription;
</span><span class="cx">     AudioStreamBasicDescription m_streamFormat;
</span><span class="cx">     RefPtr&lt;WebAudioSourceProviderAVFObjC&gt; m_audioSourceProvider;
</span><del>-    Vector&lt;AudioSourceObserverObjC*&gt; m_observers;
</del><span class="cx"> };
</span><span class="cx"> 
</span><span class="cx"> } // namespace WebCore
</span></span></pre></div>
<a id="trunkSourceWebCoreplatformmediastreammacMockRealtimeAudioSourceMacmm"></a>
<div class="modfile"><h4>Modified: trunk/Source/WebCore/platform/mediastream/mac/MockRealtimeAudioSourceMac.mm (212571 => 212572)</h4>
<pre class="diff"><span>
<span class="info">--- 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)
</span><span class="lines">@@ -78,24 +78,6 @@
</span><span class="cx">     return source;
</span><span class="cx"> }
</span><span class="cx"> 
</span><del>-void MockRealtimeAudioSourceMac::addObserver(AudioSourceObserverObjC&amp; observer)
-{
-    m_observers.append(&amp;observer);
-    if (m_streamFormat.mSampleRate)
-        observer.prepare(&amp;m_streamFormat);
-}
-
-void MockRealtimeAudioSourceMac::removeObserver(AudioSourceObserverObjC&amp; observer)
-{
-    m_observers.removeFirst(&amp;observer);
-}
-
-void MockRealtimeAudioSourceMac::start()
-{
-    startProducingData();
-}
-
-
</del><span class="cx"> void MockRealtimeAudioSourceMac::emitSampleBuffers(uint32_t frameCount)
</span><span class="cx"> {
</span><span class="cx">     ASSERT(m_formatDescription);
</span><span class="lines">@@ -104,24 +86,6 @@
</span><span class="cx">     m_bytesEmitted += frameCount;
</span><span class="cx"> 
</span><span class="cx">     audioSamplesAvailable(toMediaTime(startTime), *m_audioBufferList, CAAudioStreamDescription(m_streamFormat), frameCount);
</span><del>-
-    CMSampleBufferRef sampleBuffer;
-    OSStatus result = CMAudioSampleBufferCreateWithPacketDescriptions(nullptr, nullptr, true, nullptr, nullptr, m_formatDescription.get(), frameCount, startTime, nullptr, &amp;sampleBuffer);
-    ASSERT(sampleBuffer);
-    ASSERT(!result);
-
-    if (!sampleBuffer)
-        return;
-
-    auto buffer = adoptCF(sampleBuffer);
-    result = CMSampleBufferSetDataBufferFromAudioBufferList(sampleBuffer, kCFAllocatorDefault, kCFAllocatorDefault, 0, m_audioBufferList-&gt;list());
-    ASSERT(!result);
-
-    result = CMSampleBufferSetDataReady(sampleBuffer);
-    ASSERT(!result);
-
-    for (const auto&amp; observer : m_observers)
-        observer-&gt;process(m_formatDescription.get(), sampleBuffer);
</del><span class="cx"> }
</span><span class="cx"> 
</span><span class="cx"> void MockRealtimeAudioSourceMac::reconfigure()
</span><span class="lines">@@ -142,9 +106,6 @@
</span><span class="cx">     CMFormatDescriptionRef formatDescription;
</span><span class="cx">     CMAudioFormatDescriptionCreate(NULL, &amp;m_streamFormat, 0, NULL, 0, NULL, NULL, &amp;formatDescription);
</span><span class="cx">     m_formatDescription = adoptCF(formatDescription);
</span><del>-
-    for (auto&amp; observer : m_observers)
-        observer-&gt;prepare(&amp;m_streamFormat);
</del><span class="cx"> }
</span><span class="cx"> 
</span><span class="cx"> void MockRealtimeAudioSourceMac::render(double delta)
</span><span class="lines">@@ -222,8 +183,10 @@
</span><span class="cx"> 
</span><span class="cx"> AudioSourceProvider* MockRealtimeAudioSourceMac::audioSourceProvider()
</span><span class="cx"> {
</span><del>-    if (!m_audioSourceProvider)
</del><ins>+    if (!m_audioSourceProvider) {
</ins><span class="cx">         m_audioSourceProvider = WebAudioSourceProviderAVFObjC::create(*this);
</span><ins>+        m_audioSourceProvider-&gt;prepare(&amp;m_streamFormat);
+    }
</ins><span class="cx"> 
</span><span class="cx">     return m_audioSourceProvider.get();
</span><span class="cx"> }
</span></span></pre></div>
<a id="trunkSourceWebCoreplatformmediastreammacRealtimeIncomingAudioSourcecpp"></a>
<div class="modfile"><h4>Modified: trunk/Source/WebCore/platform/mediastream/mac/RealtimeIncomingAudioSource.cpp (212571 => 212572)</h4>
<pre class="diff"><span>
<span class="info">--- 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)
</span><span class="lines">@@ -97,32 +97,14 @@
</span><span class="cx">     return m_supportedConstraints;
</span><span class="cx"> }
</span><span class="cx"> 
</span><del>-void RealtimeIncomingAudioSource::addObserver(AudioSourceObserverObjC&amp; observer)
</del><ins>+AudioSourceProvider* RealtimeIncomingAudioSource::audioSourceProvider()
</ins><span class="cx"> {
</span><del>-    m_audioSourceObservers.append(observer);
-    if (m_formatDescription) {
</del><ins>+    if (!m_audioSourceProvider) {
+        m_audioSourceProvider = WebAudioSourceProviderAVFObjC::create(*this);
</ins><span class="cx">         const auto* description = CMAudioFormatDescriptionGetStreamBasicDescription(m_formatDescription.get());
</span><del>-        observer.prepare(description);
</del><ins>+        m_audioSourceProvider-&gt;prepare(description);
</ins><span class="cx">     }
</span><del>-}
</del><span class="cx"> 
</span><del>-void RealtimeIncomingAudioSource::removeObserver(AudioSourceObserverObjC&amp; observer)
-{
-    m_audioSourceObservers.removeFirstMatching([&amp;observer](const auto&amp; registeredObserver) {
-        return &amp;observer == &amp;registeredObserver.get();
-    });
-}
-
-void RealtimeIncomingAudioSource::start()
-{
-    startProducingData();
-}
-
-AudioSourceProvider* RealtimeIncomingAudioSource::audioSourceProvider()
-{
-    if (!m_audioSourceProvider)
-        m_audioSourceProvider = WebAudioSourceProviderAVFObjC::create(*this);
-
</del><span class="cx">     return m_audioSourceProvider.get();
</span><span class="cx"> }
</span><span class="cx"> 
</span></span></pre></div>
<a id="trunkSourceWebCoreplatformmediastreammacRealtimeIncomingAudioSourceh"></a>
<div class="modfile"><h4>Modified: trunk/Source/WebCore/platform/mediastream/mac/RealtimeIncomingAudioSource.h (212571 => 212572)</h4>
<pre class="diff"><span>
<span class="info">--- 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)
</span><span class="lines">@@ -32,7 +32,6 @@
</span><span class="cx"> 
</span><span class="cx"> #if USE(LIBWEBRTC)
</span><span class="cx"> 
</span><del>-#include &quot;AudioCaptureSourceProviderObjC.h&quot;
</del><span class="cx"> #include &quot;LibWebRTCMacros.h&quot;
</span><span class="cx"> #include &quot;RealtimeMediaSource.h&quot;
</span><span class="cx"> #include &lt;CoreAudio/CoreAudioTypes.h&gt;
</span><span class="lines">@@ -39,11 +38,13 @@
</span><span class="cx"> #include &lt;webrtc/api/mediastreaminterface.h&gt;
</span><span class="cx"> #include &lt;wtf/RetainPtr.h&gt;
</span><span class="cx"> 
</span><ins>+typedef const struct opaqueCMFormatDescription *CMFormatDescriptionRef;
+
</ins><span class="cx"> namespace WebCore {
</span><span class="cx"> 
</span><span class="cx"> class WebAudioSourceProviderAVFObjC;
</span><span class="cx"> 
</span><del>-class RealtimeIncomingAudioSource final : public RealtimeMediaSource, private webrtc::AudioTrackSinkInterface, private AudioCaptureSourceProviderObjC {
</del><ins>+class RealtimeIncomingAudioSource final : public RealtimeMediaSource, private webrtc::AudioTrackSinkInterface {
</ins><span class="cx"> public:
</span><span class="cx">     static Ref&lt;RealtimeIncomingAudioSource&gt; create(rtc::scoped_refptr&lt;webrtc::AudioTrackInterface&gt;&amp;&amp;, String&amp;&amp;);
</span><span class="cx"> 
</span><span class="lines">@@ -67,11 +68,6 @@
</span><span class="cx"> 
</span><span class="cx">     AudioSourceProvider* audioSourceProvider() final;
</span><span class="cx"> 
</span><del>-    // AudioCaptureSourceProviderObjC API
-    void addObserver(AudioSourceObserverObjC&amp;) final;
-    void removeObserver(AudioSourceObserverObjC&amp;) final;
-    void start() final;
-
</del><span class="cx">     RealtimeMediaSourceSettings m_currentSettings;
</span><span class="cx">     RealtimeMediaSourceSupportedConstraints m_supportedConstraints;
</span><span class="cx">     RefPtr&lt;RealtimeMediaSourceCapabilities&gt; m_capabilities;
</span><span class="lines">@@ -81,7 +77,6 @@
</span><span class="cx"> 
</span><span class="cx">     RefPtr&lt;WebAudioSourceProviderAVFObjC&gt; m_audioSourceProvider;
</span><span class="cx">     RetainPtr&lt;CMFormatDescriptionRef&gt; m_formatDescription;
</span><del>-    Vector&lt;std::reference_wrapper&lt;AudioSourceObserverObjC&gt;&gt; m_audioSourceObservers;
</del><span class="cx"> };
</span><span class="cx"> 
</span><span class="cx"> } // namespace WebCore
</span></span></pre></div>
<a id="trunkSourceWebCoreplatformmediastreammacRealtimeOutgoingAudioSourceh"></a>
<div class="modfile"><h4>Modified: trunk/Source/WebCore/platform/mediastream/mac/RealtimeOutgoingAudioSource.h (212571 => 212572)</h4>
<pre class="diff"><span>
<span class="info">--- 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)
</span><span class="lines">@@ -63,11 +63,8 @@
</span><span class="cx">     void UnregisterObserver(webrtc::ObserverInterface*) final { }
</span><span class="cx"> 
</span><span class="cx">     // RealtimeMediaSource::Observer API
</span><del>-    void sourceStopped() final { }
</del><span class="cx">     void sourceMutedChanged() final;
</span><span class="cx">     void sourceEnabledChanged() final;
</span><del>-    void sourceSettingsChanged() final { }
-    bool preventSourceFromStopping() final { return false; }
</del><span class="cx">     void audioSamplesAvailable(const MediaTime&amp;, const PlatformAudioData&amp;, const AudioStreamDescription&amp;, size_t) final;
</span><span class="cx"> 
</span><span class="cx">     void pullAudioData();
</span></span></pre></div>
<a id="trunkSourceWebCoreplatformmediastreammacRealtimeOutgoingVideoSourceh"></a>
<div class="modfile"><h4>Modified: trunk/Source/WebCore/platform/mediastream/mac/RealtimeOutgoingVideoSource.h (212571 => 212572)</h4>
<pre class="diff"><span>
<span class="info">--- 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)
</span><span class="lines">@@ -66,11 +66,8 @@
</span><span class="cx">     void RemoveSink(rtc::VideoSinkInterface&lt;webrtc::VideoFrame&gt;*) final;
</span><span class="cx"> 
</span><span class="cx">     // RealtimeMediaSource::Observer API
</span><del>-    bool preventSourceFromStopping() final { return false; }
-    void sourceStopped() final { }
</del><span class="cx">     void sourceMutedChanged() final;
</span><span class="cx">     void sourceEnabledChanged() final;
</span><del>-    void sourceSettingsChanged() final { }
</del><span class="cx">     void videoSampleAvailable(MediaSample&amp;) final;
</span><span class="cx"> 
</span><span class="cx">     Vector&lt;rtc::VideoSinkInterface&lt;webrtc::VideoFrame&gt;*&gt; m_sinks;
</span></span></pre></div>
<a id="trunkSourceWebCoreplatformmediastreammacWebAudioSourceProviderAVFObjCh"></a>
<div class="modfile"><h4>Modified: trunk/Source/WebCore/platform/mediastream/mac/WebAudioSourceProviderAVFObjC.h (212571 => 212572)</h4>
<pre class="diff"><span>
<span class="info">--- 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)
</span><span class="lines">@@ -27,9 +27,8 @@
</span><span class="cx"> 
</span><span class="cx"> #if ENABLE(WEB_AUDIO) &amp;&amp; ENABLE(MEDIA_STREAM)
</span><span class="cx"> 
</span><del>-#include &quot;AudioCaptureSourceProviderObjC.h&quot;
-#include &quot;AudioSourceObserverObjC.h&quot;
</del><span class="cx"> #include &quot;AudioSourceProvider.h&quot;
</span><ins>+#include &quot;RealtimeMediaSource.h&quot;
</ins><span class="cx"> #include &lt;wtf/Lock.h&gt;
</span><span class="cx"> #include &lt;wtf/RefCounted.h&gt;
</span><span class="cx"> #include &lt;wtf/RefPtr.h&gt;
</span><span class="lines">@@ -44,22 +43,23 @@
</span><span class="cx"> 
</span><span class="cx"> class CARingBuffer;
</span><span class="cx"> 
</span><del>-class WebAudioSourceProviderAVFObjC : public RefCounted&lt;WebAudioSourceProviderAVFObjC&gt;, public AudioSourceProvider, public AudioSourceObserverObjC {
</del><ins>+class WebAudioSourceProviderAVFObjC : public RefCounted&lt;WebAudioSourceProviderAVFObjC&gt;, public AudioSourceProvider, RealtimeMediaSource::Observer {
</ins><span class="cx"> public:
</span><del>-    static Ref&lt;WebAudioSourceProviderAVFObjC&gt; create(AudioCaptureSourceProviderObjC&amp;);
</del><ins>+    static Ref&lt;WebAudioSourceProviderAVFObjC&gt; create(RealtimeMediaSource&amp;);
</ins><span class="cx">     virtual ~WebAudioSourceProviderAVFObjC();
</span><span class="cx"> 
</span><ins>+    void prepare(const AudioStreamBasicDescription *);
+    void unprepare();
+
</ins><span class="cx"> private:
</span><del>-    WebAudioSourceProviderAVFObjC(AudioCaptureSourceProviderObjC&amp;);
</del><ins>+    WebAudioSourceProviderAVFObjC(RealtimeMediaSource&amp;);
</ins><span class="cx"> 
</span><span class="cx">     // AudioSourceProvider
</span><span class="cx">     void provideInput(AudioBus*, size_t) override;
</span><span class="cx">     void setClient(AudioSourceProviderClient*) override;
</span><span class="cx"> 
</span><del>-    // AudioSourceObserverObjC
-    void prepare(const AudioStreamBasicDescription *) final;
-    void unprepare() final;
-    void process(CMFormatDescriptionRef, CMSampleBufferRef) final;
</del><ins>+    // RealtimeMediaSource::Observer
+    void audioSamplesAvailable(const MediaTime&amp;, const PlatformAudioData&amp;, const AudioStreamDescription&amp;, size_t) final;
</ins><span class="cx"> 
</span><span class="cx">     size_t m_listBufferSize { 0 };
</span><span class="cx">     std::unique_ptr&lt;AudioBufferList&gt; m_list;
</span><span class="lines">@@ -71,7 +71,7 @@
</span><span class="cx">     uint64_t m_writeCount { 0 };
</span><span class="cx">     uint64_t m_readCount { 0 };
</span><span class="cx">     AudioSourceProviderClient* m_client { nullptr };
</span><del>-    AudioCaptureSourceProviderObjC* m_captureSource { nullptr };
</del><ins>+    RealtimeMediaSource* m_captureSource { nullptr };
</ins><span class="cx">     Lock m_mutex;
</span><span class="cx">     bool m_connected { false };
</span><span class="cx"> };
</span></span></pre></div>
<a id="trunkSourceWebCoreplatformmediastreammacWebAudioSourceProviderAVFObjCmm"></a>
<div class="modfile"><h4>Modified: trunk/Source/WebCore/platform/mediastream/mac/WebAudioSourceProviderAVFObjC.mm (212571 => 212572)</h4>
<pre class="diff"><span>
<span class="info">--- 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)
</span><span class="lines">@@ -34,6 +34,7 @@
</span><span class="cx"> #import &quot;CARingBuffer.h&quot;
</span><span class="cx"> #import &quot;Logging.h&quot;
</span><span class="cx"> #import &quot;MediaTimeAVFoundation.h&quot;
</span><ins>+#import &quot;WebAudioBufferList.h&quot;
</ins><span class="cx"> #import &lt;AudioToolbox/AudioToolbox.h&gt;
</span><span class="cx"> #import &lt;objc/runtime.h&gt;
</span><span class="cx"> #import &lt;wtf/MainThread.h&gt;
</span><span class="lines">@@ -53,12 +54,12 @@
</span><span class="cx"> 
</span><span class="cx"> static const double kRingBufferDuration = 1;
</span><span class="cx"> 
</span><del>-Ref&lt;WebAudioSourceProviderAVFObjC&gt; WebAudioSourceProviderAVFObjC::create(AudioCaptureSourceProviderObjC&amp; source)
</del><ins>+Ref&lt;WebAudioSourceProviderAVFObjC&gt; WebAudioSourceProviderAVFObjC::create(RealtimeMediaSource&amp; source)
</ins><span class="cx"> {
</span><span class="cx">     return adoptRef(*new WebAudioSourceProviderAVFObjC(source));
</span><span class="cx"> }
</span><span class="cx"> 
</span><del>-WebAudioSourceProviderAVFObjC::WebAudioSourceProviderAVFObjC(AudioCaptureSourceProviderObjC&amp; source)
</del><ins>+WebAudioSourceProviderAVFObjC::WebAudioSourceProviderAVFObjC(RealtimeMediaSource&amp; source)
</ins><span class="cx">     : m_captureSource(&amp;source)
</span><span class="cx"> {
</span><span class="cx"> }
</span><span class="lines">@@ -130,7 +131,7 @@
</span><span class="cx">     if (m_client &amp;&amp; !m_connected) {
</span><span class="cx">         m_connected = true;
</span><span class="cx">         m_captureSource-&gt;addObserver(*this);
</span><del>-        m_captureSource-&gt;start();
</del><ins>+        m_captureSource-&gt;startProducingData();
</ins><span class="cx">     } else if (!m_client &amp;&amp; m_connected) {
</span><span class="cx">         m_captureSource-&gt;removeObserver(*this);
</span><span class="cx">         m_connected = false;
</span><span class="lines">@@ -219,24 +220,14 @@
</span><span class="cx">     }
</span><span class="cx"> }
</span><span class="cx"> 
</span><del>-void WebAudioSourceProviderAVFObjC::process(CMFormatDescriptionRef, CMSampleBufferRef sampleBuffer)
</del><ins>+void WebAudioSourceProviderAVFObjC::audioSamplesAvailable(const MediaTime&amp;, const PlatformAudioData&amp; data, const AudioStreamDescription&amp;, size_t frameCount)
</ins><span class="cx"> {
</span><del>-    std::lock_guard&lt;Lock&gt; lock(m_mutex);
-
-    if (!m_ringBuffer)
</del><ins>+    if (!m_ringBuffer || !is&lt;WebAudioBufferList&gt;(data))
</ins><span class="cx">         return;
</span><span class="cx"> 
</span><del>-    CMItemCount frameCount = CMSampleBufferGetNumSamples(sampleBuffer);
-    CMBlockBufferRef buffer = nil;
</del><ins>+    auto&amp; bufferList = downcast&lt;WebAudioBufferList&gt;(data);
</ins><span class="cx"> 
</span><del>-    OSStatus err = CMSampleBufferGetAudioBufferListWithRetainedBlockBuffer(sampleBuffer, nullptr, m_list.get(), m_listBufferSize, kCFAllocatorSystemDefault, kCFAllocatorSystemDefault, kCMSampleBufferFlag_AudioBufferList_Assure16ByteAlignment, &amp;buffer);
-
-    if (err) {
-        LOG(Media, &quot;WebAudioSourceProviderAVFObjC::process(%p) - CMSampleBufferGetAudioBufferListWithRetainedBlockBuffer returned error %i&quot;, this, err);
-        return;
-    }
-
-    m_ringBuffer-&gt;store(m_list.get(), frameCount, m_writeCount);
</del><ins>+    m_ringBuffer-&gt;store(bufferList.list(), frameCount, m_writeCount);
</ins><span class="cx">     m_writeCount += frameCount;
</span><span class="cx"> }
</span><span class="cx"> 
</span></span></pre>
</div>
</div>

</body>
</html>