Changeset 157068 in webkit
- Timestamp:
- Oct 7, 2013 4:48:19 PM (11 years ago)
- Location:
- trunk
- Files:
-
- 27 added
- 38 edited
Legend:
- Unmodified
- Added
- Removed
-
trunk/LayoutTests/ChangeLog
r157055 r157068 1 2013-10-07 Eric Carlson <eric.carlson@apple.com> 2 3 [MediaStream API] update MediaStreamTrack object to match spec 4 https://bugs.webkit.org/show_bug.cgi?id=121940 5 6 Reviewed by Jer Noble. 7 8 * fast/mediastream/MediaStreamTrack-expected.txt: 9 * fast/mediastream/MediaStreamTrack.html: 10 * fast/mediastream/MediaStreamTrack-getSources-expected.txt: 11 * fast/mediastream/MediaStreamTrack-getSources.html: 12 1 13 2013-10-07 Jer Noble <jer.noble@apple.com> 2 14 -
trunk/LayoutTests/fast/mediastream/MediaStreamTrack-expected.txt
r139849 r157068 5 5 6 6 PASS getUserMedia succeeded. 7 8 videoTrack = mediaStream.getVideoTracks()[0] 7 9 PASS track.readyState is "live" 8 PASS Track onmute callback succeeded. 9 PASS track.readyState is "muted" 10 PASS Track onunmute callback succeeded. 10 checking track.capabilities() 11 sourceId 12 0 : 239c24b0-2b15-11e3-8224-0800200c9a66 13 sourceType 14 0 : camera 15 1 : microphone 16 width 17 min : 320 18 max : 1920 19 supported : true 20 height 21 min : 240 22 max : 1080 23 supported : true 24 frameRate 25 min : 15 26 max : 60 27 supported : true 28 aspectRatio 29 min : 1.3333333730697632 30 max : 1.7777777910232544 31 supported : true 32 facingMode 33 0 : user 34 1 : environment 35 checking track.states() 36 PASS states.sourceId is capabilities.sourceId[0] 37 PASS states.sourceType is "camera" 38 width : 1920 39 height : 1080 40 frameRate : 30 41 aspectRatio : 1.7777777910232544 42 facingMode : user 43 44 audioTrack = mediaStream.getAudioTracks()[0] 11 45 PASS track.readyState is "live" 46 checking track.capabilities() 47 sourceId 48 0 : 239c24b1-2b15-11e3-8224-0800200c9a66 49 volume 50 min : 0 51 max : 100 52 supported : true 53 checking track.states() 54 PASS states.sourceId is capabilities.sourceId[0] 55 PASS states.sourceType is "microphone" 56 volume : 50 57 58 videoTrack2 = videoTrack.clone() 59 PASS track.readyState is "live" 60 checking track.capabilities() 61 sourceId 62 0 : 239c24b0-2b15-11e3-8224-0800200c9a66 63 sourceType 64 0 : camera 65 1 : microphone 66 width 67 min : 320 68 max : 1920 69 supported : true 70 height 71 min : 240 72 max : 1080 73 supported : true 74 frameRate 75 min : 15 76 max : 60 77 supported : true 78 aspectRatio 79 min : 1.3333333730697632 80 max : 1.7777777910232544 81 supported : true 82 facingMode 83 0 : user 84 1 : environment 85 checking track.states() 86 PASS states.sourceId is capabilities.sourceId[0] 87 PASS states.sourceType is "camera" 88 width : 1920 89 height : 1080 90 frameRate : 30 91 aspectRatio : 1.7777777910232544 92 facingMode : user 93 PASS videoTrack.id is not videoTrack2.id 94 PASS videoTrack.kind is videoTrack2.kind 95 PASS videoTrack.label is videoTrack2.label 96 PASS videoTrack.muted is videoTrack2.muted 97 PASS videoTrack.enabled is videoTrack2.enabled 98 PASS videoTrack.readyState is videoTrack2.readyState 99 100 videoTrack.stop() 12 101 PASS Track onended callback succeeded. 13 PASS track.readyState is "ended" 102 PASS videoTrack.readyState is "ended" 103 14 104 PASS successfullyParsed is true 15 105 -
trunk/LayoutTests/fast/mediastream/MediaStreamTrack-getSources-expected.txt
r156554 r157068 8 8 PASS MediaStreamTrack.getSources(gotSources1); did not throw exception. 9 9 PASS callback called. 10 sources1[0].sourceId = " Mock_audio_device_ID"10 sources1[0].sourceId = "239c24b1-2b15-11e3-8224-0800200c9a66" 11 11 sources1[0].label = "Mock audio device" 12 12 sources1[0].kind = "audio" 13 sources1[1].sourceId = " Mock_video_device_ID"13 sources1[1].sourceId = "239c24b0-2b15-11e3-8224-0800200c9a66" 14 14 sources1[1].label = "Mock video device" 15 15 sources1[1].kind = "video" -
trunk/LayoutTests/fast/mediastream/MediaStreamTrack.html
r155410 r157068 1 1 <!DOCTYPE HTML PUBLIC "-//IETF//DTD HTML//EN"> 2 2 <html> 3 <head> 4 <script src="../../resources/js-test-pre.js"></script> 5 </head> 6 <body> 7 <p id="description"></p> 8 <div id="console"></div> 9 <script> 10 description("Tests MediaStreamTrack callbacks."); 3 <head> 4 <script src="../../resources/js-test-pre.js"></script> 5 <script> 6 var mediaStream; 7 var videoTrack; 8 var videoTrack2; 9 var audioTrack; 10 11 function error() 12 { 13 testFailed('Stream generation failed.'); 14 finishJSTest(); 15 } 11 16 12 // Note that the below behaviour doesn't reflect how it works outside of LayoutTests. 13 // The underlying mock is modified to trigger the events when certain functions are called. 14 // This modified behaviour allows us to test the MediaStreamTrack class properly. 17 function getUserMedia(constraints, callback) 18 { 19 try { 20 navigator.webkitGetUserMedia(constraints, callback, error); 21 } catch (e) { 22 testFailed('webkitGetUserMedia threw exception :' + e); 23 finishJSTest(); 24 } 25 } 26 27 function onTrackEnded() 28 { 29 testPassed('Track onended callback succeeded.'); 30 shouldBeEqualToString('videoTrack.readyState', 'ended'); 31 debug(""); 32 finishJSTest(); 33 } 15 34 16 var stream; 17 var track; 35 function onTrackStarted() 36 { 37 testPassed('Track onstarted callback succeeded.'); 38 shouldBeEqualToString('videoTrack.readyState', 'live'); 39 } 18 40 19 function error() { 20 testFailed('Stream generation failed.'); 21 finishJSTest(); 22 } 41 function onTrackOverConstrained() 42 { 43 testPassed('Track onoverconstrained callback succeeded.'); 44 finishJSTest(); 45 } 23 46 24 function getUserMedia(constraints, callback) { 25 try { 26 navigator.webkitGetUserMedia(constraints, callback, error); 27 } catch (e) { 28 testFailed('webkitGetUserMedia threw exception :' + e); 29 finishJSTest(); 30 } 31 } 47 function onTrackUnmute() 48 { 49 testPassed('Track onunmute callback succeeded.'); 50 shouldBeEqualToString('videoTrack.readyState', 'live'); 51 videoTrack.stop(); 52 } 32 53 33 function onTrackEnded() { 34 testPassed('Track onended callback succeeded.'); 54 function onTrackMute() 55 { 56 testPassed('Track onmute callback succeeded.'); 57 shouldBeEqual('videoTrack.muted', true); 58 } 35 59 36 shouldBeEqualToString('track.readyState', 'ended'); 60 function logCapabilityRange(name, range) 61 { 62 debug(" " + name); 63 debug(" min : " + range.min); 64 debug(" max : " + range.max); 65 debug(" supported : " + range.supported); 66 } 37 67 38 finishJSTest(); 39 } 68 function logCapabilityList(name, list) 69 { 70 debug(" " + name); 71 for (i = 0; i < list.length; i++) 72 debug(" " + i + " : " + list[i]); 73 } 40 74 41 function onTrackUnmute() { 42 testPassed('Track onunmute callback succeeded.'); 75 function checkCapabilities(track) 76 { 77 debug("checking track.capabilities()"); 78 capabilities = track.capabilities(); 79 logCapabilityList("sourceId", capabilities.sourceId); 80 if (track.kind == "video") { 81 logCapabilityList("sourceType", capabilities.sourceType); 82 logCapabilityRange("width", capabilities.width); 83 logCapabilityRange("height", capabilities.height); 84 logCapabilityRange("frameRate", capabilities.frameRate); 85 logCapabilityRange("aspectRatio", capabilities.aspectRatio); 86 logCapabilityList("facingMode", capabilities.facingMode); 87 } else 88 logCapabilityRange("volume", capabilities.volume); 89 } 43 90 44 shouldBeEqualToString('track.readyState', 'live'); 91 function checkStates(track) 92 { 93 debug("checking track.states()"); 94 capabilities = track.capabilities(); 95 states = track.states(); 96 shouldBe('states.sourceId', 'capabilities.sourceId[0]'); 97 if (track.kind == "video") { 98 shouldBeEqualToString('states.sourceType', 'camera'); 99 debug(" width : " + states.width); 100 debug(" height : " + states.height); 101 debug(" frameRate : " + states.frameRate); 102 debug(" aspectRatio : " + states.aspectRatio); 103 debug(" facingMode : " + states.facingMode); 104 } else { 105 shouldBeEqualToString('states.sourceType', 'microphone'); 106 debug(" volume : " + states.volume); 107 } 108 } 109 110 function checkTrack(t) 111 { 112 track = t; 113 shouldBeEqualToString('track.readyState', 'live'); 114 checkCapabilities(track); 115 checkStates(track); 116 } 45 117 46 stream.stop(); 47 } 118 function gotStream(stream) 119 { 120 mediaStream = stream; 121 testPassed('getUserMedia succeeded.'); 122 123 debug(""); 124 evalAndLog("videoTrack = mediaStream.getVideoTracks()[0]"); 125 checkTrack(videoTrack); 48 126 49 function onTrackMute() { 50 testPassed('Track onmute callback succeeded.'); 127 debug(""); 128 evalAndLog("audioTrack = mediaStream.getAudioTracks()[0]"); 129 checkTrack(audioTrack); 51 130 52 shouldBeEqualToString('track.readyState', 'muted'); 131 videoTrack.onmute = onTrackMute; 132 videoTrack.onunmute = onTrackUnmute; 133 videoTrack.onended = onTrackEnded; 134 videoTrack.onstarted = onTrackStarted; 135 videoTrack.onoverconstrained = onTrackOverConstrained; 136 137 debug(""); 138 evalAndLog("videoTrack2 = videoTrack.clone()"); 139 checkTrack(videoTrack2); 140 shouldNotBe('videoTrack.id', 'videoTrack2.id'); 141 shouldBe('videoTrack.kind', 'videoTrack2.kind'); 142 shouldBe('videoTrack.label', 'videoTrack2.label'); 143 shouldBe('videoTrack.muted', 'videoTrack2.muted'); 144 shouldBe('videoTrack.enabled', 'videoTrack2.enabled'); 145 shouldBe('videoTrack.readyState', 'videoTrack2.readyState'); 53 146 54 track.enabled = true; 55 } 147 debug(""); 148 evalAndLog("videoTrack.stop()"); 149 } 56 150 57 function gotStream(s) { 58 testPassed('getUserMedia succeeded.'); 151 function start() 152 { 153 description("Tests MediaStreamTrack callbacks."); 154 155 // Note that the below behaviour doesn't reflect how it works outside of LayoutTests. 156 // The underlying mock is modified to trigger the events when certain functions are called. 157 // This modified behaviour allows us to test the MediaStreamTrack class properly. 158 getUserMedia({audio:true, video:true}, gotStream); 159 } 59 160 60 stream = s; 61 track = stream.getVideoTracks()[0]; 62 63 shouldBeEqualToString('track.readyState', 'live'); 64 65 track.onunmute = onTrackUnmute; 66 track.onmute = onTrackMute; 67 track.onended = onTrackEnded; 68 69 track.enabled = false; 70 } 71 72 getUserMedia({audio:true, video:true}, gotStream); 73 74 window.jsTestIsAsync = true; 75 window.successfullyParsed = true; 76 </script> 77 <script src="../../resources/js-test-post.js"></script> 78 </body> 161 window.jsTestIsAsync = true; 162 window.successfullyParsed = true; 163 </script> 164 </head> 165 <body onload="start()"> 166 <p id="description"></p> 167 <div id="console"></div> 168 <script src="../../resources/js-test-post.js"></script> 169 </body> 79 170 </html> -
trunk/Source/WebCore/CMakeLists.txt
r157054 r157068 187 187 Modules/mediasource/WebKitSourceBufferList.idl 188 188 189 Modules/mediastream/AllAudioCapabilities.idl 190 Modules/mediastream/AllVideoCapabilities.idl 189 191 Modules/mediastream/AudioStreamTrack.idl 192 Modules/mediastream/CapabilityRange.idl 193 Modules/mediastream/MediaSourceStates.idl 190 194 Modules/mediastream/MediaStream.idl 195 Modules/mediastream/MediaStreamCapabilities.idl 191 196 Modules/mediastream/MediaStreamEvent.idl 192 197 Modules/mediastream/MediaStreamTrack.idl 193 198 Modules/mediastream/MediaStreamTrackEvent.idl 194 199 Modules/mediastream/MediaStreamTrackSourcesCallback.idl 200 Modules/mediastream/MediaTrackConstraint.idl 201 Modules/mediastream/MediaTrackConstraintSet.idl 202 Modules/mediastream/MediaTrackConstraints.idl 195 203 Modules/mediastream/NavigatorMediaStream.idl 196 204 Modules/mediastream/NavigatorUserMediaError.idl … … 787 795 788 796 Modules/mediastream/AudioStreamTrack.cpp 797 Modules/mediastream/CapabilityRange.cpp 789 798 Modules/mediastream/MediaConstraintsImpl.cpp 799 Modules/mediastream/MediaSourceStates.cpp 790 800 Modules/mediastream/MediaStream.cpp 801 Modules/mediastream/MediaStreamCapabilities.cpp 791 802 Modules/mediastream/MediaStreamEvent.cpp 792 803 Modules/mediastream/MediaStreamRegistry.cpp … … 794 805 Modules/mediastream/MediaStreamTrackEvent.cpp 795 806 Modules/mediastream/MediaStreamTrackSourcesRequest.cpp 807 Modules/mediastream/MediaTrackConstraint.cpp 808 Modules/mediastream/MediaTrackConstraintSet.cpp 809 Modules/mediastream/MediaTrackConstraints.cpp 796 810 Modules/mediastream/NavigatorMediaStream.cpp 797 811 Modules/mediastream/NavigatorUserMediaError.cpp … … 864 878 Modules/webaudio/MediaElementAudioSourceNode.cpp 865 879 Modules/webaudio/MediaStreamAudioDestinationNode.cpp 880 Modules/webaudio/MediaStreamAudioSource.cpp 866 881 Modules/webaudio/MediaStreamAudioSourceNode.cpp 867 882 Modules/webaudio/OfflineAudioCompletionEvent.cpp -
trunk/Source/WebCore/ChangeLog
r157065 r157068 1 2013-10-07 Eric Carlson <eric.carlson@apple.com> 2 3 [MediaStream API] update MediaStreamTrack object to match spec 4 https://bugs.webkit.org/show_bug.cgi?id=121940 5 6 Reviewed by Jer Noble. 7 8 No new tests, existing test updated. 9 10 Add new source files to the project: 11 * CMakeLists.txt: 12 * DerivedSources.make: 13 * GNUmakefile.list.am: 14 * WebCore.xcodeproj/project.pbxproj: 15 16 New capability dictionary objects: 17 * Modules/mediastream/AllAudioCapabilities.h: Added. 18 * Modules/mediastream/AllAudioCapabilities.idl: Added. 19 * Modules/mediastream/AllVideoCapabilities.h: Added. 20 * Modules/mediastream/AllVideoCapabilities.idl: Added. 21 22 * Modules/mediastream/AudioStreamTrack.cpp: 23 (WebCore::AudioStreamTrack::create): New version that takes a MediaStreamTrack*. 24 * Modules/mediastream/AudioStreamTrack.h: 25 26 New object for a capability range: 27 * Modules/mediastream/CapabilityRange.cpp: Added. 28 * Modules/mediastream/CapabilityRange.h: Added. 29 * Modules/mediastream/CapabilityRange.idl: Added. 30 31 * Modules/mediastream/MediaConstraintsImpl.h: Make initialize() public. 32 33 New object for the current states for a media source. 34 * Modules/mediastream/MediaSourceStates.cpp: Added. 35 * Modules/mediastream/MediaSourceStates.h: Added. 36 * Modules/mediastream/MediaSourceStates.idl: Added. 37 38 Don't call the media stream center to notify it when the state of other 39 objects change. 40 * Modules/mediastream/MediaStream.cpp: 41 (WebCore::processTrack): Remove the stream source duplication hack. 42 (WebCore::createFromSourceVectors): 43 (WebCore::MediaStream::MediaStream): 44 (WebCore::MediaStream::addTrack): 45 (WebCore::MediaStream::removeTrack): 46 * Modules/mediastream/MediaStream.h: 47 48 New object for the capabilities of a source. 49 * Modules/mediastream/MediaStreamCapabilities.cpp: Added. 50 * Modules/mediastream/MediaStreamCapabilities.h: Added. 51 * Modules/mediastream/MediaStreamCapabilities.idl: Added. 52 53 Update interface to match spec. 54 * Modules/mediastream/MediaStreamTrack.cpp: 55 (WebCore::MediaStreamTrack::MediaStreamTrack): Define a copy constructor to use in clone(). 56 (WebCore::MediaStreamTrack::setSource): Call removeObserver if the track already has a source. 57 Initialize m_muted from new source's muted state. 58 (WebCore::MediaStreamTrack::id): Allow source to provide ID as the spec suggests. 59 (WebCore::MediaStreamTrack::setEnabled): Add some spec text to clarify logic. Always call 60 source->setEnabled, it can figure out if nothing needs to be done. 61 (WebCore::MediaStreamTrack::muted): Don't call the stream center when muted changes, the 62 source can take care of notifying interested parties. 63 (WebCore::MediaStreamTrack::readonly): New. 64 (WebCore::MediaStreamTrack::remote): New. 65 (WebCore::MediaStreamTrack::constraints): New. 66 (WebCore::MediaStreamTrack::states): New. 67 (WebCore::MediaStreamTrack::capabilities): New. 68 (WebCore::MediaStreamTrack::applyConstraints): New. 69 (WebCore::MediaStreamTrack::clone): New. 70 (WebCore::MediaStreamTrack::stopProducingData): New. 71 (WebCore::MediaStreamTrack::sourceStateChanged): Renamed from sourceChangedState. 72 (WebCore::MediaStreamTrack::sourceMutedChanged): New. 73 (WebCore::MediaStreamTrack::sourceEnabledChanged): New. 74 (WebCore::MediaStreamTrack::configureTrackRendering): New. 75 (WebCore::MediaStreamTrack::stopped): New. 76 (WebCore::MediaStreamTrack::stop): Call stopProducingData. 77 (WebCore::MediaStreamTrack::scheduleEventDispatch): New. 78 (WebCore::MediaStreamTrack::dispatchQueuedEvents): New. 79 * Modules/mediastream/MediaStreamTrack.h: 80 * Modules/mediastream/MediaStreamTrack.idl: 81 82 * Modules/mediastream/MediaTrackConstraint.cpp: Added. 83 * Modules/mediastream/MediaTrackConstraint.h: Added. 84 * Modules/mediastream/MediaTrackConstraint.idl: Added. 85 86 // Add empty classes/IDL for track constraint objects. 87 * Modules/mediastream/MediaTrackConstraintSet.cpp: Added. 88 * Modules/mediastream/MediaTrackConstraintSet.h: Added. 89 * Modules/mediastream/MediaTrackConstraintSet.idl: Added. 90 * Modules/mediastream/MediaTrackConstraints.cpp: Added. 91 * Modules/mediastream/MediaTrackConstraints.h: Added. 92 * Modules/mediastream/MediaTrackConstraints.idl: Added. 93 94 * Modules/mediastream/UserMediaRequest.cpp: 95 (WebCore::UserMediaRequest::callSuccessHandler): Don't call the stream center, the 96 stream can take care of notifying interested parties. 97 98 // Add a constructor and create() that take a MediaStreamTrack*. 99 * Modules/mediastream/VideoStreamTrack.cpp: 100 (WebCore::VideoStreamTrack::create): 101 (WebCore::VideoStreamTrack::VideoStreamTrack): 102 * Modules/mediastream/VideoStreamTrack.h: 103 104 // Create a MediaStreamSource subclass for WebAudio 105 * Modules/webaudio/AudioContext.cpp: 106 (WebCore::AudioContext::createMediaStreamSource): Call isAudioStreamSource instead 107 of checking deviceID. 108 * Modules/webaudio/MediaStreamAudioDestinationNode.cpp: 109 (WebCore::MediaStreamAudioDestinationNode::MediaStreamAudioDestinationNode): Create a 110 MediaStreamAudioSource instead of a MediaStreamSource. 111 * Modules/webaudio/MediaStreamAudioDestinationNode.h: 112 * Modules/webaudio/MediaStreamAudioSource.cpp: Added. 113 * Modules/webaudio/MediaStreamAudioSource.h: Added. 114 (WebCore::MediaStreamAudioSource::~MediaStreamAudioSource): 115 116 // Add new generated files. 117 * bindings/js/JSMediaSourceStatesCustom.cpp: Added. 118 * bindings/js/JSMediaStreamCapabilitiesCustom.cpp: Added. 119 120 * dom/EventNames.h: Defined 'overconstrained' event. 121 122 * platform/mediastream/MediaStreamCenter.h: Get rid of all of the methods nobody uses. 123 It isn't clear that they are necessary, and we can add them back if/when we need them. 124 125 * platform/mediastream/MediaStreamDescriptor.cpp: 126 (WebCore::MediaStreamDescriptor::~MediaStreamDescriptor): Clear the all source streams. 127 (WebCore::MediaStreamDescriptor::removeSource): Clear the source stream. 128 * platform/mediastream/MediaStreamDescriptor.h: 129 130 // Make MediaStreamSource an abstract base class, and remove everyting WebAudio-specific 131 // to MediaStreamAudioSource. 132 * platform/mediastream/MediaStreamSource.cpp: 133 (WebCore::MediaStreamSource::MediaStreamSource): Remove readyState and requiresConsumer 134 parameters. Create new UUID for id if non was passed. 135 (WebCore::MediaStreamSource::reset): Reset internal state to just-constructed. Used for testing. 136 (WebCore::MediaStreamSource::setReadyState): sourceChangedState -> sourceStateChanged. 137 (WebCore::MediaStreamSource::setStream): Remove the ASSERT that check for a source being 138 added to a new stream. This is still a problem, but it is required for testing and will 139 be fixed as a part of bug 121954. 140 (WebCore::MediaStreamSource::setConstraints): Added. 141 (WebCore::MediaStreamSource::setMuted): Notify observers when muted changes. 142 (WebCore::MediaStreamSource::setEnabled): Notify observers when enabled changes. 143 (WebCore::MediaStreamSource::readonly): New. 144 (WebCore::MediaStreamSource::stop): New. Set state to Ended when all of the observers has 145 stopped. 146 * platform/mediastream/MediaStreamSource.h: 147 148 // Define platform versions of the Capabilities classes. 149 * platform/mediastream/MediaStreamSourceCapabilities.h: Added. 150 151 // Update the non-functional platform stream centers for the API changes. 152 * platform/mediastream/blackberry/MediaStreamCenterBlackBerry.cpp: 153 * platform/mediastream/blackberry/MediaStreamCenterBlackBerry.h: 154 * platform/mediastream/gstreamer/MediaStreamCenterGStreamer.cpp: 155 * platform/mediastream/gstreamer/MediaStreamCenterGStreamer.h: 156 * platform/mediastream/mac/MediaStreamCenterMac.cpp: 157 * platform/mediastream/mac/MediaStreamCenterMac.h: 158 159 // Update the Mock stream center for the API changes. Add a concrete mock MediaStreamSource 160 // subclass. 161 * platform/mock/MockMediaStreamCenter.cpp: 162 (WebCore::MockSource::MockSource): New, the mock media stream source. 163 (WebCore::MockSource::~MockSource): 164 (WebCore::MockSource::capabilities): 165 (WebCore::MockSource::states): 166 (WebCore::mockSourceMap): 167 (WebCore::mockAudioSourceID): 168 (WebCore::mockVideoSourceID): 169 (WebCore::initializeMockSources): Create one audio and one video mock source. 170 (WebCore::MockMediaStreamCenter::registerMockMediaStreamCenter): Call initializeMockSources. 171 (WebCore::MockMediaStreamCenter::createMediaStream): Use the already allocated mock media 172 sources. 173 (WebCore::MockMediaStreamCenter::getMediaStreamTrackSources): Ditto. 174 * platform/mock/MockMediaStreamCenter.h: 175 1 176 2013-10-07 Andreas Kling <akling@apple.com> 2 177 -
trunk/Source/WebCore/DerivedSources.make
r157054 r157068 102 102 $(WebCore)/Modules/mediasource/SourceBuffer.idl \ 103 103 $(WebCore)/Modules/mediasource/SourceBufferList.idl \ 104 $(WebCore)/Modules/mediastream/AllVideoCapabilities.idl \ 105 $(WebCore)/Modules/mediastream/AllAudioCapabilities.idl \ 104 106 $(WebCore)/Modules/mediastream/AudioStreamTrack.idl \ 107 $(WebCore)/Modules/mediastream/CapabilityRange.idl \ 108 $(WebCore)/Modules/mediastream/MediaSourceStates.idl \ 105 109 $(WebCore)/Modules/mediastream/MediaStream.idl \ 110 $(WebCore)/Modules/mediastream/MediaStreamCapabilities.idl \ 106 111 $(WebCore)/Modules/mediastream/MediaStreamEvent.idl \ 107 112 $(WebCore)/Modules/mediastream/MediaStreamTrack.idl \ 108 113 $(WebCore)/Modules/mediastream/MediaStreamTrackEvent.idl \ 109 114 $(WebCore)/Modules/mediastream/MediaStreamTrackSourcesCallback.idl \ 115 $(WebCore)/Modules/mediastream/MediaTrackConstraint.idl \ 116 $(WebCore)/Modules/mediastream/MediaTrackConstraints.idl \ 117 $(WebCore)/Modules/mediastream/MediaTrackConstraintSet.idl \ 110 118 $(WebCore)/Modules/mediastream/NavigatorMediaStream.idl \ 111 119 $(WebCore)/Modules/mediastream/NavigatorUserMediaError.idl \ -
trunk/Source/WebCore/GNUmakefile.list.am
r157054 r157068 32 32 DerivedSources/WebCore/JSAbstractWorker.cpp \ 33 33 DerivedSources/WebCore/JSAbstractWorker.h \ 34 DerivedSources/WebCore/JSAllAudioCapabilities.cpp \ 35 DerivedSources/WebCore/JSAllAudioCapabilities.h \ 36 DerivedSources/WebCore/JSAllVideoCapabilities.cpp \ 37 DerivedSources/WebCore/JSAllVideoCapabilities.h \ 34 38 DerivedSources/WebCore/JSAttr.cpp \ 35 39 DerivedSources/WebCore/JSAttr.h \ … … 88 92 DerivedSources/WebCore/JSCanvasRenderingContext.cpp \ 89 93 DerivedSources/WebCore/JSCanvasRenderingContext.h \ 94 DerivedSources/WebCore/JSCapabilityRange.cpp \ 95 DerivedSources/WebCore/JSCapabilityRange.h \ 90 96 DerivedSources/WebCore/JSCDATASection.cpp \ 91 97 DerivedSources/WebCore/JSCDATASection.h \ … … 463 469 DerivedSources/WebCore/JSWebKitMediaSource.cpp \ 464 470 DerivedSources/WebCore/JSWebKitMediaSource.h \ 471 DerivedSources/WebCore/JSMediaSourceStates.cpp \ 472 DerivedSources/WebCore/JSMediaSourceStates.h \ 465 473 DerivedSources/WebCore/JSMediaStream.cpp \ 466 474 DerivedSources/WebCore/JSMediaStream.h \ … … 469 477 DerivedSources/WebCore/JSMediaStreamAudioDestinationNode.cpp \ 470 478 DerivedSources/WebCore/JSMediaStreamAudioDestinationNode.h \ 479 DerivedSources/WebCore/JSMediaStreamCapabilities.cpp \ 480 DerivedSources/WebCore/JSMediaStreamCapabilities.h \ 471 481 DerivedSources/WebCore/JSMediaStreamEvent.cpp \ 472 482 DerivedSources/WebCore/JSMediaStreamEvent.h \ … … 481 491 DerivedSources/WebCore/JSMediaQueryListListener.cpp \ 482 492 DerivedSources/WebCore/JSMediaQueryListListener.h \ 493 DerivedSources/WebCore/JSMediaTrackConstraint.cpp \ 494 DerivedSources/WebCore/JSMediaTrackConstraint.h \ 495 DerivedSources/WebCore/JSMediaTrackConstraints.cpp \ 496 DerivedSources/WebCore/JSMediaTrackConstraints.h \ 497 DerivedSources/WebCore/JSMediaTrackConstraintSet.cpp \ 498 DerivedSources/WebCore/JSMediaTrackConstraintSet.h \ 483 499 DerivedSources/WebCore/JSMessageChannel.cpp \ 484 500 DerivedSources/WebCore/JSMessageChannel.h \ … … 1187 1203 $(WebCore)/Modules/mediasource/WebKitSourceBuffer.idl \ 1188 1204 $(WebCore)/Modules/mediasource/WebKitSourceBufferList.idl \ 1205 $(WebCore)/Modules/mediastream/AllVideoCapabilities.idl \ 1206 $(WebCore)/Modules/mediastream/AllAudioCapabilities.idl \ 1189 1207 $(WebCore)/Modules/mediastream/AudioStreamTrack.idl \ 1208 $(WebCore)/Modules/mediastream/CapabilityRange.idl \ 1209 $(WebCore)/Modules/mediastream/MediaSourceStates.idl \ 1190 1210 $(WebCore)/Modules/mediastream/MediaStream.idl \ 1211 $(WebCore)/Modules/mediastream/MediaStreamCapabilities.idl \ 1191 1212 $(WebCore)/Modules/mediastream/MediaStreamEvent.idl \ 1192 1213 $(WebCore)/Modules/mediastream/MediaStreamTrack.idl \ 1193 1214 $(WebCore)/Modules/mediastream/MediaStreamTrackEvent.idl \ 1194 1215 $(WebCore)/Modules/mediastream/MediaStreamTrackSourcesCallback.idl \ 1216 $(WebCore)/Modules/mediastream/MediaTrackConstraint.idl \ 1217 $(WebCore)/Modules/mediastream/MediaTrackConstraints.idl \ 1218 $(WebCore)/Modules/mediastream/MediaTrackConstraintSet.idl \ 1195 1219 $(WebCore)/Modules/mediastream/NavigatorMediaStream.idl \ 1196 1220 $(WebCore)/Modules/mediastream/NavigatorUserMediaError.idl \ … … 1846 1870 Source/WebCore/Modules/mediasource/WebKitSourceBufferList.cpp \ 1847 1871 Source/WebCore/Modules/mediasource/WebKitSourceBufferList.h \ 1872 Source/WebCore/Modules/mediastream/AllAudioCapabilities.h \ 1873 Source/WebCore/Modules/mediastream/AllVideoCapabilities.h \ 1848 1874 Source/WebCore/Modules/mediastream/AudioStreamTrack.cpp \ 1849 1875 Source/WebCore/Modules/mediastream/AudioStreamTrack.h \ 1876 Source/WebCore/Modules/mediastream/CapabilityRange.cpp \ 1877 Source/WebCore/Modules/mediastream/CapabilityRange.h \ 1850 1878 Source/WebCore/Modules/mediastream/MediaConstraintsImpl.cpp \ 1851 1879 Source/WebCore/Modules/mediastream/MediaConstraintsImpl.h \ 1880 Source/WebCore/Modules/mediastream/MediaSourceStates.cpp \ 1881 Source/WebCore/Modules/mediastream/MediaSourceStates.h \ 1852 1882 Source/WebCore/Modules/mediastream/MediaStream.cpp \ 1853 1883 Source/WebCore/Modules/mediastream/MediaStream.h \ 1884 Source/WebCore/Modules/mediastream/MediaStreamCapabilities.cpp \ 1885 Source/WebCore/Modules/mediastream/MediaStreamCapabilities.h \ 1854 1886 Source/WebCore/Modules/mediastream/MediaStreamEvent.cpp \ 1855 1887 Source/WebCore/Modules/mediastream/MediaStreamEvent.h \ … … 1863 1895 Source/WebCore/Modules/mediastream/MediaStreamTrackSourcesRequest.cpp \ 1864 1896 Source/WebCore/Modules/mediastream/MediaStreamTrackSourcesRequest.h \ 1897 Source/WebCore/Modules/mediastream/MediaTrackConstraint.cpp \ 1898 Source/WebCore/Modules/mediastream/MediaTrackConstraint.h \ 1899 Source/WebCore/Modules/mediastream/MediaTrackConstraintSet.cpp \ 1900 Source/WebCore/Modules/mediastream/MediaTrackConstraintSet.h \ 1901 Source/WebCore/Modules/mediastream/MediaTrackConstraints.cpp \ 1902 Source/WebCore/Modules/mediastream/MediaTrackConstraints.h \ 1865 1903 Source/WebCore/Modules/mediastream/NavigatorMediaStream.cpp \ 1866 1904 Source/WebCore/Modules/mediastream/NavigatorMediaStream.h \ … … 2008 2046 Source/WebCore/Modules/webaudio/MediaStreamAudioDestinationNode.cpp \ 2009 2047 Source/WebCore/Modules/webaudio/MediaStreamAudioDestinationNode.h \ 2048 Source/WebCore/Modules/webaudio/MediaStreamAudioSource.cpp \ 2049 Source/WebCore/Modules/webaudio/MediaStreamAudioSource.h \ 2010 2050 Source/WebCore/Modules/webaudio/OfflineAudioContext.cpp \ 2011 2051 Source/WebCore/Modules/webaudio/OfflineAudioContext.h \ … … 2313 2353 Source/WebCore/bindings/js/JSMainThreadExecState.h \ 2314 2354 Source/WebCore/bindings/js/JSMediaListCustom.h \ 2355 Source/WebCore/bindings/js/JSMediaSourceStatesCustom.cpp \ 2315 2356 Source/WebCore/bindings/js/JSMessageChannelCustom.cpp \ 2316 2357 Source/WebCore/bindings/js/JSMessageEventCustom.cpp \ … … 5337 5378 Source/WebCore/platform/mediastream/MediaStreamSource.cpp \ 5338 5379 Source/WebCore/platform/mediastream/MediaStreamSource.h \ 5380 Source/WebCore/platform/mediastream/MediaStreamSourceCapabilities.h \ 5339 5381 Source/WebCore/platform/mediastream/MediaStreamTrackSourcesRequestClient.h \ 5340 5382 Source/WebCore/platform/mediastream/RTCConfiguration.h \ -
trunk/Source/WebCore/Modules/mediastream/AudioStreamTrack.cpp
r156488 r157068 36 36 namespace WebCore { 37 37 38 PassRefPtr<AudioStreamTrack> AudioStreamTrack::create(ScriptExecutionContext* context, const Dictionary& audioConstraints)38 RefPtr<AudioStreamTrack> AudioStreamTrack::create(ScriptExecutionContext* context, const Dictionary& audioConstraints) 39 39 { 40 RefPtr<AudioStreamTrack> track = adoptRef(new AudioStreamTrack(context, 0, &audioConstraints)); 41 return track.release(); 40 return adoptRef(new AudioStreamTrack(context, 0, &audioConstraints)); 42 41 } 43 42 44 PassRefPtr<AudioStreamTrack> AudioStreamTrack::create(ScriptExecutionContext* context, MediaStreamSource* source)43 RefPtr<AudioStreamTrack> AudioStreamTrack::create(ScriptExecutionContext* context, MediaStreamSource* source) 45 44 { 46 RefPtr<AudioStreamTrack> track = adoptRef(new AudioStreamTrack(context, source, 0)); 47 return track.release(); 45 return adoptRef(new AudioStreamTrack(context, source, 0)); 46 } 47 48 RefPtr<AudioStreamTrack> AudioStreamTrack::create(MediaStreamTrack* track) 49 { 50 return adoptRef(new AudioStreamTrack(track)); 48 51 } 49 52 50 53 AudioStreamTrack::AudioStreamTrack(ScriptExecutionContext* context, MediaStreamSource* source, const Dictionary* audioConstraints) 51 54 : MediaStreamTrack(context, source, audioConstraints) 55 { 56 } 57 58 AudioStreamTrack::AudioStreamTrack(MediaStreamTrack* track) 59 : MediaStreamTrack(track) 52 60 { 53 61 } -
trunk/Source/WebCore/Modules/mediastream/AudioStreamTrack.h
r157030 r157068 30 30 31 31 #include "MediaStreamTrack.h" 32 #include <wtf/RefCounted.h> 32 33 #include <wtf/Vector.h> 33 #include <wtf/RefCounted.h>34 34 35 35 namespace WebCore { … … 40 40 class AudioStreamTrack FINAL : public MediaStreamTrack { 41 41 public: 42 static PassRefPtr<AudioStreamTrack> create(ScriptExecutionContext*, const Dictionary&); 43 static PassRefPtr<AudioStreamTrack> create(ScriptExecutionContext*, MediaStreamSource*); 42 static RefPtr<AudioStreamTrack> create(ScriptExecutionContext*, const Dictionary&); 43 static RefPtr<AudioStreamTrack> create(ScriptExecutionContext*, MediaStreamSource*); 44 static RefPtr<AudioStreamTrack> create(MediaStreamTrack*); 44 45 45 46 virtual ~AudioStreamTrack() { } … … 49 50 private: 50 51 AudioStreamTrack(ScriptExecutionContext*, MediaStreamSource*, const Dictionary*); 52 explicit AudioStreamTrack(MediaStreamTrack*); 51 53 }; 52 54 -
trunk/Source/WebCore/Modules/mediastream/MediaConstraintsImpl.h
r129764 r157068 46 46 static PassRefPtr<MediaConstraintsImpl> create(); 47 47 static PassRefPtr<MediaConstraintsImpl> create(const Dictionary&, ExceptionCode&); 48 48 49 virtual ~MediaConstraintsImpl(); 50 bool initialize(const Dictionary&); 49 51 50 52 virtual void getMandatoryConstraints(Vector<MediaConstraint>&) const OVERRIDE; … … 56 58 private: 57 59 MediaConstraintsImpl() { } 58 bool initialize(const Dictionary&);59 60 60 61 HashMap<String, String> m_mandatoryConstraints; -
trunk/Source/WebCore/Modules/mediastream/MediaStream.cpp
r156488 r157068 57 57 58 58 MediaStreamSource* source = track->source(); 59 if (!containsSource(sourceVector, source)) { 60 if (source->stream()) { 61 // FIXME: this should not be necessary because tracks and streams must be able to share sources, but our code 62 // currenlty assumes each source is attached to just one track. 63 // https://bugs.webkit.org/show_bug.cgi?id=121954 64 sourceVector.append(MediaStreamSource::create(source->id(), source->type(), source->name(), source->readyState(), source->requiresAudioConsumer()).get()); 65 } else 66 sourceVector.append(source); 67 } 59 if (!containsSource(sourceVector, source)) 60 sourceVector.append(source); 68 61 } 69 62 … … 71 64 { 72 65 RefPtr<MediaStreamDescriptor> descriptor = MediaStreamDescriptor::create(audioSources, videoSources); 73 MediaStreamCenter::shared().didCreateMediaStream(descriptor.get());74 75 66 return MediaStream::create(context, descriptor.release()); 76 67 } … … 122 113 , m_scheduledEventTimer(this, &MediaStream::scheduledEventTimerFired) 123 114 { 115 ASSERT(m_descriptor); 124 116 m_descriptor->setClient(this); 125 117 … … 157 149 return; 158 150 159 MediaStreamCenter::shared().didStopLocalMediaStream(descriptor());160 151 setEnded(); 161 152 } … … 185 176 break; 186 177 } 187 188 MediaStreamCenter::shared().didAddMediaStreamTrack(track->source());189 178 } 190 179 … … 224 213 if (!m_audioTracks.size() && !m_videoTracks.size()) 225 214 setEnded(); 226 227 MediaStreamCenter::shared().didRemoveMediaStreamTrack(track->source());228 215 } 229 216 -
trunk/Source/WebCore/Modules/mediastream/MediaStream.h
r156719 r157068 86 86 87 87 // ContextDestructionObserver 88 virtual void contextDestroyed() OVERRIDE ;88 virtual void contextDestroyed() OVERRIDE FINAL; 89 89 90 90 private: 91 // MediaStreamDescriptorClient92 virtual void trackDidEnd() OVERRIDE;93 virtual void streamDidEnd() OVERRIDE;94 95 91 // EventTarget 96 virtual void refEventTarget() OVERRIDE { ref(); }97 virtual void derefEventTarget() OVERRIDE { deref(); }92 virtual void refEventTarget() OVERRIDE FINAL { ref(); } 93 virtual void derefEventTarget() OVERRIDE FINAL { deref(); } 98 94 99 95 // MediaStreamDescriptorClient 100 virtual void addRemoteSource(MediaStreamSource*) OVERRIDE; 101 virtual void removeRemoteSource(MediaStreamSource*) OVERRIDE; 96 virtual void trackDidEnd() OVERRIDE FINAL; 97 virtual void streamDidEnd() OVERRIDE FINAL; 98 virtual void addRemoteSource(MediaStreamSource*) OVERRIDE FINAL; 99 virtual void removeRemoteSource(MediaStreamSource*) OVERRIDE FINAL; 102 100 103 101 void scheduleDispatchEvent(PassRefPtr<Event>); -
trunk/Source/WebCore/Modules/mediastream/MediaStreamTrack.cpp
r156488 r157068 30 30 #if ENABLE(MEDIA_STREAM) 31 31 32 #include "AllAudioCapabilities.h" 33 #include "AllVideoCapabilities.h" 34 #include "AudioStreamTrack.h" 32 35 #include "Dictionary.h" 33 36 #include "Event.h" 34 37 #include "ExceptionCode.h" 38 #include "MediaConstraintsImpl.h" 39 #include "MediaSourceStates.h" 35 40 #include "MediaStream.h" 36 41 #include "MediaStreamCenter.h" … … 38 43 #include "MediaStreamTrackSourcesCallback.h" 39 44 #include "MediaStreamTrackSourcesRequest.h" 45 #include "MediaTrackConstraints.h" 46 #include "NotImplemented.h" 40 47 #include "UUID.h" 48 #include "VideoStreamTrack.h" 49 #include <wtf/Functional.h> 41 50 #include <wtf/NeverDestroyed.h> 42 51 … … 45 54 MediaStreamTrack::MediaStreamTrack(ScriptExecutionContext* context, MediaStreamSource* source, const Dictionary*) 46 55 : ActiveDOMObject(context) 47 , m_source( source)56 , m_source(0) 48 57 , m_readyState(MediaStreamSource::New) 49 58 , m_stopped(false) 50 59 , m_enabled(true) 51 60 , m_muted(false) 61 , m_eventDispatchScheduled(false) 52 62 { 53 63 suspendIfNeeded(); 54 if (m_source) { 55 m_source->addObserver(this); 56 m_muted = m_source->muted(); 57 } 64 if (source) 65 setSource(source); 66 } 67 68 MediaStreamTrack::MediaStreamTrack(MediaStreamTrack* other) 69 : ActiveDOMObject(other->scriptExecutionContext()) 70 { 71 suspendIfNeeded(); 72 73 // When the clone() method is invoked, the user agent must run the following steps: 74 // 1. Let trackClone be a newly constructed MediaStreamTrack object. 75 // 2. Initialize trackClone's id attribute to a newly generated value. 76 m_id = createCanonicalUUIDString(); 77 78 // 3. Let trackClone inherit this track's underlying source, kind, label and enabled attributes. 79 setSource(other->source()); 80 m_readyState = m_source ? m_source->readyState() : MediaStreamSource::New; 81 m_enabled = other->enabled(); 82 83 // Note: the "clone" steps don't say anything about 'muted', but 4.3.1 says: 84 // For a newly created MediaStreamTrack object, the following applies. The track is always enabled 85 // unless stated otherwise (for examlpe when cloned) and the muted state reflects the state of the 86 // source at the time the track is created. 87 m_muted = other->muted(); 88 89 m_eventDispatchScheduled =false; 90 m_stopped = other->stopped(); 58 91 } 59 92 … … 85 118 void MediaStreamTrack::setSource(MediaStreamSource* source) 86 119 { 87 ASSERT(source == m_source || !m_source); 120 ASSERT(!source || !m_source); 121 122 if (m_source) 123 m_source->removeObserver(this); 124 125 if (source) { 126 source->addObserver(this); 127 m_muted = source->muted(); 128 } 129 88 130 m_source = source; 89 131 } … … 93 135 if (!m_id.isEmpty()) 94 136 return m_id; 95 96 if (!m_source)97 return emptyString();98 99 const String& id = m_source->id();100 if (!id.isEmpty())101 return id;102 137 103 138 // The spec says: … … 105 140 // specifies how the track id must be initialized, the user agent must generate a globally 106 141 // unique identifier string and initialize the object's id attribute to that string. 107 // so generate a UUID if the source doesn't have an ID. 142 if (m_source && m_source->useIDForTrackID()) 143 return m_source->id(); 144 108 145 m_id = createCanonicalUUIDString(); 109 146 return m_id; … … 126 163 if (m_stopped) 127 164 return; 128 165 166 // 4.3.3.1 167 // ... after a MediaStreamTrack is disassociated from its track, its enabled attribute still 168 // changes value when set; it just doesn't do anything with that new value. 129 169 m_enabled = enabled; 130 170 131 if (!m_source || enabled == m_source->enabled())171 if (!m_source) 132 172 return; 133 173 134 174 m_source->setEnabled(enabled); 135 136 if (m_source->stream()->ended()) 137 return; 138 139 MediaStreamCenter::shared().didSetMediaStreamTrackEnabled(m_source.get()); 175 } 176 177 bool MediaStreamTrack::muted() const 178 { 179 if (m_stopped || !m_source) 180 return false; 181 182 return m_source->muted(); 183 } 184 185 bool MediaStreamTrack::readonly() const 186 { 187 if (m_stopped || !m_source) 188 return true; 189 190 return m_source->readonly(); 191 } 192 193 bool MediaStreamTrack::remote() const 194 { 195 if (!m_source) 196 return false; 197 198 return m_source->remote(); 140 199 } 141 200 … … 172 231 } 173 232 233 RefPtr<MediaTrackConstraints> MediaStreamTrack::constraints() const 234 { 235 // FIXME: https://bugs.webkit.org/show_bug.cgi?id=122428 236 notImplemented(); 237 return 0; 238 } 239 240 RefPtr<MediaSourceStates> MediaStreamTrack::states() const 241 { 242 if (!m_source) 243 return 0; 244 245 return MediaSourceStates::create(m_source->states()); 246 } 247 248 RefPtr<MediaStreamCapabilities> MediaStreamTrack::capabilities() const 249 { 250 if (!m_source) 251 return 0; 252 253 return MediaStreamCapabilities::create(m_source->capabilities()); 254 } 255 256 void MediaStreamTrack::applyConstraints(const Dictionary& constraints) 257 { 258 // FIXME: apply the new constraints to the track 259 // https://bugs.webkit.org/show_bug.cgi?id=122428 260 m_constraints->initialize(constraints); 261 } 262 263 RefPtr<MediaStreamTrack> MediaStreamTrack::clone() 264 { 265 if (m_source && m_source->type() == MediaStreamSource::Audio) 266 return AudioStreamTrack::create(this); 267 268 return VideoStreamTrack::create(this); 269 } 270 271 void MediaStreamTrack::stopProducingData() 272 { 273 if (m_stopped || !m_source) 274 return; 275 276 // Set m_stopped before stopping the source because that may result in a call to sourceChangedState 277 // and we only want to dispatch the 'ended' event if necessary. 278 m_stopped = true; 279 m_source->stop(); 280 281 if (m_readyState != MediaStreamSource::Ended) 282 scheduleEventDispatch(Event::create(eventNames().endedEvent, false, false)); 283 } 284 174 285 bool MediaStreamTrack::ended() const 175 286 { … … 177 288 } 178 289 179 void MediaStreamTrack::source ChangedState()290 void MediaStreamTrack::sourceStateChanged() 180 291 { 181 292 if (m_stopped) … … 186 297 187 298 if (m_readyState >= MediaStreamSource::Live && oldReadyState == MediaStreamSource::New) 188 dispatchEvent(Event::create(eventNames().startedEvent, false, false));299 scheduleEventDispatch(Event::create(eventNames().startedEvent, false, false)); 189 300 if (m_readyState == MediaStreamSource::Ended && oldReadyState != MediaStreamSource::Ended) 190 dispatchEvent(Event::create(eventNames().endedEvent, false, false)); 191 192 if (m_muted == m_source->muted()) 193 return; 194 195 m_muted = m_source->muted(); 301 scheduleEventDispatch(Event::create(eventNames().endedEvent, false, false)); 302 } 303 304 void MediaStreamTrack::sourceMutedChanged() 305 { 306 if (m_stopped) 307 return; 308 309 bool muted = m_source->muted(); 310 if (m_muted == muted) 311 return; 312 313 m_muted = muted; 196 314 if (m_muted) 197 dispatchEvent(Event::create(eventNames().muteEvent, false, false));315 scheduleEventDispatch(Event::create(eventNames().muteEvent, false, false)); 198 316 else 199 dispatchEvent(Event::create(eventNames().unmuteEvent, false, false)); 317 scheduleEventDispatch(Event::create(eventNames().unmuteEvent, false, false)); 318 319 configureTrackRendering(); 320 } 321 322 void MediaStreamTrack::sourceEnabledChanged() 323 { 324 if (m_stopped) 325 return; 326 327 // media from the source only flows when a MediaStreamTrack object is both unmuted and enabled 328 configureTrackRendering(); 329 } 330 331 void MediaStreamTrack::configureTrackRendering() 332 { 333 if (m_stopped) 334 return; 335 336 // 4.3.1 337 // ... media from the source only flows when a MediaStreamTrack object is both unmuted and enabled 338 } 339 340 bool MediaStreamTrack::stopped() 341 { 342 return m_stopped; 200 343 } 201 344 … … 212 355 void MediaStreamTrack::stop() 213 356 { 214 m_stopped = true; 357 stopProducingData(); 358 } 359 360 void MediaStreamTrack::scheduleEventDispatch(PassRefPtr<Event> event) 361 { 362 { 363 MutexLocker locker(m_mutex); 364 m_scheduledEvents.append(event); 365 if (m_eventDispatchScheduled) 366 return; 367 m_eventDispatchScheduled = true; 368 } 369 370 callOnMainThread(bind(&MediaStreamTrack::dispatchQueuedEvents, this)); 371 } 372 373 void MediaStreamTrack::dispatchQueuedEvents() 374 { 375 Vector<RefPtr<Event>> events; 376 { 377 MutexLocker locker(m_mutex); 378 m_eventDispatchScheduled = false; 379 events.swap(m_scheduledEvents); 380 } 381 if (!scriptExecutionContext()) 382 return; 383 384 for (auto it = events.begin(); it != events.end(); ++it) 385 dispatchEvent((*it).release()); 386 387 events.clear(); 215 388 } 216 389 -
trunk/Source/WebCore/Modules/mediastream/MediaStreamTrack.h
r157030 r157068 42 42 43 43 class Dictionary; 44 class MediaConstraints; 44 class MediaConstraintsImpl; 45 class MediaSourceStates; 45 46 class MediaStreamTrackSourcesCallback; 47 class MediaStreamCapabilities; 48 class MediaTrackConstraints; 46 49 47 50 class MediaStreamTrack : public RefCounted<MediaStreamTrack>, public ScriptWrappable, public ActiveDOMObject, public EventTargetWithInlineData, public MediaStreamSource::Observer { … … 55 58 bool enabled() const; 56 59 void setEnabled(bool); 57 60 61 bool muted() const; 62 bool readonly() const; 63 bool remote() const; 64 58 65 const AtomicString& readyState() const; 59 66 60 67 static void getSources(ScriptExecutionContext*, PassRefPtr<MediaStreamTrackSourcesCallback>, ExceptionCode&); 61 68 62 MediaStreamSource* source() const { return m_source.get(); } 63 void setSource(MediaStreamSource*); 69 RefPtr<MediaTrackConstraints> constraints() const; 70 RefPtr<MediaSourceStates> states() const; 71 RefPtr<MediaStreamCapabilities> capabilities() const; 72 void applyConstraints(const Dictionary&); 73 74 RefPtr<MediaStreamTrack> clone(); 75 void stopProducingData(); 64 76 65 77 DEFINE_ATTRIBUTE_EVENT_LISTENER(mute); 66 78 DEFINE_ATTRIBUTE_EVENT_LISTENER(unmute); 79 DEFINE_ATTRIBUTE_EVENT_LISTENER(started); 67 80 DEFINE_ATTRIBUTE_EVENT_LISTENER(ended); 81 DEFINE_ATTRIBUTE_EVENT_LISTENER(overconstrained); 82 83 MediaStreamSource* source() const { return m_source.get(); } 84 void setSource(MediaStreamSource*); 68 85 69 86 bool ended() const; … … 73 90 virtual ScriptExecutionContext* scriptExecutionContext() const OVERRIDE FINAL { return ActiveDOMObject::scriptExecutionContext(); } 74 91 75 // ActiveDOMObject76 virtual void stop() OVERRIDE FINAL;77 78 92 using RefCounted<MediaStreamTrack>::ref; 79 93 using RefCounted<MediaStreamTrack>::deref; 80 94 81 95 protected: 96 explicit MediaStreamTrack(MediaStreamTrack*); 82 97 MediaStreamTrack(ScriptExecutionContext*, MediaStreamSource*, const Dictionary*); 83 98 84 99 private: 100 101 void configureTrackRendering(); 85 102 void trackDidEnd(); 103 void scheduleEventDispatch(PassRefPtr<Event>); 104 void dispatchQueuedEvents(); 105 106 // ActiveDOMObject 107 virtual void stop() OVERRIDE FINAL; 86 108 87 109 // EventTarget … … 90 112 91 113 // MediaStreamSourceObserver 92 virtual void sourceChangedState() OVERRIDE FINAL; 114 virtual void sourceStateChanged() OVERRIDE FINAL; 115 virtual void sourceMutedChanged() OVERRIDE FINAL; 116 virtual void sourceEnabledChanged() OVERRIDE FINAL; 117 virtual bool stopped() OVERRIDE FINAL; 118 119 Vector<RefPtr<Event>> m_scheduledEvents; 93 120 94 121 RefPtr<MediaStreamSource> m_source; 95 RefPtr<MediaConstraints > m_constraints;122 RefPtr<MediaConstraintsImpl> m_constraints; 96 123 MediaStreamSource::ReadyState m_readyState; 97 124 mutable String m_id; 125 Mutex m_mutex; 98 126 99 127 bool m_stopped; 100 128 bool m_enabled; 101 129 bool m_muted; 130 bool m_eventDispatchScheduled; 102 131 }; 103 132 -
trunk/Source/WebCore/Modules/mediastream/MediaStreamTrack.idl
r157001 r157068 1 1 /* 2 2 * Copyright (C) 2011 Google Inc. All rights reserved. 3 * Copyright (C) 2013 Apple Inc. All rights reserved. 3 4 * 4 5 * Redistribution and use in source and binary forms, with or without … … 23 24 */ 24 25 26 enum MediaStreamTrackState { "new", "live", "ended" }; 27 25 28 [ 26 29 Conditional=MEDIA_STREAM, … … 34 37 readonly attribute DOMString label; 35 38 attribute boolean enabled; 36 37 readonly attribute DOMString readyState; 38 39 readonly attribute boolean muted; 39 40 attribute EventListener onmute; 40 41 attribute EventListener onunmute; 42 readonly attribute boolean _readonly; 43 readonly attribute boolean remote; 44 readonly attribute MediaStreamTrackState readyState; 45 attribute EventListener onstarted; 41 46 attribute EventListener onended; 42 47 43 48 [CallWith=ScriptExecutionContext, RaisesException] static void getSources(MediaStreamTrackSourcesCallback callback); 49 50 MediaTrackConstraints constraints(); 51 52 MediaSourceStates states(); 53 54 MediaStreamCapabilities capabilities(); // returns either AllVideoCapabilities or AllAudioCapabilities 55 56 void applyConstraints(Dictionary constraints); 57 58 attribute EventListener onoverconstrained; 59 MediaStreamTrack clone(); 60 [ImplementedAs=stopProducingData] void stop(); 44 61 45 62 // EventTarget interface -
trunk/Source/WebCore/Modules/mediastream/UserMediaRequest.cpp
r156473 r157068 174 174 (*iter)->source()->setConstraints(m_videoConstraints); 175 175 176 MediaStreamCenter::shared().didCreateMediaStream(streamDescriptor.get());177 176 m_successCallback->handleEvent(stream.get()); 178 177 } -
trunk/Source/WebCore/Modules/mediastream/VideoStreamTrack.cpp
r156488 r157068 36 36 namespace WebCore { 37 37 38 PassRefPtr<VideoStreamTrack> VideoStreamTrack::create(ScriptExecutionContext* context, const Dictionary& videoConstraints)38 RefPtr<VideoStreamTrack> VideoStreamTrack::create(ScriptExecutionContext* context, const Dictionary& videoConstraints) 39 39 { 40 40 RefPtr<VideoStreamTrack> track = adoptRef(new VideoStreamTrack(context, 0, &videoConstraints)); … … 42 42 } 43 43 44 PassRefPtr<VideoStreamTrack> VideoStreamTrack::create(ScriptExecutionContext* context, MediaStreamSource* source)44 RefPtr<VideoStreamTrack> VideoStreamTrack::create(ScriptExecutionContext* context, MediaStreamSource* source) 45 45 { 46 46 RefPtr<VideoStreamTrack> track = adoptRef(new VideoStreamTrack(context, source, 0)); … … 48 48 } 49 49 50 RefPtr<VideoStreamTrack> VideoStreamTrack::create(MediaStreamTrack* track) 51 { 52 return adoptRef(new VideoStreamTrack(track)); 53 } 54 50 55 VideoStreamTrack::VideoStreamTrack(ScriptExecutionContext* context, MediaStreamSource* source, const Dictionary* videoConstraints) 51 56 : MediaStreamTrack(context, source, videoConstraints) 57 { 58 } 59 60 VideoStreamTrack::VideoStreamTrack(MediaStreamTrack* track) 61 : MediaStreamTrack(track) 52 62 { 53 63 } -
trunk/Source/WebCore/Modules/mediastream/VideoStreamTrack.h
r157030 r157068 30 30 31 31 #include "MediaStreamTrack.h" 32 #include <wtf/RefCounted.h> 32 33 #include <wtf/Vector.h> 33 #include <wtf/RefCounted.h>34 34 35 35 namespace WebCore { … … 40 40 class VideoStreamTrack FINAL : public MediaStreamTrack { 41 41 public: 42 static PassRefPtr<VideoStreamTrack> create(ScriptExecutionContext*, const Dictionary&); 43 static PassRefPtr<VideoStreamTrack> create(ScriptExecutionContext*, MediaStreamSource*); 42 static RefPtr<VideoStreamTrack> create(ScriptExecutionContext*, const Dictionary&); 43 static RefPtr<VideoStreamTrack> create(ScriptExecutionContext*, MediaStreamSource*); 44 static RefPtr<VideoStreamTrack> create(MediaStreamTrack*); 44 45 45 46 virtual ~VideoStreamTrack() { } … … 49 50 private: 50 51 VideoStreamTrack(ScriptExecutionContext*, MediaStreamSource*, const Dictionary*); 52 explicit VideoStreamTrack(MediaStreamTrack*); 51 53 }; 52 54 -
trunk/Source/WebCore/Modules/webaudio/AudioContext.cpp
r156600 r157068 64 64 #include "MediaStream.h" 65 65 #include "MediaStreamAudioDestinationNode.h" 66 #include "MediaStreamAudioSource.h" 66 67 #include "MediaStreamAudioSourceNode.h" 67 68 #endif … … 421 422 for (size_t i = 0; i < audioTracks.size(); ++i) { 422 423 RefPtr<MediaStreamTrack> localAudio = audioTracks[i]; 423 MediaStreamSource* source = localAudio->source(); 424 if (!source->deviceId().isEmpty()) { 425 destination()->enableInput(source->deviceId()); 426 provider = destination()->localAudioInputProvider(); 427 break; 428 } 424 if (!localAudio->source()->isAudioStreamSource()) 425 continue; 426 427 MediaStreamAudioSource* source = static_cast<MediaStreamAudioSource*>(localAudio->source()); 428 ASSERT(!source->deviceId().isEmpty()); 429 destination()->enableInput(source->deviceId()); 430 provider = destination()->localAudioInputProvider(); 431 break; 429 432 } 430 433 … … 734 737 { 735 738 ASSERT(isAudioThread()); 736 739 737 740 // At the beginning of every render quantum, try to update the internal rendering graph state (from main thread changes). 738 741 // It's OK if the tryLock() fails, we'll just take slightly longer to pick up the changes. … … 753 756 { 754 757 ASSERT(isAudioThread()); 755 756 // Must use a tryLock() here too. 758 759 // Must use a tryLock() here too. Don't worry, the lock will very rarely be contended and this method is called frequently. 757 760 // The worst that can happen is that there will be some nodes which will take slightly longer than usual to be deleted or removed 758 761 // from the render graph (in which case they'll render silence). -
trunk/Source/WebCore/Modules/webaudio/MediaStreamAudioDestinationNode.cpp
r156473 r157068 32 32 #include "AudioNodeInput.h" 33 33 #include "MediaStream.h" 34 #include "MediaStream Center.h"34 #include "MediaStreamAudioSource.h" 35 35 #include "RTCPeerConnectionHandler.h" 36 #include "UUID.h"37 36 #include <wtf/Locker.h> 38 37 … … 50 49 setNodeType(NodeTypeMediaStreamAudioDestination); 51 50 52 m_source = MediaStream Source::create(ASCIILiteral("WebAudio-") + createCanonicalUUIDString(), MediaStreamSource::Audio, "MediaStreamAudioDestinationNode", MediaStreamSource::Live, true);51 m_source = MediaStreamAudioSource::create(); 53 52 MediaStreamSourceVector audioSources; 54 53 audioSources.append(m_source); 55 MediaStreamSourceVector videoSources; 56 m_stream = MediaStream::create(context->scriptExecutionContext(), MediaStreamDescriptor::create(audioSources, videoSources)); 57 MediaStreamCenter::shared().didCreateMediaStream(m_stream->descriptor()); 54 m_stream = MediaStream::create(context->scriptExecutionContext(), MediaStreamDescriptor::create(audioSources, MediaStreamSourceVector())); 58 55 59 56 m_source->setAudioFormat(numberOfChannels, context->sampleRate()); -
trunk/Source/WebCore/Modules/webaudio/MediaStreamAudioDestinationNode.h
r149817 r157068 37 37 38 38 class AudioContext; 39 class MediaStreamAudioSource; 39 40 40 41 class MediaStreamAudioDestinationNode : public AudioBasicInspectorNode { … … 62 63 63 64 RefPtr<MediaStream> m_stream; 64 RefPtr<MediaStream Source> m_source;65 RefPtr<MediaStreamAudioSource> m_source; 65 66 RefPtr<AudioBus> m_mixBus; 66 67 }; -
trunk/Source/WebCore/WebCore.xcodeproj/project.pbxproj
r157054 r157068 85 85 070334D9145A006F008D8D45 /* TrackBase.cpp in Sources */ = {isa = PBXBuildFile; fileRef = 070334D8145A006F008D8D45 /* TrackBase.cpp */; }; 86 86 070334E9145A1F36008D8D45 /* JSTrackCustom.cpp in Sources */ = {isa = PBXBuildFile; fileRef = 070334E8145A1F35008D8D45 /* JSTrackCustom.cpp */; }; 87 070584FD17F9D6DF005F2BCB /* MediaStreamSourceCapabilities.h in Headers */ = {isa = PBXBuildFile; fileRef = 070584FB17F9D6DF005F2BCB /* MediaStreamSourceCapabilities.h */; settings = {ATTRIBUTES = (Private, ); }; }; 88 070584FF17F9F05E005F2BCB /* CapabilityRange.cpp in Sources */ = {isa = PBXBuildFile; fileRef = 070584FE17F9F05E005F2BCB /* CapabilityRange.cpp */; }; 89 0705850217FA10D0005F2BCB /* JSAllVideoCapabilities.cpp in Sources */ = {isa = PBXBuildFile; fileRef = 0705850017FA10D0005F2BCB /* JSAllVideoCapabilities.cpp */; }; 90 0705850317FA10D0005F2BCB /* JSAllVideoCapabilities.h in Headers */ = {isa = PBXBuildFile; fileRef = 0705850117FA10D0005F2BCB /* JSAllVideoCapabilities.h */; }; 91 0705850817FA4689005F2BCB /* AllAudioCapabilities.h in Headers */ = {isa = PBXBuildFile; fileRef = 0705850517FA4689005F2BCB /* AllAudioCapabilities.h */; }; 92 0705850B17FA4827005F2BCB /* MediaStreamCapabilities.h in Headers */ = {isa = PBXBuildFile; fileRef = 0705850A17FA4827005F2BCB /* MediaStreamCapabilities.h */; }; 93 0705851217FA7107005F2BCB /* JSMediaStreamCapabilities.cpp in Sources */ = {isa = PBXBuildFile; fileRef = 0705851017FA7107005F2BCB /* JSMediaStreamCapabilities.cpp */; }; 94 0705851317FA7107005F2BCB /* JSMediaStreamCapabilities.h in Headers */ = {isa = PBXBuildFile; fileRef = 0705851117FA7107005F2BCB /* JSMediaStreamCapabilities.h */; }; 95 0705851517FB0EEA005F2BCB /* MediaStreamCapabilities.cpp in Sources */ = {isa = PBXBuildFile; fileRef = 0705851417FB0E2C005F2BCB /* MediaStreamCapabilities.cpp */; }; 96 0705851717FB40E9005F2BCB /* JSMediaStreamCapabilitiesCustom.cpp in Sources */ = {isa = PBXBuildFile; fileRef = 0705851617FB40E9005F2BCB /* JSMediaStreamCapabilitiesCustom.cpp */; }; 97 0705851A17FB44B4005F2BCB /* JSAllAudioCapabilities.cpp in Sources */ = {isa = PBXBuildFile; fileRef = 0705851817FB44B4005F2BCB /* JSAllAudioCapabilities.cpp */; }; 98 0705851B17FB44B4005F2BCB /* JSAllAudioCapabilities.h in Headers */ = {isa = PBXBuildFile; fileRef = 0705851917FB44B4005F2BCB /* JSAllAudioCapabilities.h */; }; 99 0705852117FDC140005F2BCB /* MediaTrackConstraint.h in Headers */ = {isa = PBXBuildFile; fileRef = 0705851D17FDC140005F2BCB /* MediaTrackConstraint.h */; }; 100 0705852317FDC140005F2BCB /* MediaTrackConstraints.cpp in Sources */ = {isa = PBXBuildFile; fileRef = 0705851F17FDC140005F2BCB /* MediaTrackConstraints.cpp */; }; 101 0705852417FDC140005F2BCB /* MediaTrackConstraints.h in Headers */ = {isa = PBXBuildFile; fileRef = 0705852017FDC140005F2BCB /* MediaTrackConstraints.h */; }; 102 0705852917FDE02C005F2BCB /* MediaTrackConstraintSet.h in Headers */ = {isa = PBXBuildFile; fileRef = 0705852617FDE02B005F2BCB /* MediaTrackConstraintSet.h */; }; 103 0705853117FDE6D9005F2BCB /* JSMediaTrackConstraint.cpp in Sources */ = {isa = PBXBuildFile; fileRef = 0705852B17FDE6D9005F2BCB /* JSMediaTrackConstraint.cpp */; }; 104 0705853217FDE6D9005F2BCB /* JSMediaTrackConstraint.h in Headers */ = {isa = PBXBuildFile; fileRef = 0705852C17FDE6D9005F2BCB /* JSMediaTrackConstraint.h */; }; 105 0705853317FDE6D9005F2BCB /* JSMediaTrackConstraints.cpp in Sources */ = {isa = PBXBuildFile; fileRef = 0705852D17FDE6D9005F2BCB /* JSMediaTrackConstraints.cpp */; }; 106 0705853417FDE6D9005F2BCB /* JSMediaTrackConstraints.h in Headers */ = {isa = PBXBuildFile; fileRef = 0705852E17FDE6D9005F2BCB /* JSMediaTrackConstraints.h */; }; 107 0705853517FDE6D9005F2BCB /* JSMediaTrackConstraintSet.cpp in Sources */ = {isa = PBXBuildFile; fileRef = 0705852F17FDE6D9005F2BCB /* JSMediaTrackConstraintSet.cpp */; }; 108 0705853617FDE6D9005F2BCB /* JSMediaTrackConstraintSet.h in Headers */ = {isa = PBXBuildFile; fileRef = 0705853017FDE6D9005F2BCB /* JSMediaTrackConstraintSet.h */; }; 109 0705853817FE044F005F2BCB /* MediaTrackConstraintSet.cpp in Sources */ = {isa = PBXBuildFile; fileRef = 0705853717FE044F005F2BCB /* MediaTrackConstraintSet.cpp */; }; 110 0705853A17FE0770005F2BCB /* MediaTrackConstraint.cpp in Sources */ = {isa = PBXBuildFile; fileRef = 0705853917FE0770005F2BCB /* MediaTrackConstraint.cpp */; }; 87 111 0707568B142262D600414161 /* HTMLTrackElement.cpp in Sources */ = {isa = PBXBuildFile; fileRef = 07075688142262D600414161 /* HTMLTrackElement.cpp */; }; 88 112 0707568C142262D600414161 /* HTMLTrackElement.h in Headers */ = {isa = PBXBuildFile; fileRef = 07075689142262D600414161 /* HTMLTrackElement.h */; }; … … 120 144 07367DDF172CA67F00D861B9 /* InbandTextTrackPrivateLegacyAVFObjC.h in Headers */ = {isa = PBXBuildFile; fileRef = 07367DDD172CA67F00D861B9 /* InbandTextTrackPrivateLegacyAVFObjC.h */; }; 121 145 07367DE0172CA68200D861B9 /* InbandTextTrackPrivateLegacyAVFObjC.mm in Sources */ = {isa = PBXBuildFile; fileRef = 07367DDE172CA67F00D861B9 /* InbandTextTrackPrivateLegacyAVFObjC.mm */; }; 146 073AB4B317F8BACA006E0D6F /* AllVideoCapabilities.h in Headers */ = {isa = PBXBuildFile; fileRef = 073AB4B017F8BACA006E0D6F /* AllVideoCapabilities.h */; }; 147 073AB4B717F92ECF006E0D6F /* JSCapabilityRange.cpp in Sources */ = {isa = PBXBuildFile; fileRef = 073AB4B517F92ECF006E0D6F /* JSCapabilityRange.cpp */; }; 148 073AB4B817F92ECF006E0D6F /* JSCapabilityRange.h in Headers */ = {isa = PBXBuildFile; fileRef = 073AB4B617F92ECF006E0D6F /* JSCapabilityRange.h */; }; 122 149 073BE34017D17E01002BD431 /* JSNavigatorMediaStream.cpp in Sources */ = {isa = PBXBuildFile; fileRef = 073BE33E17D17E01002BD431 /* JSNavigatorMediaStream.cpp */; }; 123 150 073BE34117D17E01002BD431 /* JSNavigatorMediaStream.h in Headers */ = {isa = PBXBuildFile; fileRef = 073BE33F17D17E01002BD431 /* JSNavigatorMediaStream.h */; settings = {ATTRIBUTES = (Private, ); }; }; … … 146 173 076970871463AD8700F502CF /* TextTrackList.h in Headers */ = {isa = PBXBuildFile; fileRef = 076970851463AD8700F502CF /* TextTrackList.h */; }; 147 174 076F0D0E12B8192700C26AA4 /* MediaPlayerPrivateAVFoundation.h in Headers */ = {isa = PBXBuildFile; fileRef = 076F0D0A12B8192700C26AA4 /* MediaPlayerPrivateAVFoundation.h */; }; 175 0783228418013ED800999E0C /* MediaStreamAudioSource.cpp in Sources */ = {isa = PBXBuildFile; fileRef = 0783228218013ED700999E0C /* MediaStreamAudioSource.cpp */; }; 176 0783228518013ED800999E0C /* MediaStreamAudioSource.h in Headers */ = {isa = PBXBuildFile; fileRef = 0783228318013ED800999E0C /* MediaStreamAudioSource.h */; }; 148 177 07846342145B151A00A58DF1 /* JSTrackEvent.cpp in Sources */ = {isa = PBXBuildFile; fileRef = 07846340145B151A00A58DF1 /* JSTrackEvent.cpp */; }; 149 178 07846343145B151A00A58DF1 /* JSTrackEvent.h in Headers */ = {isa = PBXBuildFile; fileRef = 07846341145B151A00A58DF1 /* JSTrackEvent.h */; }; … … 277 306 07C59B6317F4D1BF000FBCBB /* MockMediaStreamCenter.cpp in Sources */ = {isa = PBXBuildFile; fileRef = 07C59B6117F4CF87000FBCBB /* MockMediaStreamCenter.cpp */; }; 278 307 07C59B6417F4D1C4000FBCBB /* MockMediaStreamCenter.h in Headers */ = {isa = PBXBuildFile; fileRef = 07C59B6217F4CF87000FBCBB /* MockMediaStreamCenter.h */; }; 308 07C59B6817F784BA000FBCBB /* MediaSourceStates.cpp in Sources */ = {isa = PBXBuildFile; fileRef = 07C59B6517F784BA000FBCBB /* MediaSourceStates.cpp */; }; 309 07C59B6917F784BA000FBCBB /* MediaSourceStates.h in Headers */ = {isa = PBXBuildFile; fileRef = 07C59B6617F784BA000FBCBB /* MediaSourceStates.h */; }; 310 07C59B6E17F794F6000FBCBB /* JSMediaSourceStatesCustom.cpp in Sources */ = {isa = PBXBuildFile; fileRef = 07C59B6D17F794F6000FBCBB /* JSMediaSourceStatesCustom.cpp */; }; 311 07C59B7117F79C7C000FBCBB /* JSMediaSourceStates.cpp in Sources */ = {isa = PBXBuildFile; fileRef = 07C59B6F17F79C7C000FBCBB /* JSMediaSourceStates.cpp */; }; 312 07C59B7217F79C7C000FBCBB /* JSMediaSourceStates.h in Headers */ = {isa = PBXBuildFile; fileRef = 07C59B7017F79C7C000FBCBB /* JSMediaSourceStates.h */; }; 313 07C59B7617F7D0DB000FBCBB /* CapabilityRange.h in Headers */ = {isa = PBXBuildFile; fileRef = 07C59B7417F7D09D000FBCBB /* CapabilityRange.h */; }; 279 314 07CE77D516712A6A00C55A47 /* InbandTextTrackPrivateClient.h in Headers */ = {isa = PBXBuildFile; fileRef = 07CE77D416712A6A00C55A47 /* InbandTextTrackPrivateClient.h */; settings = {ATTRIBUTES = (Private, ); }; }; 280 315 07DC5FD417D3EEE90099F890 /* JSRTCStatsResponseCustom.cpp in Sources */ = {isa = PBXBuildFile; fileRef = 07DC5FD317D3EEE90099F890 /* JSRTCStatsResponseCustom.cpp */; }; … … 6415 6450 070334D8145A006F008D8D45 /* TrackBase.cpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; path = TrackBase.cpp; sourceTree = "<group>"; }; 6416 6451 070334E8145A1F35008D8D45 /* JSTrackCustom.cpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; path = JSTrackCustom.cpp; sourceTree = "<group>"; }; 6452 070584FB17F9D6DF005F2BCB /* MediaStreamSourceCapabilities.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = MediaStreamSourceCapabilities.h; sourceTree = "<group>"; }; 6453 070584FE17F9F05E005F2BCB /* CapabilityRange.cpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; path = CapabilityRange.cpp; sourceTree = "<group>"; }; 6454 0705850017FA10D0005F2BCB /* JSAllVideoCapabilities.cpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; path = JSAllVideoCapabilities.cpp; sourceTree = "<group>"; }; 6455 0705850117FA10D0005F2BCB /* JSAllVideoCapabilities.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = JSAllVideoCapabilities.h; sourceTree = "<group>"; }; 6456 0705850517FA4689005F2BCB /* AllAudioCapabilities.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = AllAudioCapabilities.h; sourceTree = "<group>"; }; 6457 0705850617FA4689005F2BCB /* AllAudioCapabilities.idl */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = text; path = AllAudioCapabilities.idl; sourceTree = "<group>"; }; 6458 0705850A17FA4827005F2BCB /* MediaStreamCapabilities.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = MediaStreamCapabilities.h; sourceTree = "<group>"; }; 6459 0705850E17FA6FB1005F2BCB /* MediaStreamCapabilities.idl */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = text; path = MediaStreamCapabilities.idl; sourceTree = "<group>"; }; 6460 0705851017FA7107005F2BCB /* JSMediaStreamCapabilities.cpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; path = JSMediaStreamCapabilities.cpp; sourceTree = "<group>"; }; 6461 0705851117FA7107005F2BCB /* JSMediaStreamCapabilities.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = JSMediaStreamCapabilities.h; sourceTree = "<group>"; }; 6462 0705851417FB0E2C005F2BCB /* MediaStreamCapabilities.cpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; path = MediaStreamCapabilities.cpp; sourceTree = "<group>"; }; 6463 0705851617FB40E9005F2BCB /* JSMediaStreamCapabilitiesCustom.cpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; path = JSMediaStreamCapabilitiesCustom.cpp; sourceTree = "<group>"; }; 6464 0705851817FB44B4005F2BCB /* JSAllAudioCapabilities.cpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; path = JSAllAudioCapabilities.cpp; sourceTree = "<group>"; }; 6465 0705851917FB44B4005F2BCB /* JSAllAudioCapabilities.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = JSAllAudioCapabilities.h; sourceTree = "<group>"; }; 6466 0705851C17FDB23C005F2BCB /* MediaTrackConstraints.idl */ = {isa = PBXFileReference; lastKnownFileType = text; path = MediaTrackConstraints.idl; sourceTree = "<group>"; }; 6467 0705851D17FDC140005F2BCB /* MediaTrackConstraint.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = MediaTrackConstraint.h; sourceTree = "<group>"; }; 6468 0705851E17FDC140005F2BCB /* MediaTrackConstraint.idl */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = text; path = MediaTrackConstraint.idl; sourceTree = "<group>"; }; 6469 0705851F17FDC140005F2BCB /* MediaTrackConstraints.cpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; path = MediaTrackConstraints.cpp; sourceTree = "<group>"; }; 6470 0705852017FDC140005F2BCB /* MediaTrackConstraints.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = MediaTrackConstraints.h; sourceTree = "<group>"; }; 6471 0705852617FDE02B005F2BCB /* MediaTrackConstraintSet.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = MediaTrackConstraintSet.h; sourceTree = "<group>"; }; 6472 0705852717FDE02B005F2BCB /* MediaTrackConstraintSet.idl */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = text; path = MediaTrackConstraintSet.idl; sourceTree = "<group>"; }; 6473 0705852B17FDE6D9005F2BCB /* JSMediaTrackConstraint.cpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; path = JSMediaTrackConstraint.cpp; sourceTree = "<group>"; }; 6474 0705852C17FDE6D9005F2BCB /* JSMediaTrackConstraint.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = JSMediaTrackConstraint.h; sourceTree = "<group>"; }; 6475 0705852D17FDE6D9005F2BCB /* JSMediaTrackConstraints.cpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; path = JSMediaTrackConstraints.cpp; sourceTree = "<group>"; }; 6476 0705852E17FDE6D9005F2BCB /* JSMediaTrackConstraints.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = JSMediaTrackConstraints.h; sourceTree = "<group>"; }; 6477 0705852F17FDE6D9005F2BCB /* JSMediaTrackConstraintSet.cpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; path = JSMediaTrackConstraintSet.cpp; sourceTree = "<group>"; }; 6478 0705853017FDE6D9005F2BCB /* JSMediaTrackConstraintSet.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = JSMediaTrackConstraintSet.h; sourceTree = "<group>"; }; 6479 0705853717FE044F005F2BCB /* MediaTrackConstraintSet.cpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; path = MediaTrackConstraintSet.cpp; sourceTree = "<group>"; }; 6480 0705853917FE0770005F2BCB /* MediaTrackConstraint.cpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; path = MediaTrackConstraint.cpp; sourceTree = "<group>"; }; 6417 6481 07075688142262D600414161 /* HTMLTrackElement.cpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; path = HTMLTrackElement.cpp; sourceTree = "<group>"; }; 6418 6482 07075689142262D600414161 /* HTMLTrackElement.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = HTMLTrackElement.h; sourceTree = "<group>"; }; … … 6550 6614 07367DDD172CA67F00D861B9 /* InbandTextTrackPrivateLegacyAVFObjC.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; name = InbandTextTrackPrivateLegacyAVFObjC.h; path = objc/InbandTextTrackPrivateLegacyAVFObjC.h; sourceTree = "<group>"; }; 6551 6615 07367DDE172CA67F00D861B9 /* InbandTextTrackPrivateLegacyAVFObjC.mm */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.objcpp; name = InbandTextTrackPrivateLegacyAVFObjC.mm; path = objc/InbandTextTrackPrivateLegacyAVFObjC.mm; sourceTree = "<group>"; }; 6616 073AB4B017F8BACA006E0D6F /* AllVideoCapabilities.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = AllVideoCapabilities.h; sourceTree = "<group>"; }; 6617 073AB4B517F92ECF006E0D6F /* JSCapabilityRange.cpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; path = JSCapabilityRange.cpp; sourceTree = "<group>"; }; 6618 073AB4B617F92ECF006E0D6F /* JSCapabilityRange.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = JSCapabilityRange.h; sourceTree = "<group>"; }; 6552 6619 073BE33E17D17E01002BD431 /* JSNavigatorMediaStream.cpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; path = JSNavigatorMediaStream.cpp; sourceTree = "<group>"; }; 6553 6620 073BE33F17D17E01002BD431 /* JSNavigatorMediaStream.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = JSNavigatorMediaStream.h; sourceTree = "<group>"; }; … … 6576 6643 076F0D0912B8192700C26AA4 /* MediaPlayerPrivateAVFoundation.cpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; path = MediaPlayerPrivateAVFoundation.cpp; sourceTree = "<group>"; }; 6577 6644 076F0D0A12B8192700C26AA4 /* MediaPlayerPrivateAVFoundation.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = MediaPlayerPrivateAVFoundation.h; sourceTree = "<group>"; }; 6645 0783228218013ED700999E0C /* MediaStreamAudioSource.cpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; path = MediaStreamAudioSource.cpp; sourceTree = "<group>"; }; 6646 0783228318013ED800999E0C /* MediaStreamAudioSource.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = MediaStreamAudioSource.h; sourceTree = "<group>"; }; 6578 6647 07846340145B151A00A58DF1 /* JSTrackEvent.cpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; path = JSTrackEvent.cpp; sourceTree = "<group>"; }; 6579 6648 07846341145B151A00A58DF1 /* JSTrackEvent.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = JSTrackEvent.h; sourceTree = "<group>"; }; … … 6640 6709 07C59B6117F4CF87000FBCBB /* MockMediaStreamCenter.cpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; name = MockMediaStreamCenter.cpp; path = mock/MockMediaStreamCenter.cpp; sourceTree = "<group>"; }; 6641 6710 07C59B6217F4CF87000FBCBB /* MockMediaStreamCenter.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; name = MockMediaStreamCenter.h; path = mock/MockMediaStreamCenter.h; sourceTree = "<group>"; }; 6711 07C59B6517F784BA000FBCBB /* MediaSourceStates.cpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; path = MediaSourceStates.cpp; sourceTree = "<group>"; }; 6712 07C59B6617F784BA000FBCBB /* MediaSourceStates.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = MediaSourceStates.h; sourceTree = "<group>"; }; 6713 07C59B6717F784BA000FBCBB /* MediaSourceStates.idl */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = text; path = MediaSourceStates.idl; sourceTree = "<group>"; }; 6714 07C59B6D17F794F6000FBCBB /* JSMediaSourceStatesCustom.cpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; path = JSMediaSourceStatesCustom.cpp; sourceTree = "<group>"; }; 6715 07C59B6F17F79C7C000FBCBB /* JSMediaSourceStates.cpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; path = JSMediaSourceStates.cpp; sourceTree = "<group>"; }; 6716 07C59B7017F79C7C000FBCBB /* JSMediaSourceStates.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = JSMediaSourceStates.h; sourceTree = "<group>"; }; 6717 07C59B7317F7D09D000FBCBB /* AllVideoCapabilities.idl */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = text; path = AllVideoCapabilities.idl; sourceTree = "<group>"; }; 6718 07C59B7417F7D09D000FBCBB /* CapabilityRange.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = CapabilityRange.h; sourceTree = "<group>"; }; 6719 07C59B7517F7D09D000FBCBB /* CapabilityRange.idl */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = text; path = CapabilityRange.idl; sourceTree = "<group>"; }; 6642 6720 07CE77D416712A6A00C55A47 /* InbandTextTrackPrivateClient.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = InbandTextTrackPrivateClient.h; sourceTree = "<group>"; }; 6643 6721 07DC5FD317D3EEE90099F890 /* JSRTCStatsResponseCustom.cpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; path = JSRTCStatsResponseCustom.cpp; sourceTree = "<group>"; }; … … 13210 13288 isa = PBXGroup; 13211 13289 children = ( 13290 0705853917FE0770005F2BCB /* MediaTrackConstraint.cpp */, 13291 0705853717FE044F005F2BCB /* MediaTrackConstraintSet.cpp */, 13292 0705852617FDE02B005F2BCB /* MediaTrackConstraintSet.h */, 13293 0705852717FDE02B005F2BCB /* MediaTrackConstraintSet.idl */, 13294 0705851D17FDC140005F2BCB /* MediaTrackConstraint.h */, 13295 0705851E17FDC140005F2BCB /* MediaTrackConstraint.idl */, 13296 0705851F17FDC140005F2BCB /* MediaTrackConstraints.cpp */, 13297 0705852017FDC140005F2BCB /* MediaTrackConstraints.h */, 13298 0705851C17FDB23C005F2BCB /* MediaTrackConstraints.idl */, 13299 0705850517FA4689005F2BCB /* AllAudioCapabilities.h */, 13300 0705850617FA4689005F2BCB /* AllAudioCapabilities.idl */, 13301 070584FE17F9F05E005F2BCB /* CapabilityRange.cpp */, 13302 073AB4B017F8BACA006E0D6F /* AllVideoCapabilities.h */, 13303 07C59B7317F7D09D000FBCBB /* AllVideoCapabilities.idl */, 13304 07C59B7417F7D09D000FBCBB /* CapabilityRange.h */, 13305 07C59B7517F7D09D000FBCBB /* CapabilityRange.idl */, 13306 07C59B6517F784BA000FBCBB /* MediaSourceStates.cpp */, 13307 07C59B6617F784BA000FBCBB /* MediaSourceStates.h */, 13308 07C59B6717F784BA000FBCBB /* MediaSourceStates.idl */, 13212 13309 07C59B4D17F4AC15000FBCBB /* AudioStreamTrack.cpp */, 13213 13310 07C59B4E17F4AC15000FBCBB /* AudioStreamTrack.h */, … … 13216 13313 07C59B5117F4AC15000FBCBB /* VideoStreamTrack.h */, 13217 13314 07C59B5217F4AC15000FBCBB /* VideoStreamTrack.idl */, 13315 0705851417FB0E2C005F2BCB /* MediaStreamCapabilities.cpp */, 13316 0705850E17FA6FB1005F2BCB /* MediaStreamCapabilities.idl */, 13317 0705850A17FA4827005F2BCB /* MediaStreamCapabilities.h */, 13218 13318 07221B4A17CEC32700848E51 /* MediaConstraintsImpl.cpp */, 13219 13319 07221B4B17CEC32700848E51 /* MediaConstraintsImpl.h */, … … 13314 13414 07221B9E17CF0AD400848E51 /* MediaStreamSource.cpp */, 13315 13415 07221B9F17CF0AD400848E51 /* MediaStreamSource.h */, 13416 070584FB17F9D6DF005F2BCB /* MediaStreamSourceCapabilities.h */, 13316 13417 076306E217E22A43005A7C4E /* MediaStreamTrackSourcesRequestClient.h */, 13317 13418 07221BA117CF0AD400848E51 /* RTCConfiguration.h */, … … 13361 13462 isa = PBXGroup; 13362 13463 children = ( 13464 0705852B17FDE6D9005F2BCB /* JSMediaTrackConstraint.cpp */, 13465 0705852C17FDE6D9005F2BCB /* JSMediaTrackConstraint.h */, 13466 0705852D17FDE6D9005F2BCB /* JSMediaTrackConstraints.cpp */, 13467 0705852E17FDE6D9005F2BCB /* JSMediaTrackConstraints.h */, 13468 0705852F17FDE6D9005F2BCB /* JSMediaTrackConstraintSet.cpp */, 13469 0705853017FDE6D9005F2BCB /* JSMediaTrackConstraintSet.h */, 13470 0705851017FA7107005F2BCB /* JSMediaStreamCapabilities.cpp */, 13471 0705851117FA7107005F2BCB /* JSMediaStreamCapabilities.h */, 13472 07C59B6F17F79C7C000FBCBB /* JSMediaSourceStates.cpp */, 13473 07C59B7017F79C7C000FBCBB /* JSMediaSourceStates.h */, 13363 13474 07C59B5917F4B208000FBCBB /* JSAudioStreamTrack.cpp */, 13364 13475 07C59B5A17F4B208000FBCBB /* JSAudioStreamTrack.h */, … … 19180 19291 isa = PBXGroup; 19181 19292 children = ( 19293 0705851617FB40E9005F2BCB /* JSMediaStreamCapabilitiesCustom.cpp */, 19294 07C59B6D17F794F6000FBCBB /* JSMediaSourceStatesCustom.cpp */, 19182 19295 BC2ED6BB0C6BD2F000920BFF /* JSAttrCustom.cpp */, 19183 19296 FDEAAAEF12B02EE400DCF33B /* JSAudioBufferSourceNodeCustom.cpp */, … … 19776 19889 isa = PBXGroup; 19777 19890 children = ( 19891 0705851817FB44B4005F2BCB /* JSAllAudioCapabilities.cpp */, 19892 0705851917FB44B4005F2BCB /* JSAllAudioCapabilities.h */, 19893 0705850017FA10D0005F2BCB /* JSAllVideoCapabilities.cpp */, 19894 0705850117FA10D0005F2BCB /* JSAllVideoCapabilities.h */, 19895 073AB4B517F92ECF006E0D6F /* JSCapabilityRange.cpp */, 19896 073AB4B617F92ECF006E0D6F /* JSCapabilityRange.h */, 19778 19897 CD9DE17217AAC74C00EA386D /* JSMediaSource.cpp */, 19779 19898 CD9DE17317AAC74C00EA386D /* JSMediaSource.h */, … … 21023 21142 isa = PBXGroup; 21024 21143 children = ( 21144 0783228218013ED700999E0C /* MediaStreamAudioSource.cpp */, 21145 0783228318013ED800999E0C /* MediaStreamAudioSource.h */, 21025 21146 FD315FF312B0267600C1A359 /* AnalyserNode.cpp */, 21026 21147 FD315FF412B0267600C1A359 /* AnalyserNode.h */, … … 21420 21541 FDE2D55B159E66EB00DCCCF8 /* AudioIOCallback.h in Headers */, 21421 21542 FD31601012B0267600C1A359 /* AudioListener.h in Headers */, 21543 0705852417FDC140005F2BCB /* MediaTrackConstraints.h in Headers */, 21422 21544 FD31601312B0267600C1A359 /* AudioNode.h in Headers */, 21423 21545 FD31601612B0267600C1A359 /* AudioNodeInput.h in Headers */, … … 21582 21704 2DF2E9D5166E39750035BEF2 /* ConsoleAPITypes.h in Headers */, 21583 21705 41F0618E0F5F069800A07EAC /* ConsoleMessage.h in Headers */, 21706 073AB4B317F8BACA006E0D6F /* AllVideoCapabilities.h in Headers */, 21584 21707 BCE5644E137A34D6007D2934 /* ConsoleTypes.h in Headers */, 21585 21708 A818721C0977D3C0005826D9 /* ContainerNode.h in Headers */, … … 21738 21861 F55B3DB61251F12D003EF269 /* DateInputType.h in Headers */, 21739 21862 453EB637159C570400001BB7 /* DateTimeFormat.h in Headers */, 21863 0705850317FA10D0005F2BCB /* JSAllVideoCapabilities.h in Headers */, 21740 21864 F55B3DB81251F12D003EF269 /* DateTimeInputType.h in Headers */, 21741 21865 F55B3DBA1251F12D003EF269 /* DateTimeLocalInputType.h in Headers */, … … 21751 21875 FD31603112B0267600C1A359 /* DelayProcessor.h in Headers */, 21752 21876 1C4C8F660AD8655D009475CE /* DeleteButton.h in Headers */, 21877 0705853217FDE6D9005F2BCB /* JSMediaTrackConstraint.h in Headers */, 21753 21878 1C4C8F020AD85D87009475CE /* DeleteButtonController.h in Headers */, 21754 21879 93309DDF099E64920056E581 /* DeleteFromTextNodeCommand.h in Headers */, … … 21792 21917 14947FFE12F80CD200A0F631 /* DocumentOrderedMap.h in Headers */, 21793 21918 BCCFBAE80B5152ED0001F1D7 /* DocumentParser.h in Headers */, 21919 0705852917FDE02C005F2BCB /* MediaTrackConstraintSet.h in Headers */, 21794 21920 4A4F48AA16B0DFC000EDBB29 /* DocumentRuleSets.h in Headers */, 21795 21921 AD6E71AD1668899D00320C13 /* DocumentSharedObjectPool.h in Headers */, … … 21946 22072 85E711AD0AC5D5350053270F /* DOMHTMLHeadElementInternal.h in Headers */, 21947 22073 85183B440AA6926100F19FA3 /* DOMHTMLHeadingElement.h in Headers */, 22074 0705853617FDE6D9005F2BCB /* JSMediaTrackConstraintSet.h in Headers */, 21948 22075 85E711AE0AC5D5350053270F /* DOMHTMLHeadingElementInternal.h in Headers */, 21949 22076 85ECBEF10AA7626900544F0B /* DOMHTMLHRElement.h in Headers */, … … 22058 22185 85E711D40AC5D5350053270F /* DOMNotationInternal.h in Headers */, 22059 22186 856C8AE40A912649005C687B /* DOMObject.h in Headers */, 22187 0705851317FA7107005F2BCB /* JSMediaStreamCapabilities.h in Headers */, 22060 22188 BC53DA601143141A000D817E /* DOMObjectHashTableMap.h in Headers */, 22061 22189 85C7F5D00AAFB8D9004014DD /* DOMOverflowEvent.h in Headers */, … … 22504 22632 977B387A122883E900B81FF8 /* HTMLViewSourceParser.h in Headers */, 22505 22633 514C76710CE923A1007EF3CD /* HTTPHeaderMap.h in Headers */, 22634 073AB4B817F92ECF006E0D6F /* JSCapabilityRange.h in Headers */, 22506 22635 514C76730CE923A1007EF3CD /* HTTPParsers.h in Headers */, 22507 22636 375CD232119D43C800A2A859 /* Hyphenation.h in Headers */, … … 22609 22738 F3D4C47912E07663003DA150 /* InspectorDOMDebuggerAgent.h in Headers */, 22610 22739 7A74ECBB101839A600BF939E /* InspectorDOMStorageAgent.h in Headers */, 22740 0705853417FDE6D9005F2BCB /* JSMediaTrackConstraints.h in Headers */, 22611 22741 578DA20E1520EB8C006141C1 /* InspectorFrontend.h in Headers */, 22612 22742 227777601345DEA9008EA455 /* InspectorFrontendChannel.h in Headers */, … … 23073 23203 B2FA3DDD0AB75A6F000E5AC4 /* JSSVGPathSegMovetoAbs.h in Headers */, 23074 23204 B2FA3DDF0AB75A6F000E5AC4 /* JSSVGPathSegMovetoRel.h in Headers */, 23205 0705852117FDC140005F2BCB /* MediaTrackConstraint.h in Headers */, 23075 23206 B2FA3DE10AB75A6F000E5AC4 /* JSSVGPatternElement.h in Headers */, 23076 23207 8542A7950AE5C94100DF58DF /* JSSVGPoint.h in Headers */, … … 23559 23690 439046E412DA25E800AF80A2 /* RenderMathMLRow.h in Headers */, 23560 23691 439046E612DA25E800AF80A2 /* RenderMathMLSquareRoot.h in Headers */, 23692 0783228518013ED800999E0C /* MediaStreamAudioSource.h in Headers */, 23561 23693 439046E812DA25E800AF80A2 /* RenderMathMLScripts.h in Headers */, 23562 23694 439046EA12DA25E800AF80A2 /* RenderMathMLUnderOver.h in Headers */, … … 23579 23711 BCA846D70DC67A350026C309 /* RenderReplica.h in Headers */, 23580 23712 1479FAEE109AE37500DED655 /* RenderRuby.h in Headers */, 23713 0705850817FA4689005F2BCB /* AllAudioCapabilities.h in Headers */, 23581 23714 1479FAF0109AE37500DED655 /* RenderRubyBase.h in Headers */, 23582 23715 1479FAF2109AE37500DED655 /* RenderRubyRun.h in Headers */, … … 23661 23794 E4295FA412B0614E00D1ACE0 /* ResourceLoadPriority.h in Headers */, 23662 23795 D0CE58F9125E4CC200F3F199 /* ResourceLoadScheduler.h in Headers */, 23796 07C59B7617F7D0DB000FBCBB /* CapabilityRange.h in Headers */, 23663 23797 8A81BF8511DCFD9000DA2B98 /* ResourceLoadTiming.h in Headers */, 23664 23798 7EE6846D12D26E3800E79415 /* ResourceRequest.h in Headers */, … … 23970 24104 B22279B10D00BF220071B782 /* SVGDescElement.h in Headers */, 23971 24105 B5B7A17117C10AC000E4AA0A /* ElementData.h in Headers */, 24106 0705850B17FA4827005F2BCB /* MediaStreamCapabilities.h in Headers */, 23972 24107 B22279B40D00BF220071B782 /* SVGDocument.h in Headers */, 23973 24108 B28C6A280D00C44800334AA4 /* SVGDocumentExtensions.h in Headers */, … … 24044 24179 B2227A360D00BF220071B782 /* SVGLengthList.h in Headers */, 24045 24180 B2227A390D00BF220071B782 /* SVGLinearGradientElement.h in Headers */, 24181 07C59B6917F784BA000FBCBB /* MediaSourceStates.h in Headers */, 24046 24182 B2227A3C0D00BF220071B782 /* SVGLineElement.h in Headers */, 24047 24183 0810764412828556007C63BA /* SVGListProperty.h in Headers */, … … 24233 24369 49E912AE0EFAC906009D0CAF /* TimingFunction.h in Headers */, 24234 24370 070334D71459FFD5008D8D45 /* TrackBase.h in Headers */, 24371 070584FD17F9D6DF005F2BCB /* MediaStreamSourceCapabilities.h in Headers */, 24235 24372 BE88E0C21715CE2600658D98 /* TrackListBase.h in Headers */, 24236 24373 CD3A495F17A9D01B00274E42 /* MediaSource.h in Headers */, … … 24286 24423 E4C91A0E1802343100A17F6D /* TextPaintStyle.h in Headers */, 24287 24424 BEF29EEC1715DD0900C4B4C9 /* VideoTrackPrivate.h in Headers */, 24425 0705851B17FB44B4005F2BCB /* JSAllAudioCapabilities.h in Headers */, 24288 24426 CEF418CF1179678C009D112C /* ViewportArguments.h in Headers */, 24289 24427 3FFFF9AE159D9B060020BBD5 /* ViewportStyleResolver.h in Headers */, … … 24475 24613 83C1D429178D5AB400141E68 /* SVGPathSegCurvetoCubicSmoothAbs.h in Headers */, 24476 24614 83C1D42A178D5AB400141E68 /* SVGPathSegCurvetoCubicSmoothRel.h in Headers */, 24615 07C59B7217F79C7C000FBCBB /* JSMediaSourceStates.h in Headers */, 24477 24616 83C1D42B178D5AB400141E68 /* SVGPathSegCurvetoQuadraticAbs.h in Headers */, 24478 24617 83C1D42C178D5AB500141E68 /* SVGPathSegCurvetoQuadraticRel.h in Headers */, … … 24960 25099 FDC54F041399B0DA008D9117 /* BiquadFilterNode.cpp in Sources */, 24961 25100 FD31602612B0267600C1A359 /* BiquadProcessor.cpp in Sources */, 25101 070584FF17F9F05E005F2BCB /* CapabilityRange.cpp in Sources */, 24962 25102 A89943290B42338800D7C802 /* BitmapImage.cpp in Sources */, 24963 25103 377A3A9015EFCE9B0059F5C7 /* BitmapImageCG.cpp in Sources */, … … 25263 25403 8518DCEA0A9CC80D0091B7A6 /* DOMDOMImplementation.mm in Sources */, 25264 25404 52CCA9E915E3F64C0053C77F /* DOMDOMNamedFlowCollection.mm in Sources */, 25405 0783228418013ED800999E0C /* MediaStreamAudioSource.cpp in Sources */, 25265 25406 2D9A247315B9C2D100D34527 /* DOMDOMSecurityPolicy.mm in Sources */, 25266 25407 7694565C1214DB630007CBAE /* DOMDOMTokenList.mm in Sources */, … … 25283 25424 078E090417D14CEE00420AA1 /* NavigatorMediaStream.cpp in Sources */, 25284 25425 85ECBEEE0AA7626900544F0B /* DOMHTMLBaseFontElement.mm in Sources */, 25426 07C59B6817F784BA000FBCBB /* MediaSourceStates.cpp in Sources */, 25285 25427 859A9C4A0AA5E3BD00B694B2 /* DOMHTMLBodyElement.mm in Sources */, 25286 25428 85183B430AA6926100F19FA3 /* DOMHTMLBRElement.mm in Sources */, … … 25290 25432 078E090017D14CEE00420AA1 /* MediaStreamEvent.cpp in Sources */, 25291 25433 F5C041E40FFCA96D00839D4A /* DOMHTMLDataListElement.mm in Sources */, 25434 0705852317FDC140005F2BCB /* MediaTrackConstraints.cpp in Sources */, 25292 25435 D359D792129CA3C00006E5D2 /* DOMHTMLDetailsElement.mm in Sources */, 25293 25436 85BA4D0C0AA688680088052D /* DOMHTMLDirectoryElement.mm in Sources */, … … 25741 25884 51E1ECC00C91C90400DC255B /* IconRecord.cpp in Sources */, 25742 25885 45099C411370A7800058D513 /* IconURL.cpp in Sources */, 25886 0705851517FB0EEA005F2BCB /* MediaStreamCapabilities.cpp in Sources */, 25743 25887 C585A66211D4FAC5004C3E4B /* IDBBindingUtilities.cpp in Sources */, 25744 25888 9712A5C515004EDA0048AF10 /* IDBDatabaseCallbacksImpl.cpp in Sources */, … … 25748 25892 9712A5FE15004EDA0048AF10 /* IDBVersionChangeEvent.cpp in Sources */, 25749 25893 1A71D57B0F33819000F9CE4E /* IdentifierRep.cpp in Sources */, 25894 0705853117FDE6D9005F2BCB /* JSMediaTrackConstraint.cpp in Sources */, 25750 25895 5913A24113D49EBA00F5B05C /* IdentifiersFactory.cpp in Sources */, 25751 25896 C3CF17A415B0063F00276D39 /* IdTargetObserver.cpp in Sources */, … … 25917 26062 E10B93C30B73C291003ED890 /* JSCustomXPathNSResolver.cpp in Sources */, 25918 26063 1AE82F8F0CAAFA9D002237AE /* JSDatabase.cpp in Sources */, 26064 07C59B6E17F794F6000FBCBB /* JSMediaSourceStatesCustom.cpp in Sources */, 25919 26065 B59DD69A119029E5007E9684 /* JSDatabaseCallback.cpp in Sources */, 25920 26066 B58CEB6A11913607002A6790 /* JSDatabaseSync.cpp in Sources */, … … 26045 26191 1AE2AA300A1CDAB400B42B25 /* JSHTMLHRElement.cpp in Sources */, 26046 26192 1A85B18F0A1B18A200D8C87C /* JSHTMLHtmlElement.cpp in Sources */, 26193 0705853817FE044F005F2BCB /* MediaTrackConstraintSet.cpp in Sources */, 26047 26194 BC4918C80BFEA050009D6316 /* JSHTMLIFrameElement.cpp in Sources */, 26048 26195 1AE2AA970A1CDD2D00B42B25 /* JSHTMLImageElement.cpp in Sources */, … … 26161 26308 9001788012E0370700648462 /* JSOESStandardDerivatives.cpp in Sources */, 26162 26309 6EBF0E7612A9868800DB1709 /* JSOESTextureFloat.cpp in Sources */, 26310 0705853A17FE0770005F2BCB /* MediaTrackConstraint.cpp in Sources */, 26163 26311 A31C4E5216E02B08002F7957 /* JSOESTextureHalfFloat.cpp in Sources */, 26164 26312 77A17AA612F28B2A004E02F6 /* JSOESVertexArrayObject.cpp in Sources */, … … 26503 26651 BC7FA6200D1F0CBD00DB22A9 /* LiveNodeList.cpp in Sources */, 26504 26652 078E091017D14CEE00420AA1 /* RTCStatsResponse.cpp in Sources */, 26653 0705850217FA10D0005F2BCB /* JSAllVideoCapabilities.cpp in Sources */, 26505 26654 9759E93E14EF1CF80026A2DD /* LoadableTextTrack.cpp in Sources */, 26506 26655 656D37330ADBA5DE00A4554D /* LoaderNSURLExtras.mm in Sources */, … … 26515 26664 BCE1C41C0D982981003B02F2 /* Location.cpp in Sources */, 26516 26665 078E090817D14CEE00420AA1 /* RTCDTMFToneChangeEvent.cpp in Sources */, 26666 0705851A17FB44B4005F2BCB /* JSAllAudioCapabilities.cpp in Sources */, 26517 26667 A8239E0009B3CF8A00B60641 /* Logging.cpp in Sources */, 26518 26668 1402645E0AFDC19B005919E2 /* LoggingMac.mm in Sources */, … … 26581 26731 C6F08FBC1430FE8F00685849 /* MutationRecord.cpp in Sources */, 26582 26732 52B6C9C515E3F4DF00690B05 /* NamedFlowCollection.cpp in Sources */, 26733 0705853317FDE6D9005F2BCB /* JSMediaTrackConstraints.cpp in Sources */, 26583 26734 BCF34A3711A231CD00C71804 /* NamedNodeMap.cpp in Sources */, 26584 26735 A81872240977D3C0005826D9 /* NameNodeList.cpp in Sources */, … … 26841 26992 7EE6846B12D26E3800E79415 /* ResourceErrorCF.cpp in Sources */, 26842 26993 514C76500CE9234E007EF3CD /* ResourceErrorMac.mm in Sources */, 26994 0705851217FA7107005F2BCB /* JSMediaStreamCapabilities.cpp in Sources */, 26843 26995 514C76780CE923A1007EF3CD /* ResourceHandle.cpp in Sources */, 26844 26996 7EE6846C12D26E3800E79415 /* ResourceHandleCFNet.cpp in Sources */, … … 27142 27294 B22279C70D00BF220071B782 /* SVGFEBlendElement.cpp in Sources */, 27143 27295 B22279CA0D00BF220071B782 /* SVGFEColorMatrixElement.cpp in Sources */, 27296 0705853517FDE6D9005F2BCB /* JSMediaTrackConstraintSet.cpp in Sources */, 27144 27297 B22279CD0D00BF220071B782 /* SVGFEComponentTransferElement.cpp in Sources */, 27145 27298 B22279D00D00BF220071B782 /* SVGFECompositeElement.cpp in Sources */, … … 27204 27357 B2227A400D00BF220071B782 /* SVGLocatable.cpp in Sources */, 27205 27358 B2227A430D00BF220071B782 /* SVGMarkerElement.cpp in Sources */, 27359 0705851717FB40E9005F2BCB /* JSMediaStreamCapabilitiesCustom.cpp in Sources */, 27206 27360 B2227A460D00BF220071B782 /* SVGMaskElement.cpp in Sources */, 27207 27361 B2227A4A0D00BF220071B782 /* SVGMetadataElement.cpp in Sources */, … … 27267 27421 8485228A1190173C006EDC7F /* SVGVKernElement.cpp in Sources */, 27268 27422 B2227AF50D00BF220071B782 /* SVGZoomAndPan.cpp in Sources */, 27423 073AB4B717F92ECF006E0D6F /* JSCapabilityRange.cpp in Sources */, 27269 27424 B2E4EC970D00C22B00432643 /* SVGZoomEvent.cpp in Sources */, 27270 27425 E180811216FCF42F00B80D07 /* SynchronousLoaderClient.cpp in Sources */, … … 27447 27602 97AABD1D14FA09D5007457AE /* WebSocketChannel.cpp in Sources */, 27448 27603 4A38BF5014FE1C0900612512 /* WebSocketDeflateFramer.cpp in Sources */, 27604 07C59B7117F79C7C000FBCBB /* JSMediaSourceStates.cpp in Sources */, 27449 27605 97AABD2014FA09D5007457AE /* WebSocketDeflater.cpp in Sources */, 27450 27606 97AABD2214FA09D5007457AE /* WebSocketExtensionDispatcher.cpp in Sources */, -
trunk/Source/WebCore/dom/EventNames.h
r156473 r157068 239 239 macro(signalingstatechange) \ 240 240 macro(removetrack) \ 241 macro(overconstrained) \ 241 242 macro(mute) \ 242 243 macro(unmute) \ -
trunk/Source/WebCore/platform/mediastream/MediaStreamCenter.cpp
r156473 r157068 68 68 } 69 69 70 void MediaStreamCenter::endLocalMediaStream(MediaStreamDescriptor* streamDescriptor)71 {72 streamDescriptor->setEnded();73 }74 75 70 } // namespace WebCore 76 71 -
trunk/Source/WebCore/platform/mediastream/MediaStreamCenter.h
r156473 r157068 35 35 #if ENABLE(MEDIA_STREAM) 36 36 37 #include "MediaStreamSource.h" 37 38 #include <wtf/PassRefPtr.h> 38 39 #include <wtf/text/WTFString.h> … … 44 45 class MediaStreamCreationClient; 45 46 class MediaStreamDescriptor; 46 class MediaStreamSource ;47 class MediaStreamSourceCapabilities; 47 48 class MediaStreamTrackSourcesRequestClient; 49 50 struct MediaStreamSourceStates; 48 51 49 52 class MediaStreamCenter { … … 60 63 virtual bool getMediaStreamTrackSources(PassRefPtr<MediaStreamTrackSourcesRequestClient>) = 0; 61 64 62 virtual void didSetMediaStreamTrackEnabled(MediaStreamSource*) = 0;63 64 virtual bool didAddMediaStreamTrack(MediaStreamSource*) = 0;65 virtual bool didRemoveMediaStreamTrack(MediaStreamSource*) = 0;66 67 virtual void didStopLocalMediaStream(MediaStreamDescriptor*) = 0;68 virtual void didCreateMediaStream(MediaStreamDescriptor*) = 0;69 70 65 protected: 71 66 MediaStreamCenter(); -
trunk/Source/WebCore/platform/mediastream/MediaStreamDescriptor.cpp
r156473 r157068 36 36 #include "MediaStreamDescriptor.h" 37 37 38 #include "MediaStreamCenter.h" 38 39 #include "MediaStreamSource.h" 39 40 #include "UUID.h" … … 46 47 { 47 48 return adoptRef(new MediaStreamDescriptor(createCanonicalUUIDString(), audioSources, videoSources)); 49 } 50 51 MediaStreamDescriptor::~MediaStreamDescriptor() 52 { 53 for (size_t i = 0; i < m_audioStreamSources.size(); i++) 54 m_audioStreamSources[i]->setStream(0); 55 56 for (size_t i = 0; i < m_videoStreamSources.size(); i++) 57 m_videoStreamSources[i]->setStream(0); 48 58 } 49 59 … … 68 78 case MediaStreamSource::Audio: 69 79 pos = m_audioStreamSources.find(source); 70 if (pos != notFound) 71 m_audioStreamSources.remove(pos); 80 if (pos == notFound) 81 return; 82 m_audioStreamSources.remove(pos); 72 83 break; 73 84 case MediaStreamSource::Video: 74 85 pos = m_videoStreamSources.find(source); 75 if (pos != notFound) 76 m_videoStreamSources.remove(pos); 86 if (pos == notFound) 87 return; 88 m_videoStreamSources.remove(pos); 77 89 break; 78 90 } 91 92 source->setStream(0); 79 93 } 80 94 -
trunk/Source/WebCore/platform/mediastream/MediaStreamDescriptor.h
r156473 r157068 53 53 class MediaStreamDescriptor : public RefCounted<MediaStreamDescriptor> { 54 54 public: 55 static PassRefPtr<MediaStreamDescriptor> create(const MediaStreamSourceVector& audioSources, const MediaStreamSourceVector& videoSources); 55 56 56 static PassRefPtr<MediaStreamDescriptor> create(const MediaStreamSourceVector& audioSources, const MediaStreamSourceVector& videoSources);57 virtual ~MediaStreamDescriptor(); 57 58 58 59 MediaStreamDescriptorClient* client() const { return m_client; } -
trunk/Source/WebCore/platform/mediastream/MediaStreamSource.cpp
r156473 r157068 1 1 /* 2 2 * Copyright (C) 2012 Google Inc. All rights reserved. 3 * Copyright (C) 2013 Apple Inc. All rights reserved. 3 4 * 4 5 * Redistribution and use in source and binary forms, with or without … … 35 36 #include "MediaStreamSource.h" 36 37 37 #include "AudioDestinationConsumer.h" 38 #include "MediaStreamCenter.h" 39 #include "MediaStreamSourceCapabilities.h" 40 #include "UUID.h" 41 38 42 #include <wtf/PassOwnPtr.h> 39 43 40 44 namespace WebCore { 41 45 42 PassRefPtr<MediaStreamSource> MediaStreamSource::create(const String& id, Type type, const String& name, ReadyState readyState, bool requiresConsumer) 43 { 44 return adoptRef(new MediaStreamSource(id, type, name, readyState, requiresConsumer)); 45 } 46 47 MediaStreamSource::MediaStreamSource(const String& id, Type type, const String& name, ReadyState readyState, bool requiresConsumer) 46 MediaStreamSource::MediaStreamSource(const String& id, Type type, const String& name) 48 47 : m_id(id) 49 48 , m_type(type) 50 49 , m_name(name) 51 , m_readyState( readyState)50 , m_readyState(New) 52 51 , m_stream(0) 53 , m_requiresConsumer(requiresConsumer)54 52 , m_enabled(true) 55 53 , m_muted(false) 54 , m_readonly(false) 55 , m_remote(false) 56 56 { 57 if (!m_id.isEmpty()) 58 return; 59 60 m_id = createCanonicalUUIDString(); 61 } 62 63 void MediaStreamSource::reset() 64 { 65 m_readyState = New; 66 m_stream = 0; 67 m_enabled = true; 68 m_muted = false; 69 m_readonly = false; 70 m_remote = false; 57 71 } 58 72 … … 64 78 m_readyState = readyState; 65 79 for (Vector<Observer*>::iterator i = m_observers.begin(); i != m_observers.end(); ++i) 66 (*i)->source ChangedState();80 (*i)->sourceStateChanged(); 67 81 } 68 82 … … 81 95 void MediaStreamSource::setStream(MediaStreamDescriptor* stream) 82 96 { 83 ASSERT(!m_stream && stream); 97 // FIXME: A source should not need to know about its stream(s). This will be fixed as a part of 98 // https://bugs.webkit.org/show_bug.cgi?id=121954 84 99 m_stream = stream; 100 } 101 102 MediaConstraints* MediaStreamSource::constraints() const 103 { 104 // FIXME: While this returns 105 // https://bugs.webkit.org/show_bug.cgi?id=122428 106 return m_constraints.get(); 107 } 108 109 void MediaStreamSource::setConstraints(PassRefPtr<MediaConstraints> constraints) 110 { 111 m_constraints = constraints; 85 112 } 86 113 … … 91 118 92 119 m_muted = muted; 120 121 if (m_readyState == Ended) 122 return; 123 93 124 for (Vector<Observer*>::iterator i = m_observers.begin(); i != m_observers.end(); ++i) 94 (*i)->source ChangedState();125 (*i)->sourceMutedChanged(); 95 126 } 96 127 97 void MediaStreamSource:: addAudioConsumer(PassRefPtr<AudioDestinationConsumer> consumer)128 void MediaStreamSource::setEnabled(bool enabled) 98 129 { 99 ASSERT(m_requiresConsumer); 100 MutexLocker locker(m_audioConsumersLock); 101 m_audioConsumers.append(consumer); 130 if (m_enabled == enabled) 131 return; 132 133 m_enabled = enabled; 134 135 if (m_readyState == Ended) 136 return; 137 138 for (Vector<Observer*>::iterator i = m_observers.begin(); i != m_observers.end(); ++i) 139 (*i)->sourceEnabledChanged(); 102 140 } 103 141 104 bool MediaStreamSource::re moveAudioConsumer(AudioDestinationConsumer* consumer)142 bool MediaStreamSource::readonly() const 105 143 { 106 ASSERT(m_requiresConsumer); 107 MutexLocker locker(m_audioConsumersLock); 108 size_t pos = m_audioConsumers.find(consumer); 109 if (pos != notFound) { 110 m_audioConsumers.remove(pos); 111 return true; 112 } 113 return false; 144 // http://www.w3.org/TR/mediacapture-streams/#widl-MediaStreamTrack-_readonly 145 // If the track (audio or video) is backed by a read-only source such as a file, or the track source 146 // is a local microphone or camera, but is shared so that this track cannot modify any of the source's 147 // settings, the readonly attribute must return the value true. Otherwise, it must return the value false. 148 return m_readonly; 114 149 } 115 150 116 void MediaStreamSource::s etAudioFormat(size_t numberOfChannels, float sampleRate)151 void MediaStreamSource::stop() 117 152 { 118 ASSERT(m_requiresConsumer); 119 MutexLocker locker(m_audioConsumersLock); 120 for (Vector<RefPtr<AudioDestinationConsumer> >::iterator it = m_audioConsumers.begin(); it != m_audioConsumers.end(); ++it) 121 (*it)->setFormat(numberOfChannels, sampleRate); 122 } 153 for (Vector<Observer*>::iterator i = m_observers.begin(); i != m_observers.end(); ++i) { 154 if (!(*i)->stopped()) 155 return; 156 } 123 157 124 void MediaStreamSource::consumeAudio(AudioBus* bus, size_t numberOfFrames) 125 { 126 ASSERT(m_requiresConsumer); 127 MutexLocker locker(m_audioConsumersLock); 128 for (Vector<RefPtr<AudioDestinationConsumer> >::iterator it = m_audioConsumers.begin(); it != m_audioConsumers.end(); ++it) 129 (*it)->consumeAudio(bus, numberOfFrames); 158 // There are no more consumers of this source's data, shut it down as appropriate. 159 setReadyState(Ended); 160 161 // http://www.w3.org/TR/mediacapture-streams/#widl-MediaStreamTrack-stop-void 162 // If the data is being generated from a live source (e.g., a microphone or camera), then the user 163 // agent should remove any active "on-air" indicator for that source. If the data is being 164 // generated from a prerecorded source (e.g. a video file), any remaining content in the file is ignored. 130 165 } 131 166 -
trunk/Source/WebCore/platform/mediastream/MediaStreamSource.h
r156473 r157068 2 2 * Copyright (C) 2011 Ericsson AB. All rights reserved. 3 3 * Copyright (C) 2012 Google Inc. All rights reserved. 4 * Copyright (C) 2013 Apple Inc. All rights reserved. 4 5 * 5 6 * Redistribution and use in source and binary forms, with or without … … 37 38 #include "AudioDestinationConsumer.h" 38 39 #include "MediaConstraints.h" 40 #include "MediaStreamSourceCapabilities.h" 39 41 #include <wtf/RefCounted.h> 40 42 #include <wtf/Vector.h> … … 44 46 45 47 class AudioBus; 48 class MediaConstraints; 46 49 class MediaStreamDescriptor; 50 struct MediaStreamSourceStates; 47 51 48 52 class MediaStreamSource : public RefCounted<MediaStreamSource> { … … 51 55 public: 52 56 virtual ~Observer() { } 53 virtual void sourceChangedState() = 0; 57 virtual void sourceStateChanged() = 0; 58 virtual void sourceMutedChanged() = 0; 59 virtual void sourceEnabledChanged() = 0; 60 virtual bool stopped() = 0; 54 61 }; 55 62 … … 57 64 enum ReadyState { New = 0, Live = 1, Ended = 2 }; 58 65 59 static PassRefPtr<MediaStreamSource> create(const String& id, Type, const String& name, ReadyState = New, bool requiresConsumer = false); 66 virtual ~MediaStreamSource() { } 67 68 virtual bool isAudioStreamSource() const { return false; } 69 virtual bool useIDForTrackID() const { return false; } 70 71 void reset(); 60 72 61 73 const String& id() const { return m_id; } 62 63 74 Type type() const { return m_type; } 64 75 const String& name() const { return m_name; } 65 76 77 virtual RefPtr<MediaStreamSourceCapabilities> capabilities() const = 0; 78 virtual const MediaStreamSourceStates& states() = 0; 79 66 80 void setReadyState(ReadyState); 67 81 ReadyState readyState() const { return m_readyState; } … … 70 84 void removeObserver(Observer*); 71 85 72 void setConstraints(PassRefPtr<MediaConstraints> constraints) { m_constraints = constraints; } 73 MediaConstraints* constraints() const { return m_constraints.get(); } 74 75 const String& deviceId() const { return m_deviceId; } 76 void setDeviceId(const String& deviceId) { m_deviceId = deviceId; } 86 void setConstraints(PassRefPtr<MediaConstraints>); 87 MediaConstraints* constraints() const; 77 88 78 89 bool enabled() const { return m_enabled; } 79 void setEnabled(bool enabled) { m_enabled = enabled; }90 void setEnabled(bool); 80 91 81 92 bool muted() const { return m_muted; } 82 93 void setMuted(bool); 83 84 void setAudioFormat(size_t numberOfChannels, float sampleRate); 85 void consumeAudio(AudioBus*, size_t numberOfFrames); 94 95 bool readonly() const; 96 void setReadonly(bool readonly) { m_readonly = readonly; } 97 98 bool remote() const { return m_remote; } 99 void setRemote(bool remote) { m_remote = remote; } 100 101 void stop(); 86 102 87 103 MediaStreamDescriptor* stream() const { return m_stream; } 88 104 void setStream(MediaStreamDescriptor*); 89 90 bool requiresAudioConsumer() const { return m_requiresConsumer; } 91 void addAudioConsumer(PassRefPtr<AudioDestinationConsumer>); 92 bool removeAudioConsumer(AudioDestinationConsumer*); 93 const Vector<RefPtr<AudioDestinationConsumer> >& audioConsumers() const { return m_audioConsumers; } 105 106 protected: 107 MediaStreamSource(const String& id, Type, const String& name); 94 108 95 109 private: 96 MediaStreamSource(const String& id, Type, const String& name, ReadyState, bool requiresConsumer);97 98 110 String m_id; 99 111 Type m_type; 100 112 String m_name; 101 113 ReadyState m_readyState; 102 String m_deviceId;103 114 Vector<Observer*> m_observers; 104 Mutex m_audioConsumersLock;105 Vector<RefPtr<AudioDestinationConsumer>> m_audioConsumers;106 115 RefPtr<MediaConstraints> m_constraints; 107 116 MediaStreamDescriptor* m_stream; 117 MediaStreamSourceStates m_states; 108 118 109 bool m_requiresConsumer;110 119 bool m_enabled; 111 120 bool m_muted; 121 bool m_readonly; 122 bool m_remote; 112 123 }; 113 124 -
trunk/Source/WebCore/platform/mediastream/blackberry/MediaStreamCenterBlackBerry.cpp
r156473 r157068 36 36 #include "MediaStreamCenterBlackBerry.h" 37 37 38 #include "MediaStreamCreationClient.h" 38 39 #include "MediaStreamDescriptor.h" 39 #include "MediaStreamSourcesQueryClient.h" 40 #include "MediaStreamTrackSourcesRequestClient.h" 41 #include "NotImplemented.h" 40 42 #include <wtf/MainThread.h> 41 43 … … 73 75 } 74 76 75 void MediaStreamCenterBlackBerry::didSetMediaStreamTrackEnabled(MediaStreamSource*)76 {77 notImplemented();78 }79 80 bool MediaStreamCenterBlackBerry::didAddMediaStreamTrack(MediaStreamSource*)81 {82 notImplemented();83 return false;84 }85 86 bool MediaStreamCenterBlackBerry::didRemoveMediaStreamTrack(MediaStreamSource*)87 {88 notImplemented();89 return false;90 }91 92 void MediaStreamCenterBlackBerry::didStopLocalMediaStream(MediaStreamDescriptor* stream)93 {94 endLocalMediaStream(stream);95 }96 97 void MediaStreamCenterBlackBerry::didCreateMediaStream(MediaStreamDescriptor*)98 {99 notImplemented();100 }101 102 77 } // namespace WebCore 103 78 -
trunk/Source/WebCore/platform/mediastream/blackberry/MediaStreamCenterBlackBerry.h
r156473 r157068 51 51 ~MediaStreamCenterBlackBerry(); 52 52 53 // MediaStreamCenter54 53 virtual void validateRequestConstraints(PassRefPtr<MediaStreamCreationClient>, PassRefPtr<MediaConstraints> audioConstraints, PassRefPtr<MediaConstraints> videoConstraints); 55 54 virtual void createMediaStream(PassRefPtr<MediaStreamCreationClient>, PassRefPtr<MediaConstraints> audioConstraints, PassRefPtr<MediaConstraints> videoConstraints); 56 55 virtual bool getMediaStreamTrackSources(PassRefPtr<MediaStreamTrackSourcesRequestClient>) OVERRIDE; 57 virtual void didSetMediaStreamTrackEnabled(MediaStreamSource*) OVERRIDE;58 virtual bool didAddMediaStreamTrack(MediaStreamSource*) OVERRIDE;59 virtual bool didRemoveMediaStreamTrack(MediaStreamSource*) OVERRIDE;60 virtual void didStopLocalMediaStream(MediaStreamDescriptor*) OVERRIDE;61 virtual void didCreateMediaStream(MediaStreamDescriptor*) OVERRIDE;62 56 }; 63 57 -
trunk/Source/WebCore/platform/mediastream/gstreamer/MediaStreamCenterGStreamer.cpp
r156575 r157068 36 36 #include "MediaStreamCenterGStreamer.h" 37 37 38 #include "MediaStreamCreationClient.h" 38 39 #include "MediaStreamDescriptor.h" 40 #include "MediaStreamSourceCapabilities.h" 41 #include "MediaStreamSourceStates.h" 42 #include "MediaStreamTrackSourcesRequestClient.h" 39 43 #include "NotImplemented.h" 40 44 #include <wtf/MainThread.h> … … 73 77 } 74 78 75 void MediaStreamCenterGStreamer::didSetMediaStreamTrackEnabled(MediaStreamSource*)76 {77 notImplemented();78 }79 80 bool MediaStreamCenterGStreamer::didAddMediaStreamTrack(MediaStreamSource*)81 {82 notImplemented();83 return false;84 }85 86 bool MediaStreamCenterGStreamer::didRemoveMediaStreamTrack(MediaStreamSource*)87 {88 notImplemented();89 return false;90 }91 92 void MediaStreamCenterGStreamer::didStopLocalMediaStream(MediaStreamDescriptor* stream)93 {94 endLocalMediaStream(stream);95 }96 97 void MediaStreamCenterGStreamer::didCreateMediaStream(MediaStreamDescriptor*)98 {99 notImplemented();100 }101 102 79 } // namespace WebCore 103 80 -
trunk/Source/WebCore/platform/mediastream/gstreamer/MediaStreamCenterGStreamer.h
r156473 r157068 51 51 ~MediaStreamCenterGStreamer(); 52 52 53 // MediaStreamCenter54 53 virtual void validateRequestConstraints(PassRefPtr<MediaStreamCreationClient>, PassRefPtr<MediaConstraints> audioConstraints, PassRefPtr<MediaConstraints> videoConstraints); 55 54 virtual void createMediaStream(PassRefPtr<MediaStreamCreationClient>, PassRefPtr<MediaConstraints> audioConstraints, PassRefPtr<MediaConstraints> videoConstraints); 56 55 virtual bool getMediaStreamTrackSources(PassRefPtr<MediaStreamTrackSourcesRequestClient>) OVERRIDE; 57 virtual void didSetMediaStreamTrackEnabled(MediaStreamSource*) OVERRIDE;58 virtual bool didAddMediaStreamTrack(MediaStreamSource*) OVERRIDE;59 virtual bool didRemoveMediaStreamTrack(MediaStreamSource*) OVERRIDE;60 virtual void didStopLocalMediaStream(MediaStreamDescriptor*) OVERRIDE;61 virtual void didCreateMediaStream(MediaStreamDescriptor*) OVERRIDE;62 56 }; 63 57 -
trunk/Source/WebCore/platform/mediastream/mac/MediaStreamCenterMac.cpp
r156473 r157068 74 74 } 75 75 76 void MediaStreamCenterMac::didSetMediaStreamTrackEnabled(MediaStreamSource*)77 {78 notImplemented();79 }80 81 bool MediaStreamCenterMac::didAddMediaStreamTrack(MediaStreamSource*)82 {83 notImplemented();84 return false;85 }86 87 bool MediaStreamCenterMac::didRemoveMediaStreamTrack(MediaStreamSource*)88 {89 notImplemented();90 return false;91 }92 93 void MediaStreamCenterMac::didStopLocalMediaStream(MediaStreamDescriptor* stream)94 {95 endLocalMediaStream(stream);96 }97 98 void MediaStreamCenterMac::didCreateMediaStream(MediaStreamDescriptor*)99 {100 notImplemented();101 }102 103 76 } // namespace WebCore 104 77 -
trunk/Source/WebCore/platform/mediastream/mac/MediaStreamCenterMac.h
r156473 r157068 36 36 #include "MediaStreamCenter.h" 37 37 38 #include "MediaStreamSource.h" 38 39 #include <wtf/PassRefPtr.h> 39 40 #include <wtf/text/WTFString.h> 40 41 41 42 namespace WebCore { 42 43 class MediaStreamDescriptor;44 class MediaStreamSource;45 class MediaStreamSourcesQueryClient;46 43 47 44 class MediaStreamCenterMac FINAL : public MediaStreamCenter { … … 50 47 ~MediaStreamCenterMac(); 51 48 52 // MediaStreamCenter53 49 virtual void validateRequestConstraints(PassRefPtr<MediaStreamCreationClient>, PassRefPtr<MediaConstraints> audioConstraints, PassRefPtr<MediaConstraints> videoConstraints); 54 50 virtual void createMediaStream(PassRefPtr<MediaStreamCreationClient>, PassRefPtr<MediaConstraints> audioConstraints, PassRefPtr<MediaConstraints> videoConstraints); 55 51 virtual bool getMediaStreamTrackSources(PassRefPtr<MediaStreamTrackSourcesRequestClient>) OVERRIDE; 56 virtual void didSetMediaStreamTrackEnabled(MediaStreamSource*) OVERRIDE;57 virtual bool didAddMediaStreamTrack(MediaStreamSource*) OVERRIDE;58 virtual bool didRemoveMediaStreamTrack(MediaStreamSource*) OVERRIDE;59 virtual void didStopLocalMediaStream(MediaStreamDescriptor*) OVERRIDE;60 virtual void didCreateMediaStream(MediaStreamDescriptor*) OVERRIDE;61 52 }; 62 53 -
trunk/Source/WebCore/platform/mock/MockMediaStreamCenter.cpp
r156554 r157068 33 33 #include "MediaStreamCreationClient.h" 34 34 #include "MediaStreamDescriptor.h" 35 #include "MediaStreamSource.h" 36 #include "MediaStreamSourceCapabilities.h" 35 37 #include "MediaStreamTrack.h" 36 38 #include "MediaStreamTrackSourcesRequestClient.h" 37 #include "NotImplemented.h"39 #include <wtf/NeverDestroyed.h> 38 40 39 41 namespace WebCore { 42 43 class MockSource : public MediaStreamSource { 44 public: 45 MockSource(const AtomicString& id, const AtomicString& name, MediaStreamSource::Type type) 46 : MediaStreamSource(id, type, name) 47 { 48 } 49 50 virtual ~MockSource() { } 51 52 virtual RefPtr<MediaStreamSourceCapabilities> capabilities() const { return m_capabilities; } 53 virtual const MediaStreamSourceStates& states() { return m_currentStates; } 54 55 RefPtr<MediaStreamSourceCapabilities> m_capabilities; 56 MediaStreamSourceStates m_currentStates; 57 }; 58 59 typedef HashMap<String, RefPtr<MockSource>> MockSourceMap; 60 61 static MockSourceMap& mockSourceMap() 62 { 63 DEFINE_STATIC_LOCAL(MockSourceMap, mockSourceMap, ()); 64 return mockSourceMap; 65 } 66 67 static const AtomicString& mockAudioSourceID() 68 { 69 static NeverDestroyed<AtomicString> id("239c24b1-2b15-11e3-8224-0800200c9a66", AtomicString::ConstructFromLiteral); 70 return id; 71 } 72 73 static const AtomicString& mockVideoSourceID() 74 { 75 static NeverDestroyed<AtomicString> id("239c24b0-2b15-11e3-8224-0800200c9a66", AtomicString::ConstructFromLiteral); 76 return id; 77 } 78 79 static void initializeMockSources() 80 { 81 RefPtr<MockSource> mockSource1 = adoptRef(new MockSource(mockVideoSourceID(), "Mock video device", MediaStreamSource::Video)); 82 mockSource1->m_capabilities = MediaStreamSourceCapabilities::create(); 83 mockSource1->m_capabilities->setSourceId(mockSource1->id()); 84 mockSource1->m_capabilities->addSourceType(MediaStreamSourceStates::Camera); 85 mockSource1->m_capabilities->addSourceType(MediaStreamSourceStates::Microphone); 86 mockSource1->m_capabilities->addFacingMode(MediaStreamSourceStates::User); 87 mockSource1->m_capabilities->addFacingMode(MediaStreamSourceStates::Environment); 88 mockSource1->m_capabilities->setWidthRange(MediaStreamSourceCapabilityRange(320UL, 1920UL, true)); 89 mockSource1->m_capabilities->setHeightRange(MediaStreamSourceCapabilityRange(240UL, 1080UL, true)); 90 mockSource1->m_capabilities->setFrameRateRange(MediaStreamSourceCapabilityRange(15.0f, 60.0f, true)); 91 mockSource1->m_capabilities->setAspectRatioRange(MediaStreamSourceCapabilityRange(4 / 3.0f, 16 / 9.0f, true)); 92 mockSource1->m_capabilities->setVolumeRange(MediaStreamSourceCapabilityRange(10UL, 90UL, true)); 93 94 mockSource1->m_currentStates.sourceType = MediaStreamSourceStates::Camera; 95 mockSource1->m_currentStates.sourceId = mockSource1->id(); 96 mockSource1->m_currentStates.facingMode = MediaStreamSourceStates::User; 97 mockSource1->m_currentStates.width = 1920; 98 mockSource1->m_currentStates.height = 1080; 99 mockSource1->m_currentStates.frameRate = 30; 100 mockSource1->m_currentStates.aspectRatio = 16 / 9.0f; 101 mockSource1->m_currentStates.volume = 70; 102 mockSourceMap().add(mockSource1->id(), mockSource1.release()); 103 104 RefPtr<MockSource> mockSource2 = adoptRef(new MockSource(mockAudioSourceID(), "Mock audio device", MediaStreamSource::Audio)); 105 mockSource2->m_capabilities = MediaStreamSourceCapabilities::create(); 106 mockSource2->m_capabilities->setSourceId(mockSource2->id()); 107 mockSource2->m_capabilities->setVolumeRange(MediaStreamSourceCapabilityRange(0UL, 100UL, true)); 108 109 mockSource2->m_currentStates.sourceType = MediaStreamSourceStates::Microphone; 110 mockSource2->m_currentStates.sourceId = mockSource2->id(); 111 mockSource2->m_currentStates.volume = 50; 112 mockSourceMap().add(mockSource2->id(), mockSource2.release()); 113 } 114 115 void MockMediaStreamCenter::registerMockMediaStreamCenter() 116 { 117 DEFINE_STATIC_LOCAL(MockMediaStreamCenter, center, ()); 118 static bool registered = false; 119 if (!registered) { 120 registered = true; 121 MediaStreamCenter::setSharedStreamCenter(¢er); 122 initializeMockSources(); 123 } 124 } 40 125 41 126 static bool isSupportedMockConstraint(const String& constraintName) … … 76 161 } 77 162 78 void MockMediaStreamCenter::registerMockMediaStreamCenter()79 {80 DEFINE_STATIC_LOCAL(MockMediaStreamCenter, center, ());81 static bool registered = false;82 if (!registered) {83 registered = true;84 MediaStreamCenter::setSharedStreamCenter(¢er);85 }86 }87 88 163 void MockMediaStreamCenter::validateRequestConstraints(PassRefPtr<MediaStreamCreationClient> prpQueryClient, PassRefPtr<MediaConstraints> audioConstraints, PassRefPtr<MediaConstraints> videoConstraints) 89 164 { … … 119 194 Vector<RefPtr<MediaStreamSource>> audioSources; 120 195 Vector<RefPtr<MediaStreamSource>> videoSources; 196 MockSourceMap& map = mockSourceMap(); 121 197 122 198 if (audioConstraints) { … … 128 204 129 205 if (audioConstraints) { 130 RefPtr<MediaStreamSource> audioSource = MediaStreamSource::create(emptyString(), MediaStreamSource::Audio, "Mock audio device"); 206 MockSourceMap::iterator it = map.find(mockAudioSourceID()); 207 ASSERT(it != map.end()); 208 209 RefPtr<MediaStreamSource> audioSource = it->value; 210 audioSource->reset(); 131 211 audioSource->setReadyState(MediaStreamSource::Live); 132 212 audioSources.append(audioSource.release()); … … 142 222 143 223 if (videoConstraints) { 144 RefPtr<MediaStreamSource> videoSource = MediaStreamSource::create(emptyString(), MediaStreamSource::Video, "Mock video device"); 224 MockSourceMap::iterator it = map.find(mockVideoSourceID()); 225 ASSERT(it != map.end()); 226 227 RefPtr<MediaStreamSource> videoSource = it->value; 228 videoSource->reset(); 145 229 videoSource->setReadyState(MediaStreamSource::Live); 146 230 videoSources.append(videoSource.release()); … … 154 238 { 155 239 RefPtr<MediaStreamTrackSourcesRequestClient> requestClient = prpClient; 156 Vector<RefPtr<TrackSourceInfo>> sources(2); 157 158 sources[0] = TrackSourceInfo::create("Mock_audio_device_ID", TrackSourceInfo::Audio, "Mock audio device"); 159 sources[1] = TrackSourceInfo::create("Mock_video_device_ID", TrackSourceInfo::Video, "Mock video device"); 240 Vector<RefPtr<TrackSourceInfo>> sources; 241 242 MockSourceMap& map = mockSourceMap(); 243 MockSourceMap::iterator end = map.end(); 244 for (MockSourceMap::iterator it = map.begin(); it != end; ++it) { 245 MockSource* source = it->value.get(); 246 247 sources.append(TrackSourceInfo::create(source->id(), source->type() == MediaStreamSource::Video ? TrackSourceInfo::Video : TrackSourceInfo::Audio, source->name())); 248 } 160 249 161 250 requestClient->didCompleteRequest(sources); … … 163 252 } 164 253 165 void MockMediaStreamCenter::didSetMediaStreamTrackEnabled(MediaStreamSource* source)166 {167 source->setReadyState(MediaStreamSource::Live);168 }169 170 bool MockMediaStreamCenter::didAddMediaStreamTrack(MediaStreamSource*)171 {172 return true;173 }174 175 bool MockMediaStreamCenter::didRemoveMediaStreamTrack(MediaStreamSource*)176 {177 return true;178 }179 180 void MockMediaStreamCenter::didStopLocalMediaStream(MediaStreamDescriptor* stream)181 {182 endLocalMediaStream(stream);183 }184 185 void MockMediaStreamCenter::didCreateMediaStream(MediaStreamDescriptor*)186 {187 }188 189 254 } // namespace WebCore 190 255 -
trunk/Source/WebCore/platform/mock/MockMediaStreamCenter.h
r156522 r157068 41 41 virtual void createMediaStream(PassRefPtr<MediaStreamCreationClient>, PassRefPtr<MediaConstraints> audioConstraints, PassRefPtr<MediaConstraints> videoConstraints); 42 42 virtual bool getMediaStreamTrackSources(PassRefPtr<MediaStreamTrackSourcesRequestClient>) OVERRIDE; 43 virtual void didSetMediaStreamTrackEnabled(MediaStreamSource*) OVERRIDE;44 virtual bool didAddMediaStreamTrack(MediaStreamSource*) OVERRIDE;45 virtual bool didRemoveMediaStreamTrack(MediaStreamSource*) OVERRIDE;46 virtual void didStopLocalMediaStream(MediaStreamDescriptor*) OVERRIDE;47 virtual void didCreateMediaStream(MediaStreamDescriptor*) OVERRIDE;48 43 49 44 private:
Note: See TracChangeset
for help on using the changeset viewer.