Title: [238845] trunk
Revision
238845
Author
[email protected]
Date
2018-12-03 22:22:21 -0800 (Mon, 03 Dec 2018)

Log Message

A sender created through addTransceiver and populated using addTrack should have its source set
https://bugs.webkit.org/show_bug.cgi?id=192136

Reviewed by Eric Carlson.

Source/WebCore:

In case libwebrtc backend is already created, we need to make sure to
set the track source to the libwebrtc sender backend that is actually
tied to the sender.

Covered by updated test.

* Modules/mediastream/libwebrtc/LibWebRTCMediaEndpoint.cpp:
(WebCore::LibWebRTCPeerConnectionBackend::removeTrack):
* Modules/mediastream/libwebrtc/LibWebRTCPeerConnectionBackend.cpp:
(WebCore::LibWebRTCPeerConnectionBackend::addTrack):
* Modules/mediastream/libwebrtc/LibWebRTCRtpSenderBackend.h:

LayoutTests:

* webrtc/video-replace-track-expected.txt:
* webrtc/video-replace-track.html:

Modified Paths

Diff

Modified: trunk/LayoutTests/ChangeLog (238844 => 238845)


--- trunk/LayoutTests/ChangeLog	2018-12-04 06:11:31 UTC (rev 238844)
+++ trunk/LayoutTests/ChangeLog	2018-12-04 06:22:21 UTC (rev 238845)
@@ -1,3 +1,13 @@
+2018-12-03  Youenn Fablet  <[email protected]>
+
+        A sender created through addTransceiver and populated using addTrack should have its source set
+        https://bugs.webkit.org/show_bug.cgi?id=192136
+
+        Reviewed by Eric Carlson.
+
+        * webrtc/video-replace-track-expected.txt:
+        * webrtc/video-replace-track.html:
+
 2018-12-03  YUHAN WU  <[email protected]>
 
         Implement non-timeslice mode encoding for MediaRecorder

Modified: trunk/LayoutTests/webrtc/video-replace-track-expected.txt (238844 => 238845)


--- trunk/LayoutTests/webrtc/video-replace-track-expected.txt	2018-12-04 06:11:31 UTC (rev 238844)
+++ trunk/LayoutTests/webrtc/video-replace-track-expected.txt	2018-12-04 06:22:21 UTC (rev 238845)
@@ -2,4 +2,5 @@
 PASS Switching from front to back camera 
 PASS Switching from front to back camera, with lower resolution 
 PASS Switching from front to back camera, with higher resolution 
+PASS Replace a track for a sender created by addTransceiver and used by addTrack 
 

Modified: trunk/LayoutTests/webrtc/video-replace-track.html (238844 => 238845)


--- trunk/LayoutTests/webrtc/video-replace-track.html	2018-12-04 06:11:31 UTC (rev 238844)
+++ trunk/LayoutTests/webrtc/video-replace-track.html	2018-12-04 06:22:21 UTC (rev 238845)
@@ -181,6 +181,14 @@
     });
 
 }, "Switching from front to back camera, with higher resolution");
+
+promise_test(async (test) => {
+    const stream = await navigator.mediaDevices.getUserMedia({ video: true });
+    const pc = new RTCPeerConnection();
+    pc.addTransceiver("video", {direction: "sendonly"});
+    const sender = pc.addTrack(stream.getVideoTracks()[0], stream);
+    await sender.replaceTrack(stream.getVideoTracks()[0].clone());
+}, "Replace a track for a sender created by addTransceiver and used by addTrack");
         </script>
     </body>
 </html>

Modified: trunk/Source/WebCore/ChangeLog (238844 => 238845)


--- trunk/Source/WebCore/ChangeLog	2018-12-04 06:11:31 UTC (rev 238844)
+++ trunk/Source/WebCore/ChangeLog	2018-12-04 06:22:21 UTC (rev 238845)
@@ -1,3 +1,22 @@
+2018-12-03  Youenn Fablet  <[email protected]>
+
+        A sender created through addTransceiver and populated using addTrack should have its source set
+        https://bugs.webkit.org/show_bug.cgi?id=192136
+
+        Reviewed by Eric Carlson.
+
+        In case libwebrtc backend is already created, we need to make sure to
+        set the track source to the libwebrtc sender backend that is actually
+        tied to the sender.
+
+        Covered by updated test.
+
+        * Modules/mediastream/libwebrtc/LibWebRTCMediaEndpoint.cpp:
+        (WebCore::LibWebRTCPeerConnectionBackend::removeTrack):
+        * Modules/mediastream/libwebrtc/LibWebRTCPeerConnectionBackend.cpp:
+        (WebCore::LibWebRTCPeerConnectionBackend::addTrack):
+        * Modules/mediastream/libwebrtc/LibWebRTCRtpSenderBackend.h:
+
 2018-12-03  YUHAN WU  <[email protected]>
 
         Implement non-timeslice mode encoding for MediaRecorder

Modified: trunk/Source/WebCore/Modules/mediastream/libwebrtc/LibWebRTCMediaEndpoint.cpp (238844 => 238845)


--- trunk/Source/WebCore/Modules/mediastream/libwebrtc/LibWebRTCMediaEndpoint.cpp	2018-12-04 06:11:31 UTC (rev 238844)
+++ trunk/Source/WebCore/Modules/mediastream/libwebrtc/LibWebRTCMediaEndpoint.cpp	2018-12-04 06:22:21 UTC (rev 238845)
@@ -255,6 +255,7 @@
 {
     ASSERT(m_backend);
     m_backend->RemoveTrack(sender.rtcSender());
+    sender.clearSource();
 }
 
 void LibWebRTCMediaEndpoint::doCreateOffer(const RTCOfferOptions& options)

Modified: trunk/Source/WebCore/Modules/mediastream/libwebrtc/LibWebRTCPeerConnectionBackend.cpp (238844 => 238845)


--- trunk/Source/WebCore/Modules/mediastream/libwebrtc/LibWebRTCPeerConnectionBackend.cpp	2018-12-04 06:11:31 UTC (rev 238844)
+++ trunk/Source/WebCore/Modules/mediastream/libwebrtc/LibWebRTCPeerConnectionBackend.cpp	2018-12-04 06:22:21 UTC (rev 238845)
@@ -403,6 +403,7 @@
             return Exception { TypeError, "Unable to add track"_s };
 
         if (auto sender = findExistingSender(m_peerConnection.currentSenders(), *senderBackend)) {
+            backendFromRTPSender(*sender).takeSource(*senderBackend);
             sender->setTrack(makeRef(track));
             sender->setMediaStreamIds(WTFMove(mediaStreamIds));
             return sender.releaseNonNull();

Modified: trunk/Source/WebCore/Modules/mediastream/libwebrtc/LibWebRTCRtpSenderBackend.h (238844 => 238845)


--- trunk/Source/WebCore/Modules/mediastream/libwebrtc/LibWebRTCRtpSenderBackend.h	2018-12-04 06:11:31 UTC (rev 238844)
+++ trunk/Source/WebCore/Modules/mediastream/libwebrtc/LibWebRTCRtpSenderBackend.h	2018-12-04 06:22:21 UTC (rev 238845)
@@ -87,6 +87,12 @@
         );
     }
 
+    void clearSource()
+    {
+        ASSERT(hasSource());
+        m_source = nullptr;
+    }
+
     void setSource(Source&& source)
     {
         ASSERT(!hasSource());
@@ -94,6 +100,12 @@
         ASSERT(hasSource());
     }
 
+    void takeSource(LibWebRTCRtpSenderBackend& backend)
+    {
+        ASSERT(backend.hasSource());
+        setSource(WTFMove(backend.m_source));
+    }
+
 private:
     void replaceTrack(ScriptExecutionContext&, RTCRtpSender&, RefPtr<MediaStreamTrack>&&, DOMPromiseDeferred<void>&&) final;
     RTCRtpSendParameters getParameters() const final;
_______________________________________________
webkit-changes mailing list
[email protected]
https://lists.webkit.org/mailman/listinfo/webkit-changes

Reply via email to