108 lines
3.7 KiB
HTML
108 lines
3.7 KiB
HTML
<!DOCTYPE HTML>
|
|
<html>
|
|
<head>
|
|
<script src="../../resources/js-test-pre.js"></script>
|
|
<script>
|
|
var mediaStream;
|
|
var devices;
|
|
|
|
if (window.testRunner)
|
|
testRunner.setUserMediaPermission(true);
|
|
|
|
function limitPrecision(value, precision)
|
|
{
|
|
if (typeof value === "string")
|
|
return `"${value}`;
|
|
|
|
if (typeof value === "number" && value % 1 != 0)
|
|
return value.toFixed(precision);
|
|
return value;
|
|
}
|
|
|
|
function capabilityRange(name, object)
|
|
{
|
|
if (Array.isArray(object)) {
|
|
if (!object.length)
|
|
return "[ ]";
|
|
|
|
var value = "[";
|
|
for (i = 0; i < object.length; i++)
|
|
value += ` ${object[i]},`;
|
|
|
|
return value.slice(0, -1) + " ]";
|
|
}
|
|
|
|
var value = "{";
|
|
for (var property in object) {
|
|
value += ` ${property}: ${limitPrecision(object[property], 3)},`;
|
|
}
|
|
|
|
if (value.length)
|
|
value = value.slice(0, -1);
|
|
|
|
|
|
return value + " }";
|
|
}
|
|
|
|
function validateDeviceId(deviceId, trackKind)
|
|
{
|
|
if (trackKind !== 'audio' && trackKind !== 'video')
|
|
return false;
|
|
var deviceKind = (trackKind === 'audio') ? 'audioinput' : 'videoinput';
|
|
for (var deviceInfo of devices) {
|
|
if (deviceInfo.deviceId === deviceId && deviceInfo.kind === deviceKind) {
|
|
return true;
|
|
}
|
|
}
|
|
return false;
|
|
}
|
|
|
|
function listTrackProperties(track)
|
|
{
|
|
debug(`${track.kind} track capabilities:`);
|
|
capabilities = track.getCapabilities();
|
|
for (var property in capabilities) {
|
|
if (capabilities.hasOwnProperty(property) || capabilities.__proto__.hasOwnProperty(property))
|
|
if (property === "deviceId" && validateDeviceId(capabilities[property], track.kind))
|
|
value = "<UUID>";
|
|
else if (typeof capabilities[property] === "object")
|
|
value = capabilityRange(property, capabilities[property]);
|
|
else
|
|
value = limitPrecision(capabilities[property], 2);
|
|
debug(` capabilities.${property} = ${value}`);
|
|
}
|
|
debug("");
|
|
}
|
|
|
|
function gotStream(stream)
|
|
{
|
|
mediaStream = stream;
|
|
listTrackProperties(mediaStream.getVideoTracks()[0]);
|
|
listTrackProperties(mediaStream.getAudioTracks()[0]);
|
|
finishJSTest();
|
|
}
|
|
|
|
async function start()
|
|
{
|
|
description("Tests MediaStreamTrack.getCapabilities.");
|
|
|
|
mediaStream = await navigator.mediaDevices.getUserMedia({ audio:true, video:true });
|
|
devices = await navigator.mediaDevices.enumerateDevices();
|
|
|
|
listTrackProperties(mediaStream.getVideoTracks()[0]);
|
|
listTrackProperties(mediaStream.getAudioTracks()[0]);
|
|
finishJSTest();
|
|
}
|
|
|
|
window.jsTestIsAsync = true;
|
|
window.successfullyParsed = true;
|
|
</script>
|
|
|
|
</head>
|
|
<body onload="start()">
|
|
<p id="description"></p>
|
|
<div id="console"></div>
|
|
<script src="../../resources/js-test-post.js"></script>
|
|
</body>
|
|
</html>
|