Diff
Modified: trunk/LayoutTests/ChangeLog (218496 => 218497)
--- trunk/LayoutTests/ChangeLog 2017-06-19 17:01:14 UTC (rev 218496)
+++ trunk/LayoutTests/ChangeLog 2017-06-19 17:12:57 UTC (rev 218497)
@@ -1,3 +1,16 @@
+2017-06-19 Youenn Fablet <[email protected]>
+
+ A cloned MediaStreamTrack should mute independently other tracks using the same source
+ https://bugs.webkit.org/show_bug.cgi?id=172831
+ <rdar://problem/32518527>
+
+ Reviewed by Eric Carlson.
+
+ * webrtc/clone-audio-track.html: Added.
+ * webrtc/video-disabled-black.html:
+ * webrtc/video-unmute-expected.txt:
+ * webrtc/video-unmute.html:
+
2017-06-19 Sam Weinig <[email protected]>
[WebIDL] Properly model buffer source / typed arrays as their own IDL types
Added: trunk/LayoutTests/webrtc/clone-audio-track-expected.txt (0 => 218497)
--- trunk/LayoutTests/webrtc/clone-audio-track-expected.txt (rev 0)
+++ trunk/LayoutTests/webrtc/clone-audio-track-expected.txt 2017-06-19 17:12:57 UTC (rev 218497)
@@ -0,0 +1,3 @@
+
+PASS Muting an outgoing audio track but not its clone
+
Added: trunk/LayoutTests/webrtc/clone-audio-track.html (0 => 218497)
--- trunk/LayoutTests/webrtc/clone-audio-track.html (rev 0)
+++ trunk/LayoutTests/webrtc/clone-audio-track.html 2017-06-19 17:12:57 UTC (rev 218497)
@@ -0,0 +1,49 @@
+<!DOCTYPE html>
+<html>
+<head>
+ <meta charset="utf-8">
+ <title>Testing local audio capture playback causes "playing" event to fire</title>
+ <script src=""
+ <script src=""
+</head>
+<body>
+ <script src =""
+ <script>
+ var context = new webkitAudioContext();
+ promise_test((test) => {
+ if (window.testRunner)
+ testRunner.setUserMediaPermission(true);
+
+ return navigator.mediaDevices.getUserMedia({audio: true}).then((localStream) => {
+ var clonedTrack;
+ var remoteTrack;
+ var remoteStream;
+ return new Promise((resolve, reject) => {
+ createConnections((firstConnection) => {
+ var track = localStream.getAudioTracks()[0];
+ clonedTrack = track.clone();
+ track.enabled = false;
+ firstConnection.addTrack(localStream.getAudioTracks()[0], localStream);
+ }, (secondConnection) => {
+ secondConnection._ontrack_ = (trackEvent) => {
+ remoteStream = trackEvent.streams[0];
+ remoteTrack = remoteStream.getAudioTracks()[0];
+ resolve();
+ };
+ });
+ }).then(() => {
+ return analyseAudio(remoteStream, 200, context).then((results) => {
+ assert_false(results.heardHum, "Did not heard hum from remote enabled track");
+ });
+ }).then(() => {
+ return analyseAudio(new MediaStream([clonedTrack]), 200, context).then((results) => {
+ assert_true(results.heardHum, "Heard hum from cloned track");
+ });
+ }).then(() => {
+ return context.close();
+ });
+ });
+ }, "Muting an outgoing audio track but not its clone");
+ </script>
+</body>
+</html>
Modified: trunk/LayoutTests/webrtc/video-disabled-black.html (218496 => 218497)
--- trunk/LayoutTests/webrtc/video-disabled-black.html 2017-06-19 17:01:14 UTC (rev 218496)
+++ trunk/LayoutTests/webrtc/video-disabled-black.html 2017-06-19 17:12:57 UTC (rev 218497)
@@ -27,7 +27,7 @@
imageData = canvas.getContext('2d').getImageData(0, 0, canvas.width, canvas.height);
assert_true(imageData.data.every( (pixel, index) => {
- return pixel === 0;
+ return pixel === 0 || (index % 4) === 3;
}));
finishTest();
@@ -39,11 +39,12 @@
function testStream(stream)
{
video.srcObject = stream;
- stream.getTracks()[0].enabled = false;
- // Video may play with black frames
video._onplay_ = setTimeout(() => {
- testImage();
- }, 1000);
+ stream.getTracks()[0].enabled = false;
+ setTimeout(() => {
+ testImage();
+ }, 0);
+ }, 500);
}
var finishTest, errorTest;
Modified: trunk/LayoutTests/webrtc/video-unmute-expected.txt (218496 => 218497)
--- trunk/LayoutTests/webrtc/video-unmute-expected.txt 2017-06-19 17:01:14 UTC (rev 218496)
+++ trunk/LayoutTests/webrtc/video-unmute-expected.txt 2017-06-19 17:12:57 UTC (rev 218497)
@@ -1,6 +1,6 @@
PASS Setting video exchange
-PASS Track is enabled, video should be black
+PASS Track is disabled, video should be black
PASS Track is enabled, video should not be black
Modified: trunk/LayoutTests/webrtc/video-unmute.html (218496 => 218497)
--- trunk/LayoutTests/webrtc/video-unmute.html 2017-06-19 17:01:14 UTC (rev 218496)
+++ trunk/LayoutTests/webrtc/video-unmute.html 2017-06-19 17:12:57 UTC (rev 218497)
@@ -78,7 +78,7 @@
promise_test((test) => {
return checkVideoBlack(true, "canvas1");
-}, "Track is enabled, video should be black");
+}, "Track is disabled, video should be black");
promise_test((test) => {
track.enabled = true;
Modified: trunk/Source/WebCore/ChangeLog (218496 => 218497)
--- trunk/Source/WebCore/ChangeLog 2017-06-19 17:01:14 UTC (rev 218496)
+++ trunk/Source/WebCore/ChangeLog 2017-06-19 17:12:57 UTC (rev 218497)
@@ -1,3 +1,76 @@
+2017-06-19 Youenn Fablet <[email protected]>
+
+ A cloned MediaStreamTrack should mute independently other tracks using the same source
+ https://bugs.webkit.org/show_bug.cgi?id=172831
+ <rdar://problem/32518527>
+
+ Reviewed by Eric Carlson.
+
+ Test: webrtc/clone-audio-track.html
+
+ Move enabled handling in MediaStreamTrackPrivate instead of RealtimeMediaSource.
+ Move WebRTC and WebAudio customers of RealtimeMediaSource to MediaStreamTrackPrivate.
+ Move creation of WebAudio provider to MediaStreamTrackPrivate.
+
+ This allows changing some parameters of tracks having the same source independently.
+ Using this for enabled track attribute.
+
+ We no longer stop generating frames in case track is disabled.
+ This should be added back as an optimization in a follow-up.
+
+ * Modules/mediastream/libwebrtc/LibWebRTCMediaEndpoint.cpp:
+ (WebCore::LibWebRTCMediaEndpoint::addTrack):
+ * Modules/mediastream/libwebrtc/LibWebRTCPeerConnectionBackend.cpp:
+ (WebCore::LibWebRTCPeerConnectionBackend::replaceTrack):
+ * Modules/webaudio/MediaStreamAudioSource.cpp:
+ * Modules/webaudio/MediaStreamAudioSource.h:
+ * WebCore.xcodeproj/project.pbxproj:
+ * platform/mediastream/MediaStreamTrackPrivate.cpp:
+ (WebCore::MediaStreamTrackPrivate::create):
+ (WebCore::MediaStreamTrackPrivate::~MediaStreamTrackPrivate):
+ (WebCore::MediaStreamTrackPrivate::setEnabled):
+ (WebCore::MediaStreamTrackPrivate::audioSourceProvider):
+ (WebCore::MediaStreamTrackPrivate::videoSampleAvailable):
+ (WebCore::MediaStreamTrackPrivate::audioSamplesAvailable):
+ * platform/mediastream/MediaStreamTrackPrivate.h:
+ (WebCore::MediaStreamTrackPrivate::Observer::audioSamplesAvailable):
+ * platform/mediastream/RealtimeMediaSource.cpp:
+ (WebCore::RealtimeMediaSource::removeObserver):
+ * platform/mediastream/RealtimeMediaSource.h:
+ * platform/mediastream/mac/AVMediaCaptureSource.h:
+ * platform/mediastream/mac/AVMediaCaptureSource.mm:
+ * platform/mediastream/mac/CoreAudioCaptureSource.cpp:
+ (WebCore::CoreAudioCaptureSource::startProducingData):
+ (WebCore::CoreAudioCaptureSource::stopProducingData):
+ * platform/mediastream/mac/CoreAudioCaptureSource.h:
+ * platform/mediastream/mac/MockRealtimeAudioSourceMac.h:
+ * platform/mediastream/mac/MockRealtimeAudioSourceMac.mm:
+ (WebCore::MockRealtimeAudioSourceMac::render):
+ * platform/mediastream/mac/RealtimeIncomingAudioSource.cpp:
+ (WebCore::RealtimeIncomingAudioSource::~RealtimeIncomingAudioSource):
+ (WebCore::RealtimeIncomingAudioSource::OnData):
+ * platform/mediastream/mac/RealtimeIncomingAudioSource.h:
+ * platform/mediastream/mac/RealtimeIncomingVideoSource.cpp:
+ (WebCore::RealtimeIncomingVideoSource::pixelBufferFromVideoFrame):
+ * platform/mediastream/mac/RealtimeOutgoingAudioSource.cpp:
+ (WebCore::RealtimeOutgoingAudioSource::RealtimeOutgoingAudioSource):
+ (WebCore::RealtimeOutgoingAudioSource::setSource):
+ * platform/mediastream/mac/RealtimeOutgoingAudioSource.h:
+ * platform/mediastream/mac/RealtimeOutgoingVideoSource.cpp:
+ (WebCore::RealtimeOutgoingVideoSource::RealtimeOutgoingVideoSource):
+ (WebCore::RealtimeOutgoingVideoSource::setSource):
+ (WebCore::RealtimeOutgoingVideoSource::initializeFromSource):
+ * 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):
+ * platform/mock/MockRealtimeVideoSource.cpp:
+ (WebCore::MockRealtimeVideoSource::generateFrame):
+ * platform/spi/cocoa/PassKitSPI.h:
+
2017-06-19 Sam Weinig <[email protected]>
[WebIDL] Properly model buffer source / typed arrays as their own IDL types
Modified: trunk/Source/WebCore/Modules/mediastream/libwebrtc/LibWebRTCMediaEndpoint.cpp (218496 => 218497)
--- trunk/Source/WebCore/Modules/mediastream/libwebrtc/LibWebRTCMediaEndpoint.cpp 2017-06-19 17:01:14 UTC (rev 218496)
+++ trunk/Source/WebCore/Modules/mediastream/libwebrtc/LibWebRTCMediaEndpoint.cpp 2017-06-19 17:12:57 UTC (rev 218497)
@@ -176,10 +176,9 @@
mediaStreams.push_back(mediaStream.get());
}
- auto& source = track.source();
- switch (source.type()) {
+ switch (track.privateTrack().type()) {
case RealtimeMediaSource::Type::Audio: {
- auto trackSource = RealtimeOutgoingAudioSource::create(source);
+ auto trackSource = RealtimeOutgoingAudioSource::create(track.privateTrack());
auto audioTrack = m_peerConnectionFactory.CreateAudioTrack(track.id().utf8().data(), trackSource.ptr());
m_peerConnectionBackend.addAudioSource(WTFMove(trackSource));
m_senders.add(&sender, m_backend->AddTrack(audioTrack.get(), WTFMove(mediaStreams)));
@@ -186,7 +185,7 @@
return;
}
case RealtimeMediaSource::Type::Video: {
- auto videoSource = RealtimeOutgoingVideoSource::create(source);
+ auto videoSource = RealtimeOutgoingVideoSource::create(track.privateTrack());
auto videoTrack = m_peerConnectionFactory.CreateVideoTrack(track.id().utf8().data(), videoSource.ptr());
m_peerConnectionBackend.addVideoSource(WTFMove(videoSource));
m_senders.add(&sender, m_backend->AddTrack(videoTrack.get(), WTFMove(mediaStreams)));
Modified: trunk/Source/WebCore/Modules/mediastream/libwebrtc/LibWebRTCPeerConnectionBackend.cpp (218496 => 218497)
--- trunk/Source/WebCore/Modules/mediastream/libwebrtc/LibWebRTCPeerConnectionBackend.cpp 2017-06-19 17:01:14 UTC (rev 218496)
+++ trunk/Source/WebCore/Modules/mediastream/libwebrtc/LibWebRTCPeerConnectionBackend.cpp 2017-06-19 17:12:57 UTC (rev 218497)
@@ -361,8 +361,8 @@
break;
case RealtimeMediaSource::Type::Audio: {
for (auto& audioSource : m_audioSources) {
- if (&audioSource->source() == ¤tTrack->source()) {
- if (!audioSource->setSource(track->source())) {
+ if (&audioSource->source() == ¤tTrack->privateTrack()) {
+ if (!audioSource->setSource(track->privateTrack())) {
promise.reject(INVALID_MODIFICATION_ERR);
return;
}
@@ -375,8 +375,8 @@
}
case RealtimeMediaSource::Type::Video: {
for (auto& videoSource : m_videoSources) {
- if (&videoSource->source() == ¤tTrack->source()) {
- if (!videoSource->setSource(track->source())) {
+ if (&videoSource->source() == ¤tTrack->privateTrack()) {
+ if (!videoSource->setSource(track->privateTrack())) {
promise.reject(INVALID_MODIFICATION_ERR);
return;
}
Modified: trunk/Source/WebCore/Modules/webaudio/MediaStreamAudioSource.cpp (218496 => 218497)
--- trunk/Source/WebCore/Modules/webaudio/MediaStreamAudioSource.cpp 2017-06-19 17:01:14 UTC (rev 218496)
+++ trunk/Source/WebCore/Modules/webaudio/MediaStreamAudioSource.cpp 2017-06-19 17:12:57 UTC (rev 218497)
@@ -60,13 +60,6 @@
return m_currentSettings;
}
-AudioSourceProvider* MediaStreamAudioSource::audioSourceProvider()
-{
- // FIXME: implement this.
- notImplemented();
- return nullptr;
-}
-
void MediaStreamAudioSource::addAudioConsumer(AudioDestinationConsumer* consumer)
{
LockHolder locker(m_audioConsumersLock);
Modified: trunk/Source/WebCore/Modules/webaudio/MediaStreamAudioSource.h (218496 => 218497)
--- trunk/Source/WebCore/Modules/webaudio/MediaStreamAudioSource.h 2017-06-19 17:01:14 UTC (rev 218496)
+++ trunk/Source/WebCore/Modules/webaudio/MediaStreamAudioSource.h 2017-06-19 17:12:57 UTC (rev 218497)
@@ -62,7 +62,6 @@
private:
MediaStreamAudioSource();
- AudioSourceProvider* audioSourceProvider() override;
bool isCaptureSource() const final { return true; }
String m_deviceId;
Modified: trunk/Source/WebCore/WebCore.xcodeproj/project.pbxproj (218496 => 218497)
--- trunk/Source/WebCore/WebCore.xcodeproj/project.pbxproj 2017-06-19 17:01:14 UTC (rev 218496)
+++ trunk/Source/WebCore/WebCore.xcodeproj/project.pbxproj 2017-06-19 17:12:57 UTC (rev 218497)
@@ -302,7 +302,7 @@
07FE99DC18807A7D00256648 /* MediaElementSession.cpp in Sources */ = {isa = PBXBuildFile; fileRef = 07FE99DA18807A7D00256648 /* MediaElementSession.cpp */; };
07FE99DD18807A7D00256648 /* MediaElementSession.h in Headers */ = {isa = PBXBuildFile; fileRef = 07FE99DB18807A7D00256648 /* MediaElementSession.h */; settings = {ATTRIBUTES = (Private, ); }; };
07FFDE68181AED420072D409 /* MediaStreamTrackPrivate.cpp in Sources */ = {isa = PBXBuildFile; fileRef = 07FFDE66181AED420072D409 /* MediaStreamTrackPrivate.cpp */; };
- 07FFDE69181AED420072D409 /* MediaStreamTrackPrivate.h in Headers */ = {isa = PBXBuildFile; fileRef = 07FFDE67181AED420072D409 /* MediaStreamTrackPrivate.h */; };
+ 07FFDE69181AED420072D409 /* MediaStreamTrackPrivate.h in Headers */ = {isa = PBXBuildFile; fileRef = 07FFDE67181AED420072D409 /* MediaStreamTrackPrivate.h */; settings = {ATTRIBUTES = (Private, ); }; };
0806E57A12893045007CED32 /* SVGMatrix.h in Headers */ = {isa = PBXBuildFile; fileRef = 0806E57912893045007CED32 /* SVGMatrix.h */; };
080E49261255F3BD00EFCA27 /* SVGTextLayoutEngineBaseline.h in Headers */ = {isa = PBXBuildFile; fileRef = 080E49221255F3BD00EFCA27 /* SVGTextLayoutEngineBaseline.h */; };
080E49281255F3BD00EFCA27 /* SVGTextLayoutEngineSpacing.h in Headers */ = {isa = PBXBuildFile; fileRef = 080E49241255F3BD00EFCA27 /* SVGTextLayoutEngineSpacing.h */; };
@@ -1785,6 +1785,7 @@
41ABE67B1D0580DB006D862D /* CrossOriginPreflightChecker.h in Headers */ = {isa = PBXBuildFile; fileRef = 41ABE67A1D0580D5006D862D /* CrossOriginPreflightChecker.h */; };
41ABE67C1D0580E0006D862D /* CrossOriginPreflightChecker.cpp in Sources */ = {isa = PBXBuildFile; fileRef = 41ABE6791D0580D5006D862D /* CrossOriginPreflightChecker.cpp */; };
41AD753A1CEF6BD100A31486 /* FetchOptions.h in Headers */ = {isa = PBXBuildFile; fileRef = 41AD75391CEF6BCE00A31486 /* FetchOptions.h */; settings = {ATTRIBUTES = (Private, ); }; };
+ 41B2A6261EF1BF6D002B9D7A /* WebAudioSourceProvider.h in Headers */ = {isa = PBXBuildFile; fileRef = 41B2A6251EF1BF60002B9D7A /* WebAudioSourceProvider.h */; settings = {ATTRIBUTES = (Private, ); }; };
41BF700C0FE86F49005E8DEC /* MessagePortChannel.h in Headers */ = {isa = PBXBuildFile; fileRef = 41BF700A0FE86F49005E8DEC /* MessagePortChannel.h */; settings = {ATTRIBUTES = (Private, ); }; };
41BF700F0FE86F61005E8DEC /* PlatformMessagePortChannel.cpp in Sources */ = {isa = PBXBuildFile; fileRef = 41BF700D0FE86F61005E8DEC /* PlatformMessagePortChannel.cpp */; };
41BF70100FE86F61005E8DEC /* PlatformMessagePortChannel.h in Headers */ = {isa = PBXBuildFile; fileRef = 41BF700E0FE86F61005E8DEC /* PlatformMessagePortChannel.h */; };
@@ -2877,8 +2878,6 @@
65FEA86909833ADE00BED4AB /* Page.cpp in Sources */ = {isa = PBXBuildFile; fileRef = 65FEA86809833ADE00BED4AB /* Page.cpp */; };
69A6CBAC1C6BE42C00B836E9 /* AccessibilitySVGElement.cpp in Sources */ = {isa = PBXBuildFile; fileRef = 697101071C6BE1550018C7F1 /* AccessibilitySVGElement.cpp */; };
69A6CBAD1C6BE42C00B836E9 /* AccessibilitySVGElement.h in Headers */ = {isa = PBXBuildFile; fileRef = 697101081C6BE1550018C7F1 /* AccessibilitySVGElement.h */; };
- 6A32D7CE1A16D8C000412F0B /* InspectorCanvasAgent.cpp in Sources */ = {isa = PBXBuildFile; fileRef = 6A4B6D6619D225D8006F11D3 /* InspectorCanvasAgent.cpp */; };
- 6A4B6D6519D22519006F11D3 /* InspectorCanvasAgent.h in Headers */ = {isa = PBXBuildFile; fileRef = 6A4B6D6419D22519006F11D3 /* InspectorCanvasAgent.h */; };
6B3480940EEF50D400AC1B41 /* NativeImage.h in Headers */ = {isa = PBXBuildFile; fileRef = 6B3480920EEF50D400AC1B41 /* NativeImage.h */; settings = {ATTRIBUTES = (Private, ); }; };
6B693A2E1C51A82E00B03BEF /* ResourceLoadObserver.h in Headers */ = {isa = PBXBuildFile; fileRef = 6B693A2D1C51A82E00B03BEF /* ResourceLoadObserver.h */; settings = {ATTRIBUTES = (Private, ); }; };
6B693A341C51A95D00B03BEF /* ResourceLoadObserver.cpp in Sources */ = {isa = PBXBuildFile; fileRef = 6B693A331C51A95D00B03BEF /* ResourceLoadObserver.cpp */; };
@@ -9479,6 +9478,7 @@
41ABE6791D0580D5006D862D /* CrossOriginPreflightChecker.cpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; path = CrossOriginPreflightChecker.cpp; sourceTree = "<group>"; };
41ABE67A1D0580D5006D862D /* CrossOriginPreflightChecker.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = CrossOriginPreflightChecker.h; sourceTree = "<group>"; };
41AD75391CEF6BCE00A31486 /* FetchOptions.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = FetchOptions.h; sourceTree = "<group>"; };
+ 41B2A6251EF1BF60002B9D7A /* WebAudioSourceProvider.h */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; path = WebAudioSourceProvider.h; sourceTree = "<group>"; };
41BF700A0FE86F49005E8DEC /* MessagePortChannel.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = MessagePortChannel.h; sourceTree = "<group>"; };
41BF700D0FE86F61005E8DEC /* PlatformMessagePortChannel.cpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; name = PlatformMessagePortChannel.cpp; path = default/PlatformMessagePortChannel.cpp; sourceTree = "<group>"; };
41BF700E0FE86F61005E8DEC /* PlatformMessagePortChannel.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; name = PlatformMessagePortChannel.h; path = default/PlatformMessagePortChannel.h; sourceTree = "<group>"; };
@@ -10732,8 +10732,6 @@
65FEA86809833ADE00BED4AB /* Page.cpp */ = {isa = PBXFileReference; fileEncoding = 30; lastKnownFileType = sourcecode.cpp.cpp; path = Page.cpp; sourceTree = "<group>"; };
697101071C6BE1550018C7F1 /* AccessibilitySVGElement.cpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; path = AccessibilitySVGElement.cpp; sourceTree = "<group>"; };
697101081C6BE1550018C7F1 /* AccessibilitySVGElement.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = AccessibilitySVGElement.h; sourceTree = "<group>"; };
- 6A4B6D6419D22519006F11D3 /* InspectorCanvasAgent.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = InspectorCanvasAgent.h; sourceTree = "<group>"; };
- 6A4B6D6619D225D8006F11D3 /* InspectorCanvasAgent.cpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; path = InspectorCanvasAgent.cpp; sourceTree = "<group>"; };
6B3480920EEF50D400AC1B41 /* NativeImage.h */ = {isa = PBXFileReference; fileEncoding = 30; lastKnownFileType = sourcecode.c.h; path = NativeImage.h; sourceTree = "<group>"; };
6B693A2D1C51A82E00B03BEF /* ResourceLoadObserver.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = ResourceLoadObserver.h; sourceTree = "<group>"; };
6B693A331C51A95D00B03BEF /* ResourceLoadObserver.cpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; path = ResourceLoadObserver.cpp; sourceTree = "<group>"; };
@@ -16302,6 +16300,7 @@
5EA3D6E51C85A9C300300BBB /* SDPProcessorScriptResource.cpp */,
5EA3D6E61C85A9C300300BBB /* SDPProcessorScriptResource.h */,
070E81D01BF27656001FDA48 /* VideoTrackPrivateMediaStream.h */,
+ 41B2A6251EF1BF60002B9D7A /* WebAudioSourceProvider.h */,
);
path = mediastream;
sourceTree = "<group>";
@@ -27935,6 +27934,7 @@
BE61039E18A9D65A00DD50D7 /* JSDataCue.h in Headers */,
BCA83E500D7CE1E9003421A8 /* JSDataTransfer.h in Headers */,
4162A4581011464700DFF3ED /* JSDedicatedWorkerGlobalScope.h in Headers */,
+ 41B2A6261EF1BF6D002B9D7A /* WebAudioSourceProvider.h in Headers */,
FDA15ED212B03F94003A583A /* JSDelayNode.h in Headers */,
947949311E0459FA00018D85 /* JSDeprecatedCSSOMCounter.h in Headers */,
947949321E0459FA00018D85 /* JSDeprecatedCSSOMPrimitiveValue.h in Headers */,
Modified: trunk/Source/WebCore/platform/mediastream/MediaStreamTrackPrivate.cpp (218496 => 218497)
--- trunk/Source/WebCore/platform/mediastream/MediaStreamTrackPrivate.cpp 2017-06-19 17:01:14 UTC (rev 218496)
+++ trunk/Source/WebCore/platform/mediastream/MediaStreamTrackPrivate.cpp 2017-06-19 17:12:57 UTC (rev 218497)
@@ -29,16 +29,21 @@
#if ENABLE(MEDIA_STREAM)
-#include "AudioSourceProvider.h"
#include "GraphicsContext.h"
#include "IntRect.h"
#include <wtf/UUID.h>
+#if PLATFORM(COCOA)
+#include "WebAudioSourceProviderAVFObjC.h"
+#else
+#include "WebAudioSourceProvider.h"
+#endif
+
namespace WebCore {
Ref<MediaStreamTrackPrivate> MediaStreamTrackPrivate::create(Ref<RealtimeMediaSource>&& source)
{
- return adoptRef(*new MediaStreamTrackPrivate(WTFMove(source), createCanonicalUUIDString()));
+ return create(WTFMove(source), createCanonicalUUIDString());
}
Ref<MediaStreamTrackPrivate> MediaStreamTrackPrivate::create(Ref<RealtimeMediaSource>&& source, String&& id)
@@ -93,8 +98,6 @@
// Always update the enabled state regardless of the track being ended.
m_isEnabled = enabled;
- m_source->setEnabled(enabled);
-
for (auto& observer : m_observers)
observer->trackEnabledChanged(*this);
}
@@ -148,7 +151,11 @@
AudioSourceProvider* MediaStreamTrackPrivate::audioSourceProvider()
{
- return m_source->audioSourceProvider();
+#if PLATFORM(COCOA)
+ if (!m_audioSourceProvider)
+ m_audioSourceProvider = WebAudioSourceProviderAVFObjC::create(*this);
+#endif
+ return m_audioSourceProvider.get();
}
void MediaStreamTrackPrivate::sourceStarted()
@@ -175,12 +182,6 @@
observer->trackMutedChanged(*this);
}
-void MediaStreamTrackPrivate::sourceEnabledChanged()
-{
- for (auto& observer : m_observers)
- observer->trackEnabledChanged(*this);
-}
-
void MediaStreamTrackPrivate::sourceSettingsChanged()
{
for (auto& observer : m_observers)
@@ -200,12 +201,15 @@
updateReadyState();
}
+ if (!enabled())
+ return;
+
mediaSample.setTrackID(id());
for (auto& observer : m_observers)
observer->sampleBufferUpdated(*this, mediaSample);
}
-void MediaStreamTrackPrivate::audioSamplesAvailable(const MediaTime&, const PlatformAudioData&, const AudioStreamDescription&, size_t)
+void MediaStreamTrackPrivate::audioSamplesAvailable(const MediaTime& mediaTime, const PlatformAudioData& data, const AudioStreamDescription& description, size_t sampleCount)
{
if (!m_haveProducedData) {
m_haveProducedData = true;
@@ -212,8 +216,11 @@
updateReadyState();
}
+ if (!enabled())
+ return;
+
for (auto& observer : m_observers)
- observer->audioSamplesAvailable(*this);
+ observer->audioSamplesAvailable(*this, mediaTime, data, description, sampleCount);
}
Modified: trunk/Source/WebCore/platform/mediastream/MediaStreamTrackPrivate.h (218496 => 218497)
--- trunk/Source/WebCore/platform/mediastream/MediaStreamTrackPrivate.h 2017-06-19 17:01:14 UTC (rev 218496)
+++ trunk/Source/WebCore/platform/mediastream/MediaStreamTrackPrivate.h 2017-06-19 17:12:57 UTC (rev 218497)
@@ -36,6 +36,7 @@
class GraphicsContext;
class MediaSample;
class RealtimeMediaSourceCapabilities;
+class WebAudioSourceProvider;
class MediaStreamTrackPrivate : public RefCounted<MediaStreamTrackPrivate>, public RealtimeMediaSource::Observer {
public:
@@ -49,7 +50,7 @@
virtual void trackSettingsChanged(MediaStreamTrackPrivate&) = 0;
virtual void trackEnabledChanged(MediaStreamTrackPrivate&) = 0;
virtual void sampleBufferUpdated(MediaStreamTrackPrivate&, MediaSample&) { };
- virtual void audioSamplesAvailable(MediaStreamTrackPrivate&) { };
+ virtual void audioSamplesAvailable(MediaStreamTrackPrivate&, const MediaTime&, const PlatformAudioData&, const AudioStreamDescription&, size_t) { };
virtual void readyStateChanged(MediaStreamTrackPrivate&) { };
};
@@ -106,7 +107,6 @@
void sourceStarted() final;
void sourceStopped() final;
void sourceMutedChanged() final;
- void sourceEnabledChanged() final;
void sourceSettingsChanged() final;
bool preventSourceFromStopping() final;
void videoSampleAvailable(MediaSample&) final;
@@ -122,6 +122,7 @@
bool m_isEnabled { true };
bool m_isEnded { false };
bool m_haveProducedData { false };
+ RefPtr<WebAudioSourceProvider> m_audioSourceProvider;
};
typedef Vector<RefPtr<MediaStreamTrackPrivate>> MediaStreamTrackPrivateVector;
Modified: trunk/Source/WebCore/platform/mediastream/RealtimeMediaSource.cpp (218496 => 218497)
--- trunk/Source/WebCore/platform/mediastream/RealtimeMediaSource.cpp 2017-06-19 17:01:14 UTC (rev 218496)
+++ trunk/Source/WebCore/platform/mediastream/RealtimeMediaSource.cpp 2017-06-19 17:12:57 UTC (rev 218497)
@@ -116,17 +116,6 @@
observer.sourceMutedChanged();
}
-void RealtimeMediaSource::setEnabled(bool enabled)
-{
- if (m_enabled == enabled)
- return;
-
- m_enabled = enabled;
-
- for (Observer& observer : m_observers)
- observer.sourceEnabledChanged();
-}
-
void RealtimeMediaSource::settingsDidChange()
{
ASSERT(isMainThread());
Modified: trunk/Source/WebCore/platform/mediastream/RealtimeMediaSource.h (218496 => 218497)
--- trunk/Source/WebCore/platform/mediastream/RealtimeMediaSource.h 2017-06-19 17:01:14 UTC (rev 218496)
+++ trunk/Source/WebCore/platform/mediastream/RealtimeMediaSource.h 2017-06-19 17:12:57 UTC (rev 218497)
@@ -35,7 +35,6 @@
#if ENABLE(MEDIA_STREAM)
-#include "AudioSourceProvider.h"
#include "CaptureDevice.h"
#include "Image.h"
#include "MediaConstraints.h"
@@ -68,12 +67,11 @@
class Observer {
public:
virtual ~Observer() { }
-
+
// Source state changes.
virtual void sourceStarted() { }
virtual void sourceStopped() { }
virtual void sourceMutedChanged() { }
- virtual void sourceEnabledChanged() { }
virtual void sourceSettingsChanged() { }
// Observer state queries.
@@ -112,7 +110,7 @@
public:
virtual ~AudioCaptureFactory() = default;
virtual CaptureSourceOrError createAudioCaptureSource(const String& audioDeviceID, const MediaConstraints*) = 0;
-
+
protected:
AudioCaptureFactory() = default;
};
@@ -147,13 +145,10 @@
virtual bool interrupted() const { return m_interrupted; }
virtual void setInterrupted(bool, bool);
-
- bool enabled() const { return m_enabled; }
- void setEnabled(bool);
const String& name() const { return m_name; }
void setName(const String& name) { m_name = name; }
-
+
unsigned fitnessScore() const { return m_fitnessScore; }
WEBCORE_EXPORT void addObserver(Observer&);
@@ -211,8 +206,6 @@
virtual void monitorOrientation(OrientationNotifier&) { }
- virtual AudioSourceProvider* audioSourceProvider() { return nullptr; }
-
// Testing only
virtual void delaySamples(float) { };
@@ -250,7 +243,6 @@
virtual void stopProducingData() { }
bool m_muted { false };
- bool m_enabled { true };
WeakPtrFactory<RealtimeMediaSource> m_weakPtrFactory;
String m_id;
Added: trunk/Source/WebCore/platform/mediastream/WebAudioSourceProvider.h (0 => 218497)
--- trunk/Source/WebCore/platform/mediastream/WebAudioSourceProvider.h (rev 0)
+++ trunk/Source/WebCore/platform/mediastream/WebAudioSourceProvider.h 2017-06-19 17:12:57 UTC (rev 218497)
@@ -0,0 +1,40 @@
+/*
+ * 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 COMPUTER, 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 COMPUTER, 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(WEB_AUDIO) && ENABLE(MEDIA_STREAM)
+
+#include "AudioSourceProvider.h"
+#include <wtf/RefCounted.h>
+
+namespace WebCore {
+
+class WebAudioSourceProvider : public RefCounted<WebAudioSourceProvider>, public AudioSourceProvider {
+};
+
+}
+
+#endif
Modified: trunk/Source/WebCore/platform/mediastream/mac/AVMediaCaptureSource.h (218496 => 218497)
--- trunk/Source/WebCore/platform/mediastream/mac/AVMediaCaptureSource.h 2017-06-19 17:01:14 UTC (rev 218496)
+++ trunk/Source/WebCore/platform/mediastream/mac/AVMediaCaptureSource.h 2017-06-19 17:12:57 UTC (rev 218497)
@@ -72,8 +72,6 @@
protected:
AVMediaCaptureSource(AVCaptureDevice*, const AtomicString&, RealtimeMediaSource::Type);
- AudioSourceProvider* audioSourceProvider() override;
-
virtual void setupCaptureSession() = 0;
virtual void shutdownCaptureSession() = 0;
virtual void updateSettings(RealtimeMediaSourceSettings&) = 0;
Modified: trunk/Source/WebCore/platform/mediastream/mac/AVMediaCaptureSource.mm (218496 => 218497)
--- trunk/Source/WebCore/platform/mediastream/mac/AVMediaCaptureSource.mm 2017-06-19 17:01:14 UTC (rev 218496)
+++ trunk/Source/WebCore/platform/mediastream/mac/AVMediaCaptureSource.mm 2017-06-19 17:12:57 UTC (rev 218497)
@@ -312,12 +312,6 @@
[audioOutput setSampleBufferDelegate:m_objcObserver.get() queue:globaAudioCaptureSerialQueue()];
}
-AudioSourceProvider* AVMediaCaptureSource::audioSourceProvider()
-{
- ASSERT_NOT_REACHED();
- return nullptr;
-}
-
bool AVMediaCaptureSource::interrupted() const
{
if (m_interruption != InterruptionReason::None)
Modified: trunk/Source/WebCore/platform/mediastream/mac/CoreAudioCaptureSource.cpp (218496 => 218497)
--- trunk/Source/WebCore/platform/mediastream/mac/CoreAudioCaptureSource.cpp 2017-06-19 17:01:14 UTC (rev 218496)
+++ trunk/Source/WebCore/platform/mediastream/mac/CoreAudioCaptureSource.cpp 2017-06-19 17:12:57 UTC (rev 218497)
@@ -706,17 +706,11 @@
#endif
CoreAudioSharedUnit::singleton().startProducingData();
-
- if (m_audioSourceProvider)
- m_audioSourceProvider->prepare(&CoreAudioSharedUnit::singleton().microphoneFormat().streamDescription());
}
void CoreAudioCaptureSource::stopProducingData()
{
CoreAudioSharedUnit::singleton().stopProducingData();
-
- if (m_audioSourceProvider)
- m_audioSourceProvider->unprepare();
}
const RealtimeMediaSourceCapabilities& CoreAudioCaptureSource::capabilities() const
@@ -759,17 +753,6 @@
RealtimeMediaSource::settingsDidChange();
}
-AudioSourceProvider* CoreAudioCaptureSource::audioSourceProvider()
-{
- if (!m_audioSourceProvider) {
- m_audioSourceProvider = WebAudioSourceProviderAVFObjC::create(*this);
- if (isProducingData())
- m_audioSourceProvider->prepare(&CoreAudioSharedUnit::singleton().microphoneFormat().streamDescription());
- }
-
- return m_audioSourceProvider.get();
-}
-
bool CoreAudioCaptureSource::applySampleRate(int sampleRate)
{
// FIXME: We should be able to describe sample rate as a discreet range constraint so that we only enter here with values that can be applied.
Modified: trunk/Source/WebCore/platform/mediastream/mac/CoreAudioCaptureSource.h (218496 => 218497)
--- trunk/Source/WebCore/platform/mediastream/mac/CoreAudioCaptureSource.h 2017-06-19 17:01:14 UTC (rev 218496)
+++ trunk/Source/WebCore/platform/mediastream/mac/CoreAudioCaptureSource.h 2017-06-19 17:12:57 UTC (rev 218497)
@@ -88,7 +88,6 @@
const RealtimeMediaSourceCapabilities& capabilities() const final;
const RealtimeMediaSourceSettings& settings() const final;
void settingsDidChange() final;
- AudioSourceProvider* audioSourceProvider() final;
uint32_t m_captureDeviceID { 0 };
@@ -97,7 +96,6 @@
mutable std::optional<RealtimeMediaSourceCapabilities> m_capabilities;
mutable std::optional<RealtimeMediaSourceSettings> m_currentSettings;
- RefPtr<WebAudioSourceProviderAVFObjC> m_audioSourceProvider;
bool m_reconfigurationOngoing { false };
};
Modified: trunk/Source/WebCore/platform/mediastream/mac/MockRealtimeAudioSourceMac.h (218496 => 218497)
--- trunk/Source/WebCore/platform/mediastream/mac/MockRealtimeAudioSourceMac.h 2017-06-19 17:01:14 UTC (rev 218496)
+++ trunk/Source/WebCore/platform/mediastream/mac/MockRealtimeAudioSourceMac.h 2017-06-19 17:12:57 UTC (rev 218497)
@@ -49,8 +49,7 @@
class MockRealtimeAudioSourceMac final : public MockRealtimeAudioSource {
private:
friend class MockRealtimeAudioSource;
- MockRealtimeAudioSourceMac(const String&);
- ~MockRealtimeAudioSourceMac();
+ explicit MockRealtimeAudioSourceMac(const String&);
bool applySampleRate(int) final;
bool applySampleSize(int) final { return false; }
@@ -59,8 +58,6 @@
void render(double) final;
void reconfigure();
- AudioSourceProvider* audioSourceProvider() final;
-
std::unique_ptr<WebAudioBufferList> m_audioBufferList;
uint32_t m_maximiumFrameCount;
@@ -69,7 +66,6 @@
RetainPtr<CMFormatDescriptionRef> m_formatDescription;
AudioStreamBasicDescription m_streamFormat;
- RefPtr<WebAudioSourceProviderAVFObjC> m_audioSourceProvider;
Vector<float> m_bipBopBuffer;
};
Modified: trunk/Source/WebCore/platform/mediastream/mac/MockRealtimeAudioSourceMac.mm (218496 => 218497)
--- trunk/Source/WebCore/platform/mediastream/mac/MockRealtimeAudioSourceMac.mm 2017-06-19 17:01:14 UTC (rev 218496)
+++ trunk/Source/WebCore/platform/mediastream/mac/MockRealtimeAudioSourceMac.mm 2017-06-19 17:12:57 UTC (rev 218497)
@@ -99,14 +99,6 @@
{
}
-MockRealtimeAudioSourceMac::~MockRealtimeAudioSourceMac()
-{
- if (m_audioSourceProvider) {
- m_audioSourceProvider->unprepare();
- m_audioSourceProvider = nullptr;
- }
-}
-
void MockRealtimeAudioSourceMac::emitSampleBuffers(uint32_t frameCount)
{
ASSERT(m_formatDescription);
@@ -151,7 +143,7 @@
uint32_t bipBopCount = std::min(frameCount, bipBopRemain);
for (auto& audioBuffer : m_audioBufferList->buffers()) {
audioBuffer.mDataByteSize = frameCount * m_streamFormat.mBytesPerFrame;
- if (!muted() && enabled()) {
+ if (!muted()) {
memcpy(audioBuffer.mData, &m_bipBopBuffer[bipBopStart], sizeof(Float32) * bipBopCount);
addHum(HumVolume, HumFrequency, sampleRate(), m_samplesRendered, static_cast<float*>(audioBuffer.mData), bipBopCount);
} else
@@ -190,19 +182,6 @@
return true;
}
-AudioSourceProvider* MockRealtimeAudioSourceMac::audioSourceProvider()
-{
- if (!m_audioSourceProvider) {
- if (!m_audioBufferList)
- reconfigure();
-
- m_audioSourceProvider = WebAudioSourceProviderAVFObjC::create(*this);
- m_audioSourceProvider->prepare(&m_streamFormat);
- }
-
- return m_audioSourceProvider.get();
-}
-
} // namespace WebCore
#endif // ENABLE(MEDIA_STREAM)
Modified: trunk/Source/WebCore/platform/mediastream/mac/RealtimeIncomingAudioSource.cpp (218496 => 218497)
--- trunk/Source/WebCore/platform/mediastream/mac/RealtimeIncomingAudioSource.cpp 2017-06-19 17:01:14 UTC (rev 218496)
+++ trunk/Source/WebCore/platform/mediastream/mac/RealtimeIncomingAudioSource.cpp 2017-06-19 17:12:57 UTC (rev 218497)
@@ -60,10 +60,6 @@
RealtimeIncomingAudioSource::~RealtimeIncomingAudioSource()
{
- if (m_audioSourceProvider) {
- m_audioSourceProvider->unprepare();
- m_audioSourceProvider = nullptr;
- }
stop();
}
@@ -91,24 +87,19 @@
m_numberOfFrames += numberOfFrames;
AudioStreamBasicDescription newDescription = streamDescription(sampleRate, numberOfChannels);
- if (newDescription != m_streamFormat) {
- m_streamFormat = newDescription;
- if (m_audioSourceProvider)
- m_audioSourceProvider->prepare(&m_streamFormat);
- }
// FIXME: We should not need to do the extra memory allocation and copy.
// Instead, we should be able to directly pass audioData pointer.
- WebAudioBufferList audioBufferList { CAAudioStreamDescription(m_streamFormat), WTF::safeCast<uint32_t>(numberOfFrames) };
+ WebAudioBufferList audioBufferList { CAAudioStreamDescription(newDescription), WTF::safeCast<uint32_t>(numberOfFrames) };
audioBufferList.buffer(0)->mDataByteSize = numberOfChannels * numberOfFrames * bitsPerSample / 8;
audioBufferList.buffer(0)->mNumberChannels = numberOfChannels;
- if (muted() || !enabled())
+ if (muted())
memset(audioBufferList.buffer(0)->mData, 0, audioBufferList.buffer(0)->mDataByteSize);
else
memcpy(audioBufferList.buffer(0)->mData, audioData, audioBufferList.buffer(0)->mDataByteSize);
- audioSamplesAvailable(mediaTime, audioBufferList, CAAudioStreamDescription(m_streamFormat), numberOfFrames);
+ audioSamplesAvailable(mediaTime, audioBufferList, CAAudioStreamDescription(newDescription), numberOfFrames);
}
void RealtimeIncomingAudioSource::startProducingData()
@@ -144,17 +135,6 @@
return m_currentSettings;
}
-AudioSourceProvider* RealtimeIncomingAudioSource::audioSourceProvider()
-{
- if (!m_audioSourceProvider) {
- m_audioSourceProvider = WebAudioSourceProviderAVFObjC::create(*this);
- if (m_numberOfFrames)
- m_audioSourceProvider->prepare(&m_streamFormat);
- }
-
- return m_audioSourceProvider.get();
}
-} // namespace WebCore
-
#endif // USE(LIBWEBRTC)
Modified: trunk/Source/WebCore/platform/mediastream/mac/RealtimeIncomingAudioSource.h (218496 => 218497)
--- trunk/Source/WebCore/platform/mediastream/mac/RealtimeIncomingAudioSource.h 2017-06-19 17:01:14 UTC (rev 218496)
+++ trunk/Source/WebCore/platform/mediastream/mac/RealtimeIncomingAudioSource.h 2017-06-19 17:12:57 UTC (rev 218497)
@@ -64,13 +64,9 @@
const RealtimeMediaSourceCapabilities& capabilities() const final;
const RealtimeMediaSourceSettings& settings() const final;
- AudioSourceProvider* audioSourceProvider() final;
-
RealtimeMediaSourceSettings m_currentSettings;
rtc::scoped_refptr<webrtc::AudioTrackInterface> m_audioTrack;
- RefPtr<WebAudioSourceProviderAVFObjC> m_audioSourceProvider;
- AudioStreamBasicDescription m_streamFormat { };
uint64_t m_numberOfFrames { 0 };
};
Modified: trunk/Source/WebCore/platform/mediastream/mac/RealtimeIncomingVideoSource.cpp (218496 => 218497)
--- trunk/Source/WebCore/platform/mediastream/mac/RealtimeIncomingVideoSource.cpp 2017-06-19 17:01:14 UTC (rev 218496)
+++ trunk/Source/WebCore/platform/mediastream/mac/RealtimeIncomingVideoSource.cpp 2017-06-19 17:12:57 UTC (rev 218497)
@@ -98,7 +98,7 @@
CVPixelBufferRef RealtimeIncomingVideoSource::pixelBufferFromVideoFrame(const webrtc::VideoFrame& frame)
{
- if (muted() || !enabled()) {
+ if (muted()) {
if (!m_blackFrame || m_blackFrameWidth != frame.width() || m_blackFrameHeight != frame.height()) {
CVPixelBufferRef pixelBuffer = nullptr;
auto status = CVPixelBufferCreate(kCFAllocatorDefault, frame.width(), frame.height(), kCVPixelFormatType_420YpCbCr8Planar, nullptr, &pixelBuffer);
Modified: trunk/Source/WebCore/platform/mediastream/mac/RealtimeOutgoingAudioSource.cpp (218496 => 218497)
--- trunk/Source/WebCore/platform/mediastream/mac/RealtimeOutgoingAudioSource.cpp 2017-06-19 17:01:14 UTC (rev 218496)
+++ trunk/Source/WebCore/platform/mediastream/mac/RealtimeOutgoingAudioSource.cpp 2017-06-19 17:12:57 UTC (rev 218497)
@@ -46,7 +46,7 @@
return streamFormat;
}
-RealtimeOutgoingAudioSource::RealtimeOutgoingAudioSource(Ref<RealtimeMediaSource>&& audioSource)
+RealtimeOutgoingAudioSource::RealtimeOutgoingAudioSource(Ref<MediaStreamTrackPrivate>&& audioSource)
: m_audioSource(WTFMove(audioSource))
, m_sampleConverter(AudioSampleDataSource::create(LibWebRTCAudioFormat::sampleRate * 2))
{
@@ -54,7 +54,7 @@
initializeConverter();
}
-bool RealtimeOutgoingAudioSource::setSource(Ref<RealtimeMediaSource>&& newSource)
+bool RealtimeOutgoingAudioSource::setSource(Ref<MediaStreamTrackPrivate>&& newSource)
{
m_audioSource->removeObserver(*this);
m_audioSource = WTFMove(newSource);
Modified: trunk/Source/WebCore/platform/mediastream/mac/RealtimeOutgoingAudioSource.h (218496 => 218497)
--- trunk/Source/WebCore/platform/mediastream/mac/RealtimeOutgoingAudioSource.h 2017-06-19 17:01:14 UTC (rev 218496)
+++ trunk/Source/WebCore/platform/mediastream/mac/RealtimeOutgoingAudioSource.h 2017-06-19 17:12:57 UTC (rev 218497)
@@ -32,7 +32,7 @@
#include "AudioSampleDataSource.h"
#include "LibWebRTCMacros.h"
-#include "RealtimeMediaSource.h"
+#include "MediaStreamTrackPrivate.h"
#include <webrtc/api/mediastreaminterface.h>
#include <wtf/ThreadSafeRefCounted.h>
@@ -43,18 +43,18 @@
namespace WebCore {
-class RealtimeOutgoingAudioSource final : public ThreadSafeRefCounted<RealtimeOutgoingAudioSource>, public webrtc::AudioSourceInterface, private RealtimeMediaSource::Observer {
+class RealtimeOutgoingAudioSource final : public ThreadSafeRefCounted<RealtimeOutgoingAudioSource>, public webrtc::AudioSourceInterface, private MediaStreamTrackPrivate::Observer {
public:
- static Ref<RealtimeOutgoingAudioSource> create(Ref<RealtimeMediaSource>&& audioSource) { return adoptRef(*new RealtimeOutgoingAudioSource(WTFMove(audioSource))); }
+ static Ref<RealtimeOutgoingAudioSource> create(Ref<MediaStreamTrackPrivate>&& audioSource) { return adoptRef(*new RealtimeOutgoingAudioSource(WTFMove(audioSource))); }
~RealtimeOutgoingAudioSource() { stop(); }
void stop();
- bool setSource(Ref<RealtimeMediaSource>&&);
- RealtimeMediaSource& source() const { return m_audioSource.get(); }
+ bool setSource(Ref<MediaStreamTrackPrivate>&&);
+ MediaStreamTrackPrivate& source() const { return m_audioSource.get(); }
private:
- explicit RealtimeOutgoingAudioSource(Ref<RealtimeMediaSource>&&);
+ explicit RealtimeOutgoingAudioSource(Ref<MediaStreamTrackPrivate>&&);
virtual void AddSink(webrtc::AudioTrackSinkInterface* sink) { m_sinks.append(sink); }
virtual void RemoveSink(webrtc::AudioTrackSinkInterface* sink) { m_sinks.removeFirst(sink); }
@@ -66,17 +66,23 @@
void RegisterObserver(webrtc::ObserverInterface*) final { }
void UnregisterObserver(webrtc::ObserverInterface*) final { }
- // RealtimeMediaSource::Observer API
- void sourceMutedChanged() final;
- void sourceEnabledChanged() final;
- void audioSamplesAvailable(const MediaTime&, const PlatformAudioData&, const AudioStreamDescription&, size_t) final;
+ void sourceMutedChanged();
+ void sourceEnabledChanged();
+ void audioSamplesAvailable(const MediaTime&, const PlatformAudioData&, const AudioStreamDescription&, size_t);
+ // MediaStreamTrackPrivate::Observer API
+ void trackMutedChanged(MediaStreamTrackPrivate&) final { sourceMutedChanged(); }
+ void trackEnabledChanged(MediaStreamTrackPrivate&) final { sourceEnabledChanged(); }
+ void audioSamplesAvailable(MediaStreamTrackPrivate&, const MediaTime& mediaTime, const PlatformAudioData& data, const AudioStreamDescription& description, size_t sampleCount) final { audioSamplesAvailable(mediaTime, data, description, sampleCount); }
+ void trackEnded(MediaStreamTrackPrivate&) final { }
+ void trackSettingsChanged(MediaStreamTrackPrivate&) final { }
+
void pullAudioData();
void initializeConverter();
Vector<webrtc::AudioTrackSinkInterface*> m_sinks;
- Ref<RealtimeMediaSource> m_audioSource;
+ Ref<MediaStreamTrackPrivate> m_audioSource;
Ref<AudioSampleDataSource> m_sampleConverter;
CAAudioStreamDescription m_inputStreamDescription;
CAAudioStreamDescription m_outputStreamDescription;
Modified: trunk/Source/WebCore/platform/mediastream/mac/RealtimeOutgoingVideoSource.cpp (218496 => 218497)
--- trunk/Source/WebCore/platform/mediastream/mac/RealtimeOutgoingVideoSource.cpp 2017-06-19 17:01:14 UTC (rev 218496)
+++ trunk/Source/WebCore/platform/mediastream/mac/RealtimeOutgoingVideoSource.cpp 2017-06-19 17:12:57 UTC (rev 218497)
@@ -43,7 +43,7 @@
namespace WebCore {
-RealtimeOutgoingVideoSource::RealtimeOutgoingVideoSource(Ref<RealtimeMediaSource>&& videoSource)
+RealtimeOutgoingVideoSource::RealtimeOutgoingVideoSource(Ref<MediaStreamTrackPrivate>&& videoSource)
: m_videoSource(WTFMove(videoSource))
, m_blackFrameTimer(*this, &RealtimeOutgoingVideoSource::sendOneBlackFrame)
{
@@ -51,10 +51,10 @@
initializeFromSource();
}
-bool RealtimeOutgoingVideoSource::setSource(Ref<RealtimeMediaSource>&& newSource)
+bool RealtimeOutgoingVideoSource::setSource(Ref<MediaStreamTrackPrivate>&& newSource)
{
if (!m_initialSettings)
- m_initialSettings = m_videoSource->settings();
+ m_initialSettings = m_videoSource->source().settings();
m_videoSource->removeObserver(*this);
m_videoSource = WTFMove(newSource);
@@ -103,7 +103,7 @@
void RealtimeOutgoingVideoSource::initializeFromSource()
{
- const auto& settings = m_videoSource->settings();
+ const auto& settings = m_videoSource->source().settings();
m_width = settings.width();
m_height = settings.height();
Modified: trunk/Source/WebCore/platform/mediastream/mac/RealtimeOutgoingVideoSource.h (218496 => 218497)
--- trunk/Source/WebCore/platform/mediastream/mac/RealtimeOutgoingVideoSource.h 2017-06-19 17:01:14 UTC (rev 218496)
+++ trunk/Source/WebCore/platform/mediastream/mac/RealtimeOutgoingVideoSource.h 2017-06-19 17:12:57 UTC (rev 218497)
@@ -31,7 +31,7 @@
#if USE(LIBWEBRTC)
#include "LibWebRTCMacros.h"
-#include "RealtimeMediaSource.h"
+#include "MediaStreamTrackPrivate.h"
#include <Timer.h>
#include <webrtc/api/mediastreaminterface.h>
#include <webrtc/base/optional.h>
@@ -42,14 +42,14 @@
namespace WebCore {
-class RealtimeOutgoingVideoSource final : public ThreadSafeRefCounted<RealtimeOutgoingVideoSource>, public webrtc::VideoTrackSourceInterface, private RealtimeMediaSource::Observer {
+class RealtimeOutgoingVideoSource final : public ThreadSafeRefCounted<RealtimeOutgoingVideoSource>, public webrtc::VideoTrackSourceInterface, private MediaStreamTrackPrivate::Observer {
public:
- static Ref<RealtimeOutgoingVideoSource> create(Ref<RealtimeMediaSource>&& videoSource) { return adoptRef(*new RealtimeOutgoingVideoSource(WTFMove(videoSource))); }
+ static Ref<RealtimeOutgoingVideoSource> create(Ref<MediaStreamTrackPrivate>&& videoSource) { return adoptRef(*new RealtimeOutgoingVideoSource(WTFMove(videoSource))); }
~RealtimeOutgoingVideoSource() { stop(); }
void stop();
- bool setSource(Ref<RealtimeMediaSource>&&);
- RealtimeMediaSource& source() const { return m_videoSource.get(); }
+ bool setSource(Ref<MediaStreamTrackPrivate>&&);
+ MediaStreamTrackPrivate& source() const { return m_videoSource.get(); }
int AddRef() const final { ref(); return refCount(); }
int Release() const final { deref(); return refCount(); }
@@ -57,7 +57,7 @@
void setApplyRotation(bool shouldApplyRotation) { m_shouldApplyRotation = shouldApplyRotation; }
private:
- RealtimeOutgoingVideoSource(Ref<RealtimeMediaSource>&&);
+ RealtimeOutgoingVideoSource(Ref<MediaStreamTrackPrivate>&&);
void sendFrame(rtc::scoped_refptr<webrtc::VideoFrameBuffer>&&);
void sendBlackFramesIfNeeded();
@@ -82,15 +82,20 @@
void AddOrUpdateSink(rtc::VideoSinkInterface<webrtc::VideoFrame>*, const rtc::VideoSinkWants&) final;
void RemoveSink(rtc::VideoSinkInterface<webrtc::VideoFrame>*) final;
- // RealtimeMediaSource::Observer API
- void sourceMutedChanged() final;
- void sourceEnabledChanged() final;
- void sourceSettingsChanged() final { initializeFromSource(); }
- void videoSampleAvailable(MediaSample&) final;
+ void sourceMutedChanged();
+ void sourceEnabledChanged();
+ void videoSampleAvailable(MediaSample&);
+ // MediaStreamTrackPrivate::Observer API
+ void trackMutedChanged(MediaStreamTrackPrivate&) final { sourceMutedChanged(); }
+ void trackEnabledChanged(MediaStreamTrackPrivate&) final { sourceEnabledChanged(); }
+ void trackSettingsChanged(MediaStreamTrackPrivate&) final { initializeFromSource(); }
+ void sampleBufferUpdated(MediaStreamTrackPrivate&, MediaSample& sample) final { videoSampleAvailable(sample); }
+ void trackEnded(MediaStreamTrackPrivate&) final { }
+
Vector<rtc::VideoSinkInterface<webrtc::VideoFrame>*> m_sinks;
webrtc::I420BufferPool m_bufferPool;
- Ref<RealtimeMediaSource> m_videoSource;
+ Ref<MediaStreamTrackPrivate> m_videoSource;
bool m_enabled { true };
bool m_muted { false };
std::optional<RealtimeMediaSourceSettings> m_initialSettings;
Modified: trunk/Source/WebCore/platform/mediastream/mac/WebAudioSourceProviderAVFObjC.h (218496 => 218497)
--- trunk/Source/WebCore/platform/mediastream/mac/WebAudioSourceProviderAVFObjC.h 2017-06-19 17:01:14 UTC (rev 218496)
+++ trunk/Source/WebCore/platform/mediastream/mac/WebAudioSourceProviderAVFObjC.h 2017-06-19 17:12:57 UTC (rev 218497)
@@ -27,8 +27,9 @@
#if ENABLE(WEB_AUDIO) && ENABLE(MEDIA_STREAM)
-#include "AudioSourceProvider.h"
-#include "RealtimeMediaSource.h"
+#include "MediaStreamTrackPrivate.h"
+#include "WebAudioSourceProvider.h"
+#include <CoreAudio/CoreAudioTypes.h>
#include <wtf/Lock.h>
#include <wtf/RefCounted.h>
#include <wtf/RefPtr.h>
@@ -44,23 +45,27 @@
class AudioSampleDataSource;
class CAAudioStreamDescription;
-class WEBCORE_EXPORT WebAudioSourceProviderAVFObjC : public RefCounted<WebAudioSourceProviderAVFObjC>, public AudioSourceProvider, RealtimeMediaSource::Observer {
+class WEBCORE_EXPORT WebAudioSourceProviderAVFObjC final : public WebAudioSourceProvider, MediaStreamTrackPrivate::Observer {
public:
- static Ref<WebAudioSourceProviderAVFObjC> create(RealtimeMediaSource&);
+ static Ref<WebAudioSourceProviderAVFObjC> create(MediaStreamTrackPrivate&);
virtual ~WebAudioSourceProviderAVFObjC();
- void prepare(const AudioStreamBasicDescription *);
+ void prepare(const AudioStreamBasicDescription*);
void unprepare();
private:
- WebAudioSourceProviderAVFObjC(RealtimeMediaSource&);
+ explicit WebAudioSourceProviderAVFObjC(MediaStreamTrackPrivate&);
// AudioSourceProvider
- void provideInput(AudioBus*, size_t) override;
- void setClient(AudioSourceProviderClient*) override;
+ void provideInput(AudioBus*, size_t) final;
+ void setClient(AudioSourceProviderClient*) final;
- // RealtimeMediaSource::Observer
- void audioSamplesAvailable(const MediaTime&, const PlatformAudioData&, const AudioStreamDescription&, size_t) final;
+ // MediaStreamTrackPrivate::Observer
+ void audioSamplesAvailable(MediaStreamTrackPrivate&, const MediaTime&, const PlatformAudioData&, const AudioStreamDescription&, size_t) final;
+ void trackEnded(MediaStreamTrackPrivate&) final { }
+ void trackMutedChanged(MediaStreamTrackPrivate&) final { }
+ void trackSettingsChanged(MediaStreamTrackPrivate&) final { }
+ void trackEnabledChanged(MediaStreamTrackPrivate&) final { }
size_t m_listBufferSize { 0 };
std::unique_ptr<CAAudioStreamDescription> m_inputDescription;
@@ -70,11 +75,12 @@
uint64_t m_writeCount { 0 };
uint64_t m_readCount { 0 };
AudioSourceProviderClient* m_client { nullptr };
- RealtimeMediaSource* m_captureSource { nullptr };
+ MediaStreamTrackPrivate* m_captureSource { nullptr };
Lock m_mutex;
bool m_connected { false };
+ AudioStreamBasicDescription m_streamFormat;
};
-
+
}
#endif
Modified: trunk/Source/WebCore/platform/mediastream/mac/WebAudioSourceProviderAVFObjC.mm (218496 => 218497)
--- trunk/Source/WebCore/platform/mediastream/mac/WebAudioSourceProviderAVFObjC.mm 2017-06-19 17:01:14 UTC (rev 218496)
+++ trunk/Source/WebCore/platform/mediastream/mac/WebAudioSourceProviderAVFObjC.mm 2017-06-19 17:12:57 UTC (rev 218497)
@@ -48,12 +48,12 @@
static const double kRingBufferDuration = 1;
-Ref<WebAudioSourceProviderAVFObjC> WebAudioSourceProviderAVFObjC::create(RealtimeMediaSource& source)
+Ref<WebAudioSourceProviderAVFObjC> WebAudioSourceProviderAVFObjC::create(MediaStreamTrackPrivate& source)
{
return adoptRef(*new WebAudioSourceProviderAVFObjC(source));
}
-WebAudioSourceProviderAVFObjC::WebAudioSourceProviderAVFObjC(RealtimeMediaSource& source)
+WebAudioSourceProviderAVFObjC::WebAudioSourceProviderAVFObjC(MediaStreamTrackPrivate& source)
: m_captureSource(&source)
{
}
@@ -109,7 +109,6 @@
if (m_client && !m_connected) {
m_connected = true;
m_captureSource->addObserver(*this);
- m_captureSource->start();
} else if (!m_client && m_connected) {
m_captureSource->removeObserver(*this);
m_connected = false;
@@ -161,8 +160,14 @@
}
}
-void WebAudioSourceProviderAVFObjC::audioSamplesAvailable(const MediaTime&, const PlatformAudioData& data, const AudioStreamDescription&, size_t frameCount)
+void WebAudioSourceProviderAVFObjC::audioSamplesAvailable(MediaStreamTrackPrivate&, const MediaTime&, const PlatformAudioData& data, const AudioStreamDescription& description, size_t frameCount)
{
+ // FIXME: We should try to call prepare based on trackSettingsChanged callback.
+ ASSERT(description.platformDescription().type == PlatformDescription::CAAudioStreamBasicType);
+ auto& basicDescription = *WTF::get<const AudioStreamBasicDescription*>(description.platformDescription().description);
+ if (m_streamFormat != basicDescription)
+ prepare(&basicDescription);
+
if (!m_dataSource)
return;
Modified: trunk/Source/WebCore/platform/mock/MockRealtimeVideoSource.cpp (218496 => 218497)
--- trunk/Source/WebCore/platform/mock/MockRealtimeVideoSource.cpp 2017-06-19 17:01:14 UTC (rev 218496)
+++ trunk/Source/WebCore/platform/mock/MockRealtimeVideoSource.cpp 2017-06-19 17:12:57 UTC (rev 218497)
@@ -391,7 +391,7 @@
FloatRect frameRect(FloatPoint(), size);
context.fillRect(FloatRect(FloatPoint(), size), !deviceIndex() ? Color::black : Color::darkGray);
- if (!muted() && enabled()) {
+ if (!muted()) {
drawText(context);
drawAnimation(context);
drawBoxes(context);
Modified: trunk/Source/WebKit2/ChangeLog (218496 => 218497)
--- trunk/Source/WebKit2/ChangeLog 2017-06-19 17:01:14 UTC (rev 218496)
+++ trunk/Source/WebKit2/ChangeLog 2017-06-19 17:12:57 UTC (rev 218497)
@@ -1,3 +1,14 @@
+2017-06-19 Youenn Fablet <[email protected]>
+
+ A cloned MediaStreamTrack should mute independently other tracks using the same source
+ https://bugs.webkit.org/show_bug.cgi?id=172831
+ <rdar://problem/32518527>
+
+ Reviewed by Eric Carlson.
+
+ * WebProcess/cocoa/UserMediaCaptureManager.cpp:
+ (WebKit::UserMediaCaptureManager::Source::setStorage):
+
2017-06-19 Carlos Garcia Campos <[email protected]>
[GTK] Move GTK+ API files that could be shared to glib dirs
Modified: trunk/Source/WebKit2/UIProcess/Cocoa/UserMediaCaptureManagerProxy.cpp (218496 => 218497)
--- trunk/Source/WebKit2/UIProcess/Cocoa/UserMediaCaptureManagerProxy.cpp 2017-06-19 17:01:14 UTC (rev 218496)
+++ trunk/Source/WebKit2/UIProcess/Cocoa/UserMediaCaptureManagerProxy.cpp 2017-06-19 17:12:57 UTC (rev 218497)
@@ -72,10 +72,6 @@
m_manager.process().send(Messages::UserMediaCaptureManager::SourceMutedChanged(m_id, m_source->muted()), 0);
}
- void sourceEnabledChanged() final {
- m_manager.process().send(Messages::UserMediaCaptureManager::SourceEnabledChanged(m_id, m_source->enabled()), 0);
- }
-
void sourceSettingsChanged() final {
m_manager.process().send(Messages::UserMediaCaptureManager::SourceSettingsChanged(m_id, m_source->settings()), 0);
}
@@ -177,13 +173,6 @@
iter->value->source().setMuted(muted);
}
-void UserMediaCaptureManagerProxy::setEnabled(uint64_t id, bool enabled)
-{
- auto iter = m_proxies.find(id);
- if (iter != m_proxies.end())
- iter->value->source().setEnabled(enabled);
-}
-
void UserMediaCaptureManagerProxy::applyConstraints(uint64_t id, const WebCore::MediaConstraints& constraints)
{
auto iter = m_proxies.find(id);
Modified: trunk/Source/WebKit2/UIProcess/Cocoa/UserMediaCaptureManagerProxy.h (218496 => 218497)
--- trunk/Source/WebKit2/UIProcess/Cocoa/UserMediaCaptureManagerProxy.h 2017-06-19 17:01:14 UTC (rev 218496)
+++ trunk/Source/WebKit2/UIProcess/Cocoa/UserMediaCaptureManagerProxy.h 2017-06-19 17:12:57 UTC (rev 218497)
@@ -54,7 +54,6 @@
void stopProducingData(uint64_t);
void capabilities(uint64_t, WebCore::RealtimeMediaSourceCapabilities&);
void setMuted(uint64_t, bool);
- void setEnabled(uint64_t, bool);
void applyConstraints(uint64_t, const WebCore::MediaConstraints&);
class SourceProxy;
Modified: trunk/Source/WebKit2/UIProcess/Cocoa/UserMediaCaptureManagerProxy.messages.in (218496 => 218497)
--- trunk/Source/WebKit2/UIProcess/Cocoa/UserMediaCaptureManagerProxy.messages.in 2017-06-19 17:01:14 UTC (rev 218496)
+++ trunk/Source/WebKit2/UIProcess/Cocoa/UserMediaCaptureManagerProxy.messages.in 2017-06-19 17:12:57 UTC (rev 218497)
@@ -27,6 +27,5 @@
StopProducingData(uint64_t id)
Capabilities(uint64_t id) -> (WebCore::RealtimeMediaSourceCapabilities capabilities)
SetMuted(uint64_t id, bool muted)
- SetEnabled(uint64_t id, bool enabled)
ApplyConstraints(uint64_t id, struct WebCore::MediaConstraints constraints)
}
Modified: trunk/Source/WebKit2/WebProcess/cocoa/UserMediaCaptureManager.cpp (218496 => 218497)
--- trunk/Source/WebKit2/WebProcess/cocoa/UserMediaCaptureManager.cpp 2017-06-19 17:01:14 UTC (rev 218496)
+++ trunk/Source/WebKit2/WebProcess/cocoa/UserMediaCaptureManager.cpp 2017-06-19 17:12:57 UTC (rev 218497)
@@ -83,8 +83,6 @@
void setStorage(const SharedMemory::Handle& handle, const WebCore::CAAudioStreamDescription& description, uint64_t numberOfFrames)
{
m_description = description;
- if (m_audioSourceProvider)
- m_audioSourceProvider->prepare(&m_description.streamDescription());
if (handle.isNull()) {
m_ringBuffer.deallocate();
@@ -131,15 +129,6 @@
void stopProducingData() final { m_manager.stopProducingData(m_id); }
bool isCaptureSource() const final { return true; }
- AudioSourceProvider* audioSourceProvider() final {
- if (!m_audioSourceProvider) {
- m_audioSourceProvider = WebAudioSourceProviderAVFObjC::create(*this);
- if (m_description.format() != AudioStreamDescription::None)
- m_audioSourceProvider->prepare(&m_description.streamDescription());
- }
- return m_audioSourceProvider.get();
- }
-
// RealtimeMediaSource
void beginConfiguration() final { }
void commitConfiguration() final { }
@@ -155,7 +144,6 @@
RealtimeMediaSourceSettings m_settings;
CAAudioStreamDescription m_description;
CARingBuffer m_ringBuffer;
- RefPtr<WebAudioSourceProviderAVFObjC> m_audioSourceProvider;
struct ApplyConstraintsCallback {
SuccessHandler successHandler;
@@ -218,12 +206,6 @@
m_sources.get(id)->setMuted(muted);
}
-void UserMediaCaptureManager::sourceEnabledChanged(uint64_t id, bool enabled)
-{
- ASSERT(m_sources.contains(id));
- m_sources.get(id)->setEnabled(enabled);
-}
-
void UserMediaCaptureManager::sourceSettingsChanged(uint64_t id, const RealtimeMediaSourceSettings& settings)
{
ASSERT(m_sources.contains(id));
@@ -272,11 +254,6 @@
m_process.send(Messages::UserMediaCaptureManagerProxy::SetMuted(id, muted), 0);
}
-void UserMediaCaptureManager::setEnabled(uint64_t id, bool enabled)
-{
- m_process.send(Messages::UserMediaCaptureManagerProxy::SetEnabled(id, enabled), 0);
-}
-
void UserMediaCaptureManager::applyConstraints(uint64_t id, const WebCore::MediaConstraints& constraints)
{
m_process.send(Messages::UserMediaCaptureManagerProxy::ApplyConstraints(id, constraints), 0);
Modified: trunk/Source/WebKit2/WebProcess/cocoa/UserMediaCaptureManager.h (218496 => 218497)
--- trunk/Source/WebKit2/WebProcess/cocoa/UserMediaCaptureManager.h 2017-06-19 17:01:14 UTC (rev 218496)
+++ trunk/Source/WebKit2/WebProcess/cocoa/UserMediaCaptureManager.h 2017-06-19 17:12:57 UTC (rev 218497)
@@ -64,7 +64,6 @@
// Messages::UserMediaCaptureManager
void sourceStopped(uint64_t id);
void sourceMutedChanged(uint64_t id, bool muted);
- void sourceEnabledChanged(uint64_t id, bool enabled);
void sourceSettingsChanged(uint64_t id, const WebCore::RealtimeMediaSourceSettings&);
void storageChanged(uint64_t id, const SharedMemory::Handle&, const WebCore::CAAudioStreamDescription&, uint64_t numberOfFrames);
void ringBufferFrameBoundsChanged(uint64_t id, uint64_t startFrame, uint64_t endFrame);
@@ -74,7 +73,6 @@
void stopProducingData(uint64_t);
WebCore::RealtimeMediaSourceCapabilities capabilities(uint64_t);
void setMuted(uint64_t, bool);
- void setEnabled(uint64_t, bool);
void applyConstraints(uint64_t, const WebCore::MediaConstraints&);
void applyConstraintsSucceeded(uint64_t, const WebCore::RealtimeMediaSourceSettings&);
void applyConstraintsFailed(uint64_t, const String&, const String&);
Modified: trunk/Source/WebKit2/WebProcess/cocoa/UserMediaCaptureManager.messages.in (218496 => 218497)
--- trunk/Source/WebKit2/WebProcess/cocoa/UserMediaCaptureManager.messages.in 2017-06-19 17:01:14 UTC (rev 218496)
+++ trunk/Source/WebKit2/WebProcess/cocoa/UserMediaCaptureManager.messages.in 2017-06-19 17:12:57 UTC (rev 218497)
@@ -24,7 +24,6 @@
messages -> UserMediaCaptureManager {
SourceStopped(uint64_t id)
SourceMutedChanged(uint64_t id, bool muted)
- SourceEnabledChanged(uint64_t id, bool enabled)
SourceSettingsChanged(uint64_t id, WebCore::RealtimeMediaSourceSettings settings)
StorageChanged(uint64_t id, WebKit::SharedMemory::Handle storageHandle, WebCore::CAAudioStreamDescription description, uint64_t numberOfFrames)
AudioSamplesAvailable(uint64_t id, MediaTime time, uint64_t numberOfFrames, uint64_t startFrame, uint64_t endFrame)