Source code

Revision control

Copy as Markdown

Other Tools

Test Info:

<!doctype html>
<meta charset=utf-8>
<title>RTCRtpReceiver.track.getSettings()</title>
<script src="/resources/testharness.js"></script>
<script src="/resources/testharnessreport.js"></script>
<script src="RTCPeerConnection-helper.js"></script>
<script>
'use strict';
// Tentative pending resolution of https://github.com/w3c/mediacapture-fromelement/issues/48.
promise_test(async t => {
if (!document.body) {
await new Promise(r => document.addEventListener("DOMContentLoaded", r, {once: true}));
}
const noiseStream = await getNoiseStream({video: true});
const [sendTrack] = noiseStream.getTracks();
const [canvas] = document.body.getElementsByTagName("canvas");
const ctx = canvas.getContext("2d");
const pc1 = new RTCPeerConnection();
t.add_cleanup(() => pc1.close());
const pc2 = new RTCPeerConnection();
t.add_cleanup(() => pc2.close());
// Send noise track.
const sender = pc1.addTrack(sendTrack);
const params = sender.getParameters();
params.degradationPreference = "maintain-resolution";
await sender.setParameters(params);
const haveTrackEvent = new Promise(r => pc2.ontrack = r);
exchangeIceCandidates(pc1, pc2);
await pc1.setLocalDescription();
await pc2.setRemoteDescription(pc1.localDescription);
await pc2.setLocalDescription();
await pc1.setRemoteDescription(pc2.localDescription);
const {track: recvTrack} = await haveTrackEvent;
assert_equals(recvTrack.getSettings().width, 0, "Receive track width setting is zero initially");
assert_equals(recvTrack.getSettings().height, 0, "Receive track height setting is zero initially");
// Display received track in video element for resize events.
const destVideo = document.createElement('video');
destVideo.autoplay = true;
destVideo.srcObject = new MediaStream([recvTrack]);
await new Promise(r => destVideo.onloadedmetadata = r);
assert_equals(recvTrack.getSettings().width, canvas.width, "Receive track width setting is set after receiving data");
assert_equals(recvTrack.getSettings().height, canvas.height, "Receive track height setting is set after receiving data");
canvas.width = 240;
canvas.height = 160;
await new Promise(r => destVideo.onresize = r);
assert_equals(recvTrack.getSettings().width, 240, "Receive track width setting is updated after resolution change");
assert_equals(recvTrack.getSettings().height, 160, "Receive track height setting is updated after resolution change");
}, "RTCRtpReceiver.track.getSettings() contains resolution entries");
</script>