Title: [187168] trunk/Source/WebCore
Revision
187168
Author
commit-qu...@webkit.org
Date
2015-07-22 11:09:08 -0700 (Wed, 22 Jul 2015)

Log Message

Need the ability to give only best source UIDs to UserMedia request
https://bugs.webkit.org/show_bug.cgi?id=147171
<rdar://problem/21931121>

Patch by Matthew Daiter <mdai...@apple.com> on 2015-07-22
Reviewed by Eric Carlson.

* Modules/mediastream/UserMediaRequest.cpp:
(WebCore::UserMediaRequest::constraintsValidated):
* Modules/mediastream/UserMediaRequest.h:
(WebCore::UserMediaRequest::videoDeviceUIDs):
(WebCore::UserMediaRequest::audioDeviceUIDs):
* platform/mediastream/MediaStreamCreationClient.h:
* platform/mediastream/mac/AVCaptureDeviceManager.h:
* platform/mediastream/mac/AVCaptureDeviceManager.mm:
(WebCore::AVCaptureDeviceManager::bestSourcesForTypeAndConstraints):
(WebCore::AVCaptureDeviceManager::bestSourceForTypeAndConstraints): Deleted.
* platform/mediastream/mac/RealtimeMediaSourceCenterMac.cpp:
(WebCore::RealtimeMediaSourceCenterMac::validateRequestConstraints):
(WebCore::RealtimeMediaSourceCenterMac::createMediaStream):
* platform/mock/MockRealtimeMediaSourceCenter.cpp:
(WebCore::MockRealtimeMediaSourceCenter::validateRequestConstraints):

Modified Paths

Diff

Modified: trunk/Source/WebCore/ChangeLog (187167 => 187168)


--- trunk/Source/WebCore/ChangeLog	2015-07-22 18:04:12 UTC (rev 187167)
+++ trunk/Source/WebCore/ChangeLog	2015-07-22 18:09:08 UTC (rev 187168)
@@ -1,3 +1,27 @@
+2015-07-22  Matthew Daiter  <mdai...@apple.com>
+
+        Need the ability to give only best source UIDs to UserMedia request
+        https://bugs.webkit.org/show_bug.cgi?id=147171
+        <rdar://problem/21931121>
+
+        Reviewed by Eric Carlson.
+
+        * Modules/mediastream/UserMediaRequest.cpp:
+        (WebCore::UserMediaRequest::constraintsValidated):
+        * Modules/mediastream/UserMediaRequest.h:
+        (WebCore::UserMediaRequest::videoDeviceUIDs):
+        (WebCore::UserMediaRequest::audioDeviceUIDs):
+        * platform/mediastream/MediaStreamCreationClient.h:
+        * platform/mediastream/mac/AVCaptureDeviceManager.h:
+        * platform/mediastream/mac/AVCaptureDeviceManager.mm:
+        (WebCore::AVCaptureDeviceManager::bestSourcesForTypeAndConstraints):
+        (WebCore::AVCaptureDeviceManager::bestSourceForTypeAndConstraints): Deleted.
+        * platform/mediastream/mac/RealtimeMediaSourceCenterMac.cpp:
+        (WebCore::RealtimeMediaSourceCenterMac::validateRequestConstraints):
+        (WebCore::RealtimeMediaSourceCenterMac::createMediaStream):
+        * platform/mock/MockRealtimeMediaSourceCenter.cpp:
+        (WebCore::MockRealtimeMediaSourceCenter::validateRequestConstraints):
+
 2015-07-22  Mark Dittmer  <mark.s.ditt...@gmail.com>
 
         Fix toJSDOMWindow() in the case of an object that has the actual JS DOM window in its prototype chain.

Modified: trunk/Source/WebCore/Modules/mediastream/UserMediaRequest.cpp (187167 => 187168)


--- trunk/Source/WebCore/Modules/mediastream/UserMediaRequest.cpp	2015-07-22 18:04:12 UTC (rev 187167)
+++ trunk/Source/WebCore/Modules/mediastream/UserMediaRequest.cpp	2015-07-22 18:09:08 UTC (rev 187168)
@@ -121,8 +121,12 @@
     RealtimeMediaSourceCenter::singleton().validateRequestConstraints(this, m_audioConstraints, m_videoConstraints);
 }
 
-void UserMediaRequest::constraintsValidated()
+void UserMediaRequest::constraintsValidated(const Vector<RefPtr<RealtimeMediaSource>>& videoTracks, const Vector<RefPtr<RealtimeMediaSource>>& audioTracks)
 {
+    for (auto& audioTrack : audioTracks)
+        m_audioDeviceUIDs.append(audioTrack->id());
+    for (auto& videoTrack : videoTracks)
+        m_videoDeviceUIDs.append(videoTrack->id());
     RefPtr<UserMediaRequest> protectedThis(this);
     callOnMainThread([protectedThis] {
         // 2 - The constraints are valid, ask the user for access to media.

Modified: trunk/Source/WebCore/Modules/mediastream/UserMediaRequest.h (187167 => 187168)


--- trunk/Source/WebCore/Modules/mediastream/UserMediaRequest.h	2015-07-22 18:04:12 UTC (rev 187167)
+++ trunk/Source/WebCore/Modules/mediastream/UserMediaRequest.h	2015-07-22 18:09:08 UTC (rev 187168)
@@ -69,12 +69,15 @@
 
     bool requiresAudio() const { return m_audioConstraints; }
     bool requiresVideo() const { return m_videoConstraints; }
+    
+    const Vector<String>& videoDeviceUIDs() const { return m_videoDeviceUIDs; }
+    const Vector<String>& audioDeviceUIDs() const { return m_audioDeviceUIDs; }
 
 private:
     UserMediaRequest(ScriptExecutionContext*, UserMediaController*, PassRefPtr<MediaConstraints> audioConstraints, PassRefPtr<MediaConstraints> videoConstraints, MediaDevices::Promise&&);
 
     // MediaStreamCreationClient
-    virtual void constraintsValidated() override final;
+    virtual void constraintsValidated(const Vector<RefPtr<RealtimeMediaSource>>&, const Vector<RefPtr<RealtimeMediaSource>>&) override final;
     virtual void constraintsInvalid(const String& constraintName) override final;
     virtual void didCreateStream(PassRefPtr<MediaStreamPrivate>) override final;
     virtual void failedToCreateStreamWithConstraintsError(const String& constraintName) override final;
@@ -86,6 +89,9 @@
     RefPtr<MediaConstraints> m_audioConstraints;
     RefPtr<MediaConstraints> m_videoConstraints;
 
+    Vector<String> m_videoDeviceUIDs;
+    Vector<String> m_audioDeviceUIDs;
+    
     UserMediaController* m_controller;
 
     MediaDevices::Promise m_promise;

Modified: trunk/Source/WebCore/platform/mediastream/MediaStreamCreationClient.h (187167 => 187168)


--- trunk/Source/WebCore/platform/mediastream/MediaStreamCreationClient.h	2015-07-22 18:04:12 UTC (rev 187167)
+++ trunk/Source/WebCore/platform/mediastream/MediaStreamCreationClient.h	2015-07-22 18:09:08 UTC (rev 187168)
@@ -38,7 +38,7 @@
 public:
     virtual ~MediaStreamCreationClient() { }
 
-    virtual void constraintsValidated() = 0;
+    virtual void constraintsValidated(const Vector<RefPtr<RealtimeMediaSource>>& videoTracks, const Vector<RefPtr<RealtimeMediaSource>>& audioTracks) = 0;
     virtual void constraintsInvalid(const String& constraintName) = 0;
 
     virtual void didCreateStream(PassRefPtr<MediaStreamPrivate>) = 0;

Modified: trunk/Source/WebCore/platform/mediastream/mac/AVCaptureDeviceManager.h (187167 => 187168)


--- trunk/Source/WebCore/platform/mediastream/mac/AVCaptureDeviceManager.h	2015-07-22 18:04:12 UTC (rev 187167)
+++ trunk/Source/WebCore/platform/mediastream/mac/AVCaptureDeviceManager.h	2015-07-22 18:09:08 UTC (rev 187168)
@@ -49,7 +49,7 @@
 
     Vector<RefPtr<TrackSourceInfo>> getSourcesInfo(const String&);
     bool verifyConstraintsForMediaType(RealtimeMediaSource::Type, MediaConstraints*, String&);
-    RefPtr<RealtimeMediaSource> bestSourceForTypeAndConstraints(RealtimeMediaSource::Type, PassRefPtr<MediaConstraints>);
+    Vector<RefPtr<RealtimeMediaSource>> bestSourcesForTypeAndConstraints(RealtimeMediaSource::Type, PassRefPtr<MediaConstraints>);
     RefPtr<RealtimeMediaSource> sourceWithUID(String&, RealtimeMediaSource::Type, MediaConstraints*);
 
     enum ValidConstraints { Width = 0, Height, FrameRate, FacingMode, Gain };

Modified: trunk/Source/WebCore/platform/mediastream/mac/AVCaptureDeviceManager.mm (187167 => 187168)


--- trunk/Source/WebCore/platform/mediastream/mac/AVCaptureDeviceManager.mm	2015-07-22 18:04:12 UTC (rev 187167)
+++ trunk/Source/WebCore/platform/mediastream/mac/AVCaptureDeviceManager.mm	2015-07-22 18:09:08 UTC (rev 187168)
@@ -378,39 +378,39 @@
     return true;
 }
 
-RefPtr<RealtimeMediaSource> AVCaptureDeviceManager::bestSourceForTypeAndConstraints(RealtimeMediaSource::Type type, PassRefPtr<MediaConstraints> constraints)
+Vector<RefPtr<RealtimeMediaSource>> AVCaptureDeviceManager::bestSourcesForTypeAndConstraints(RealtimeMediaSource::Type type, PassRefPtr<MediaConstraints> constraints)
 {
+    Vector<RefPtr<RealtimeMediaSource>> bestSourcesList;
+    
     if (!isAvailable())
-        return 0;
+        return bestSourcesList;
 
-    Vector<CaptureDevice>& devices = captureDeviceList();
-    size_t count = devices.size();
-    for (size_t i = 0; i < count; ++i) {
-        if (!devices[i].m_enabled)
+    for (auto& captureDevice : captureDeviceList()) {
+        if (!captureDevice.m_enabled)
             continue;
 
         // FIXME: consider the constraints when choosing among multiple devices. For now just select the first available
         // device of the appropriate type.
-        if (type == RealtimeMediaSource::Audio && !devices[i].m_audioSourceId.isEmpty()) {
-            if (!devices[i].m_audioSource) {
-                AVCaptureDeviceType *device = [AVCaptureDevice deviceWithUniqueID:devices[i].m_captureDeviceID];
+        if (type == RealtimeMediaSource::Audio && !captureDevice.m_audioSourceId.isEmpty()) {
+            if (!captureDevice.m_audioSource) {
+                AVCaptureDeviceType *device = [AVCaptureDevice deviceWithUniqueID:captureDevice.m_captureDeviceID];
                 ASSERT(device);
-                devices[i].m_audioSource = AVAudioCaptureSource::create(device, devices[i].m_audioSourceId, constraints);
+                captureDevice.m_audioSource = AVAudioCaptureSource::create(device, captureDevice.m_audioSourceId, constraints);
             }
-            return devices[i].m_audioSource;
+            bestSourcesList.append(captureDevice.m_audioSource);
         }
 
-        if (type == RealtimeMediaSource::Video && !devices[i].m_videoSourceId.isEmpty()) {
-            if (!devices[i].m_videoSource) {
-                AVCaptureDeviceType *device = [AVCaptureDevice deviceWithUniqueID:devices[i].m_captureDeviceID];
+        if (type == RealtimeMediaSource::Video && !captureDevice.m_videoSourceId.isEmpty()) {
+            if (!captureDevice.m_videoSource) {
+                AVCaptureDeviceType *device = [AVCaptureDevice deviceWithUniqueID:captureDevice.m_captureDeviceID];
                 ASSERT(device);
-                devices[i].m_videoSource = AVVideoCaptureSource::create(device, devices[i].m_videoSourceId, constraints);
+                captureDevice.m_videoSource = AVVideoCaptureSource::create(device, captureDevice.m_videoSourceId, constraints);
             }
-            return devices[i].m_videoSource;
+            bestSourcesList.append(captureDevice.m_videoSource);
         }
     }
 
-    return 0;
+    return bestSourcesList;
 }
 
 RefPtr<RealtimeMediaSource> AVCaptureDeviceManager::sourceWithUID(String &deviceUID, RealtimeMediaSource::Type type, MediaConstraints* constraints)

Modified: trunk/Source/WebCore/platform/mediastream/mac/RealtimeMediaSourceCenterMac.cpp (187167 => 187168)


--- trunk/Source/WebCore/platform/mediastream/mac/RealtimeMediaSourceCenterMac.cpp	2015-07-22 18:04:12 UTC (rev 187167)
+++ trunk/Source/WebCore/platform/mediastream/mac/RealtimeMediaSourceCenterMac.cpp	2015-07-22 18:09:08 UTC (rev 187168)
@@ -79,10 +79,11 @@
             return;
         }
     }
+    Vector<RefPtr<RealtimeMediaSource>> bestVideoSources = AVCaptureDeviceManager::singleton().bestSourcesForTypeAndConstraints(RealtimeMediaSource::Type::Video, videoConstraints);
+    Vector<RefPtr<RealtimeMediaSource>> bestAudioSources = AVCaptureDeviceManager::singleton().bestSourcesForTypeAndConstraints(RealtimeMediaSource::Type::Audio, audioConstraints);
+    client->constraintsValidated(bestVideoSources, bestAudioSources);
+}
 
-    client->constraintsValidated();
-}
-    
 void RealtimeMediaSourceCenterMac::createMediaStream(PassRefPtr<MediaStreamCreationClient> prpQueryClient, PassRefPtr<MediaConstraints> audioConstraints, PassRefPtr<MediaConstraints> videoConstraints)
 {
     RefPtr<MediaStreamCreationClient> client = prpQueryClient;
@@ -99,8 +100,9 @@
             client->failedToCreateStreamWithConstraintsError(invalidConstraint);
             return;
         }
-        
-        RefPtr<RealtimeMediaSource> audioSource = AVCaptureDeviceManager::singleton().bestSourceForTypeAndConstraints(RealtimeMediaSource::Audio, audioConstraints.get());
+        // FIXME: Consider the constraints when choosing among multiple devices. For now just select the first available
+        // device of the appropriate type.
+        RefPtr<RealtimeMediaSource> audioSource = AVCaptureDeviceManager::singleton().bestSourcesForTypeAndConstraints(RealtimeMediaSource::Audio, audioConstraints.get()).at(0);
         ASSERT(audioSource);
         
         audioSources.append(audioSource.release());
@@ -113,8 +115,9 @@
             client->failedToCreateStreamWithConstraintsError(invalidConstraint);
             return;
         }
-        
-        RefPtr<RealtimeMediaSource> videoSource = AVCaptureDeviceManager::singleton().bestSourceForTypeAndConstraints(RealtimeMediaSource::Video, videoConstraints.get());
+        // FIXME: Consider the constraints when choosing among multiple devices. For now just select the first available
+        // device of the appropriate type.
+        RefPtr<RealtimeMediaSource> videoSource = AVCaptureDeviceManager::singleton().bestSourcesForTypeAndConstraints(RealtimeMediaSource::Video, videoConstraints.get()).at(0);
         ASSERT(videoSource);
         
         videoSources.append(videoSource.release());

Modified: trunk/Source/WebCore/platform/mediastream/openwebrtc/RealtimeMediaSourceCenterOwr.cpp (187167 => 187168)


--- trunk/Source/WebCore/platform/mediastream/openwebrtc/RealtimeMediaSourceCenterOwr.cpp	2015-07-22 18:04:12 UTC (rev 187167)
+++ trunk/Source/WebCore/platform/mediastream/openwebrtc/RealtimeMediaSourceCenterOwr.cpp	2015-07-22 18:09:08 UTC (rev 187168)
@@ -168,7 +168,7 @@
     }
 
     // TODO: Make sure contraints are actually validated by checking source types.
-    m_client->constraintsValidated();
+    m_client->constraintsValidated(Vector<RefPtr<RealtimeMediaSource>>(), Vector<RefPtr<RealtimeMediaSource>>());
 }
 
 PassRefPtr<RealtimeMediaSource> RealtimeMediaSourceCenterOwr::firstSource(RealtimeMediaSource::Type type)

Modified: trunk/Source/WebCore/platform/mock/MockRealtimeMediaSourceCenter.cpp (187167 => 187168)


--- trunk/Source/WebCore/platform/mock/MockRealtimeMediaSourceCenter.cpp	2015-07-22 18:04:12 UTC (rev 187167)
+++ trunk/Source/WebCore/platform/mock/MockRealtimeMediaSourceCenter.cpp	2015-07-22 18:09:08 UTC (rev 187168)
@@ -149,7 +149,7 @@
         }
     }
 
-    client->constraintsValidated();
+    client->constraintsValidated(Vector<RefPtr<RealtimeMediaSource>>(), Vector<RefPtr<RealtimeMediaSource>>());
 }
 
 void MockRealtimeMediaSourceCenter::createMediaStream(PassRefPtr<MediaStreamCreationClient> prpQueryClient, PassRefPtr<MediaConstraints> audioConstraints, PassRefPtr<MediaConstraints> videoConstraints)
_______________________________________________
webkit-changes mailing list
webkit-changes@lists.webkit.org
https://lists.webkit.org/mailman/listinfo/webkit-changes

Reply via email to