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;