diff --git a/third_party/blink/web_tests/external/wpt/webrtc-svc/RTCRtpParameters-scalability-av1.html b/third_party/blink/web_tests/external/wpt/webrtc-svc/RTCRtpParameters-scalability-av1.html deleted file mode 100644 index 24cfcb8f4afb4..0000000000000 --- a/third_party/blink/web_tests/external/wpt/webrtc-svc/RTCRtpParameters-scalability-av1.html +++ /dev/null @@ -1,43 +0,0 @@ - - - -AV1 scalabilityMode - - - - - - diff --git a/third_party/blink/web_tests/external/wpt/webrtc-svc/RTCRtpParameters-scalability-expected.txt b/third_party/blink/web_tests/external/wpt/webrtc-svc/RTCRtpParameters-scalability-expected.txt index 816a25344ca58..79d1d57591325 100644 --- a/third_party/blink/web_tests/external/wpt/webrtc-svc/RTCRtpParameters-scalability-expected.txt +++ b/third_party/blink/web_tests/external/wpt/webrtc-svc/RTCRtpParameters-scalability-expected.txt @@ -1,10 +1,30 @@ This is a testharness.js-based test. +PASS [0] video/VP8 - L1T2 should produce valid video content +PASS [1] video/VP8 - L1T3 should produce valid video content +PASS [2] video/VP9 - L1T2 should produce valid video content +PASS [3] video/VP9 - L1T3 should produce valid video content +PASS [4] video/AV1 - L1T2 should produce valid video content +PASS [5] video/AV1 - L1T3 should produce valid video content +PASS [6] video/AV1 - L2T1 should produce valid video content +PASS [7] video/AV1 - L2T1h should produce valid video content +PASS [8] video/AV1 - L2T1_KEY should produce valid video content +PASS [9] video/AV1 - L2T2 should produce valid video content +PASS [10] video/AV1 - L2T2_KEY should produce valid video content +PASS [11] video/AV1 - L2T2_KEY_SHIFT should produce valid video content +PASS [12] video/AV1 - L3T1 should produce valid video content +PASS [13] video/AV1 - L3T3 should produce valid video content +PASS [14] video/AV1 - L3T3_KEY should produce valid video content +PASS [15] video/AV1 - S2T1 should produce valid video content PASS Setting and updating scalabilityMode to a legal value should be accepted PASS Sender capabilities should include at least some scalability modes PASS Not setting sendEncodings results in no mode info before negotiation PASS Not setting a scalability mode results in no mode set before negotiation FAIL Not setting a scalability mode results in some mode set after negotiation assert_true: expected true got false -PASS Setting a scalability mode to nonsense throws an exception +FAIL Setting a scalability mode to nonsense throws an exception assert_throws_dom: function "() => { + pc.addTransceiver('video', { + sendEncodings: [{scalabilityMode: 'TotalNonsense'}], + }); + }" did not throw FAIL L3T3 on VP8 should return something other than L3T3 assert_not_equals: got disallowed value "L3T3" Harness: the test ran to completion. diff --git a/third_party/blink/web_tests/external/wpt/webrtc-svc/RTCRtpParameters-scalability-h264.html b/third_party/blink/web_tests/external/wpt/webrtc-svc/RTCRtpParameters-scalability-h264.html deleted file mode 100644 index 2a595a8169c2d..0000000000000 --- a/third_party/blink/web_tests/external/wpt/webrtc-svc/RTCRtpParameters-scalability-h264.html +++ /dev/null @@ -1,18 +0,0 @@ - - - -H264 scalabilityMode - - - - - - diff --git a/third_party/blink/web_tests/external/wpt/webrtc-svc/RTCRtpParameters-scalability-vp8.html b/third_party/blink/web_tests/external/wpt/webrtc-svc/RTCRtpParameters-scalability-vp8.html deleted file mode 100644 index 1708ab1017ece..0000000000000 --- a/third_party/blink/web_tests/external/wpt/webrtc-svc/RTCRtpParameters-scalability-vp8.html +++ /dev/null @@ -1,18 +0,0 @@ - - - -VP8 scalabilityMode - - - - - - diff --git a/third_party/blink/web_tests/external/wpt/webrtc-svc/RTCRtpParameters-scalability-vp9.html b/third_party/blink/web_tests/external/wpt/webrtc-svc/RTCRtpParameters-scalability-vp9.html deleted file mode 100644 index f1f4923868898..0000000000000 --- a/third_party/blink/web_tests/external/wpt/webrtc-svc/RTCRtpParameters-scalability-vp9.html +++ /dev/null @@ -1,43 +0,0 @@ - - - -VP9 scalabilityMode - - - - - - diff --git a/third_party/blink/web_tests/external/wpt/webrtc-svc/RTCRtpParameters-scalability.html b/third_party/blink/web_tests/external/wpt/webrtc-svc/RTCRtpParameters-scalability.html index d8b1c6e135060..c32a12807e97f 100644 --- a/third_party/blink/web_tests/external/wpt/webrtc-svc/RTCRtpParameters-scalability.html +++ b/third_party/blink/web_tests/external/wpt/webrtc-svc/RTCRtpParameters-scalability.html @@ -1,6 +1,5 @@ - RTCRtpParameters encodings @@ -13,6 +12,46 @@ // Test is based on the following editor draft: // https://w3c.github.io/webrtc-svc/ + // Get the first encoding in param.encodings. + // Asserts that param.encodings has at least one element. + function getFirstEncoding(param) { + const { encodings } = param; + assert_equals(encodings.length, 1); + return encodings[0]; + } + + const capabilities = RTCRtpSender.getCapabilities('video'); + let index = 0; + for (const codec of capabilities.codecs) { + if ('scalabilityModes' in codec && codec.scalabilityModes.length > 0) { + for (const scalabilityMode of codec.scalabilityModes) { + promise_test(async t => { + const v = document.createElement('video'); + v.autoplay = true; + const pc1 = new RTCPeerConnection(); + const pc2 = new RTCPeerConnection(); + t.add_cleanup(() => pc1.close()); + t.add_cleanup(() => pc2.close()); + const stream1 = await getNoiseStream({ video: { signal: 100 , width: 60, height: 60} }); + const [track1] = stream1.getTracks(); + t.add_cleanup(() => track1.stop()); + const transceiver = pc1.addTransceiver(track1, { + sendEncodings: [{ scalabilityMode: scalabilityMode }], + }); + transceiver.setCodecPreferences([codec]); + const haveTrackEvent = new Promise(r => pc2.ontrack = r); + exchangeIceCandidates(pc1, pc2); + await exchangeOfferAnswer(pc1, pc2); + v.srcObject = new MediaStream([(await haveTrackEvent).track]); + await new Promise(r => v.onloadedmetadata = r); + await detectSignal(t, v, 100); + const sendParams = pc1.getSenders()[0].getParameters(); + assert_equals(sendParams.encodings[0].scalabilityMode, scalabilityMode); + }, `[${index++}] ${codec.mimeType} - ${scalabilityMode} should produce valid video content`); + } + } + } + promise_test(async t => { const pc = new RTCPeerConnection(); t.add_cleanup(() => pc.close()); @@ -45,78 +84,81 @@ assert_true(svcSupported); }, `Sender capabilities should include at least some scalability modes`); - promise_test(async t => { - const pc = new RTCPeerConnection(); - t.add_cleanup(() => pc.close()); - const { sender } = pc.addTransceiver('video'); - const param = sender.getParameters(); - assert_equals(param.encodings.length, 0); - }, 'Not setting sendEncodings results in no mode info before negotiation'); +promise_test(async t => { + const pc = new RTCPeerConnection(); + t.add_cleanup(() => pc.close()); + const { sender } = pc.addTransceiver('video'); + const param = sender.getParameters(); + assert_equals(param.encodings.length, 0); +}, 'Not setting sendEncodings results in no mode info before negotiation'); - promise_test(async t => { - const pc = new RTCPeerConnection(); - t.add_cleanup(() => pc.close()); - const { sender } = pc.addTransceiver('video', { - sendEncodings: [{}], - }); - const param = sender.getParameters(); - const encoding = getFirstEncoding(param); +promise_test(async t => { + const pc = new RTCPeerConnection(); + t.add_cleanup(() => pc.close()); + const { sender } = pc.addTransceiver('video', { + sendEncodings: [{}], + }); + const param = sender.getParameters(); + const encoding = getFirstEncoding(param); - assert_true(!('scalabilityMode' in encoding)); - }, 'Not setting a scalability mode results in no mode set before negotiation'); + assert_true(!('scalabilityMode' in encoding)); +}, 'Not setting a scalability mode results in no mode set before negotiation'); - promise_test(async t => { - const pc1 = new RTCPeerConnection(); - const pc2 = new RTCPeerConnection(); - t.add_cleanup(() => pc1.close()); - t.add_cleanup(() => pc2.close()); - const { sender } = pc1.addTransceiver('video', { - sendEncodings: [{}], - }); - const param = sender.getParameters(); - const encoding = getFirstEncoding(param); +promise_test(async t => { + const pc1 = new RTCPeerConnection(); + const pc2 = new RTCPeerConnection(); + t.add_cleanup(() => pc1.close()); + t.add_cleanup(() => pc2.close()); + const { sender } = pc1.addTransceiver('video', { + sendEncodings: [{}], + }); + const param = sender.getParameters(); + const encoding = getFirstEncoding(param); - exchangeIceCandidates(pc1, pc2); - await exchangeOfferAnswer(pc1, pc2); - const param2 = sender.getParameters(); - const encoding2 = getFirstEncoding(param); - assert_true('scalabilityMode' in encoding2); - }, 'Not setting a scalability mode results in some mode set after negotiation'); + exchangeIceCandidates(pc1, pc2); + await exchangeOfferAnswer(pc1, pc2); + const param2 = sender.getParameters(); + const encoding2 = getFirstEncoding(param); + assert_true('scalabilityMode' in encoding2); +}, 'Not setting a scalability mode results in some mode set after negotiation'); - promise_test(async t => { - const pc = new RTCPeerConnection(); - t.add_cleanup(() => pc.close()); - assert_throws_dom('OperationError', () => { - pc.addTransceiver('video', { - sendEncodings: [{scalabilityMode: 'TotalNonsense'}], - }); +promise_test(async t => { + const pc = new RTCPeerConnection(); + t.add_cleanup(() => pc.close()); + assert_throws_dom('OperationError', () => { + pc.addTransceiver('video', { + sendEncodings: [{scalabilityMode: 'TotalNonsense'}], }); - }, 'Setting a scalability mode to nonsense throws an exception'); + }); +}, 'Setting a scalability mode to nonsense throws an exception'); + + +promise_test(async t => { + const v = document.createElement('video'); + v.autoplay = true; + const pc1 = new RTCPeerConnection(); + const pc2 = new RTCPeerConnection(); + t.add_cleanup(() => pc1.close()); + t.add_cleanup(() => pc2.close()); + const transceiver = pc1.addTransceiver('video', { + sendEncodings: [{ scalabilityMode: 'L3T3' }], + }); + // Before negotiation, the mode should be preserved. + const param = transceiver.sender.getParameters(); + const encoding = getFirstEncoding(param); + assert_true('scalabilityMode' in encoding); + // If L3T3 is not supported at all, abort test. + assert_implements_optional(encoding.scalabilityMode === 'L3T3'); + // Pick a codec known to not have L3T3 support + const capabilities = RTCRtpSender.getCapabilities('video'); + const codec = capabilities.codecs.find(c => c.mimeType === 'video/VP8'); + assert_true(codec !== undefined); + transceiver.setCodecPreferences([codec]); + exchangeIceCandidates(pc1, pc2); + await exchangeOfferAnswer(pc1, pc2); + const sendParams = pc1.getSenders()[0].getParameters(); + assert_not_equals(sendParams.encodings[0].scalabilityMode, 'L3T3'); +}, 'L3T3 on VP8 should return something other than L3T3'); + - promise_test(async t => { - const v = document.createElement('video'); - v.autoplay = true; - const pc1 = new RTCPeerConnection(); - const pc2 = new RTCPeerConnection(); - t.add_cleanup(() => pc1.close()); - t.add_cleanup(() => pc2.close()); - const transceiver = pc1.addTransceiver('video', { - sendEncodings: [{ scalabilityMode: 'L3T3' }], - }); - // Before negotiation, the mode should be preserved. - const param = transceiver.sender.getParameters(); - const encoding = getFirstEncoding(param); - assert_true('scalabilityMode' in encoding); - // If L3T3 is not supported at all, abort test. - assert_implements_optional(encoding.scalabilityMode === 'L3T3'); - // Pick a codec known to not have L3T3 support - const capabilities = RTCRtpSender.getCapabilities('video'); - const codec = capabilities.codecs.find(c => c.mimeType === 'video/VP8'); - assert_true(codec !== undefined); - transceiver.setCodecPreferences([codec]); - exchangeIceCandidates(pc1, pc2); - await exchangeOfferAnswer(pc1, pc2); - const sendParams = pc1.getSenders()[0].getParameters(); - assert_not_equals(sendParams.encodings[0].scalabilityMode, 'L3T3'); - }, 'L3T3 on VP8 should return something other than L3T3'); diff --git a/third_party/blink/web_tests/external/wpt/webrtc-svc/svc-helper.js b/third_party/blink/web_tests/external/wpt/webrtc-svc/svc-helper.js deleted file mode 100644 index e73ccfa750255..0000000000000 --- a/third_party/blink/web_tests/external/wpt/webrtc-svc/svc-helper.js +++ /dev/null @@ -1,50 +0,0 @@ -function supportsCodec(mimeType) { - return RTCRtpSender.getCapabilities('video').codecs.filter(c => c.mimeType == mimeType).length() > 0; -} - -async function supportsScalabilityMode(mimeType, scalabilityMode) { - let result = await navigator.mediaCapabilities.encodingInfo({ - type: 'webrtc', - video: { - contentType: mimeType, - width: 60, - height: 60, - bitrate: 10000, - framerate: 30, - scalabilityMode: scalabilityMode - } - }); - return result.supported; -} - -function createScalabilityTest(mimeType, scalabilityModes) { - for (const scalabilityMode of scalabilityModes) { - promise_test(async t => { - assert_implements_optional( - supportsScalabilityMode(mimeType, scalabilityMode), - `${mimeType} supported` - ); - const v = document.createElement('video'); - v.autoplay = true; - const pc1 = new RTCPeerConnection(); - const pc2 = new RTCPeerConnection(); - t.add_cleanup(() => pc1.close()); - t.add_cleanup(() => pc2.close()); - const stream1 = await getNoiseStream({ video: { signal: 100, width: 60, height: 60 } }); - const [track1] = stream1.getTracks(); - t.add_cleanup(() => track1.stop()); - const transceiver = pc1.addTransceiver(track1, { - sendEncodings: [{ scalabilityMode: scalabilityMode }], - }); - transceiver.setCodecPreferences(RTCRtpSender.getCapabilities('video').codecs.filter(c => c.mimeType == mimeType)); - const haveTrackEvent = new Promise(r => pc2.ontrack = r); - exchangeIceCandidates(pc1, pc2); - await exchangeOfferAnswer(pc1, pc2); - v.srcObject = new MediaStream([(await haveTrackEvent).track]); - await new Promise(r => v.onloadedmetadata = r); - await detectSignal(t, v, 100); - const sendParams = pc1.getSenders()[0].getParameters(); - assert_equals(sendParams.encodings[0].scalabilityMode, scalabilityMode); - }, `${mimeType} - ${scalabilityMode} should produce valid video content`); - } -}