HTMLVideoElement-captureStream-settings.tentative.html (2584B)
1 <!DOCTYPE html> 2 <meta charset=utf-8> 3 <title>HTMLVideoElement.captureStream().track.getSettings()</title> 4 <script src="/resources/testharness.js"></script> 5 <script src="/resources/testharnessreport.js"></script> 6 <script src="/common/media.js"></script> 7 <script> 8 'use strict'; 9 10 // Tentative pending resolution of https://github.com/w3c/mediacapture-fromelement/issues/48. 11 12 promise_test(async t => { 13 if (!document.body) { 14 await new Promise(r => document.addEventListener("DOMContentLoaded", r, {once: true})); 15 } 16 17 // Create a canvas and wait for a frame to be captured. 18 const canvas = document.createElement("canvas"); 19 canvas.width = 166; 20 canvas.height = 72; 21 document.body.appendChild(canvas); 22 23 const ctx = canvas.getContext("2d"); 24 ctx.fillStyle = 'green'; 25 ctx.fillRect(0, 0, canvas.width, canvas.height); 26 await new Promise(r => requestAnimationFrame(r)); 27 28 // Capture the canvas and check track settings. 29 const video = document.createElement("video"); 30 video.srcObject = canvas.captureStream(); 31 t.add_cleanup(async () => { 32 video.srcObject.getTracks().forEach(track => track.stop()); 33 video.srcObject = null; 34 }); 35 video.play(); 36 await new Promise(r => video.onloadedmetadata = r); 37 const stream = video.mozCaptureStream(); 38 const [track] = stream.getTracks(); 39 40 assert_equals(track.getSettings().width, 166, "Track width setting initially set"); 41 assert_equals(track.getSettings().height, 72, "Track height setting initially set"); 42 43 // Resize the canvas and check that track settings are updated. 44 canvas.width = 200; 45 canvas.height = 100; 46 ctx.fillRect(0, 0, canvas.width, canvas.height); 47 await new Promise(r => video.onresize = r); 48 assert_equals(track.getSettings().width, 200, "Track width setting follows captured frames"); 49 assert_equals(track.getSettings().height, 100, "Track height setting follows captured frames"); 50 }, "HTMLVideoElement.captureStream() with MediaStream source creates tracks that populate resolution settings"); 51 52 promise_test(async t => { 53 const video = document.createElement("video"); 54 video.preload = "auto"; 55 video.src = getVideoURI("/media/2x2-green"); 56 t.add_cleanup(async () => video.src = ""); 57 await new Promise(r => video.onloadedmetadata = r); 58 const stream = video.mozCaptureStream(); 59 const [track] = stream.getVideoTracks(); 60 61 assert_equals(track.getSettings().width, 2, "Track width setting"); 62 assert_equals(track.getSettings().height, 2, "Track height setting"); 63 }, "HTMLVideoElement.captureStream() with file source creates tracks that populate resolution settings"); 64 </script>